write something there

This commit is contained in:
N-Nachtigal 2025-05-04 16:01:41 +02:00
commit b4b6c08f4f
8546 changed files with 309825 additions and 0 deletions

539
mods/ethereal/README.md Normal file
View file

@ -0,0 +1,539 @@
minetest mod ethereal NG
======================
## Information
--------------
This mod is named `ethereal`, it produces huge amount of new biomes
overriding defaults, many new items and features that spice up gameplay.
Known as Ethereal NG (next-generation) it give players that
little something extra to look for while exploring the world.
![screenshot.png](screenshot.png)
Forum Topic https://forum.minetest.net/viewtopic.php?f=11&t=14638
TODO:
* document items and crafting
#### Lucky Blocks
It provides 66 new lucky blocks if the mod is detected.
## Technical info
-----------------
#### Compatibility
Make sure you are using Minetest 0.4.16+ and start a new world (anything but v6),
then enable Ethereal in the mods list. Ethereal has been designed to work
alongside with those mods:
* default
* flowers
* Farming Redo `farming`
* Mobs Redo, `mobs`
* Baked Clay `backedclay`
* stairs
Also those more as optional:
* Lucky Block `lucky_block`
* doors
* moreblocks
* toolranks
#### Settings and Biome List
| name setting | Description | values | default |
| ------------------------------ | --------------------------------- | ---- | ------ |
| ethereal.leaftype | 2D plantlike leaves (0) or 3D (1) | int | 0 |
| ethereal.leafwalk | Walkable leaves | bool | false |
| ethereal.cavedirt | Caves cut through dirt | bool | true |
| ethereal.torchdrop | Torches drop when in water | bool | true |
| ethereal.papyruswalk | Papyrus and Bamboo are walkable | bool | true |
| ethereal.lilywalk | Lilypads are walkable | bool | true |
| ethereal.xcraft | Enable X-Craft cheats | bool | true |
| ethereal.flight | Enable Flight Potion | bool | true |
| ethereal.leaf_particles | Enable falling lead particles | bool | true |
| ethereal.glacier | Glacier biome, 1=on / 0=off | int | 1 |
| ethereal.bambo | Bamboo biome, 1=on / 0=off | int | 1 |
| ethereal.mesa | Mesa biome, 1=on / 0=off | int | 1 |
| ethereal.alpine | Alpine biome, 1=on / 0=off | int | 1 |
| ethereal.healing | Healing Tree biome, 1=on / 0=off | int | 1 |
| ethereal.snowy | Pine Tree biome, 1=on / 0=off | int | 1 |
| ethereal.frost | Blue Frost biome, 1=on / 0=off | int | 1 |
| ethereal.grassy | Grassy biome, 1=on / 0=off | int | 1 |
| ethereal.caves | Desertstone biome, 1=on / 0=off | int | 1 |
| ethereal.grayness | Grey Willow biome, 1=on / 0=off | int | 1 |
| ethereal.grassytwo | GrassyTwo biome, 1=on / 0=off | int | 1 |
| ethereal.prairie | Prairie biome, 1=on / 0=off | int | 1 |
| ethereal.jumble | Jumble biome, 1=on / 0=off | int | 1 |
| ethereal.junglee | Jungle biome, 1=on / 0=off | int | 1 |
| ethereal.desert | Desert biome, 1=on / 0=off | int | 1 |
| ethereal.grove | Banana Grove biome, 1=on / 0=off | int | 1 |
| ethereal.mushroom | Mushroom biome, 1=on / 0=off | int | 1 |
| ethereal.sandstone | Sandstone biome, 1=on / 0=off | int | 1 |
| ethereal.quicksand | Quicksand Bank biome, 1=on / 0=off | int | 1 |
| ethereal.plains | Scorched Plains biome, 1=on / 0=off | int | 1 |
| ethereal.savanna | Savanna biome, 1=on / 0=off | int | 1 |
| ethereal.fiery | Feiry Lava biome, 1=on / 0=off | int | 1 |
| ethereal.sandclay | Sandy Clay biome, 1=on / 0=off | int | 1 |
| ethereal.swamp | Swamp biome, 1=on / 0=off | int | 1 |
| ethereal.sealife | Coral and Seaweed biome, 1=on / 0=off | int | 1 |
| ethereal.reefs | MT5 Coral biome, 1=on / 0=off | int | 1 |
| ethereal.sakura | Sakura biome, 1=on / 0=off | int | 1 |
| ethereal.tundra | Tundra biome, 1=on / 0=off | int | 1 |
| ethereal.mediterranean | Mediterranean biome, 1=on / 0=off | int | 1 |
| ethereal.flightpotion_duration | Flight Potion Duration seconds | int | 300 |
#### Fishing api
The mod provides a fishing api, basically is `ethereal.add_item(fish, junk, bonus)`,
several examples are at the documentation of [api.txt](api.txt) file.
## Changelog
A huge thanks to Chinchow who was the inspiration behind Ethereal and everyone
who helped make this mod bigger and better throughout it's release :)
### 1.32
- Add {eatable} groups to food items
- Use underground decoration placement for illumishrooms to improve performance
- Use worldalign textures for stairs
- Tidy and tweak code to run on Minetest 5.2 and above
- Replace 32px textures with 16px variants so items do not look mismatched
- Add new biome layout so that specific biomes aren't too large or small
- Add falling leaf particles with setting to disable
- Add 'ethereal.old_biomes' setting to stay with older biome settings and not use
the new layout for compatibility if wanted.
- Update settings.
- Candles use [multiply for colour.
- Add desert stone spikes to caves biome, and stone spikes underneath.
- Add pond schematic for generation in flat mesa areas, add new pond lucky blocks.
### 1.31
- Fix fishing biome checks
- Increase bamboo leaf decay radius
- Switch ethereal coral to new plantlike_rooted drawtype (thanks Niklp)
- Switch seaweed to new plantlike_rooted drawtype (thanks Niklp)
- Added 'ethereal.logs' setting that adds decorative fallen tree logs to biomes
- Added 'ethereal.sapling_protection_check' setting to use default sapling placement checks
- Added alternative giant brown mushroom to higher elevations in mushroom biome
- Added 'ethereal.wood_rotate' setting to enable/disable directional placement of wood in ethereal
### 1.30
- New fish textures by SirroBzeroone and BlueTangs Rock
- New fish added along with food recipes (thanks BlueTangs Rock)
- Fishing rod now has 65 uses
- Fixed willow leaves scaling and forced schematic trunk placement
- Add 11 new lucky blocks
- Caverealms' glow bait reduces wait time when fishing
- Add Basandra Bush and wood items, Add Spore Grass
- Add 'ethereal.abundant_onions' setting (default: true)
#### 1.29
- Use "stratum" to generate mesa biome for stripey goodness
- Added coloured candles (thanks wRothbard)
- Rename some biomes to fall inline with default for spawning
- Make stairs and doors a soft dependency, fix willow recipes (thanks sangeet)
- Added 'ethereal.flightpotion_duration' setting, potion also works on 0.4.x clients
- Added olive wood fences, gates, mese posts
- Added lilac to sakura biome (can be crafted into magenta dye)
#### 1.28
- Added new Mediterranean biome with Lemon and Olive trees (thanks Felfa)
- Added Candied Lemon and Olive Oil items and recipe
- Rewrite stairs and add auto-select function
- Added Lemonade
- Added smaller redwood trees, to grow large variety 2 saplings required
- Added Flight Potion (etherium dust arch, fire dust middle, empty bottle bottom)
- Added new Fishing mechanics (inspired by Rootyjr's on mineclone2)
- Added fishing api to add new items (read API.txt file)
- Certain fish can only be found in specific biomes
- Rename textures so they begin with ethereal_ (sorry texture pack folks)
- Override mushroom spread abm to use "group:mushroom"
#### 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
- Split and re-write mapgen files for tidier generation
- Giant Mushroom tops now decay when trunk removed
- Added Blue Marble to grey biomes and Blue Marble Tile recipe
#### 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
## LICENSE
* Code:
* The MIT License (MIT) Copyright (c) 2016 TenPlus1
* Art:
* Free textures from lisheng2121 (shutterstock)
* Free textures from epicwannehz, Altairas, JMArtsDesign
* Some from Royalty Free SFX from dreamstime.com
* Others
Complete details are at the [license.txt](license.txt) file.

Binary file not shown.

After

Width:  |  Height:  |  Size: 564 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 385 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 421 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 785 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 583 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 601 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 791 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 884 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 848 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 622 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 867 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 654 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 767 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 564 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 592 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 529 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 781 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 339 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 656 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 492 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 818 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 798 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 791 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 785 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 795 B

View file

@ -0,0 +1,46 @@
-- mushroom biome
ambience.add_set("ethereal_mushroom", {
frequency = 40,
sounds = {
{name = "ethereal_mushroom", length = 1.3, ephemeral = true},
{name = "ethereal_mushroom", length = 1.3, pitch = 0.9, ephemeral = true},
{name = "ethereal_mushroom", length = 1.3, pitch = 1.2, ephemeral = true},
},
nodes = ({"ethereal:mushroom_trunk", "ethereal:mushroom_dirt"}),
sound_check = function(def)
local c = (def.totals["ethereal:mushroom_trunk"] or 0)
local d = (def.totals["ethereal:mushroom_dirt"] or 0)
if c > 30 and d > 70 then return "ethereal_mushroom" end
end
})
-- frost biome
ambience.add_set("ethereal_crystal", {
frequency = 50,
sounds = {
{name = "ethereal_crystal", length = 2.3, gain = 2.0, ephemeral = true},
{name = "ethereal_crystal", length = 2.3, gain = 2.0, pitch = 0.9, ephemeral = true},
{name = "ethereal_crystal", length = 2.3, gain = 2.0, pitch = 1.1, ephemeral = true},
},
nodes = ({"ethereal:crystal_spike", "ethereal:crystal_dirt"}),
sound_check = function(def)
local c = (def.totals["ethereal:crystal_spike"] or 0)
local d = (def.totals["ethereal:crystal_dirt"] or 0)
if c > 0 and d > 70 then return "ethereal_crystal" end
end
})

41
mods/ethereal/api.txt Normal file
View file

@ -0,0 +1,41 @@
Ethereal Fishing Rod API
Usage:
ethereal.add_item(fish, junk, bonus)
Example:
The fish, junk and bonus entries can all be entered or used seperately e.g.
..add fish:
ethereal.add_item("mymod:myfish", "", "")
..add fish and junk:
ethereal.add_item("mymod:myfish", "mymod:myjunk", "")
You may also use a table that not only adds an item but the biome it can be found in:
..add fish only found in 'grassy_ocean' biome:
ethereal.add_item({"mymod:myfish", "grassy_ocean"}, "", "")
..add special item only found in 'frost' biome waters:
ethereal.add_item("", "", {"ethereal:crystal_spike", "frost"})
.. add special item with wear level:
ethereal.add_item("", "", "default:sword_steel 15000")
Please note that only Ethereal biome names can be used for specific finds, unless mod
specifically adds ethereal as an optional dependency.
Crystal Shovel has silk touch ability for digging blocks and returning the actual block
intact. The {no_silktouch=1} group can be used to override this.

View file

@ -0,0 +1,74 @@
[
{"name": "mountain", "heat_point": 50, "humidity_point": 50, "y_min": 140, "y_max": 31000},
{"name": "grassland", "heat_point": 50, "humidity_point": 35, "y_min": 3, "y_max": 71},
{"name": "grassland_ocean", "heat_point": 50, "humidity_point": 35, "y_min": -192, "y_max": 2},
{"name": "grassland_under", "heat_point": 50, "humidity_point": 35, "y_min": -31000, "y_max": -256},
{"name": "desert", "heat_point": 92, "humidity_point": 16, "y_min": 3, "y_max": 23},
{"name": "desert_ocean", "heat_point": 92, "humidity_point": 16, "y_min": -192, "y_max": 3},
{"name": "desert_under", "heat_point": 92, "humidity_point": 16, "y_min": -31000, "y_max": -256},
{"name": "bamboo", "heat_point": 45, "humidity_point": 45, "y_min": 3, "y_max": 70},
{"name": "bamboo_ocean", "heat_point": 45, "humidity_point": 45, "y_min": -192, "y_max": 2},
{"name": "mesa", "heat_point": 25, "humidity_point": 10, "y_min": 18, "y_max": 71},
{"name": "mesa_redwood", "heat_point": 25, "humidity_point": 10, "y_min": 11, "y_max": 17},
{"name": "mesa_beach", "heat_point": 25, "humidity_point": 10, "y_min": -1, "y_max": 10},
{"name": "mesa_ocean", "heat_point": 25, "humidity_point": 10, "y_min": -192, "y_max": -2},
{"name": "coniferous_forest", "heat_point": 45, "humidity_point": 70, "y_min": 6, "y_max": 140},
{"name": "coniferous_dunes", "heat_point": 45, "humidity_point": 70, "y_min": 4, "y_max": 5},
{"name": "coniferous_forest_ocean", "heat_point": 45, "humidity_point": 70, "y_min": -255, "y_max": 3},
{"name": "coniferous_forest_under", "heat_point": 45, "humidity_point": 70, "y_min": -31000, "y_max": -256},
{"name": "taiga", "heat_point": 25, "humidity_point": 70, "y_min": 4, "y_max": 140},
{"name": "taiga_ocean", "heat_point": 25, "humidity_point": 70, "y_min": -255, "y_max": 3},
{"name": "taiga_under", "heat_point": 25, "humidity_point": 70, "y_min": -31000, "y_max": -256},
{"name": "frost_floatland", "heat_point": 5, "humidity_point": 60, "y_min": 1025, "y_max": 1750},
{"name": "frost", "heat_point": 5, "humidity_point": 60, "y_min": 2, "y_max": 71},
{"name": "frost_ocean", "heat_point": 5, "humidity_point": 60, "y_min": -192, "y_max": 1},
{"name": "snowy_grassland", "heat_point": 15, "humidity_point": 58, "y_min": 3, "y_max": 30},
{"name": "snowy_grassland_ocean", "heat_point": 15, "humidity_point": 58, "y_min": 2, "y_max": -192},
{"name": "deciduous_forest", "heat_point": 60, "humidity_point": 68, "y_min": 3, "y_max": 91},
{"name": "deciduous_forest_ocean", "heat_point": 60, "humidity_point": 68, "y_min": -31000, "y_max": 3},
{"name": "deciduous_forest_under", "heat_point": 60, "humidity_point": 68, "y_min": -31000, "y_max": -256},
{"name": "caves", "heat_point": 70, "humidity_point": 5, "y_min": 4, "y_max": 41},
{"name": "grayness", "heat_point": 15, "humidity_point": 30, "y_min": 2, "y_max": 41},
{"name": "grayness_ocean", "heat_point": 15, "humidity_point": 30, "y_min": -22, "y_max": 2},
{"name": "grayness_under", "heat_point": 15, "humidity_point": 30, "y_min": -31000, "y_max": -23},
{"name": "grassytwo", "heat_point": 15, "humidity_point": 25, "y_min": 1, "y_max": 91},
{"name": "grassytwo_ocean", "heat_point": 15, "humidity_point": 25, "y_min": -192, "y_max": 2},
{"name": "prairie", "heat_point": 30, "humidity_point": 35, "y_min": 3, "y_max": 26},
{"name": "prairie_ocean", "heat_point": 30, "humidity_point": 35, "y_min": -192, "y_max": 2},
{"name": "jumble", "heat_point": 25, "humidity_point": 55, "y_min": 1, "y_max": 71},
{"name": "jumble_ocean", "heat_point": 25, "humidity_point": 55, "y_min": -192, "y_max": 1},
{"name": "rainforest", "heat_point": 86, "humidity_point": 65, "y_min": 1, "y_max": 71},
{"name": "rainforest_ocean", "heat_point": 86, "humidity_point": 65, "y_min": -192, "y_max": 0},
{"name": "rainforest_under", "heat_point": 86, "humidity_point": 65, "y_min": -31000, "y_max": -256},
{"name": "swamp", "heat_point": 80, "humidity_point": 90, "y_min": 1, "y_max": 7},
{"name": "swamp_beach", "heat_point": 80, "humidity_point": 90, "y_min": -1, "y_max": 0},
{"name": "swamp_ocean", "heat_point": 80, "humidity_point": 90, "y_min": -192, "y_max": -1},
{"name": "grove", "heat_point": 40, "humidity_point": 25, "y_min": 3, "y_max": 23},
{"name": "grove_ocean", "heat_point": 40, "humidity_point": 25, "y_min": -192, "y_max": 2},
{"name": "mediterranean", "heat_point": 30, "humidity_point": 45, "y_min": 3, "y_max": 50},
{"name": "mushroom", "heat_point": 45, "humidity_point": 82, "y_min": 4, "y_max": 50},
{"name": "mushroom_ocean", "heat_point": 45, "humidity_point": 82, "y_min": -255, "y_max": 5},
{"name": "sandstone_desert", "heat_point": 60, "humidity_point": 0, "y_min": 3, "y_max": 23},
{"name": "sandstone_desert_ocean", "heat_point": 60, "humidity_point": 0, "y_min": -192, "y_max": 2},
{"name": "sandstone_desert_under", "heat_point": 60, "humidity_point": 0, "y_min": -31000, "y_max": -256},
{"name": "plains", "heat_point": 74, "humidity_point": 23, "y_min": 3, "y_max": 25},
{"name": "plains_ocean", "heat_point": 74, "humidity_point": 23, "y_min": -192, "y_max": 2},
{"name": "savanna", "heat_point": 89, "humidity_point": 42, "y_min": 3, "y_max": 50},
{"name": "savanna_ocean", "heat_point": 89, "humidity_point": 42, "y_min": -192, "y_max": 2},
{"name": "savanna_under", "heat_point": 89, "humidity_point": 42, "y_min": -31000, "y_max": -256},
{"name": "fiery", "heat_point": 80, "humidity_point": 10, "y_min": 5, "y_max": 20},
{"name": "fiery_beach", "heat_point": 80, "humidity_point": 10, "y_min": 1, "y_max": 4},
{"name": "fiery_ocean", "heat_point": 80, "humidity_point": 10, "y_min": -192, "y_max": 2},
{"name": "fiery_under", "heat_point": 80, "humidity_point": 10, "y_min": -31000, "y_max": -256},
{"name": "glacier", "heat_point": 0, "humidity_point": 73, "y_min": -8, "y_max": 31000},
{"name": "glacier_ocean", "heat_point": 0, "humidity_point": 73, "y_min": -112, "y_max": -9},
{"name": "glacier_under", "heat_point": 0, "humidity_point": 73, "y_min": -31000, "y_max": -256},
{"name": "tundra_highland", "heat_point": 0, "humidity_point": 40, "y_min": 47, "y_max": 180},
{"name": "tundra", "heat_point": 0, "humidity_point": 40, "y_min": 2, "y_max": 46},
{"name": "tundra_beach", "heat_point": 0, "humidity_point": 40, "y_min": -3, "y_max": 1},
{"name": "tundra_ocean", "heat_point": 0, "humidity_point": 40, "y_min": -112, "y_max": -4},
{"name": "tundra_under", "heat_point": 0, "humidity_point": 40, "y_min": -31000, "y_max": -256},
{"name": "cold_desert", "heat_point": 20, "humidity_point": 85, "y_min": 4, "y_max": 100},
{"name": "cold_desert_ocean", "heat_point": 20, "humidity_point": 85, "y_min": -255, "y_max": 3},
{"name": "cold_desert_under", "heat_point": 20, "humidity_point": 85, "y_min": -31000, "y_max": -256}
]

632
mods/ethereal/biomes.lua Normal file
View file

@ -0,0 +1,632 @@
-- register biome helper
local function register_biome(enabled, def)
if enabled ~= 1 then return end
def.node_dungeon = def.node_dungeon or "default:cobble"
def.node_dungeon_alt = def.node_dungeon_alt or "default:mossycobble"
def.node_dungeon_stair = def.node_dungeon_stair or "stairs:stair_cobble"
if def.y_max > 0 and def.node_riverbed == nil then
def.node_riverbed = "default:sand" ; def.depth_riverbed = 2
end
if def.y_min > 0 then def.vertical_blend = 1 end
minetest.register_biome(def)
--[[print('{"name": "' .. def.name .. '", "heat_point": ' ..def.heat_point .. ', "humidity_point": '
.. def.humidity_point .. ', "y_min": ' .. def.y_min .. ', "y_max": ' .. def.y_max .. '}')]]
end
-- old biome setting (when enabled old heat/humidity values are used)
local old = minetest.settings:get_bool("ethereal.old_biomes")
-- mountain
register_biome(1, {
name = "mountain",
heat_point = 50, humidity_point = 50,
y_min = 140, y_max = 31000,
node_top = "default:snow", depth_top = 1,
node_filler = "default:snowblock", depth_filler = 2})
-- grassland
register_biome(1, {
name = "grassland",
heat_point = old and 45 or 50, humidity_point = old and 65 or 35,
y_min = 3, y_max = 71,
node_top = "default:dirt_with_grass", depth_top = 1,
node_filler = "default:dirt", depth_filler = 3})
register_biome(1, {
name = "grassland_ocean",
heat_point = old and 45 or 50, humidity_point = old and 65 or 35,
y_min = -192, y_max = 2,
node_top = "default:sand", depth_top = 1,
node_filler = "default:sand", depth_filler = 3})
register_biome(1, {
name = "grassland_under",
node_cave_liquid = {"default:water_source", "default:lava_source"},
heat_point = old and 45 or 50, humidity_point = old and 65 or 35,
y_min = -31000, y_max = -256})
-- desert
register_biome(ethereal.desert, {
name = "desert",
heat_point = old and 35 or 92, humidity_point = old and 20 or 16,
y_min = 3, y_max = 23,
node_top = "default:desert_sand", depth_top = 1,
node_filler = "default:desert_sand", depth_filler = 3,
node_stone = "default:desert_stone",
node_dungeon_alt = "default:desert_cobble",
node_dungeon = "default:desert_stone",
node_dungeon_stair = "stairs:stair_desert_stone"})
register_biome(ethereal.desert, {
name = "desert_ocean",
heat_point = old and 35 or 92, humidity_point = old and 20 or 16,
y_min = -192, y_max = 3,
node_top = "default:sand", depth_top = 1,
node_filler = "default:sand", depth_filler = 2,
node_stone = "default:desert_stone",
node_dungeon_alt = "default:desert_cobble",
node_dungeon = "default:desert_stone",
node_dungeon_stair = "stairs:stair_desert_stone"})
register_biome(ethereal.desert, {
name = "desert_under",
heat_point = old and 35 or 92, humidity_point = old and 20 or 16,
y_min = -31000, y_max = -256,
node_cave_liquid = {"default:water_source", "default:lava_source"}})
-- bamboo
register_biome(ethereal.bamboo, {
name = "bamboo",
heat_point = 45, humidity_point = old and 75 or 45,
y_min = 3, y_max = 70,
node_top = "ethereal:bamboo_dirt", depth_top = 1,
node_filler = "default:dirt", depth_filler = 3})
register_biome(ethereal.bamboo, {
name = "bamboo_ocean",
heat_point = 45, humidity_point = old and 75 or 45,
y_min = -192, y_max = 2,
node_top = "default:sand", depth_top = 1,
node_filler = "default:sand", depth_filler = 2})
-- mesa
register_biome(ethereal.mesa, {
name = "mesa",
heat_point = 25, humidity_point = old and 28 or 10,
y_min = 18, y_max = 71,
node_top = old and "default:dirt_with_dry_grass" or "bakedclay:orange", depth_top = 1,
node_filler = "bakedclay:orange", depth_filler = 15,
node_riverbed = "default:desert_sand", depth_riverbed = 2,
node_dungeon_alt = "default:desert_sandstone",
node_dungeon = "default:desert_sandstone_brick",
node_dungeon_stair = "stairs:stair_desert_sandstone_brick"})
register_biome(ethereal.mesa, {
name = "mesa_redwood",
heat_point = 25, humidity_point = old and 28 or 10,
y_min = 11, y_max = 17,
node_top = "default:dirt_with_dry_grass", depth_top = 1,
node_filler = "bakedclay:orange", depth_filler = 15,
node_riverbed = "default:desert_sand", depth_riverbed = 2,
node_dungeon_alt = "",
node_dungeon = "default:desert_sandstone",
node_dungeon_stair = "stairs:stair_desert_sandstone"})
register_biome(ethereal.mesa, {
name = "mesa_beach",
heat_point = 25, humidity_point = old and 28 or 10,
y_min = -1, y_max = 10,
node_top = "default:desert_sand", depth_top = 1,
node_filler = "bakedclay:orange", depth_filler = 2,
node_riverbed = "default:desert_sand", depth_riverbed = 2,
node_dungeon_alt = "",
node_dungeon = "default:desert_sandstone",
node_dungeon_stair = "stairs:stair_desert_sandstone"})
register_biome(ethereal.mesa, {
name = "mesa_ocean",
heat_point = 25, humidity_point = old and 28 or 10,
y_min = -192, y_max = -2,
node_top = "default:sand", depth_top = 1,
node_filler = "default:sand", depth_filler = 2})
-- coniferous forest
register_biome(ethereal.snowy, {
name = "coniferous_forest",
heat_point = old and 10 or 45, humidity_point = old and 40 or 70,
y_min = 6, y_max = 140,
node_top = "default:dirt_with_coniferous_litter", depth_top = 1,
node_filler = "default:dirt", depth_filler = 2})
register_biome(ethereal.snowy, {
name = "coniferous_forest_dunes",
heat_point = old and 10 or 45, humidity_point = old and 40 or 70,
y_min = 4, y_max = 5,
node_top = "default:sand", depth_top = 1,
node_filler = "default:sand", depth_filler = 3,
vertical_blend = 1})
register_biome(ethereal.snowy, {
name = "coniferous_forest_ocean",
heat_point = old and 10 or 45, humidity_point = old and 40 or 70,
y_min = -255, y_max = 3,
node_top = "default:sand", depth_top = 1,
node_filler = "default:sand", depth_filler = 2})
register_biome(ethereal.snowy, {
name = "coniferous_forest_under",
heat_point = old and 10 or 45, humidity_point = old and 40 or 70,
y_min = -31000, y_max = -256,
node_cave_liquid = {"default:water_source", "default:lava_source"}})
-- taiga
register_biome(ethereal.alpine, {
name = "taiga",
heat_point = old and 10 or 25, humidity_point = old and 40 or 70,
y_min = 4, y_max = 140,
node_top = "default:dirt_with_snow", depth_top = 1,
node_filler = "default:dirt", depth_filler = 2})
register_biome(ethereal.alpine, {
name = "taiga_ocean",
heat_point = old and 10 or 25, humidity_point = old and 40 or 70,
y_min = -255, y_max = 3,
node_dust = "default:snow",
node_top = "default:sand", depth_top = 1,
node_filler = "default:sand", depth_filler = 3,
node_cave_liquid = "default:water_source",
vertical_blend = 1})
register_biome(ethereal.alpine, {
name = "taiga_under",
heat_point = old and 10 or 25, humidity_point = old and 40 or 70,
y_min = -31000, y_max = -256,
node_cave_liquid = {"default:water_source", "default:lava_source"}})
-- frost
register_biome(ethereal.frost, {
name = "frost_floatland",
heat_point = old and 10 or 5, humidity_point = old and 40 or 60,
y_min = 1025, y_max = 1750,
node_top = "ethereal:crystal_dirt", depth_top = 1,
node_filler = "default:dirt", depth_filler = 2})
register_biome(ethereal.frost, {
name = "frost",
heat_point = old and 10 or 5, humidity_point = old and 40 or 60,
y_min = 2, y_max = 71,
node_top = "ethereal:crystal_dirt", depth_top = 1,
node_filler = "default:dirt", depth_filler = 3})
register_biome(ethereal.frost, {
name = "frost_ocean",
heat_point = old and 10 or 5, humidity_point = old and 40 or 60,
y_min = -192, y_max = 1,
node_top = "default:silver_sand", depth_top = 1,
node_filler = "default:sand", depth_filler = 3})
-- deciduous forest
register_biome(ethereal.grassy, {
name = "deciduous_forest",
heat_point = old and 13 or 60, humidity_point = old and 40 or 68,
y_min = 3, y_max = 91,
node_top = "default:dirt_with_grass", depth_top = 1,
node_filler = "default:dirt", depth_filler = 3})
register_biome(ethereal.grassy, {
name = "deciduous_forest_ocean",
heat_point = old and 13 or 60, humidity_point = old and 40 or 68,
y_min = -31000, y_max = 3,
node_top = "default:sand", depth_top = 2,
node_filler = "default:gravel", depth_filler = 1})
register_biome(ethereal.grassy, {
name = "deciduous_forest_under",
heat_point = old and 13 or 60, humidity_point = old and 40 or 68,
y_min = -31000, y_max = -256,
node_cave_liquid = {"default:water_source", "default:lava_source"}})
-- caves
register_biome(ethereal.caves, {
name = "caves",
heat_point = old and 15 or 70, humidity_point = old and 25 or 5,
y_min = 4, y_max = 41,
node_top = "default:desert_stone", depth_top = 3,
node_filler = "air", depth_filler = 8,
node_dungeon_alt = "",
node_dungeon = "default:desert_cobble",
node_dungeon_stair = "stairs:stair_desert_cobble"})
-- grayness
register_biome(ethereal.grayness, {
name = "grayness",
heat_point = 15, humidity_point = old and 25 or 30,
y_min = 2, y_max = 41,
node_top = "ethereal:gray_dirt", depth_top = 1,
node_filler = "default:dirt", depth_filler = 3})
register_biome(ethereal.grayness, {
name = "grayness_ocean",
heat_point = 15, humidity_point = old and 25 or 30,
y_min = -22, y_max = 2,
node_top = "default:silver_sand", depth_top = 2,
node_filler = "default:sand", depth_filler = 2,
node_stone = "ethereal:blue_marble",
node_dungeon_alt = "",
node_dungeon = "ethereal:blue_marble",
node_dungeon_stair = "stairs:stair_blue_marble"})
register_biome(ethereal.grayness, {
name = "grayness_under",
heat_point = 15, humidity_point = old and 25 or 30,
y_min = -31000, y_max = -23,
node_cave_liquid = {"default:water_source", "default:lava_source"}})
-- grassy two
register_biome(ethereal.grassytwo, {
name = "grassytwo",
heat_point = 15, humidity_point = old and 40 or 25,
y_min = 1, y_max = 91,
node_top = "default:dirt_with_grass", depth_top = 1,
node_filler = "default:dirt", depth_filler = 3})
register_biome(ethereal.grassytwo, {
name = "grassytwo_ocean",
heat_point = 15, humidity_point = old and 40 or 25,
y_min = -192, y_max = 2,
node_top = "default:sand", depth_top = 1,
node_filler = "default:sand", depth_filler = 2})
-- prairie
register_biome(ethereal.prairie, {
name = "prairie",
heat_point = old and 20 or 30, humidity_point = old and 40 or 35,
y_min = 3, y_max = 26,
node_top = "ethereal:prairie_dirt", depth_top = 1,
node_filler = "default:dirt", depth_filler = 3})
register_biome(ethereal.prairie, {
name = "prairie_ocean",
heat_point = old and 20 or 30, humidity_point = old and 40 or 35,
y_min = -192, y_max = 2,
node_top = "default:sand", depth_top = 1,
node_filler = "default:sand", depth_filler = 2})
-- jumble
register_biome(ethereal.jumble, {
name = "jumble",
heat_point = 25, humidity_point = old and 50 or 55,
y_min = 1, y_max = 71,
node_top = "default:dirt_with_grass", depth_top = 1,
node_filler = "default:dirt", depth_filler = 3})
register_biome(ethereal.jumble, {
name = "jumble_ocean",
heat_point = 25, humidity_point = old and 50 or 55,
y_min = -192, y_max = 1,
node_top = "default:sand", depth_top = 1,
node_filler = "default:sand", depth_filler = 2})
-- rainforest
register_biome(ethereal.junglee, {
name = "rainforest",
heat_point = old and 30 or 86, humidity_point = old and 60 or 65,
y_min = 1, y_max = 71,
node_top = "default:dirt_with_rainforest_litter", depth_top = 1,
node_filler = "default:dirt", depth_filler = 3})
register_biome(ethereal.junglee, {
name = "rainforest_ocean",
heat_point = old and 30 or 86, humidity_point = old and 60 or 65,
y_min = -192, y_max = 0,
node_top = "default:sand", depth_top = 1,
node_filler = "default:sand", depth_filler = 2})
register_biome(ethereal.junglee, {
name = "rainforest_under",
heat_point = old and 30 or 86, humidity_point = old and 60 or 65,
y_min = -31000, y_max = -256,
node_cave_liquid = {"default:water_source", "default:lava_source"}})
-- swamp
register_biome(ethereal.swamp, {
name = "swamp",
heat_point = 80, humidity_point = 90, y_min = 1, y_max = 7,
node_top = "default:dirt_with_grass", depth_top = 1,
node_filler = "default:dirt", depth_filler = 3})
register_biome(ethereal.quicksand, {
name = "swamp_beach",
heat_point = 80, humidity_point = 90, y_min = -1, y_max = 0,
node_top = "ethereal:quicksand2", depth_top = 3,
node_filler = "default:clay", depth_filler = 2,
vertical_blend = 1})
register_biome(ethereal.swamp, {
name = "swamp_ocean",
heat_point = 80, humidity_point = 90, y_min = -192, y_max = -1,
node_top = "default:sand", depth_top = 2,
node_filler = "default:clay", depth_filler = 2,
vertical_blend = 2})
-- grove
register_biome(ethereal.grove, {
name = "grove",
heat_point = old and 45 or 40, humidity_point = old and 35 or 25,
y_min = 3, y_max = 23,
node_top = "ethereal:grove_dirt", depth_top = 1,
node_filler = "default:dirt", depth_filler = 3})
register_biome(ethereal.grove, {
name = "grove_ocean",
heat_point = old and 45 or 40, humidity_point = old and 35 or 25,
y_min = -192, y_max = 2,
node_top = "default:sand", depth_top = 1,
node_filler = "default:sand", depth_filler = 2})
-- meditteranean
register_biome(ethereal.mediterranean, {
name = "mediterranean",
heat_point = old and 20 or 30, humidity_point = 45,
y_min = 3, y_max = 50,
node_top = "ethereal:grove_dirt", depth_top = 1,
node_filler = "default:dirt", depth_filler = 3})
-- mushroom
register_biome(ethereal.mushroom, {
name = "mushroom",
heat_point = 45, humidity_point = old and 55 or 82,
y_min = 4, y_max = 50,
node_top = "ethereal:mushroom_dirt", depth_top = 1,
node_filler = "default:dirt", depth_filler = 3})
register_biome(ethereal.mushroom, {
name = "mushroom_ocean",
heat_point = 45, humidity_point = old and 55 or 82,
y_min = -255, y_max = 5,
node_top = "default:sand", depth_top = 1,
node_filler = "default:sand", depth_filler = 2,
vertical_blend = 1})
-- sandstone desert
register_biome(ethereal.sandstone, {
name = "sandstone_desert",
heat_point = old and 50 or 60, humidity_point = old and 20 or 0,
y_min = 3, y_max = 23,
node_top = "default:sandstone", depth_top = 1,
node_filler = "default:sandstone", depth_filler = 1,
node_stone = "default:sandstone",
node_dungeon_alt = "",
node_dungeon = "default:sandstone",
node_dungeon_stair = "stairs:stair_sandstone"})
register_biome(ethereal.sandstone, {
name = "sandstone_desert_ocean",
heat_point = old and 50 or 60, humidity_point = old and 20 or 0,
y_min = -192, y_max = 2,
node_top = "default:sand", depth_top = 1,
node_filler = "default:sand", depth_filler = 2,
node_stone = "default:sandstone",
node_dungeon_alt = "",
node_dungeon = "default:sandstone",
node_dungeon_stair = "stairs:stair_sandstone"})
register_biome(ethereal.sandstone, {
name = "sandstone_desert_under",
heat_point = old and 50 or 60, humidity_point = old and 20 or 0,
y_min = -31000, y_max = -256,
node_cave_liquid = {"default:water_source", "default:lava_source"}})
-- plains
register_biome(ethereal.plains, {
name = "plains",
heat_point = old and 65 or 74, humidity_point = old and 25 or 23,
y_min = 3, y_max = 25,
node_top = "ethereal:dry_dirt", depth_top = 1,
node_filler = "default:dirt", depth_filler = 3,
node_dungeon_alt = "",
node_dungeon = "ethereal:dry_dirt",
node_dungeon_stair = "stairs:stair_dry_dirt"})
register_biome(ethereal.plains, {
name = "plains_ocean",
heat_point = old and 65 or 74, humidity_point = old and 25 or 23,
y_min = -192, y_max = 2,
node_top = "default:sand", depth_top = 1,
node_filler = "default:sand", depth_filler = 2})
-- savanna
register_biome(ethereal.savanna, {
name = "savanna",
heat_point = old and 55 or 89, humidity_point = old and 25 or 42,
y_min = 3, y_max = 50,
node_top = "default:dry_dirt_with_dry_grass", depth_top = 1,
node_filler = "default:dry_dirt", depth_filler = 3})
register_biome(ethereal.savanna, {
name = "savanna_ocean",
heat_point = old and 55 or 89, humidity_point = old and 25 or 42,
y_min = -192, y_max = 2,
node_top = "default:sand", depth_top = 1,
node_filler = "default:sand", depth_filler = 2})
register_biome(ethereal.savanna, {
name = "savanna_under",
heat_point = old and 55 or 89, humidity_point = old and 25 or 42,
y_min = -31000, y_max = -256,
node_cave_liquid = {"default:water_source", "default:lava_source"}})
-- fiery
register_biome(ethereal.fiery, {
name = "fiery",
heat_point = old and 75 or 80, humidity_point = 10,
y_min = 5, y_max = 20,
node_top = "ethereal:fiery_dirt", depth_top = 1,
node_filler = "default:dirt", depth_filler = 3})
register_biome(ethereal.fiery, {
name = "fiery_beach",
heat_point = old and 75 or 80, humidity_point = 10,
y_min = 1, y_max = 4,
node_top = "default:desert_sand", depth_top = 1,
node_filler = "default:sand", depth_filler = 2})
register_biome(ethereal.fiery, {
name = "fiery_ocean",
heat_point = old and 75 or 80, humidity_point = 10,
y_min = -192, y_max = 2,
node_top = "default:sand", depth_top = 1,
node_filler = "default:sand", depth_filler = 2})
register_biome(ethereal.fiery, {
name = "fiery_under",
heat_point = old and 75 or 80, humidity_point = 10,
y_min = -31000, y_max = -256,
node_cave_liquid = {"default:lava_source"}})
-- glacier
register_biome(ethereal.glacier, {
name = "glacier",
heat_point = 0, humidity_point = old and 50 or 73,
y_min = -8, y_max = 31000,
node_dust = "default:snowblock",
node_top = "default:snowblock", depth_top = 1,
node_filler = "default:snowblock", depth_filler = 3,
node_stone = "default:ice",
node_water_top = "default:ice", depth_water_top = 10,
node_river_water = "default:ice",
node_riverbed = "default:gravel", depth_riverbed = 2,
node_dungeon = "ethereal:icebrick",
node_dungeon_alt = "default:ice",
node_dungeon_stair = "stairs:stair_ice"})
register_biome(ethereal.glacier, {
name = "glacier_ocean",
heat_point = 0, humidity_point = old and 50 or 73,
y_min = -112, y_max = -9,
node_dust = "default:snowblock",
node_top = "default:sand", depth_top = 1,
node_filler = "default:sand", depth_filler = 3})
register_biome(ethereal.glacier, {
name = "glacier_under",
heat_point = 0, humidity_point = old and 50 or 73,
y_max = -256, y_min = -31000,
node_cave_liquid = {"default:water_source", "default:lava_source"},
node_dungeon = "default:cobble",
node_dungeon_alt = "default:mossycobble",
node_dungeon_stair = "stairs:stair_cobble"})
-- tundra
register_biome(ethereal.tundra, {
name = "tundra_highland",
heat_point = 0, humidity_point = 40, y_max = 180, y_min = 47,
node_dust = "default:snow",
node_riverbed = "default:gravel", depth_riverbed = 2})
register_biome(ethereal.tundra, {
name = "tundra",
heat_point = 0, humidity_point = 40, y_max = 46, y_min = 2,
node_top = "default:permafrost_with_stones", depth_top = 1,
node_filler = "default:permafrost", depth_filler = 1,
node_riverbed = "default:gravel", depth_riverbed = 2,
vertical_blend = 4})
register_biome(ethereal.tundra, {
name = "tundra_beach",
heat_point = 0, humidity_point = 40, y_max = 1, y_min = -3,
node_top = "default:gravel", depth_top = 1,
node_filler = "default:gravel", depth_filler = 2,
node_riverbed = "default:gravel", depth_riverbed = 2,
vertical_blend = 1})
register_biome(ethereal.tundra, {
name = "tundra_ocean",
heat_point = 0, humidity_point = 40, y_max = -4, y_min = -112,
node_top = "default:sand", depth_top = 1,
node_filler = "default:sand", depth_filler = 3,
node_riverbed = "default:gravel", depth_riverbed = 2,
vertical_blend = 1})
register_biome(ethereal.tundra, {
name = "tundra_under",
heat_point = 0, humidity_point = 40, y_max = -256, y_min = -31000,
node_cave_liquid = {"default:water_source", "default:lava_source"}})
-- only register when using new mapgen
if not old then
-- cold desert
register_biome(ethereal.cold_desert, {
name = "cold_desert",
heat_point = 20, humidity_point = 85, y_min = 4, y_max = 100,
node_top = "default:silver_sand", depth_top = 1,
node_filler = "default:silver_sand", depth_filler = 1,
node_riverbed = "default:silver_sand", depth_riverbed = 2})
register_biome(ethereal.cold_desert, {
name = "cold_desert_ocean",
heat_point = 20, humidity_point = 85, y_min = -255, y_max = 3,
node_top = "default:sand", depth_top = 1,
node_filler = "default:sand", depth_filler = 3,
node_cave_liquid = "default:water_source",
vertical_blend = 1})
register_biome(ethereal.cold_desert, {
name = "cold_desert_under",
node_cave_liquid = {"default:water_source", "default:lava_source"},
heat_point = 20, humidity_point = 85, y_min = -31000, y_max = -256})
-- snowy grassland (inbetween frost and taiga/jumble)
register_biome(ethereal.snowy_grassland, {
name = "snowy_grassland",
heat_point = 15, humidity_point = 58, y_min = 3, y_max = 30,
node_top = "ethereal:cold_dirt", depth_top = 1,
node_filler = "default:dirt", depth_filler = 3})
register_biome(ethereal.snowy_grassland, {
name = "snowy_grassland_ocean",
node_dust = "default:snow",
heat_point = 15, humidity_point = 58, y_min = -192, y_max = 2,
node_top = "default:sand", depth_top = 1,
node_filler = "default:sand", depth_filler = 3,
vertical_blend = 1})
end

View file

@ -0,0 +1,113 @@
-- storage tables
local old_biomes, old_decor = {}, {}
-- backup registered biomes
for key, def in pairs(minetest.registered_biomes) do
old_biomes[key] = def
end
-- backup registered decorations
for key, def in pairs(minetest.registered_decorations) do
old_decor[key] = def
end
-- clear current biome data
minetest.clear_registered_biomes()
minetest.clear_registered_decorations()
-- minetest.clear_registered_ores()
-- create list of default biomes to remove
local def_biomes = {
["rainforest"] = 1,
["rainforest_swamp"] = 1,
["rainforest_ocean"] = 1,
["rainforest_under"] = 1,
["grassland"] = 1,
["grassland_dunes"] = 1,
["grassland_ocean"] = 1,
["grassland_under"] = 1,
["taiga"] = 1,
["taiga_ocean"] = 1,
["taiga_under"] = 1,
["icesheet"] = 1,
["icesheet_ocean"] = 1,
["icesheet_under"] = 1,
["snowy_grassland"] = 1,
["snowy_grassland_ocean"] = 1,
["snowy_grassland_under"] = 1,
["desert"] = 1,
["desert_ocean"] = 1,
["desert_under"] = 1,
["tundra"] = 1,
["tundra_highland"] = 1,
["tundra_beach"] = 1,
["tundra_ocean"] = 1,
["tundra_under"] = 1,
["sandstone_desert"] = 1,
["sandstone_desert_ocean"] = 1,
["sandstone_desert_under"] = 1,
["savanna"] = 1,
["savanna_shore"] = 1,
["savanna_ocean"] = 1,
["savanna_under"] = 1,
["cold_desert"] = 1,
["cold_desert_ocean"] = 1,
["cold_desert_under"] = 1,
["coniferous_forest"] = 1,
["coniferous_forest_dunes"] = 1,
["coniferous_forest_ocean"] = 1,
["coniferous_forest_under"] = 1,
["deciduous_forest"] = 1,
["deciduous_forest_shore"] = 1,
["deciduous_forest_ocean"] = 1,
["deciduous_forest_under"] = 1
}
-- only re-register biomes that aren't on the list
for key, def in pairs(old_biomes) do
if not def_biomes[key] then minetest.register_biome(def) end
end
-- loop through decorations
for key, def in pairs(old_decor) do
local can_add = true
local new_biomes = {}
if type(def.biomes) == "table" then
-- loop through decoration biomes, only re-add one's not on above list
for num, bio in pairs(def.biomes) do
if not def_biomes[bio] then table.insert(new_biomes, bio) end
end
-- if no biomes are left on new list, do not re-add decoration
if #new_biomes == 0 then can_add = false end
elseif type(def.biomes) == "string" then
if def_biomes[def.biomes] then
can_add = false
else
new_biomes = {def.biomes} -- convert to table
end
elseif not def.biomes then new_biomes = nil end -- keep it nil for re-adding
if can_add == true then
def.biomes = new_biomes
minetest.register_decoration(def)
end
end

View file

@ -0,0 +1,47 @@
-- add compatibility for ethereal nodes already added to default game or name changed
minetest.register_alias("ethereal:acacia_trunk", "default:acacia_tree")
minetest.register_alias("ethereal:acacia_wood", "default:acacia_wood")
minetest.register_alias("ethereal:fence_acacia", "default:fence_acacia_wood")
minetest.register_alias("ethereal:fence_junglewood", "default:fence_junglewood")
minetest.register_alias("ethereal:fence_pine", "default:fence_pine_wood")
minetest.register_alias("ethereal:acacia_leaves", "default:acacia_leaves")
minetest.register_alias("ethereal:pineleaves", "default:pine_needles")
minetest.register_alias("ethereal:mushroom_craftingitem", "flowers:mushroom_brown")
minetest.register_alias("ethereal:mushroom_plant", "flowers:mushroom_brown")
minetest.register_alias("ethereal:mushroom_soup_cooked", "ethereal:mushroom_soup")
minetest.register_alias("ethereal:mushroom_1", "flowers:mushroom_brown")
minetest.register_alias("ethereal:mushroom_2", "flowers:mushroom_brown")
minetest.register_alias("ethereal:mushroom_3", "flowers:mushroom_brown")
minetest.register_alias("ethereal:mushroom_4", "flowers:mushroom_brown")
minetest.register_alias("ethereal:strawberry_bush", "ethereal:strawberry_7")
minetest.register_alias("ethereal:seed_strawberry", "ethereal:strawberry")
for i = 1, 5 do
minetest.register_alias("ethereal:wild_onion_" .. i, "ethereal:onion_" .. i)
end
minetest.register_alias("ethereal:onion_7", "ethereal:onion_4")
minetest.register_alias("ethereal:onion_8", "ethereal:onion_5")
minetest.register_alias("ethereal:wild_onion_7", "ethereal:onion_4")
minetest.register_alias("ethereal:wild_onion_8", "ethereal:onion_5")
minetest.register_alias("ethereal:wild_onion_craftingitem", "ethereal:wild_onion_plant")
minetest.register_alias("ethereal:hearty_stew_cooked", "ethereal:hearty_stew")
minetest.register_alias("ethereal:obsidian_brick", "default:obsidianbrick")
minetest.register_alias("ethereal:crystal_topped_dirt", "ethereal:crystal_dirt")
minetest.register_alias("ethereal:fiery_dirt_top", "ethereal:fiery_dirt")
minetest.register_alias("ethereal:gray_dirt_top", "ethereal:gray_dirt")
minetest.register_alias("ethereal:green_dirt_top", "default;dirt_with_grass")
minetest.register_alias("ethereal:tree_sapling", "default:sapling")
minetest.register_alias("ethereal:jungle_tree_sapling", "default:junglesapling")
minetest.register_alias("ethereal:acacia_sapling", "default:acacia_sapling")
minetest.register_alias("ethereal:pine_tree_sapling", "default:pine_sapling")

300
mods/ethereal/crystal.lua Normal file
View file

@ -0,0 +1,300 @@
local S = minetest.get_translator("ethereal")
-- Crystal Ingot and recipe
minetest.register_craftitem("ethereal:crystal_ingot", {
description = S("Crystal Ingot"),
inventory_image = "ethereal_crystal_ingot.png",
wield_image = "ethereal_crystal_ingot.png"
})
minetest.register_craft({
output = "ethereal:crystal_ingot",
recipe = {
{"default:mese_crystal", "ethereal:crystal_spike"},
{"ethereal:crystal_spike", "default:mese_crystal"},
{"bucket:bucket_water", ""}
},
replacements = {{"bucket:bucket_water", "bucket:bucket_empty"}}
})
-- Crystal Spike (Hurts if you touch it)
minetest.register_node("ethereal:crystal_spike", {
description = S("Crystal Spike"),
drawtype = "plantlike",
tiles = {"ethereal_crystal_spike.png"},
inventory_image = "ethereal_crystal_spike.png",
wield_image = "ethereal_crystal_spike.png",
paramtype = "light",
light_source = 7,
sunlight_propagates = true,
walkable = true,
damage_per_second = 1,
groups = {cracky = 1, falling_node = 1, puts_out_fire = 1, cools_lava = 1},
sounds = default.node_sound_glass_defaults(),
selection_box = {
type = "fixed", fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 0, 5 / 16}
},
node_box = {
type = "fixed", fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 0, 5 / 16}
},
dropped_step = function(self, pos, dtime) -- custom function for builtin_item use
self.ctimer = (self.ctimer or 0) + dtime
if self.ctimer < 5.0 then return end -- 5 second timer
self.ctimer = 0
if self.node_inside and self.node_inside.name ~= "default:water_source" then
return
end
local objs = minetest.get_objects_inside_radius(pos, 0.8)
if not objs or #objs ~= 2 then return end
local crystal, mese, ent = nil, nil, nil
for k, obj in pairs(objs) do
ent = obj:get_luaentity()
if ent and ent.name == "__builtin:item" then
if ent.itemstring == "default:mese_crystal 2" and not mese then
mese = obj
elseif ent.itemstring == "ethereal:crystal_spike 2" and not crystal then
crystal = obj
end
end
end
if mese and crystal then
mese:remove()
crystal:remove()
minetest.add_item(pos, "ethereal:crystal_ingot")
return false
end
end
})
-- Crystal Block and recipe
minetest.register_node("ethereal:crystal_block", {
description = S("Crystal Block"),
tiles = {"ethereal_crystal_block.png"},
light_source = 9,
is_ground_content = false,
groups = {cracky = 1, level = 2, puts_out_fire = 1, cools_lava = 1},
sounds = default.node_sound_glass_defaults()
})
minetest.register_craft({
output = "ethereal:crystal_block",
recipe = {
{"ethereal:crystal_ingot", "ethereal:crystal_ingot", "ethereal:crystal_ingot"},
{"ethereal:crystal_ingot", "ethereal:crystal_ingot", "ethereal:crystal_ingot"},
{"ethereal:crystal_ingot", "ethereal:crystal_ingot", "ethereal:crystal_ingot"}
}
})
minetest.register_craft({
output = "ethereal:crystal_ingot 9",
recipe = {{"ethereal:crystal_block"}}
})
-- Crystal Sword (Powerful wee beastie)
minetest.register_tool("ethereal:sword_crystal", {
description = S("Crystal Sword"),
inventory_image = "ethereal_crystal_sword.png",
wield_image = "ethereal_crystal_sword.png",
tool_capabilities = {
full_punch_interval = 0.6,
max_drop_level = 1,
groupcaps = {
snappy = {
times = {[1] = 1.70, [2] = 0.70, [3] = 0.25}, uses = 50, maxlevel = 3
}
},
damage_groups = {fleshy = 10}
},
groups = {sword = 1},
sound = {breaks = "default_tool_breaks"}
})
minetest.register_craft({
output = "ethereal:sword_crystal",
recipe = {
{"ethereal:crystal_ingot"},
{"ethereal:crystal_ingot"},
{"default:steel_ingot"}
}
})
-- Crystal Axe
minetest.register_tool("ethereal:axe_crystal", {
description = S("Crystal Axe"),
inventory_image = "ethereal_crystal_axe.png",
wield_image = "ethereal_crystal_axe.png",
tool_capabilities = {
full_punch_interval = 0.8,
max_drop_level = 1,
groupcaps = {
choppy = {
times = {[1] = 2.00, [2] = 0.80, [3] = 0.40}, uses = 40, maxlevel = 3
}
},
damage_groups = {fleshy = 7}
},
groups = {axe = 1},
sound = {breaks = "default_tool_breaks"}
})
minetest.register_craft({
output = "ethereal:axe_crystal",
recipe = {
{"ethereal:crystal_ingot", "ethereal:crystal_ingot"},
{"ethereal:crystal_ingot", "default:steel_ingot"},
{"", "default:steel_ingot"}
}
})
minetest.register_craft({
output = "ethereal:axe_crystal",
recipe = {
{"ethereal:crystal_ingot", "ethereal:crystal_ingot"},
{"default:steel_ingot", "ethereal:crystal_ingot"},
{"default:steel_ingot", ""}
}
})
-- Crystal Pick (This will last a while)
minetest.register_tool("ethereal:pick_crystal", {
description = S("Crystal Pickaxe"),
inventory_image = "ethereal_crystal_pick.png",
wield_image = "ethereal_crystal_pick.png",
tool_capabilities = {
full_punch_interval = 0.7,
max_drop_level = 3,
groupcaps={
cracky = {
times = {[1] = 1.8, [2] = 0.8, [3] = 0.40}, uses = 40, maxlevel = 3
}
},
damage_groups = {fleshy = 6}
},
groups = {pickaxe = 1},
sound = {breaks = "default_tool_breaks"}
})
minetest.register_craft({
output = "ethereal:pick_crystal",
recipe = {
{"ethereal:crystal_ingot", "ethereal:crystal_ingot", "ethereal:crystal_ingot"},
{"", "default:steel_ingot", ""},
{"", "default:steel_ingot", ""}
}
})
-- backup old function and replace with new silk touch ability for crystal shovel
local old_handle_node_drops = minetest.handle_node_drops
function minetest.handle_node_drops(pos, drops, digger)
-- are we holding Crystal Shovel?
if not digger
or digger:get_wielded_item():get_name() ~= "ethereal:shovel_crystal" then
return old_handle_node_drops(pos, drops, digger)
end
local nn = minetest.get_node(pos).name
if minetest.get_item_group(nn, "crumbly") == 0
or minetest.get_item_group(nn, "no_silktouch") == 1 then
return old_handle_node_drops(pos, drops, digger)
end
return old_handle_node_drops(pos, {ItemStack(nn)}, digger)
end
-- Crystal Shovel
minetest.register_tool("ethereal:shovel_crystal", {
description = S("Crystal Shovel"),
inventory_image = "ethereal_crystal_shovel.png",
wield_image = "ethereal_crystal_shovel.png^[transformR90",
tool_capabilities = {
full_punch_interval = 1.0,
max_drop_level = 1,
groupcaps = {
crumbly = {
times = {[1] = 1.10, [2] = 0.50, [3] = 0.30}, uses = 30, maxlevel = 3
}
},
damage_groups = {fleshy = 4}
},
groups = {shovel = 1},
sound = {breaks = "default_tool_breaks"}
})
minetest.register_craft({
output = "ethereal:shovel_crystal",
recipe = {
{"ethereal:crystal_ingot"},
{"default:steel_ingot"},
{"default:steel_ingot"}
}
})
-- Crystal Gilly Staff (replenishes air supply when used)
minetest.register_tool("ethereal:crystal_gilly_staff", {
description = S("Crystal Gilly Staff"),
inventory_image = "ethereal_crystal_gilly_staff.png",
wield_image = "ethereal_crystal_gilly_staff.png",
on_use = function(itemstack, user, pointed_thing)
if user and user:get_breath() < 10 then user:set_breath(10) end
end
})
minetest.register_craft({
output = "ethereal:crystal_gilly_staff",
recipe = {
{"ethereal:green_moss", "ethereal:gray_moss", "ethereal:fiery_moss"},
{"ethereal:crystal_moss", "ethereal:crystal_ingot", "ethereal:mushroom_moss"},
{"", "ethereal:crystal_ingot", ""}
},
})
-- Add Toolranks mod support
if minetest.get_modpath("toolranks") then
local function add_tool(name, desc, afteruse) -- helper function
minetest.override_item(name, {
original_description = desc,
description = toolranks.create_description(desc, 0, 1),
after_use = afteruse and toolranks.new_afteruse
})
end
add_tool("ethereal:pick_crystal", "Crystal Pickaxe", true)
add_tool("ethereal:axe_crystal", "Crystal Axe", true)
add_tool("ethereal:shovel_crystal", "Crystal Shovel", true)
add_tool("ethereal:sword_crystal", "Crystal Sword", true)
end

709
mods/ethereal/decor.lua Normal file
View file

@ -0,0 +1,709 @@
-- register decoration helper
local function register_decoration(enabled, def)
if enabled ~= 1 then return end
def.sidelen = def.sidelen or 80 -- some handy defaults
def.deco_type = "simple"
def.y_min = def.y_min or 1
def.y_max = def.y_max or 31000
minetest.register_decoration(def)
end
-- thin ice
register_decoration(ethereal.frost, {
place_on = {"default:silver_sand"},
fill_ratio = 1.0, y_min = 0, y_max = 0,
decoration = "ethereal:thin_ice", place_offset_y = 1,
biomes = {"frost_ocean"} })
-- water pools in swamp areas
register_decoration(1, {
place_on = {"default:dirt_with_grass"},
sidelen = 4, fill_ratio = 0.02, y_min = 1, y_max = 3,
biomes = {"swamp","marsh"},
flags = "force_placement",
decoration = "default:water_source", place_offset_y = -1,
spawn_by = "default:dirt_with_grass", num_spawn_by = 8})
register_decoration(1, {
place_on = {"default:dirt_with_grass"},
sidelen = 4, fill_ratio = 0.33, y_min = 1, y_max = 32,
biomes = {"marsh"},
flags = "force_placement",
decoration = "default:water_source", place_offset_y = -1,
spawn_by = {"default:dirt_with_grass", "default:water_source"}, num_spawn_by = 8})
-- dry dirt patches
register_decoration(1, {
place_on = {"default:dry_dirt_with_dry_grass"},
sidelen = 4,
noise_params = {offset = -1.5, scale = -1.5, spread = {x = 200, y = 200, z = 200},
seed = 329, octaves = 4, persist = 1.0},
biomes = {"plains"},
decoration = "default:dry_dirt", place_offset_y = -1,
flags = "force_placement"
})
-- rainforest litter in grove biome
register_decoration(1, {
place_on = {"ethereal:grove_dirt"},
sidelen = 4,
noise_params = {offset = -0.0025, scale = 0.5, spread = {x = 100, y = 100, z = 100},
seed = 329, octaves = 1, persist = 1.0},
biomes = {"grove"},
decoration = "default:dirt_with_rainforest_litter", place_offset_y = -1,
flags = "force_placement"
})
-- farming redo check, salt crystal if found, strawberry if not
if minetest.get_modpath("farming") and farming.mod and farming.mod == "redo" then
register_decoration(ethereal.grayness, {
place_on = "default:silver_sand",
fill_ratio = 0.001,
decoration = "farming:salt_crystal"})
else
register_decoration(1, {
place_on = {"default:dirt_with_grass", "ethereal:prairie_dirt"},
sidelen = 16, y_min = 15, y_max = 55,
noise_params = {offset = 0, scale = 0.002, spread = {x = 100, y = 100, z = 100},
seed = 143, octaves = 3, persist = 0.6},
decoration = "ethereal:strawberry_7"})
end
-- firethorn shrub
register_decoration(ethereal.glacier, {
place_on = "default:snowblock",
fill_ratio = 0.001, y_min = 1, y_max = 30,
biomes = {"glacier"},
decoration = "ethereal:firethorn"})
-- dry grass
register_decoration(ethereal.savanna, {
place_on = {"default:dry_dirt_with_dry_grass", "default:dirt_with_dry_grass"},
fill_ratio = 0.25,
biomes = {"savanna"},
decoration = {"default:dry_grass_2", "default:dry_grass_3", "default:dry_grass_4",
"default:dry_grass_5"}})
register_decoration(ethereal.plains, {
place_on = {"default:dry_dirt_with_dry_grass"},
fill_ratio = 0.875,
biomes = {"mesa_redwood"},
decoration = {"default:dry_grass_2", "default:dry_grass_3", "default:dry_grass_4",
"default:dry_grass_5","default:grass_1"}})
register_decoration(ethereal.mesa, {
place_on = {"default:dirt_with_dry_grass"},
fill_ratio = 0.25,
biomes = {"mesa"},
decoration = {"default:dry_grass_2", "default:dry_grass_3", "default:dry_grass_4",
"default:dry_grass_5"}})
-- scorched tree
register_decoration(ethereal.fiery, {
place_on = {"ethereal:fiery_dirt"},
fill_ratio = 0.000275,
biomes = {"fiery"},
decoration = "ethereal:scorched_tree",
height_max = 6})
-- fiery lava pits
register_decoration(ethereal.fiery, {
place_on = {"ethereal:fiery_dirt"},
place_offset_y = -1,
spawn_by = "ethereal:fiery_dirt",
num_spawn_by = 7,
sidelen = 8,
noise_params = {
offset = 0.0125,
scale = 0.025,
spread = {x = 50, y = 50, z = 50},
seed = 909,
octaves = 2,
persist = 1.0
},
biomes = {"fiery"},
decoration = "default:lava_source",
flags = "force_placement"})
-- Special orange baked clay surface decor for mesa
register_decoration(ethereal.mesa,{
deco_type = "simple",
place_on = {"default:dirt_with_dry_grass"},
sidelen = 2,
noise_params = {
offset = -1,
scale = -1.25,
spread = {x = 100, y = 100, z = 100},
seed = 4,
octaves = 4,
persist = 1.0
},
biomes = {"mesa"},
y_max = 31000,
y_min = 1,
decoration = "bakedclay:orange",
place_offset_y = -1,
flags = "force_placement"
})
-- dry shrub
register_decoration(ethereal.plains, {
place_on = {"default:dry_dirt"},
fill_ratio = 0.005,
biomes = {"plains"},
decoration = "default:dry_shrub"})
register_decoration(ethereal.jumble, {
place_on = {"default:dirt_with_grass"},
fill_ratio = 0.00325,
biomes = {"jumble"},
decoration = "default:dry_shrub"})
register_decoration(ethereal.desert, {
place_on = {"default:desert_sand"},
fill_ratio = 0.0025,
biomes = {"desert"},
decoration = "default:dry_shrub"})
register_decoration(ethereal.sandstone, {
place_on = {"default:sand"},
fill_ratio = 0.0025,
y_min = 5,
biomes = {"sandstone_desert"},
decoration = "default:dry_shrub"})
register_decoration(ethereal.mesa, {
place_on = {"bakedclay:red","bakedclay:orange"},
fill_ratio = 0.015,
biomes = {"mesa"},
decoration = "default:dry_shrub"})
register_decoration(ethereal.caves, {
place_on = {"default:desert_stone"},
fill_ratio = 0.005, y_min = 5, y_max = 42,
biomes = {"caves"},
decoration = {"default:dry_grass_2", "default:dry_grass_3", "default:dry_shrub"}})
-- crystal spike & grass
register_decoration(ethereal.frost, {
place_on = {"ethereal:crystal_dirt"},
fill_ratio = 0.02, y_min = 1, y_max = 1750,
biomes = {"frost", "frost_floatland"},
decoration = {"ethereal:crystal_spike", "ethereal:crystalgrass"}})
-- red shrub
register_decoration(ethereal.fiery, {
place_on = {"ethereal:fiery_dirt"},
fill_ratio = 0.10,
biomes = {"fiery"},
decoration = "ethereal:dry_shrub"})
-- snowy grass
register_decoration(ethereal.snowy, {
place_on = {"ethereal:gray_dirt"},
fill_ratio = 0.175,
biomes = {"grayness"},
decoration = "ethereal:snowygrass"})
-- cactus
register_decoration(1,{
name = node,
deco_type = "simple",
sidelen = 8,
place_on = {
"default:desert_sand",
"default:sand",
},
noise_params = {
offset = -0.0069,
scale = 0.0175,
spread = {x = 8, y = 8, z = 8},
seed = 60659,
octaves = 2,
persist = 0.7625,
lacunarity = 0.6,
},
y_max = 31000,
y_min = 1,
biomes = {
"desert",
"sandstone_desert",
},
height_max = 4,
decoration = "default:cactus",
})
-- wild red mushroom
register_decoration(ethereal.mushroom, {
place_on = {"ethereal:mushroom_dirt"},
fill_ratio = 0.25,
biomes = {"mushroom"},
decoration = "flowers:mushroom_red"})
-- spore grass
register_decoration(ethereal.mushroom, {
place_on = {"ethereal:mushroom_dirt"},
fill_ratio = 0.175,
biomes = {"mushroom"},
decoration = "ethereal:spore_grass"})
-- slime mold
register_decoration(ethereal.mushroom, {
place_on = {"default:clay"},
fill_ratio = 0.1, y_min = 1, y_max = 5,
biomes = {"mushroom_shore"},
decoration = "ethereal:slime_mold"})
-- red & brown mushroom
register_decoration(1,{
deco_type = "simple",
place_on = {
"default:dirt_with_grass",
"default:dirt_with_rainforest_litter",
"ethereal:prairie_dirt",
"ethereal:mushroom_dirt",
},
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.009,
spread = {x = 200, y = 200, z = 200},
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = {
"rainforest",
"deciduous_forest",
"grassytwo",
"prairie",
"swamp",
"marsh",
"mushroom",
},
decoration = {"flowers:mushroom_brown", "flowers:mushroom_red"}
})
-- stumps
register_decoration(ethereal.jumble, {
place_on = {"default:dirt_with_grass"},
fill_ratio = 0.00175,
biomes = {"jumble"},
y_min = 4,
decoration = "default:tree",
height_max = 4})
-- jungle grass
register_decoration(ethereal.junglee, {
place_on = {"default:dirt_with_rainforest_litter"},
fill_ratio = 0.1,
biomes = {"rainforest"},
decoration = "default:junglegrass"})
register_decoration(ethereal.jumble, {
place_on = {"default:dirt_with_rainforest_litter"},
fill_ratio = 0.1,
biomes = {"jumble", "grove"},
decoration = "default:junglegrass"})
register_decoration(ethereal.swamp, {
place_on = {"default:dirt_with_grass"},
fill_ratio = 0.25,
biomes = {"swamp","marsh"},
decoration = "default:junglegrass"})
-- grass
register_decoration(ethereal.grassy, {
place_on = {"default:dirt_with_grass"},
fill_ratio = 0.35,
biomes = {"deciduous_forest"},
decoration = {"default:grass_2", "default:grass_3", "default:grass_4", "default:grass_5"}})
register_decoration(ethereal.grassytwo, {
place_on = {"default:dirt_with_grass"},
fill_ratio = 0.35,
biomes = {"grassytwo"},
decoration = {"default:grass_2", "default:grass_3", "default:grass_4", "default:grass_5"}})
register_decoration(ethereal.jumble, {
place_on = {"default:dirt_with_grass","default:dirt_with_rainforest_litter"},
fill_ratio = 0.35,
biomes = {"jumble"},
decoration = {"default:grass_2", "default:grass_3", "default:grass_4", "default:grass_5"}})
register_decoration(ethereal.junglee, {
place_on = {"default:dirt_with_rainforest_litter"},
fill_ratio = 0.35,
biomes = {"rainforest"},
decoration = {"default:grass_2", "default:grass_3", "default:grass_4", "default:grass_5"}})
register_decoration(ethereal.grove, {
place_on = {"ethereal:grove_dirt","default:dirt_with_rainforest_litter"},
fill_ratio = 0.375,
biomes = {"grove"},
decoration = {"default:grass_2", "default:grass_3", "default:grass_4", "default:grass_5"}})
register_decoration(ethereal.mediterranean, {
place_on = {"ethereal:grove_dirt"},
fill_ratio = 0.35,
biomes = {"mediterranean"},
decoration = {"default:grass_2", "default:grass_3", "default:grass_4", "default:grass_5"}})
register_decoration(ethereal.bamboo, {
place_on = {"ethereal:bamboo_dirt"},
fill_ratio = 0.35,
biomes = {"bamboo"},
decoration = {"default:grass_2", "default:grass_3", "default:grass_4", "default:grass_5"}})
register_decoration(1, {
place_on = {"default:dirt_with_grass"},
fill_ratio = 0.35,
biomes = {"grassland","swamp","marsh"},
decoration = {"default:grass_2", "default:grass_3", "default:grass_4", "default:grass_5"}})
-- ferns
register_decoration(ethereal.grove, {
place_on = {"default:dirt_with_rainforest_litter", "ethereal:grove_dirt"},
fill_ratio = 0.2,
biomes = {"grove"},
decoration = "ethereal:fern"})
-- snow
register_decoration(1,{
deco_type = "simple",
place_on = "default:dirt_with_coniferous_litter",
sidelen = 40,
noise_params = {
offset = 0.2,
scale = 0.2,
spread = {x = 100, y = 100, z = 100},
seed = 2,
octaves = 2,
persist = 1.0
},
biomes = {"coniferous_forest"},
decoration = "default:snow",
})
register_decoration(ethereal.alpine, {
place_on = {"default:dirt_with_snow"},
fill_ratio = 0.8, y_min = 40, y_max = 140,
biomes = {"taiga"},
decoration = "default:snow"})
-- wild onion and setting
local abundant = minetest.settings:get_bool("ethereal.abundant_onions") ~= false
-- wild onion
register_decoration(1,asuna.features.crops.onion.inject_decoration({
deco_type = "simple",
sidelen = 8,
place_on = {"group:soil"},
noise_params = {
offset = -0.4125,
scale = 0.3575,
spread = {x = 14, y = 14, z = 14},
seed = seed,
octaves = 2,
persist = 0.62,
lacunarity = 0.675,
},
y_max = 31000,
y_min = 1,
decoration = {
"ethereal:onion_3",
"ethereal:onion_4",
"ethereal:onion_5",
},
}))
-- papyrus
register_decoration(1, {
place_on = {"default:dirt_with_grass", "default:dirt_with_rainforest_litter"},
fill_ratio = 0.125, y_min = 1, y_max = 32,
biomes = {"rainforest", "swamp", "marsh"},
decoration = "default:papyrus", height_max = 4,
spawn_by = "default:water_source", num_spawn_by = 1})
-- blue agave from wine mod
if minetest.get_modpath("wine") then
register_decoration(ethereal.desert, {
place_on = {"default:desert_sand"},
sidelen = 16, fill_ratio = 0.001,
biomes = {"desert"},
decoration = {"wine:blue_agave"}})
end
-- default ferns
register_decoration(1, {
place_on = {"ethereal:cold_dirt", "default:dirt_with_coniferous_litter"},
sidelen = 16, fill_ratio = 0.2,
decoration = {"default:fern_1", "default:fern_2", "default:fern_3"} })
-- Tundra moss
register_decoration(ethereal.tundra, {
place_on = {"default:permafrost_with_stones"},
sidelen = 4, y_min = 2, y_max = 50,
noise_params = {offset = -0.8, scale = 2.0, spread = {x = 100, y = 100, z = 100},
seed = 53995, octaves = 3, persist = 1.0},
biomes = {"tundra"},
decoration = "default:permafrost_with_moss", place_offset_y = -1,
flags = "force_placement"})
-- Tundra patchy snow
register_decoration(ethereal.tundra, {
place_on = {"default:permafrost_with_moss", "default:permafrost_with_stones",
"default:stone", "default:gravel"},
sidelen = 4, y_min = 1, y_max = 50,
noise_params = {offset = 0, scale = 1.0, spread = {x = 100, y = 100, z = 100},
seed = 172555, octaves = 3, persist = 1.0},
biomes = {"tundra", "tundra_shore"},
decoration = "default:snow"})
-- Tundra very sparse grass and dry shrubs
register_decoration(1,{
deco_type = "simple",
place_on = {
"default:permafrost_with_moss",
},
sidelen = 16,
fill_ratio = 0.01,
biomes = {"tundra"},
y_max = 50,
y_min = 1,
decoration = {
"default:grass_1",
"default:dry_shrub",
},
})
-- Coral Reef
register_decoration(1,{
name = "default:corals",
deco_type = "simple",
place_on = {
"default:sand",
"everness:mineral_sand",
},
place_offset_y = -1,
sidelen = 4,
noise_params = {
offset = -3,
scale = 4,
spread = {x = 50, y = 50, z = 50},
seed = 7013,
octaves = 3,
persist = 0.7,
},
biomes = asuna.features.ocean.tropical,
y_max = -2,
y_min = -36,
flags = "force_placement",
decoration = {
"default:coral_green", "default:coral_pink",
"default:coral_cyan", "default:coral_brown",
"default:coral_orange", "default:coral_skeleton"
}
})
-- Kelp
register_decoration(1,{
deco_type = "simple",
place_on = {
"default:sand",
"everness:mineral_sand",
},
place_offset_y = -1,
sidelen = 16,
noise_params = {
offset = -0.04,
scale = 0.2,
spread = {x = 200, y = 200, z = 200},
seed = 87112,
octaves = 3,
persist = 0.7
},
biomes = asuna.biome_groups.below,
y_max = -5,
y_min = -36,
flags = "force_placement",
decoration = "default:sand_with_kelp",
param2 = 48,
param2_max = 96
})
-- illumishrooms using underground decoration placement
local function add_illumishroom(low, high, nodename)
register_decoration(1, {
place_on = {"default:stone_with_coal"},
sidelen = 16, fill_ratio = 0.5, y_min = low, y_max = high,
flags = "force_placement, all_floors",
decoration = nodename})
end
add_illumishroom(-1000, -50, "ethereal:illumishroom")
add_illumishroom(-2000, -1000, "ethereal:illumishroom2")
add_illumishroom(-3000, -2000, "ethereal:illumishroom3")
--= Register Biome Decoration Using Plants Mega Pack Lite if Xanadu found
if minetest.get_modpath("xanadu") then
--= Desert Biome
-- Cactus
register_decoration(1, {
place_on = {"default:desert_sand", "default:sandstone"},
sidelen = 16, fill_ratio = 0.005,
biomes = {"desert", "sandstone_desert"},
decoration = {"xanadu:cactus_echinocereus", "xanadu:cactus_matucana",
"xanadu:cactus_baseball", "xanadu:cactus_golden"}})
-- Desert Plants
register_decoration(1, {
place_on = {"default:desert_sand", "default:sandstone", "default:sand"},
sidelen = 16, fill_ratio = 0.004,
biomes = {"desert", "sandstone_desert"},
decoration = {"xanadu:desert_kangaroo", "xanadu:desert_brittle",
"xanadu:desert_ocotillo", "xanadu:desert_whitesage"}})
--= Prairie Biome
-- Grass
register_decoration(1, {
place_on = {"ethereal:prairie_dirt", "default:dirt_with_grass"},
sidelen = 16, fill_ratio = 0.005,
biomes = {"prairie", "deciduous_forest", "grassytwo"},
decoration = {"xanadu:grass_prairie", "xanadu:grass_cord",
"xanadu:grass_wheatgrass", "xanadu:desert_whitesage"}})
-- Flowers
register_decoration(1, {
place_on = {"ethereal:prairie_dirt", "default:dirt_with_grass",
"ethereal:grove_dirt", "ethereal:bamboo_dirt"},
sidelen = 16, fill_ratio = 0.005,
biomes = {"prairie", "deciduous_forest", "grassytwo", "bamboo"},
decoration = {"xanadu:flower_jacobsladder", "xanadu:flower_thistle",
"xanadu:flower_wildcarrot"}})
register_decoration(1, {
place_on = {"ethereal:prairie_dirt", "default:dirt_with_grass",
"ethereal:grove_dirt"},
sidelen = 16, fill_ratio = 0.005,
biomes = {"prairie", "deciduous_forest", "grassytwo", "grove"},
decoration = {"xanadu:flower_delphinium", "xanadu:flower_celosia",
"xanadu:flower_daisy", "xanadu:flower_bluerose"}})
-- Shrubs
register_decoration(1, {
place_on = {"ethereal:prairie_dirt", "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", "deciduous_forest", "grassytwo", "grove", "rainforest",
"grayness", "jumble"},
decoration = {"xanadu:shrub_kerria", "xanadu:shrub_spicebush"}})
--= Jungle Biome
register_decoration(1, {
place_on = {"default:dirt_with_grass", "default:dirt_with_rainforest_litter"},
sidelen = 16, fill_ratio = 0.007,
biomes = {"rainforest", "jumble"},
decoration = {"xanadu:rainforest_guzmania", "xanadu:rainforest_devil",
"xanadu:rainforest_lazarus", "xanadu:rainforest_lollipop",
"xanadu:mushroom_woolly"}})
--= Cold Biomes
register_decoration(1, {
place_on = {"default:dirt_with_snow", "ethereal:gray_dirt"},
sidelen = 16, fill_ratio = 0.005,
biomes = {"coniferous_forest", "taiga", "grayness"},
decoration = {"xanadu:mountain_edelweiss", "xanadu:mountain_armeria",
"xanadu:mountain_bellflower", "xanadu:mountain_willowherb",
"xanadu:mountain_bistort"}})
--= Mushroom Biome
register_decoration(1, {
place_on = {"ethereal:mushroom_dirt"},
sidelen = 16, fill_ratio = 0.005,
biomes = {"mushroom"},
decoration = {"xanadu:mushroom_powderpuff", "xanadu:mushroom_chanterelle",
"xanadu:mushroom_parasol"}})
--= Lakeside
register_decoration(1, {
place_on = {"default:sand", "default:dirt_with_grass"},
sidelen = 16, fill_ratio = 0.015,
biomes = {"deciduous_forest_ocean", "grassland", "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
register_decoration(1, {
place_on = {"ethereal:mushroom_dirt", "default:dirt_with_grass",
"ethereal:gray_dirt", "ethereal:dirt_with_snow", "ethereal:prairie_dirt",
"ethereal:grove_dirt", "ethereal:dry_dirt", "ethereal:fiery_dirt",
"default:sand", "default:desert_sand", "ethereal:bamboo_dirt",
"default:dirt_with_rainforest_litter", "default:permafrost_with_stones"},
sidelen = 16, fill_ratio = 0.004,
biomes = {"mushroom", "prairie", "grayness", "plains", "desert", "rainforest",
"deciduous_forest", "grassytwo", "jumble", "coniferous_forest", "taiga",
"fiery", "mesa", "bamboo", "tundra"},
decoration = {"xanadu:spooky_thornbush", "xanadu:spooky_baneberry"}})
--= Poppy's growing in Clearing Biome in memory of RealBadAngel
register_decoration(1, {
place_on = {"default:dirt_with_grass"},
sidelen = 16, fill_ratio = 0.004,
biomes = {"grassland"},
decoration = {"xanadu:poppy"}})
end

377
mods/ethereal/dirt.lua Normal file
View file

@ -0,0 +1,377 @@
local S = minetest.get_translator("ethereal")
local math_random = math.random
-- override default dirt (to stop caves cutting away dirt)
minetest.override_item("default:dirt", {is_ground_content = ethereal.cavedirt})
-- replace old green_dirt with default grass
minetest.register_alias("ethereal:green_dirt", "default:dirt_with_grass")
-- dry dirt
minetest.register_node("ethereal:dry_dirt", {
description = S("Dried Dirt"),
tiles = {"ethereal_dry_dirt.png"},
is_ground_content = ethereal.cavedirt,
groups = {crumbly = 3},
sounds = default.node_sound_dirt_defaults()
})
minetest.register_craft({
type = "cooking",
output = "ethereal:dry_dirt",
recipe = "default:dirt",
cooktime = 3
})
-- ethereal dirt types
local dirts = {
"Bamboo", "Jungle", "Grove", "Prairie", "Cold", "Crystal", "Mushroom", "Fiery", "Gray"
}
-- loop through and register dirts
for n = 1, #dirts do
local desc = dirts[n]
local name = desc:lower()
minetest.register_node("ethereal:" .. name .. "_dirt", {
description = S(desc .. " Dirt"),
tiles = {
"ethereal_grass_" .. name .. "_top.png", "default_dirt.png",
{
name = "default_dirt.png^ethereal_grass_" .. name .. "_side.png",
tileable_vertical = false
}
},
is_ground_content = ethereal.cavedirt,
groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1},
soil = {
base = "ethereal:" .. name .. "_dirt",
dry = "farming:soil",
wet = "farming:soil_wet"
},
drop = "default:dirt",
sounds = default.node_sound_dirt_defaults({
footstep = {name = "default_grass_footstep", gain = 0.25}
})
})
end
-- flower spread, also crystal and fire flower regeneration
local function flower_spread(pos, node)
if (minetest.get_node_light(pos) or 0) < 13 then return end
local pos0 = {x = pos.x - 4, y = pos.y - 2, z = pos.z - 4}
local pos1 = {x = pos.x + 4, y = pos.y + 2, z = pos.z + 4}
local num = #minetest.find_nodes_in_area(pos0, pos1, "group:flora")
-- stop flowers spreading too much just below top of map block
if minetest.find_node_near(pos, 2, "ignore") then return end
if num > 3 and node.name == "ethereal:crystalgrass" then
local grass = minetest.find_nodes_in_area_under_air(
pos0, pos1, {"ethereal:crystalgrass"})
if #grass > 4
and not minetest.find_node_near(pos, 4, {"ethereal:crystal_spike"}) then
pos = grass[math_random(#grass)]
pos.y = pos.y - 1
if minetest.get_node(pos).name == "ethereal:crystal_dirt" then
pos.y = pos.y + 1
minetest.swap_node(pos, {name = "ethereal:crystal_spike"})
end
end
return
elseif num > 3 and node.name == "ethereal:dry_shrub" then
local grass = minetest.find_nodes_in_area_under_air(
pos0, pos1, {"ethereal:dry_shrub"})
if #grass > 8
and not minetest.find_node_near(pos, 4, {"ethereal:fire_flower"}) then
pos = grass[math_random(#grass)]
pos.y = pos.y - 1
if minetest.get_node(pos).name == "ethereal:fiery_dirt" then
pos.y = pos.y + 1
minetest.swap_node(pos, {name = "ethereal:fire_flower"})
end
end
return
elseif num > 3 then
return
end
pos.y = pos.y - 1
local under = minetest.get_node(pos)
-- make sure we have soil underneath
if minetest.get_item_group(under.name, "soil") == 0
or under.name == "default:desert_sand" then
return
end
local seedling = minetest.find_nodes_in_area_under_air(pos0, pos1, {under.name})
if #seedling > 0 then
pos = seedling[math_random(#seedling)]
pos.y = pos.y + 1
if (minetest.get_node_light(pos) or 0) < 13 then return end
minetest.swap_node(pos, {name = node.name})
end
end
-- grow papyrus up to 4 high and bamboo up to 8 high
local function grow_papyrus(pos, node)
local oripos = pos.y
local high = 4
pos.y = pos.y - 1
local nod = minetest.get_node_or_nil(pos)
if not nod
or minetest.get_item_group(nod.name, "soil") < 1
or minetest.find_node_near(pos, 3, {"group:water"}) == nil then return end
if node.name == "ethereal:bamboo" then high = 8 end
pos.y = pos.y + 1
local height = 0
while height < high and minetest.get_node(pos).name == node.name do
height = height + 1
pos.y = pos.y + 1
end
nod = minetest.get_node_or_nil(pos)
if nod and nod.name == "air" and height < high then
if node.name == "ethereal:bamboo" and height == (high - 1) then
ethereal.grow_bamboo_tree({x = pos.x, y = oripos, z = pos.z})
else
minetest.swap_node(pos, {name = node.name})
end
end
end
-- override abm function
local function override_abm(name, redef)
if not name or not redef then return end
for _, ab in pairs(minetest.registered_abms) do
if name == ab.label then
for k, v in pairs(redef) do
ab[k] = v
end
return ab
end
end
end
override_abm("Flower spread", {
--interval = 1, chance = 1, -- testing only
chance = 96, -- moved back to original chance from 300
nodenames = {"group:flora"},
neighbors = {"group:soil"},
action = flower_spread
})
override_abm("Grow papyrus", {
--interval = 2, chance = 1, -- testing only
nodenames = {"default:papyrus", "ethereal:bamboo"},
neighbors = {"group:soil"},
action = grow_papyrus
})
override_abm("Mushroom spread", {
--interval = 1, chance = 1, -- testing only
chance = 50, -- moved back to original chance from 150
nodenames = {"group:mushroom"}
})
-- Add Red, Orange and Grey baked clay if mod isn't active
if not minetest.get_modpath("bakedclay") then
minetest.register_node(":bakedclay:red", {
description = S("Red Baked Clay"),
tiles = {"baked_clay_red.png"},
groups = {cracky = 3, bakedclay = 1},
is_ground_content = ethereal.cavedirt,
sounds = default.node_sound_stone_defaults()
})
minetest.register_node(":bakedclay:orange", {
description = S("Orange Baked Clay"),
tiles = {"baked_clay_orange.png"},
groups = {cracky = 3, bakedclay = 1},
is_ground_content = ethereal.cavedirt,
sounds = default.node_sound_stone_defaults()
})
minetest.register_node(":bakedclay:grey", {
description = S("Grey Baked Clay"),
tiles = {"baked_clay_grey.png"},
groups = {cracky = 3, bakedclay = 1},
is_ground_content = ethereal.cavedirt,
sounds = default.node_sound_stone_defaults()
})
minetest.register_node(":bakedclay:brown", {
description = S("Brown Baked Clay"),
tiles = {"baked_clay_brown.png"},
groups = {cracky = 3, bakedclay = 1},
is_ground_content = ethereal.cavedirt,
sounds = default.node_sound_stone_defaults()
})
end
-- Quicksand (new style, sinking inside shows yellow effect
minetest.register_node("ethereal:quicksand2", {
description = S("Quicksand"),
tiles = {"default_sand.png^[colorize:#00004F10"},
drawtype = "glasslike",
paramtype = "light",
drop = "default:sand",
liquid_viscosity = 15,
liquidtype = "source",
liquid_alternative_flowing = "ethereal:quicksand2",
liquid_alternative_source = "ethereal:quicksand2",
liquid_renewable = false,
liquid_range = 0,
drowning = 1,
walkable = false,
climbable = false,
post_effect_color = {r = 230, g = 210, b = 160, a = 245},
groups = {crumbly = 3, sand = 1, liquid = 3, disable_jump = 1},
sounds = default.node_sound_sand_defaults()
})
-- alias old quicksand to new
minetest.register_alias("ethereal:quicksand", "ethereal:quicksand2")
-- craft quicksand
minetest.register_craft({
output = "ethereal:quicksand2",
recipe = {
{"group:sand", "group:sand", "group:sand"},
{"group:sand", "bucket:bucket_water", "group:sand"},
{"group:sand", "group:sand", "group:sand"}
},
replacements = {{"bucket:bucket_water", "bucket:bucket_empty"}}
})
-- slime mold
minetest.register_node("ethereal:slime_mold", {
description = S("Slime Mold"),
drawtype = "raillike",
paramtype = "light",
tiles = {"ethereal_slime_mold.png"},
inventory_image = "ethereal_slime_mold.png",
wield_image = "ethereal_slime_mold.png",
use_texture_alpha = "clip",
walkable = false,
buildable_to = true,
floodable = true,
drop = {},
groups = {crumbly = 3, attached_node = 1},
sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "fixed", fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
}
})
-- how slime molds spread
minetest.register_abm({
label = "Slime mold spread",
nodenames = {"ethereal:slime_mold"},
neighbors = {"ethereal:spore_grass", "ethereal:fire_flower"},
interval = 15,
chance = 4,
catch_up = false,
action = function(pos, node)
if minetest.find_node_near(pos, 1, {"ethereal:fire_flower"}) then
minetest.sound_play("fire_extinguish_flame",
{pos = pos, gain = 0.05, max_hear_distance = 3}, true)
minetest.remove_node(pos) ; return
end
local near = minetest.find_node_near(pos, 1, {"ethereal:spore_grass"})
if near then
minetest.sound_play("default_gravel_dug",
{pos = near, gain = 0.3, max_hear_distance = 3}, true)
minetest.set_node(near, {name = "ethereal:slime_mold"})
end
end
})
-- slime block
minetest.register_node("ethereal:slime_block", {
description = S("Slime Block"),
tiles = {"ethereal_slime_block.png"},
inventory_image = minetest.inventorycube("ethereal_slime_block.png"),
groups = {crumbly = 3, bouncy = 100, fall_damage_add_percent = -100, disable_jump = 1},
sounds = default.node_sound_leaves_defaults()
})
minetest.register_craft({
output = "ethereal:slime_block",
recipe = {
{"ethereal:slime_mold", "ethereal:slime_mold", "ethereal:slime_mold"},
{"ethereal:slime_mold", "ethereal:fire_dust", "ethereal:slime_mold"},
{"ethereal:slime_mold", "ethereal:slime_mold", "ethereal:slime_mold"}
}
})

477
mods/ethereal/extra.lua Normal file
View file

@ -0,0 +1,477 @@
local S = minetest.get_translator("ethereal")
-- Blue Marble Nodes and recipe
minetest.register_node("ethereal:blue_marble", {
description = S("Blue Marble"),
tiles = {"ethereal_blue_marble.png"},
groups = {cracky = 1, stone = 1},
sounds = default.node_sound_stone_defaults()
})
minetest.register_node("ethereal:blue_marble_tile", {
description = S("Blue Marble Tile"),
tiles = {"ethereal_blue_marble_tile.png"},
groups = {cracky = 1, stone = 1},
sounds = default.node_sound_stone_defaults()
})
minetest.register_craft({
output = "ethereal:blue_marble_tile 9",
recipe = {
{"ethereal:blue_marble", "ethereal:blue_marble", "ethereal:blue_marble"},
{"ethereal:blue_marble", "ethereal:blue_marble", "ethereal:blue_marble"},
{"ethereal:blue_marble", "ethereal:blue_marble", "ethereal:blue_marble"}
}
})
-- Etherium Dust
minetest.register_craftitem("ethereal:etherium_dust", {
description = S("Etherium Dust"),
inventory_image = "ethereal_etherium_dust.png",
wield_image = "ethereal_etherium_dust.png"
})
-- Ethereium Ore
minetest.register_node("ethereal:etherium_ore", {
description = S("Etherium Ore"),
tiles = {"default_desert_stone.png^ethereal_etherium_ore.png"},
groups = {cracky = 3},
drop = "ethereal:etherium_dust",
sounds = default.node_sound_stone_defaults()
})
minetest.register_node("ethereal:stone_with_etherium_ore", {
description = S("Etherium Ore"),
tiles = {"default_stone.png^ethereal_etherium_ore.png"},
groups = {cracky = 3},
drop = "ethereal:etherium_dust",
sounds = default.node_sound_stone_defaults()
})
-- Bamboo Flooring
--[[minetest.register_node("ethereal:bamboo_floor", {
description = S("Bamboo Floor"),
drawtype = "nodebox",
tiles = {"ethereal_bamboo_floor.png"},
wield_image = "ethereal_bamboo_floor.png",
inventory_image = "ethereal_bamboo_floor.png",
paramtype = "light",
paramtype2 = "wallmounted",
walkable = true,
node_box = {
type = "wallmounted",
wall_top = {-0.5, 0.4375, -0.5, 0.5, 0.5, 0.5},
wall_bottom = {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
wall_side = {-0.5, -0.5, -0.5, -0.4375, 0.5, 0.5}
},
selection_box = {type = "wallmounted"},
groups = {snappy = 3, choppy = 3 , flammable = 2},
sounds = default.node_sound_wood_defaults()
})
minetest.register_craft({
output = "ethereal:bamboo_floor 2",
recipe = {
{"ethereal:bamboo", "ethereal:bamboo"},
{"ethereal:bamboo", "ethereal:bamboo"}
}
})]]
-- Bamboo Block
minetest.register_node("ethereal:bamboo_block", {
description = S("Bamboo Block"),
tiles = {"ethereal_bamboo_floor.png"},
paramtype = "light",
groups = {snappy = 3, choppy = 3 , flammable = 2, wood = 1},
sounds = default.node_sound_wood_defaults()
})
minetest.register_craft({
output = "ethereal:bamboo_block",
recipe = {
{"ethereal:bamboo_floor"},
{"ethereal:bamboo_floor"}
}
})
minetest.register_craft({
output = "ethereal:bamboo_block",
recipe = {
{"ethereal:bamboo", "ethereal:bamboo", "ethereal:bamboo"},
{"ethereal:bamboo", "ethereal:bamboo", "ethereal:bamboo"},
{"ethereal:bamboo", "ethereal:bamboo", "ethereal:bamboo"}
}
})
-- Paper recipes
minetest.register_craft({
output = "default:paper 6",
recipe = {
{"ethereal:bamboo", "ethereal:bamboo"},
{"ethereal:bamboo", "ethereal:bamboo"},
{"ethereal:bamboo", "ethereal:bamboo"}
}
})
minetest.register_craft({
output = "default:paper 2",
recipe = {
{"farming:cotton", "farming:cotton", "farming:cotton"}
}
})
-- 4x red mushrooms make mushroom block
minetest.register_craft({
output = "ethereal:mushroom",
recipe = {
{"flowers:mushroom_red", "flowers:mushroom_red"},
{"flowers:mushroom_red", "flowers:mushroom_red"}
}
})
minetest.register_craft({
output = "ethereal:mushroom_brown",
recipe = {
{"flowers:mushroom_brown", "flowers:mushroom_brown"},
{"flowers:mushroom_brown", "flowers:mushroom_brown"}
}
})
-- X pattern craft recipes (5x 'a' in X pattern gives 5 of 'b')
if ethereal.xcraft == true then
local cheat = {
{"default:cobble", "default:gravel", 5},
{"default:gravel", "default:dirt", 5},
{"default:dirt", "default:sand", 5},
{"default:ice", "default:snow", 20},
{"ethereal:dry_dirt", "default:desert_sand", 5},
{"default:stone", "default:silver_sandstone", 5}
}
for n = 1, #cheat do
minetest.register_craft({
output = cheat[n][2] .. " " .. cheat[n][3],
recipe = {
{cheat[n][1], "", cheat[n][1]},
{"", cheat[n][1], ""},
{cheat[n][1], "", cheat[n][1]}
}
})
end
end
-- Palm Wax
minetest.register_craftitem("ethereal:palm_wax", {
description = S("Palm Wax"),
inventory_image = "ethereal_palm_wax.png",
wield_image = "ethereal_palm_wax.png"
})
minetest.register_craft({
type = "cooking",
cooktime = 10,
output = "ethereal:palm_wax",
recipe = "ethereal:palmleaves"
})
-- candle helper function
local candle_colors = {
[""] = "F7F2CD",
["black"] = "40403F",
["blue"] = "5587B4",
["brown"] = "6D4728",
["cyan"] = "78F1B1",
["dark_green"] = "23AF23",
["dark_grey"] = "868178",
["green"] = "96CA32",
["grey"] = "C0BAAF",
["magenta"] = "C22E7D",
["orange"] = "E88817",
["pink"] = "FA8B91",
["red"] = "CF4727",
["violet"] = "975EC0",
["yellow"] = "FFF74D"
}
local function add_candle(col, dcol)
local under = "" ; if dcol ~= "" then under = "_" end
minetest.register_node("ethereal:candle" .. under .. col, {
description = S(dcol .. "Candle"),
drawtype = "plantlike",
inventory_image = "ethereal_candle_base_inv.png^[multiply:#"
.. candle_colors[col] .. "70^ethereal_candle_flame_inv.png",
wield_image = "ethereal_candle_base_inv.png^[multiply:#"
.. candle_colors[col] .. "70^ethereal_candle_flame_inv.png",
tiles = {
{
name = "ethereal_candle_base.png^[multiply:#"
.. candle_colors[col] .. "70^ethereal_candle_flame.png",
animation = {
type="vertical_frames", aspect_w = 32, aspect_h = 32, length = 1.0
}
}
},
paramtype = "light",
light_source = 11,
sunlight_propagates = true,
walkable = false,
groups = {candle = 1, candle_ethereal = 1, dig_immediate = 3, attached_node = 1},
sounds = default.node_sound_defaults(),
selection_box = {
type = "fixed", fixed = { -0.15, -0.5, -0.15, 0.15, 0, 0.15 }
}
})
if dcol ~= "" then
minetest.register_craft({
output = "ethereal:candle" .. under .. col,
recipe = { {"group:candle_ethereal", "dye:" .. col} }
})
end
end
add_candle("", "")
add_candle("black", "Black ")
add_candle("blue", "Blue ")
add_candle("brown", "Brown ")
add_candle("cyan", "Cyan ")
add_candle("dark_green", "Dark Green ")
add_candle("dark_grey", "Dark Grey ")
add_candle("green", "Green ")
add_candle("grey", "Grey ")
add_candle("magenta", "Magenta ")
add_candle("orange", "Orange ")
add_candle("pink", "Pink ")
add_candle("red", "Red ")
add_candle("violet", "Violet ")
add_candle("yellow", "Yellow ")
-- white candle recipe
minetest.register_craft({
output = "ethereal:candle",
recipe = {
{"group:candle_ethereal", "dye:white"}
}
})
-- base candle recipe
minetest.register_craft({
output = "ethereal:candle 2",
recipe = {
{"farming:string"},
{"ethereal:palm_wax"},
{"ethereal:palm_wax"}
}
})
-- wooden bowl, dont add bowl if farming redo already has one
if not minetest.registered_items["farming:bowl"] then
minetest.register_craftitem("ethereal:bowl", {
description = S("Bowl"),
inventory_image = "ethereal_bowl.png",
groups = {food_bowl = 1, flammable = 2}
})
minetest.register_craft({
output = "ethereal:bowl 4",
recipe = {
{"group:wood", "", "group:wood"},
{"", "group:wood", ""}
}
})
else
minetest.register_alias("ethereal:bowl", "farming:bowl")
end
-- stone Ladder
minetest.register_node("ethereal:stone_ladder", {
description = S("Stone Ladder"),
drawtype = "signlike",
tiles = {"ethereal_stone_ladder.png"},
inventory_image = "ethereal_stone_ladder.png",
wield_image = "ethereal_stone_ladder.png",
paramtype = "light",
sunlight_propagates = true,
paramtype2 = "wallmounted",
walkable = false,
climbable = true,
is_ground_content = false,
selection_box = {type = "wallmounted"},
groups = {cracky = 3, oddly_breakable_by_hand = 1},
legacy_wallmounted = true,
sounds = default.node_sound_stone_defaults()
})
minetest.register_craft({
output = "ethereal:stone_ladder 4",
recipe = {
{"group:stone", "", "group:stone"},
{"group:stone", "group:stone", "group:stone"},
{"group:stone", "", "group:stone"}
}
})
-- Paper Wall
minetest.register_node("ethereal:paper_wall", {
drawtype = "nodebox",
description = S("Paper Wall"),
tiles = {"ethereal_paper_wall.png"},
inventory_image = "ethereal_paper_wall.png",
wield_image = "ethereal_paper_wall.png",
paramtype = "light",
groups = {snappy = 3},
sounds = default.node_sound_wood_defaults(),
walkable = true,
is_ground_content = false,
sunlight_propagates = true,
paramtype2 = "facedir",
selection_box = {
type = "fixed", fixed = {-0.5, -0.5, 5/11, 0.5, 0.5, 8/16}
},
node_box = {
type = "fixed", fixed = {{-0.5, -0.5, 5/11, 0.5, 0.5, 8/16}}
}
})
minetest.register_craft({
output = "ethereal:paper_wall",
recipe = {
{"group:stick", "default:paper", "group:stick"},
{"group:stick", "default:paper", "group:stick"},
{"group:stick", "default:paper", "group:stick"}
}
})
-- Glostone (A little bit of light decoration)
minetest.register_node("ethereal:glostone", {
description = S("Glo Stone"),
tiles = {"ethereal_glostone.png"},
groups = {cracky = 3},
light_source = 13,
drop = "ethereal:glostone",
sounds = default.node_sound_stone_defaults()
})
minetest.register_craft({
output = "ethereal:glostone",
recipe = {
{"", "default:torch", ""},
{"default:torch", "default:stone", "default:torch"},
{"", "dye:yellow", ""}
}
})
-- Charcoal Lump
minetest.register_craftitem("ethereal:charcoal_lump", {
description = S("Lump of Charcoal"),
inventory_image = "ethereal_charcoal_lump.png"
})
minetest.register_craft({
output = "ethereal:charcoal_lump 2",
recipe = {
{"ethereal:scorched_tree"}
}
})
minetest.register_craft({
output = "ethereal:charcoal_lump 2",
type = "cooking",
recipe = "group:tree",
cooktime = 4
})
minetest.register_craft({
type = "fuel",
recipe = "ethereal:charcoal_lump",
burntime = 10
})
-- Make Torch from Charcoal Lump
minetest.register_craft({
output = "default:torch 4",
recipe = {
{"ethereal:charcoal_lump"},
{"default:stick"}
}
})
-- staff of light alternative node list
ethereal.lightstaff_recipes = {
["nether:rack"] = "nether:glowstone",
["nether:rack_deep"] = "nether:glowstone_deep"
}
-- Staff of Light (by Xanthin)
minetest.register_tool("ethereal:light_staff", {
description = S("Staff of Light"),
inventory_image = "ethereal_light_staff.png",
light_source = 13,
wield_image = "ethereal_light_staff.png",
sound = {breaks = "default_tool_breaks"},
stack_max = 1,
on_use = function(itemstack, user, pointed_thing)
if pointed_thing.type ~= "node" then return end
local pos = pointed_thing.under
local pname = user:get_player_name()
if minetest.is_protected(pos, pname) then
minetest.record_protection_violation(pos, pname)
return
end
local node = minetest.get_node(pos).name
local def = minetest.registered_nodes[node]
local stone = def and def.groups and def.groups.stone and def.groups.stone == 1
if ethereal.lightstaff_recipes[node] or stone then
local glo = ethereal.lightstaff_recipes[node] or "ethereal:glostone"
minetest.set_node(pos, {name = glo})
itemstack:add_wear(65535 / 149) -- 150 uses
return itemstack
end
end
})
minetest.register_craft({
output = "ethereal:light_staff",
recipe = {
{"ethereal:illumishroom", "default:mese_crystal", "ethereal:illumishroom"},
{"ethereal:illumishroom2", "default:steel_ingot", "ethereal:illumishroom2"},
{"ethereal:illumishroom3", "default:steel_ingot", "ethereal:illumishroom3"}
}
})

104
mods/ethereal/fences.lua Normal file
View file

@ -0,0 +1,104 @@
-- translation and mod check
local S = minetest.get_translator("ethereal")
local door_mod = minetest.get_modpath("doors")
-- fence registration helper (fence, rail, gate, mese post)
local function add_fence(name, node, desc, texture)
if default.register_fence then
default.register_fence("ethereal:fence_" .. name, {
description = S(desc .. " Fence"),
texture = texture .. ".png",
material = "ethereal:" .. node,
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
sounds = default.node_sound_wood_defaults(),
check_for_pole = true
})
end
if default.register_fence_rail then
default.register_fence_rail("ethereal:fence_rail_" .. name, {
description = S(desc .. " Fence Rail"),
texture = texture .. ".png",
material = "ethereal:" .. node,
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
sounds = default.node_sound_wood_defaults()
})
end
if door_mod and doors.register_fencegate then
doors.register_fencegate("ethereal:fencegate_" .. name, {
description = S(desc .. " Fence Gate"),
texture = texture .. ".png",
material = "ethereal:" .. node,
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}
})
end
if default.register_mesepost then
default.register_mesepost("ethereal:mese_post_" .. name, {
description = S(desc .. " Mese Post Light"),
texture = texture .. ".png",
material = "ethereal:" .. node
})
end
end
-- add wooden fences, gates and mese posts
add_fence("scorched", "scorched_tree", "Scorched", "ethereal_scorched_tree")
add_fence("frostwood", "frost_wood", "Frost", "ethereal_frost_wood")
add_fence("redwood", "redwood_wood", "Redwood", "ethereal_redwood_wood")
add_fence("willow", "willow_wood", "Willow", "ethereal_willow_wood")
add_fence("yellowwood", "yellow_wood", "Healing Wood", "ethereal_yellow_wood")
add_fence("palm", "palm_wood", "Palm", "moretrees_palm_wood")
add_fence("banana", "banana_wood", "Banana Wood", "ethereal_banana_wood")
add_fence("mushroom", "mushroom_trunk", "Mushroom", "ethereal_mushroom_trunk")
add_fence("birch", "birch_wood", "Birch", "moretrees_birch_wood")
add_fence("sakura", "sakura_wood", "Sakura", "ethereal_sakura_wood")
add_fence("olive", "olive_wood", "Olive", "ethereal_olive_wood")
add_fence("basandra", "basandra_wood", "Basandra", "ethereal_basandra_bush_wood")
-- add compatibility for previous ethereal gates
minetest.register_alias("ethereal:fencegate_wood_open", "doors:gate_wood_open")
minetest.register_alias("ethereal:fencegate_wood_closed", "doors:gate_wood_closed")
minetest.register_alias("ethereal:fencegate_acacia_open", "doors:gate_acacia_wood_open")
minetest.register_alias("ethereal:fencegate_acacia_closed", "doors:gate_acacia_wood_closed")
minetest.register_alias("ethereal:fencegate_junglewood_open", "doors:gate_junglewood_open")
minetest.register_alias("ethereal:fencegate_junglewood_closed", "doors:gate_junglewood_closed")
minetest.register_alias("ethereal:fencegate_pine_open", "doors:gate_pine_wood_open")
minetest.register_alias("ethereal:fencegate_pine_closed", "doors:gate_pine_wood_closed")
-- sakura door
if door_mod then
doors.register("ethereal:door_sakura", {
tiles = {
{name = "ethereal_sakura_door.png", backface_culling = true}
},
description = S("Sakura Wood Door"),
inventory_image = "ethereal_sakura_door_inv.png",
groups = {snappy = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
sound_open = "doors_glass_door_open",
sound_close = "doors_glass_door_close",
recipe = {
{"group:stick", "default:paper"},
{"default:paper", "group:stick"},
{"ethereal:sakura_wood", "ethereal:sakura_wood"}
}
})
minetest.register_alias("ethereal:sakura_door", "ethereal:door_sakura")
minetest.register_alias("ethereal:sakura_door_a", "ethereal:door_sakura_a")
minetest.register_alias("ethereal:sakura_door_b", "ethereal:door_sakura_b")
end

598
mods/ethereal/fishing.lua Normal file
View file

@ -0,0 +1,598 @@
--[[
This fishing routine is inspired by the great work Rootyjr did for MineClone2
]]--
-- fish and where they can be caught
local fish_items = {
"ethereal:fish_bluefin",
"ethereal:fish_blueram",
"ethereal:fish_catfish",
"ethereal:fish_plaice",
"ethereal:fish_salmon",
{"ethereal:fish_clownfish", "savanna"},
{"ethereal:fish_pike", "grassland_ocean"},
{"ethereal:fish_flathead", "rainforest"},
{"ethereal:fish_pufferfish", "desert_ocean"},
{"ethereal:fish_cichlid", "rainforest_ocean"},
{"ethereal:fish_coy", "bamboo"},
{"ethereal:fish_tilapia", "bamboo"},
{"ethereal:fish_trevally", "bamboo"},
{"ethereal:fish_angler", "ocean"},
{"ethereal:fish_jellyfish", "ocean"},
{"ethereal:fish_seahorse", "ocean"},
{"ethereal:fish_seahorse_green", "rainforest_ocean"},
{"ethereal:fish_seahorse_pink", "mushroom_ocean"},
{"ethereal:fish_seahorse_blue", "coniferous_forest_ocean"},
{"ethereal:fish_seahorse_yellow", "desert_ocean"},
{"ethereal:fish_parrot", "desert"},
{"ethereal:fish_piranha", "rainforest"},
{"ethereal:fish_tuna", "rainforest"},
{"ethereal:fish_trout", "ocean"},
{"ethereal:fish_cod", "ocean"},
{"ethereal:fish_flounder", "ocean"},
{"ethereal:fish_redsnapper", "ocean"},
{"ethereal:fish_squid", "ocean"},
{"ethereal:fish_shrimp", "ocean"},
{"ethereal:fish_carp", "swamp"},
{"ethereal:fish_tetra", "grayness_ocean"},
{"ethereal:fish_mackerel", "glacier"}
}
-- grassland_ocean, desert_ocean, bamboo_ocean, mesa_ocean, coniferous_forest_ocean,
-- taiga_ocean, frost_ocean, deciduous_forest_ocean, grayness_ocean, grassytwo_ocean,
-- prairie_ocean, jumble_ocean, rainforest_ocean, grove_ocean, mushroom_ocean,
-- sandstone_desert_ocean, plains_ocean, savanna_ocean, fiery_ocean, swamp_ocean,
-- glacier_ocean, tundra_ocean
-- translation and mod checks
local S = minetest.get_translator("ethereal")
local mod_bonemeal = minetest.get_modpath("bonemeal")
local mod_armor = minetest.get_modpath("3d_armor")
local mod_mobs = minetest.get_modpath("mobs")
-- junk items to be found
local junk_items = {
"ethereal:bowl",
"default:stick",
"farming:string",
"default:papyrus",
"dye:black",
"flowers:waterlily",
"default:paper",
"flowers:mushroom_red",
"vessels:glass_bottle",
{"ethereal:bamboo", "bamboo"},
mod_bonemeal and "bonemeal:bone" or "default:stick",
mod_armor and "3d_armor:boots_wood 6000" or "default:stick"
}
-- bonus items to be found
local bonus_items = {
mod_mobs and "mobs:nametag" or "fireflies:bug_net",
mod_mobs and "mobs:net" or "default:sapling",
"fireflies:firefly_bottle",
mod_mobs and "mobs:saddle" or "farming:cotton_wild",
"default:book",
{"ethereal:firethorn", "glacier"},
{"ethereal:crystal_spike", "frost"},
{"ethereal:banana_bunch", "grove"},
"tnt:tnt_stick",
"bucket:bucket_empty",
"default:sword_steel 12000",
"ethereal:fishing_rod 9000"
}
-- helpers
local default_item = "default:dirt"
local random = math.random -- yup we use this a lot
-- global add item function
ethereal.add_item = function(fish, junk, bonus)
if fish and fish ~= "" then table.insert(fish_items, fish) end
if junk and junk ~= "" then table.insert(junk_items, junk) end
if bonus and bonus ~= "" then table.insert(bonus_items, bonus) end
end
-- bubble particle effect
local function effect(pos)
minetest.add_particle({
pos = {
x = pos.x + random() - 0.5,
y = pos.y + 0.1,
z = pos.z + random() - 0.5
},
velocity = {x = 0, y = 4, z = 0},
acceleration = {x = 0, y = -5, z = 0},
expirationtime = random() * 0.5,
size = random(),
collisiondetection = false,
vertical = false,
texture = "bubble.png"
})
end
-- fishing bob entity
minetest.register_entity("ethereal:bob_entity", {
initial_properties = {
textures = {"ethereal_fishing_bob.png"},
visual_size = {x = 0.5, y = 0.5},
collisionbox = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1},
physical = false,
pointable = false,
static_save = false
},
timer = 0,
on_step = function(self, dtime)
local pos = self.object:get_pos()
local node = minetest.get_node(pos)
local def = minetest.registered_nodes[node.name]
-- casting rod into water
if not self.cast then
-- remove if we hit something hard
if (def and def.walkable) or node.name == "ignore" then
self.object:remove() ; --print("-- hit block")
return
end
-- while bob is in water
if def and def.liquidtype == "source"
and minetest.get_item_group(node.name, "water") > 0 then
-- incase of lag find water level
local free_fall, blocker = minetest.line_of_sight(
{x = pos.x, y = pos.y + 2, z = pos.z},
{x = pos.x, y = pos.y , z = pos.z})
-- do we have worms for bait, if so take one
local player = self.fisher and minetest.get_player_by_name(self.fisher)
local inv = player and player:get_inventory()
local bait = 0
if inv and inv:contains_item("main", "caverealms:glow_bait") then
inv:remove_item("main", "caverealms:glow_bait")
bait = 40
elseif inv and inv:contains_item("main", "ethereal:worm") then
inv:remove_item("main", "ethereal:worm")
bait = 20
end
-- re-position fishing bob and set to cast
pos = {x = pos.x, y = blocker.y + 0.45, z = pos.z}
self.object:set_acceleration({x = 0, y = 0, z = 0})
self.object:set_velocity({x = 0, y = 0, z = 0})
self.object:set_pos(pos)
self.bait = bait
self.cast = true
-- splash
effect(pos) ; effect(pos) ; effect(pos) ; effect(pos)
minetest.sound_play("default_water_footstep",
{pos = pos, gain = 0.1}, true)
end
else -- already cast and waiting for fish
-- we need a name
if self.fisher == nil or self.fisher == "" then
self.object:remove() ; --print("-- no name")
return
end
local player = minetest.get_player_by_name(self.fisher)
-- we need an actual person
if not player then
self.object:remove() ; --print("-- no player")
return
end
local wield = player:get_wielded_item()
-- we also need a rod to fish with
if not wield or wield:get_name() ~= "ethereal:fishing_rod" then
self.object:remove() ; --print("-- no rod")
return
end
-- remove bob if player is too far away
local pla_pos = player:get_pos()
if (pla_pos.y - pos.y) > 15 or (pla_pos.y - pos.y) < -15
or (pla_pos.x - pos.x) > 15 or (pla_pos.x - pos.x) < -15
or (pla_pos.z - pos.z) > 15 or (pla_pos.z - pos.z) < -15 then
self.object:remove() ; --print("-- out of range")
return
end
-- when in water, bob.
if def and def.liquidtype == "source"
and minetest.get_item_group(def.name, "water") ~= 0 then
self.old_y = self.old_y or pos.y
-- choose random time to wait (minus bait time for worm)
if not self.patience or self.patience <= 0 then
self.patience = random(10, (45 - self.bait))
self.bait = 0
end
-- add particles if bobber bobbing
if self.bob then
effect(pos)
-- handle timer
if self.timer < self.patience then
self.timer = self.timer + dtime
else
self.patience = 0
self.timer = 0
self.bob = false
end
else
-- handle timer
if self.timer < self.patience then
self.timer = self.timer + dtime
else
-- waiting over, bob that bobber and play splash sound
self.bob = true
self.patience = 1.4 -- timeframe to catch fish after bob
self.timer = 0
self.object:set_velocity({x = 0, y = -1, z = 0})
self.object:set_acceleration({x = 0, y = 3, z = 0})
minetest.sound_play("default_water_footstep", {
pos = pos, gain = 0.1}, true)
end
end
else
-- reset to original position after dive.
if self.old_y and pos.y > self.old_y then
self.object:set_velocity({x = 0, y = 0, z = 0})
self.object:set_acceleration({x = 0, y = 0, z = 0})
self.object:set_pos({x = pos.x, y = self.old_y, z = pos.z})
--print("-- reset bob y pos")
end
-- remove if not in water and not bobbing
if not self.bob then
self.object:remove() ; --print("-- not in water")
end
end
end -- if not self.cast
end -- on_step
})
-- narrow item list depending on biome
local find_item = function(list, pos)
local item
local items = {}
local data= minetest.get_biome_data(pos)
local biome = data and minetest.get_biome_name(data.biome) or ""
--print("--biome", biome)
for n = 1, #list do
item = list[n]
if type(item) == "string" then
table.insert(items, item)
elseif type(item) == "table" then
if item[2] == "" or biome:find(item[2]) then
table.insert(items, item[1])
end
end
end
--print("==biome: " .. biome, dump(items))
if #items > 0 then return items[random(#items)] end
return ""
end
-- fishing rod function that throws pre bob, places bob and catches fish when it moves
local use_rod = function(itemstack, player, pointed_thing)
local pos = player:get_pos()
local objs = minetest.get_objects_inside_radius(pos, 15)
local found = true
local ent
-- loop through entities and look for bobs
for n = 1, #objs do
ent = objs[n]:get_luaentity()
if ent and ent.fisher and ent.name == "ethereal:bob_entity"
and player:get_player_name() == ent.fisher then
found = false
if ent.bob == true then
local item
local r = random(100)
local rodpos = ent.object:get_pos() or pos
-- lower position to be in water
rodpos.y = rodpos.y - 1
-- chance between catching fish, bonuns item or junk
if r < 86 then
item = find_item(fish_items, rodpos)
elseif r > 85 and r < 96 then
item = find_item(junk_items, rodpos)
else
item = find_item(bonus_items, rodpos)
end
-- split into name and number (wear level or number of items)
local item_name = item:split(" ")[1]
local item_wear = item:split(" ")[2]
-- make sure item exists, if not replace with default item
if not minetest.registered_items[item_name] then
item = default_item
end
--print ("---caught", item, r)
item = ItemStack(item) -- convert into itemstack
-- if tool then add wear
if item_wear and minetest.registered_tools[item_name] then
item:set_wear(65535 - item_wear)
end
local inv = player:get_inventory()
if inv:room_for_item("main", item) then
inv:add_item("main", item)
else
minetest.add_item(pos, item)
end
end
ent.object:remove()
return itemstack
end
end
-- loop through entities and look for bobs
for n = 1, #objs do
ent = objs[n]:get_luaentity()
if ent and ent.fisher and ent.name == "ethereal:bob_entity"
and player:get_player_name() == ent.fisher then
found = false
break
end
end
if found == true then
local playerpos = player:get_pos()
local dir = player:get_look_dir()
local pos = {x = playerpos.x, y = playerpos.y + 1.5, z = playerpos.z}
minetest.sound_play("ethereal_casting_rod",
{pos = pos, gain = 1.0, max_hear_distance = 10}, true)
-- place actual bob
local obj = minetest.add_entity(pos, "ethereal:bob_entity")
obj:set_velocity({x = dir.x * 8, y = dir.y * 8, z = dir.z * 8})
obj:set_acceleration({x = dir.x * -3, y = -9.8, z = dir.z * -3})
obj:get_luaentity().fisher = player and player:get_player_name()
end
-- Add wear to fishing rod (65 uses)
itemstack:add_wear(65535 / 65)
return itemstack
end
-- scan area for bobs that belong to player and remove
local remove_bob = function(player)
local objs = minetest.get_objects_inside_radius(player:get_pos(), 15)
local name = player:get_player_name()
local ent
for n = 1, #objs do
ent = objs[n]:get_luaentity()
if ent and ent.name == "ethereal:bob_entity" then
-- only remove players own bob
if ent.fisher and ent.fisher == name then
ent.object:remove()
end
end
end
end
-- remove bob if player signs off
minetest.register_on_leaveplayer(function(player)
remove_bob(player)
end)
-- remove bob if player dies
minetest.register_on_dieplayer(function(player)
remove_bob(player)
end)
-- fishing rod
minetest.register_tool("ethereal:fishing_rod", {
description = S("Fishing Rod (USE to cast and again when the time is right)"),
groups = {tool = 1},
inventory_image = "ethereal_fishing_rod.png",
wield_image = "ethereal_fishing_rod.png^[transformFX",
wield_scale = {x = 1.5, y = 1.5, z = 1},
stack_max = 1,
on_use = use_rod,
sound = {breaks = "default_tool_breaks"}
})
minetest.register_craft({
output = "ethereal:fishing_rod",
recipe = {
{"","","group:stick"},
{"","group:stick","farming:string"},
{"group:stick","","farming:string"}
}
})
minetest.register_craft({
type = "fuel",
recipe = "ethereal:fishing_rod",
burntime = 15
})
-- table of fish and edibility
local fish = {
{"Blue Fin", "bluefin", 2},
{"Blue Ram Cichlid", "blueram", 2},
{"Common Carp", "carp", 2},
{"Cod", "cod", 2},
{"Redtail Catfish", "catfish", 2},
{"Clownfish", "clownfish", 2},
{"Northern Pike", "pike", 2},
{"Dusky Flathead", "flathead", 2},
{"Plaice", "plaice", 2},
{"Tiger Pufferfish", "pufferfish", -16},
{"Coy", "coy", 2},
{"European Flounder", "flounder", 2},
{"Atlantic Salmon", "salmon", 2},
{"Iceblue Zebra Cichlid", "cichlid", 2},
{"Angler", "angler", 2},
{"Moon Jellyfish", "jellyfish", 0},
{"Pacific Mackerel", "mackerel", 2},
{"Piranha", "piranha", 2},
{"Rainbow Trout", "trout", 2},
{"Red Snapper", "redsnapper", 2},
{"Red Seahorse", "seahorse", 0},
{"Green Seahorse", "seahorse_green", 0},
{"Pink Seahorse", "seahorse_pink", 0},
{"Blue Seahorse", "seahorse_blue", 0},
{"Yellow Seahorse", "seahorse_yellow", 0},
{"Yellowfin Tuna", "tuna", 2},
{"Humboldt Squid", "squid", 0},
{"White Shrimp", "shrimp", 0},
{"Neon Tetra", "tetra", 1},
{"Tilapia", "tilapia", 2},
{"Golden Trevally", "trevally", 2},
{"Stoplight Parrotfish", "parrot", 2}
}
-- register above fish
for n = 1, #fish do
local usage
local groups = nil
if fish[n][3] ~= 0 then
usage = minetest.item_eat(fish[n][3])
groups = {food_fish_raw = 1, ethereal_fish = 1}
end
minetest.register_craftitem("ethereal:fish_" .. fish[n][2], {
description = S(fish[n][1]),
inventory_image = "ethereal_fish_" .. fish[n][2] .. ".png",
on_use = usage,
groups = groups
})
if groups then
ethereal.add_eatable("ethereal:fish_" .. fish[n][2], fish[n][3])
end
end
-- Make Neon Tetra glow slightly
minetest.override_item("ethereal:fish_tetra", {light_source = 3})
-- Pufferfish changes so it cannot be used in generic recipes
minetest.override_item("ethereal:fish_pufferfish", {groups = {flammable = 2}})
-- Worm
minetest.register_craftitem("ethereal:worm", {
description = S("Worm"),
inventory_image = "ethereal_worm.png",
wield_image = "ethereal_worm.png"
})
minetest.register_craft({
output = "ethereal:worm",
recipe = {
{"default:dirt", "default:dirt"}
}
})
-- compatibility
minetest.register_alias("ethereal:fish_raw", "ethereal:fish_cichlid")
minetest.register_alias("ethereal:fishing_rod_baited", "ethereal:fishing_rod")
minetest.register_alias("ethereal:fish_chichlid", "ethereal:fish_cichlid")

197
mods/ethereal/flight.lua Normal file
View file

@ -0,0 +1,197 @@
-- translation and settings
local S = minetest.get_translator("ethereal")
local flight_secs = minetest.settings:get("ethereal.flightpotion_duration") or (5 * 60)
local timer_check = 5 -- seconds per check
-- get player timer
local function get_timer(user)
if not user then return end
local meta = user:get_meta() ; if not meta then return "" end
return meta:get_string("ethereal:fly_timer") or ""
end
-- do we have fly privs
local function has_fly(name)
return minetest.get_player_privs(name).fly
end
-- set player timer
local function set_timer(user, timer)
local meta = user:get_meta() ; if not meta then return end
meta:set_string("ethereal:fly_timer", timer)
end
-- give or revoke fly priv
local function set_flight(user, set)
local name = user and user:get_player_name() ; if not name then return end
local privs = minetest.get_player_privs(name)
privs.fly = set
minetest.set_player_privs(name, privs)
-- when flight removed set timer to temp position
if set ~= true then set_timer(user, "-99") end
end
-- after function
local function ethereal_set_flight(user)
local name = user and user:get_player_name() ; if not name then return end
local timer = tonumber(get_timer(user)) or 0
-- if timer ran out then remove 'fly' privelage
if timer <= 0 and timer ~= -99 then
set_flight(user, nil)
return
end
local privs = minetest.get_player_privs(name)
-- have we already applied 'fly' privelage?
if not privs.fly then set_flight(user, true) end
-- handle timer
timer = timer - timer_check
-- show expiration message and play sound
if timer <= 10 then
minetest.chat_send_player(name, minetest.get_color_escape_sequence("#ff5500")
.. S("Flight timer about to expire!"))
minetest.sound_play("default_dig_dig_immediate",
{to_player = name, gain = 1.0}, true)
end
set_timer(user, timer) -- set update timer
-- restart checks
minetest.after(timer_check, function()
ethereal_set_flight(user)
end)
end
-- on join / leave
minetest.register_on_joinplayer(function(player)
-- wait 2 seconds before doing flight checks on player
minetest.after(2.0, function(player)
-- get player name and timer
local name = player and player:get_player_name() ; if not name then return end
local timer = get_timer(player)
-- if timer is blank and player can already fly then default and return
if timer == "" and has_fly(name) then
set_timer(player, "-99")
return
end
timer = tonumber(timer) or 0
-- if timer is set to default then return
if timer == -99 then return end
-- if we got this far and player is flying then start countdown check
if has_fly(name) then
minetest.after(timer_check, function()
ethereal_set_flight(player)
end)
end
end, player)
end)
-- potion item
minetest.register_node("ethereal:flight_potion", {
description = S("Flight Potion"),
drawtype = "plantlike",
tiles = {"ethereal_flight_potion.png"},
inventory_image = "ethereal_flight_potion.png",
wield_image = "ethereal_flight_potion.png",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "fixed", fixed = {-0.2, -0.37, -0.2, 0.2, 0.31, 0.2}
},
groups = {dig_immediate = 3, vessel = 1},
sounds = default.node_sound_glass_defaults(),
on_use = function(itemstack, user, pointed_thing)
if user.is_fake_player then return end
-- get info
local name = user:get_player_name()
local privs = minetest.get_player_privs(name)
local timer = get_timer(user)
if privs.fly then
local msg = timer
if timer == "" or timer == "-99" then msg = S("unlimited") end
minetest.chat_send_player(name, minetest.get_color_escape_sequence("#ffff00")
.. S("Flight already granted, @1 seconds left!", msg))
return
end
set_timer(user, flight_secs) -- set flight timer
-- show time remaining
minetest.chat_send_player(name,
minetest.get_color_escape_sequence("#1eff00")
.. S("Flight granted, you have @1 seconds!", flight_secs))
ethereal_set_flight(user) -- start check
itemstack:take_item() -- take item
-- return empty bottle
local inv = user:get_inventory()
if inv:room_for_item("main", {name = "vessels:glass_bottle"}) then
user:get_inventory():add_item("main", "vessels:glass_bottle")
else
minetest.add_item(user:get_pos(), {name = "vessels:glass_bottle"})
end
return itemstack
end
})
-- recipe
minetest.register_craft({
output = "ethereal:flight_potion",
recipe = {
{"ethereal:etherium_dust", "ethereal:etherium_dust", "ethereal:etherium_dust"},
{"ethereal:etherium_dust", "ethereal:fire_dust", "ethereal:etherium_dust"},
{"ethereal:etherium_dust", "vessels:glass_bottle", "ethereal:etherium_dust"}
}
})

751
mods/ethereal/food.lua Normal file
View file

@ -0,0 +1,751 @@
-- translator and mod check
local S = minetest.get_translator("ethereal")
local mod_fredo = minetest.get_modpath("farming")
and farming and farming.mod and farming.mod == "redo"
-- replacement bowl
local bowl = mod_fredo and "farming:bowl" or "ethereal:bowl"
-- Banana
minetest.register_node("ethereal:banana", {
description = S("Banana"),
drawtype = "torchlike",
tiles = {"ethereal_banana_single.png"},
inventory_image = "ethereal_banana_single.png",
wield_image = "ethereal_banana_single.png",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "fixed", fixed = {-0.31, -0.5, -0.31, 0.31, 0.5, 0.31}
},
groups = {
food_banana = 1, fleshy = 3, dig_immediate = 3, leafdecay = 1, leafdecay_drop = 1
},
drop = "ethereal:banana",
on_use = minetest.item_eat(2),
sounds = default.node_sound_leaves_defaults(),
place_param2 = 1
})
ethereal.add_eatable("ethereal:banana", 2)
-- Banana Bunch
minetest.register_node("ethereal:banana_bunch", {
description = S("Banana Bunch"),
drawtype = "torchlike",
tiles = {"ethereal_banana_bunch.png"},
inventory_image = "ethereal_banana_bunch.png",
wield_image = "ethereal_banana_bunch.png",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "fixed", fixed = {-0.31, -0.5, -0.31, 0.31, 0.5, 0.31}
},
groups = {
fleshy = 3, dig_immediate = 3, leafdecay = 1, leafdecay_drop = 1
},
drop = "ethereal:banana_bunch",
on_use = minetest.item_eat(6),
sounds = default.node_sound_leaves_defaults(),
place_param2 = 1
})
ethereal.add_eatable("ethereal:banana_bunch", 6)
minetest.register_craft({
output = "ethereal:banana 3",
recipe = {{"ethereal:banana_bunch"}}
})
minetest.register_craft({
output = "ethereal:banana_bunch",
recipe = {{"ethereal:banana", "ethereal:banana", "ethereal:banana"}}
})
-- Banana Dough
minetest.register_craftitem("ethereal:banana_dough", {
description = S("Banana Dough"),
inventory_image = "ethereal_banana_dough.png"
})
minetest.register_craft({
output = "ethereal:banana_dough",
recipe = {{"group:food_flour", "group:food_banana"}}
})
minetest.register_craft({
type = "cooking",
cooktime = 14,
output = "ethereal:banana_bread",
recipe = "ethereal:banana_dough"
})
-- Orange
minetest.register_node("ethereal:orange", {
description = S("Orange"),
drawtype = "plantlike",
tiles = {"farming_orange.png"},
inventory_image = "farming_orange.png",
wield_image = "farming_orange.png",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "fixed", fixed = {-0.27, -0.37, -0.27, 0.27, 0.44, 0.27}
},
groups = {
food_orange = 1, fleshy = 3, dig_immediate = 3,
leafdecay = 3, leafdecay_drop = 1
},
drop = "ethereal:orange",
on_use = minetest.item_eat(4),
sounds = default.node_sound_leaves_defaults(),
place_param2 = 1
})
ethereal.add_eatable("ethereal:orange", 4)
-- Pine Nuts
minetest.register_craftitem("ethereal:pine_nuts", {
description = S("Pine Nuts"),
inventory_image = "ethereal_pine_nuts.png",
wield_image = "ethereal_pine_nuts.png",
groups = {food_pine_nuts = 1},
on_use = minetest.item_eat(1)
})
ethereal.add_eatable("ethereal:pine_nuts", 1)
-- Banana Loaf
minetest.register_craftitem("ethereal:banana_bread", {
description = S("Banana Loaf"),
inventory_image = "ethereal_banana_bread.png",
wield_image = "ethereal_banana_bread.png",
groups = {food_bread = 1},
on_use = minetest.item_eat(6)
})
ethereal.add_eatable("ethereal:banana_bread", 6)
-- coconut settings if farming redo found
local fredo = minetest.get_modpath("farming") and farming and farming.mod
and farming.mod == "redo"
local cdrp = fredo and "ethereal:coconut" or "ethereal:coconut_slice 4"
local cgrp = fredo and {3, 2} or {1, 1}
-- Coconut (drops 4x coconut slice by default, whole coconut if farming redo found)
minetest.register_node("ethereal:coconut", {
description = S("Coconut"),
drawtype = "plantlike",
walkable = false,
paramtype = "light",
sunlight_propagates = true,
tiles = {"moretrees_coconut.png"},
inventory_image = "moretrees_coconut.png",
wield_image = "moretrees_coconut.png",
selection_box = {
type = "fixed", fixed = {-0.31, -0.43, -0.31, 0.31, 0.44, 0.31}
},
groups = {
food_coconut = 1, snappy = cgrp[1], oddly_breakable_by_hand = cgrp[2],
cracky = cgrp[1], choppy = cgrp[1], flammable = 1,
leafdecay = 3, leafdecay_drop = 1
},
drop = cdrp,
sounds = default.node_sound_wood_defaults(),
place_param2 = 1
})
-- Coconut Slice
minetest.register_craftitem("ethereal:coconut_slice", {
description = S("Coconut Slice"),
inventory_image = "moretrees_coconut_slice.png",
wield_image = "moretrees_coconut_slice.png",
groups = {food_coconut_slice = 1},
on_use = minetest.item_eat(1)
})
ethereal.add_eatable("ethereal:coconut_slice", 1)
-- coconut slice recipe (farming redo)
if fredo then
minetest.register_craft({
output = "ethereal:coconut_slice 4",
recipe = {{"farming:cutting_board", "ethereal:coconut"}},
replacements = {{"farming:cutting_board", "farming:cutting_board"}}
})
end
-- coconut slice into whole coconut
minetest.register_craft({
output = "ethereal:coconut",
recipe = {
{"ethereal:coconut_slice", "ethereal:coconut_slice"},
{"ethereal:coconut_slice", "ethereal:coconut_slice"}
}
})
-- Golden Apple
minetest.register_node("ethereal:golden_apple", {
description = S("Golden Apple"),
drawtype = "plantlike",
tiles = {"default_apple_gold.png"},
inventory_image = "default_apple_gold.png",
wield_image = "default_apple_gold.png",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "fixed", fixed = {-0.2, -0.37, -0.2, 0.2, 0.31, 0.2}
},
groups = {
fleshy = 3, dig_immediate = 3, leafdecay = 3,leafdecay_drop = 1, eatable = 2
},
drop = "ethereal:golden_apple",
sounds = default.node_sound_leaves_defaults(),
place_param2 = 1,
on_use = function(itemstack, user, pointed_thing)
if user and pointed_thing and pointed_thing.type ~= "object" then
user:set_hp(20)
return minetest.do_item_eat(2, nil, itemstack, user, pointed_thing)
end
end
})
-- Hearty Stew
minetest.register_craftitem("ethereal:hearty_stew", {
description = S("Hearty Stew"),
inventory_image = "ethereal_hearty_stew.png",
wield_image = "ethereal_hearty_stew.png",
on_use = minetest.item_eat(10, bowl)
})
ethereal.add_eatable("ethereal:hearty_stew", 10)
minetest.register_craft({
output = "ethereal:hearty_stew",
recipe = {
{"group:food_onion","flowers:mushroom_brown", "group:food_tuber"},
{"","flowers:mushroom_brown", ""},
{"","group:food_bowl", ""}
}
})
-- Extra recipe for hearty stew
if fredo then
minetest.register_craft({
output = "ethereal:hearty_stew",
recipe = {
{"group:food_onion","flowers:mushroom_brown", "group:food_beans"},
{"","flowers:mushroom_brown", ""},
{"","group:food_bowl", ""}
}
})
end
-- Bucket of Cactus Pulp
minetest.register_craftitem("ethereal:bucket_cactus", {
description = S("Bucket of Cactus Pulp"),
inventory_image = "bucket_cactus.png",
wield_image = "bucket_cactus.png",
stack_max = 1,
groups = {vessel = 1, drink = 1},
on_use = minetest.item_eat(2, "bucket:bucket_empty"),
})
ethereal.add_eatable("ethereal:bucket_cactus", 2)
minetest.register_craft({
output = "ethereal:bucket_cactus",
recipe = {{"bucket:bucket_empty","default:cactus"}}
})
-- firethorn jelly
minetest.register_craftitem("ethereal:firethorn_jelly", {
description = S("Firethorn Jelly"),
inventory_image = "ethereal_firethorn_jelly.png",
wield_image = "ethereal_firethorn_jelly.png",
on_use = minetest.item_eat(2, "vessels:glass_bottle"),
groups = {vessel = 1}
})
ethereal.add_eatable("ethereal:firethorn_jelly", 2)
if fredo then
minetest.register_craft({
output = "ethereal:firethorn_jelly",
recipe = {
{"farming:mortar_pestle","vessels:glass_bottle", ""},
{"ethereal:firethorn", "ethereal:firethorn", "ethereal:firethorn"},
{"bucket:bucket_water", "bucket:bucket_water", "bucket:bucket_water"}
},
replacements = {
{"bucket:bucket_water", "bucket:bucket_empty 3"},
{"farming:mortar_pestle", "farming:mortar_pestle"}
}
})
end
-- Lemon
minetest.register_node("ethereal:lemon", {
description = S("Lemon"),
drawtype = "plantlike",
tiles = {"ethereal_lemon.png"},
inventory_image = "ethereal_lemon_fruit.png",
wield_image = "ethereal_lemon_fruit.png",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "fixed", fixed = {-0.27, -0.37, -0.27, 0.27, 0.44, 0.27}
},
groups = {
food_lemon = 1, fleshy = 3, dig_immediate = 3, leafdecay = 3, leafdecay_drop = 1
},
drop = "ethereal:lemon",
on_use = minetest.item_eat(3),
sounds = default.node_sound_leaves_defaults(),
place_param2 = 1
})
ethereal.add_eatable("ethereal:lemon", 3)
-- Candied Lemon
minetest.register_craftitem("ethereal:candied_lemon", {
description = S("Candied Lemon"),
inventory_image = "ethereal_candied_lemon.png",
wield_image = "ethereal_candied_lemon.png",
groups = {food_candied_lemon = 1},
on_use = minetest.item_eat(5)
})
ethereal.add_eatable("ethereal:candied_lemon", 5)
minetest.register_craft({
output = "ethereal:candied_lemon",
recipe = {
{"farming:baking_tray", "ethereal:lemon", "group:food_sugar"}
},
replacements = {
{"farming:baking_tray", "farming:baking_tray"}
}
})
-- Lemonade
minetest.register_node("ethereal:lemonade", {
description = S("Lemonade"),
drawtype = "plantlike",
visual_scale = 0.5,
tiles = {"ethereal_lemonade.png"},
inventory_image = "ethereal_lemonade.png",
wield_image = "ethereal_lemonade.png",
paramtype = "light",
walkable = false,
selection_box = {
type = "fixed", fixed = {-0.15, -0.5, -0.15, 0.15, 0, 0.15}
},
groups = {vessel = 1, dig_immediate = 3, attached_node = 1, drink = 1},
on_use = minetest.item_eat(5, "vessels:drinking_glass"),
sounds = default.node_sound_glass_defaults()
})
ethereal.add_eatable("ethereal:lemonade", 5)
minetest.register_craft({
output = "ethereal:lemonade",
recipe = {
{"ethereal:lemon", "group:food_sugar", "group:food_sugar"},
{"vessels:drinking_glass", "group:water_bucket", ""}
},
replacements = {
{"group:water_bucket", "bucket:bucket_empty"},
}
})
-- Olive
minetest.register_node("ethereal:olive", {
description = S("Olive"),
drawtype = "plantlike",
tiles = {"ethereal_olive.png"},
inventory_image = "ethereal_olive_fruit.png",
wield_image = "ethereal_olive_fruit.png",
visual_scale = 0.2,
paramtype = "light",
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "fixed", fixed = {-0.1, -0.5, -0.1, 0.1, -0.3, 0.1}
},
groups = {fleshy = 3, dig_immediate = 3, leafdecay = 3, leafdecay_drop = 1},
on_use = minetest.item_eat(1),
sounds = default.node_sound_leaves_defaults(),
place_param2 = 1
})
ethereal.add_eatable("ethereal:olive", 1)
-- Olive Oil
minetest.register_craftitem("ethereal:olive_oil", {
description = S("Olive Oil"),
inventory_image = "ethereal_olive_oil.png",
wield_image = "ethereal_olive_oil.png",
groups = {food_oil = 1, food_olive_oil = 1, vessel = 1}
})
minetest.register_craft({
output = "ethereal:olive_oil",
recipe = {
{"ethereal:olive", "ethereal:olive", "ethereal:olive"},
{"ethereal:olive", "ethereal:olive", "ethereal:olive"},
{"farming:juicer", "vessels:glass_bottle", ""}
},
replacements = {{"farming:juicer", "farming:juicer"}}
})
-- Kappa Maki (sushi with cucumber)
minetest.register_craftitem("ethereal:sushi_kappamaki", {
description = S("Kappa Maki Sushi"),
inventory_image = "ethereal_sushi_kappa_maki.png",
on_use = minetest.item_eat(3)
})
ethereal.add_eatable("ethereal:sushi_kappamaki", 3)
minetest.register_craft({
output = "ethereal:sushi_kappamaki 2",
recipe = {
{"group:food_seaweed", "group:food_cucumber", "group:food_rice"}
}
})
-- Nigiri (sushi with raw fish)
minetest.register_craftitem("ethereal:sushi_nigiri", {
description = S("Nigiri Sushi"),
inventory_image = "ethereal_sushi_nigiri.png",
on_use = minetest.item_eat(2)
})
ethereal.add_eatable("ethereal:sushi_nigiri", 2)
minetest.register_craft({
output = "ethereal:sushi_nigiri 2",
recipe = {
{"group:food_rice", "group:food_fish_raw", ""}
}
})
-- Tamago (sushi with sweet egg)
minetest.register_craftitem("ethereal:sushi_tamago", {
description = S("Tamago Sushi"),
inventory_image = "ethereal_sushi_tamago.png",
on_use = minetest.item_eat(2)
})
ethereal.add_eatable("ethereal:sushi_tamago", 2)
minetest.register_craft({
output = "ethereal:sushi_tamago 2",
recipe = {
{"group:food_seaweed", "group:food_egg", "group:food_rice"}
}
})
-- Fugu (prepared pufferfish)
minetest.register_craftitem("ethereal:fugu", {
description = S("Fugusashi"),
inventory_image = "ethereal_fugu.png",
on_use = function(itemstack, user, pointed_thing)
if user then
if math.random(12) == 1 then
return minetest.do_item_eat(-16, nil, itemstack, user, pointed_thing)
else
return minetest.do_item_eat(4, nil, itemstack, user, pointed_thing)
end
end
end
})
ethereal.add_eatable("ethereal:fugu", 4)
minetest.register_craft({
output = "ethereal:fugu",
recipe = {
{"group:food_cutting_board", "ethereal:fish_pufferfish", "group:food_soy_sauce"}
},
replacements = {
{"group:food_cutting_board", "farming:cutting_board"},
{"group:food_soy_sauce", "vessels:glass_bottle"}
}
})
-- Teriyaki Chicken
minetest.register_craftitem("ethereal:teriyaki_chicken", {
description = S("Teriyaki Chicken"),
inventory_image = "ethereal_teriyaki_chicken.png",
on_use = minetest.item_eat(4)
})
ethereal.add_eatable("ethereal:teriyaki_chicken", 4)
minetest.register_craft({
output = "ethereal:teriyaki_chicken 2",
recipe = {
{"group:food_chicken_raw", "group:food_sugar", "group:food_soy_sauce"},
{"group:food_garlic_clove", "group:food_saucepan", "group:food_gelatin"}
},
replacements = {
{"group:food_soy_sauce", "vessels:glass_bottle"},
{"group:food_saucepan", "farming:saucepan"}
}
})
-- Teriyaki Beef
minetest.register_craftitem("ethereal:teriyaki_beef", {
description = S("Teriyaki Beef"),
inventory_image = "ethereal_teriyaki_beef.png",
on_use = minetest.item_eat(12, bowl)
})
ethereal.add_eatable("ethereal:teriyaki_beef", 12)
minetest.register_craft({
output = "ethereal:teriyaki_beef",
recipe = {
{"group:food_meat_raw", "group:food_sugar", "group:food_soy_sauce"},
{"group:food_garlic_clove", "group:food_saucepan", "group:food_gelatin"},
{"group:food_cabbage", "group:food_rice", "group:food_bowl"}
},
replacements = {
{"group:food_soy_sauce", "vessels:glass_bottle"},
{"group:food_saucepan", "farming:saucepan"}
}
})
-- mushroom soup
minetest.register_craftitem("ethereal:mushroom_soup", {
description = S("Mushroom Soup"),
inventory_image = "ethereal_mushroom_soup.png",
groups = {drink = 1},
on_use = minetest.item_eat(5, bowl)
})
ethereal.add_eatable("ethereal:mushroom_soup", 5)
minetest.register_craft({
output = "ethereal:mushroom_soup",
recipe = {
{"group:food_mushroom"},
{"group:food_mushroom"},
{"group:food_bowl"}
}
})
-- boiled shrimp
minetest.register_craftitem("ethereal:fish_shrimp_cooked", {
description = S("Boiled Shrimp"),
inventory_image = "ethereal_fish_shrimp_cooked.png",
on_use = minetest.item_eat(2)
})
ethereal.add_eatable("ethereal:fish_shrimp_cooked", 2)
minetest.register_craft({
output = "ethereal:fish_shrimp_cooked 5",
recipe = {
{"ethereal:fish_shrimp", "ethereal:fish_shrimp", "ethereal:fish_shrimp"},
{"ethereal:fish_shrimp", "group:water_bucket", "ethereal:fish_shrimp"},
{"", "ethereal:fire_dust", ""}
},
replacements = {{"group:water_bucket", "bucket:bucket_empty"}}
})
-- garlic butter shrimp
minetest.register_craftitem("ethereal:garlic_shrimp", {
description = S("Garlic Butter Shrimp"),
inventory_image = "ethereal_garlic_butter_shrimp.png",
on_use = minetest.item_eat(6)
})
ethereal.add_eatable("ethereal:garlic_shrimp", 6)
minetest.register_craft({
output = "ethereal:garlic_shrimp",
recipe = {
{"farming:skillet", "ethereal:fish_shrimp", "ethereal:fish_shrimp"},
{"group:food_butter", "group:food_garlic_clove", "ethereal:lemon"}
},
replacements = {{"farming:skillet", "farming:skillet"}}
})
-- jellyfish salad
minetest.register_craftitem("ethereal:jellyfish_salad", {
description = S("Jellyfish Salad"),
inventory_image = "ethereal_jellyfish_salad.png",
on_use = minetest.item_eat(6)
})
ethereal.add_eatable("ethereal:jellyfish_salad", 6)
minetest.register_craft({
output = "ethereal:jellyfish_salad",
recipe = {
{"farming:cutting_board", "ethereal:fish_jellyfish", "group:food_onion"},
},
replacements = {{"farming:cutting_board", "farming:cutting_board"}}
})
-- raw calamari
minetest.register_craftitem("ethereal:calamari_raw", {
description = S("Raw Calamari"),
inventory_image = "ethereal_calamari_raw.png",
on_use = minetest.item_eat(-2)
})
ethereal.add_eatable("ethereal:calamari_raw", -2)
minetest.register_craft({
output = "ethereal:calamari_raw 2",
recipe = {
{"farming:cutting_board", "ethereal:fish_squid"},
},
replacements = {{"farming:cutting_board", "farming:cutting_board"}}
})
-- cooked calamari
minetest.register_craftitem("ethereal:calamari_cooked", {
description = S("Calamari"),
inventory_image = "ethereal_calamari_cooked.png",
on_use = minetest.item_eat(5)
})
ethereal.add_eatable("ethereal:calamari_cooked", 5)
minetest.register_craft({
output = "ethereal:calamari_cooked",
recipe = {
{"farming:skillet", "ethereal:calamari_raw", "farming:flour"},
},
replacements = {{"farming:skillet", "farming:skillet"}}
})
-- fish & chips
minetest.register_craftitem("ethereal:fish_n_chips", {
description = S("Fish & Chips"),
inventory_image = "ethereal_fish_chips.png",
on_use = minetest.item_eat(6)
})
ethereal.add_eatable("ethereal:fish_n_chips", 6)
minetest.register_craft({
output = "ethereal:fish_n_chips",
recipe = {
{"farming:baking_tray", "group:ethereal_fish", "group:food_potato"}
},
replacements = {{"farming:baking_tray", "farming:baking_tray"}}
})
-- cooked fish
minetest.register_craftitem(":ethereal:fish_cooked", {
description = S("Cooked Fish"),
inventory_image = "ethereal_fish_cooked.png",
wield_image = "ethereal_fish_cooked.png",
groups = {food_fish = 1},
on_use = minetest.item_eat(5)
})
ethereal.add_eatable("ethereal:fish_cooked", 5)
minetest.register_craft({
type = "cooking",
output = "ethereal:fish_cooked",
recipe = "group:ethereal_fish",
cooktime = 8
})
-- Sashimi
minetest.register_craftitem("ethereal:sashimi", {
description = S("Sashimi"),
inventory_image = "ethereal_sashimi.png",
wield_image = "ethereal_sashimi.png",
on_use = minetest.item_eat(4)
})
ethereal.add_eatable("ethereal:sashimi", 4)
minetest.register_craft({
output = "ethereal:sashimi 2",
recipe = {
{"group:food_seaweed", "group:food_fish_raw", "group:food_seaweed"},
}
})
-- agar powder
minetest.register_craftitem("ethereal:agar_powder", {
description = S("Agar Powder"),
inventory_image = "ethereal_agar_powder.png",
groups = {food_gelatin = 1, flammable = 2}
})
minetest.register_craft({
output = "ethereal:agar_powder 3",
recipe = {
{"group:food_seaweed", "group:food_seaweed", "group:food_seaweed"},
{"bucket:bucket_water", "bucket:bucket_water", "default:torch"},
{"bucket:bucket_water", "bucket:bucket_water", "default:torch"}
},
replacements = {{"bucket:bucket_water", "bucket:bucket_empty 4"}}
})

175
mods/ethereal/init.lua Normal file
View file

@ -0,0 +1,175 @@
--[[
Minetest Ethereal Mod
Created by ChinChow
Updated by TenPlus1
]]
-- global
ethereal = {version = "20241014"}
-- setting helper
local function setting(stype, name, default)
local value
if stype == "bool" then
value = minetest.settings:get_bool("ethereal." .. name)
elseif stype == "string" then
value = minetest.settings:get("ethereal." .. name)
elseif stype == "number" then
value = tonumber(minetest.settings:get("ethereal." .. name))
end
if value == nil then value = default end
ethereal[name] = value
end
-- DO NOT change settings below, use the settings.conf file instead
setting("number", "leaftype", 1)
setting("bool", "leafwalk", false)
setting("bool", "cavedirt", true)
setting("bool", "torchdrop", true)
setting("bool", "papyruswalk", true)
setting("bool", "lilywalk", true)
setting("bool", "xcraft", true)
setting("bool", "flight", true)
setting("number", "glacier", 1)
setting("number", "bamboo", 1)
setting("number", "mesa", 1)
setting("number", "alpine", 1)--taiga
setting("number", "snowy", 1)--coniferous_forest
setting("number", "frost", 1)
setting("number", "grassy", 1)--deciduous_forest
setting("number", "caves", 0)
setting("number", "grayness", 1)
setting("number", "grassytwo", 1)
setting("number", "prairie", 0)
setting("number", "jumble", 1)
setting("number", "junglee", 1)--rainforest
setting("number", "desert", 1)
setting("number", "grove", 1)
setting("number", "mushroom", 1)
setting("number", "sandstone", 1)--sandstone_desert
setting("number", "plains", 1)
setting("number", "savanna", 0)
setting("number", "fiery", 1)
setting("number", "swamp", 1)
setting("number", "quicksand", 1)--swamp quicksand
setting("number", "tundra", 1)
setting("number", "mediterranean", 0)
setting("number", "cold_desert", 1)
setting("number", "snowy_grassland", 1)
setting("number", "sealife", 1)
setting("number", "reefs", 1)
setting("number", "logs", 0)
setting("bool", "wood_rotate", false)
local path = minetest.get_modpath("ethereal")
-- Load settings.conf file if found [DEPRECATED]
local input = io.open(path.."/settings.conf", "r")
if input then
dofile(path .. "/settings.conf") ; input:close() ; input = nil
end
-- Falling node function
ethereal.check_falling = minetest.check_for_falling or nodeupdate
-- creative check
local creative_mode_cache = minetest.settings:get_bool("creative_mode")
function ethereal.check_creative(name)
return creative_mode_cache or minetest.check_player_privs(name, {creative = true})
end
-- helper function to add {eatable} group to food items
function ethereal.add_eatable(item, hp)
local def = minetest.registered_items[item]
if def then
local groups = table.copy(def.groups) or {}
groups.eatable = hp ; groups.flammable = 2
minetest.override_item(item, {groups = groups})
end
end
-- strawberry check and load
if minetest.get_modpath("farming") and farming.mod and farming.mod == "redo" then
-- farming redo already has strawberry included
else
dofile(path .. "/strawberry.lua")
end
-- load mod sections
dofile(path .. "/plantlife.lua")
dofile(path .. "/onion.lua")
dofile(path .. "/crystal.lua")
dofile(path .. "/water.lua")
dofile(path .. "/dirt.lua")
dofile(path .. "/food.lua")
dofile(path .. "/wood.lua")
dofile(path .. "/leaves.lua")
dofile(path .. "/sapling.lua")
dofile(path .. "/fishing.lua")
dofile(path .. "/extra.lua")
dofile(path .. "/sealife.lua")
dofile(path .. "/fences.lua")
if minetest.settings:get_bool("ethereal.clear_default_biomes", false) then
dofile(path .. "/biomes_init.lua")
end
dofile(path .. "/biomes.lua")
dofile(path .. "/ores.lua")
dofile(path .. "/schems.lua")
dofile(path .. "/decor.lua")
dofile(path .. "/compatibility.lua")
dofile(path .. "/stairs.lua")
-- add flight if enabled
if ethereal.flight then
dofile(path .. "/flight.lua")
end
-- add lucky blocks if mod active
if minetest.get_modpath("lucky_block") then
dofile(path .. "/lucky_block.lua")
end
-- Set bonemeal aliases
if minetest.get_modpath("bonemeal") then
minetest.register_alias("ethereal:bone", "bonemeal:bone")
minetest.register_alias("ethereal:bonemeal", "bonemeal:bonemeal")
else -- or return to where it came from
minetest.register_alias("ethereal:bone", "default:dirt")
minetest.register_alias("ethereal:bonemeal", "default:dirt")
end
-- ambience lite
if minetest.get_modpath("ambience") then
dofile(path .. "/ambience.lua")
end
print ("[MOD] Ethereal loaded")

734
mods/ethereal/leaves.lua Normal file
View file

@ -0,0 +1,734 @@
local S = minetest.get_translator("ethereal")
-- set leaftype (0 for plantlike, 1 for block)
local leaftype = "plantlike"
local leafscale = 1.4
if ethereal.leaftype ~= 0 then
leaftype = "allfaces_optional"
leafscale = 1.0
end
-- default apple tree leaves
minetest.override_item("default:leaves", {
drawtype = leaftype,
visual_scale = leafscale,
inventory_image = "default_leaves.png",
wield_image = "default_leaves.png",
walkable = ethereal.leafwalk
})
-- ability to craft big tree sapling
minetest.register_craft({
recipe = {{"default:sapling", "default:sapling", "default:sapling"}},
output = "ethereal:big_tree_sapling"
})
-- default jungle tree leaves
minetest.override_item("default:jungleleaves", {
drawtype = leaftype,
visual_scale = leafscale,
inventory_image = "default_jungleleaves.png",
wield_image = "default_jungleleaves.png",
walkable = ethereal.leafwalk
})
-- default pine tree leaves
minetest.override_item("default:pine_needles", {
drawtype = leaftype,
visual_scale = leafscale,
inventory_image = "default_pine_needles.png",
wield_image = "default_pine_needles.png",
walkable = ethereal.leafwalk,
drop = {
max_items = 1,
items = {
{items = {"default:pine_sapling"}, rarity = 20},
{items = {"ethereal:pine_nuts"}, rarity = 5},
{items = {"default:pine_needles"}}
}
}
})
-- default acacia tree leaves
minetest.override_item("default:acacia_leaves", {
drawtype = leaftype,
inventory_image = "default_acacia_leaves.png",
wield_image = "default_acacia_leaves.png",
visual_scale = leafscale,
walkable = ethereal.leafwalk
})
-- default aspen tree leaves
minetest.override_item("default:aspen_leaves", {
drawtype = leaftype,
inventory_image = "default_aspen_leaves.png",
wield_image = "default_aspen_leaves.png",
visual_scale = leafscale,
walkable = ethereal.leafwalk
})
-- willow twig
minetest.register_node("ethereal:willow_twig", {
description = S("Willow Twig"),
drawtype = "plantlike",
tiles = {"ethereal_willow_twig.png"},
inventory_image = "ethereal_willow_twig.png",
wield_image = "ethereal_willow_twig.png",
paramtype = "light",
walkable = ethereal.leafwalk,
visual_scale = 1.4,
waving = 1,
groups = {snappy = 3, leafdecay = 3, leaves = 1, flammable = 2},
drop = {
max_items = 1,
items = {
{items = {"ethereal:willow_sapling"}, rarity = 50},
{items = {"ethereal:willow_twig"}}
}
},
sounds = default.node_sound_leaves_defaults(),
after_place_node = default.after_place_leaves
})
-- redwood leaves
minetest.register_node("ethereal:redwood_leaves", {
description = S("Redwood Leaves"),
drawtype = leaftype,
visual_scale = leafscale,
tiles = {"ethereal_redwood_leaves.png"},
inventory_image = "ethereal_redwood_leaves.png",
wield_image = "ethereal_redwood_leaves.png",
paramtype = "light",
walkable = ethereal.leafwalk,
waving = 1,
groups = {snappy = 3, leafdecay = 3, leaves = 1, flammable = 2},
drop = {
max_items = 1,
items = {
{items = {"ethereal:redwood_sapling"}, rarity = 50},
{items = {"ethereal:redwood_leaves"}}
}
},
sounds = default.node_sound_leaves_defaults(),
after_place_node = default.after_place_leaves
})
-- orange tree leaves
minetest.register_node("ethereal:orange_leaves", {
description = S("Orange Leaves"),
drawtype = leaftype,
visual_scale = leafscale,
tiles = {"ethereal_orange_leaves.png"},
inventory_image = "ethereal_orange_leaves.png",
wield_image = "ethereal_orange_leaves.png",
paramtype = "light",
walkable = ethereal.leafwalk,
waving = 1,
groups = {snappy = 3, leafdecay = 3, leaves = 1, flammable = 2},
drop = {
max_items = 1,
items = {
{items = {"ethereal:orange_tree_sapling"}, rarity = 15},
{items = {"ethereal:orange_leaves"}}
}
},
sounds = default.node_sound_leaves_defaults(),
after_place_node = default.after_place_leaves
})
-- banana tree leaves
minetest.register_node("ethereal:bananaleaves", {
description = S("Banana Leaves"),
drawtype = leaftype,
visual_scale = leafscale,
tiles = {"ethereal_banana_leaf.png"},
inventory_image = "ethereal_banana_leaf.png",
wield_image = "ethereal_banana_leaf.png",
paramtype = "light",
walkable = ethereal.leafwalk,
waving = 1,
groups = {snappy = 3, leafdecay = 3, leaves = 1, flammable = 2},
drop = {
max_items = 1,
items = {
{items = {"ethereal:banana_tree_sapling"}, rarity = 10},
{items = {"ethereal:bananaleaves"}}
}
},
sounds = default.node_sound_leaves_defaults(),
after_place_node = default.after_place_leaves
})
-- healing tree leaves
minetest.register_node("ethereal:yellowleaves", {
description = S("Healing Tree Leaves"),
drawtype = leaftype,
visual_scale = leafscale,
tiles = {"ethereal_yellow_leaves.png"},
inventory_image = "ethereal_yellow_leaves.png",
wield_image = "ethereal_yellow_leaves.png",
paramtype = "light",
walkable = ethereal.leafwalk,
waving = 1,
groups = {snappy = 3, leafdecay = 3, leaves = 1, eatable = 1},
drop = {
max_items = 1,
items = {
{items = {"ethereal:yellow_tree_sapling"}, rarity = 50},
{items = {"ethereal:yellowleaves"}}
}
},
on_use = minetest.item_eat(1),
sounds = default.node_sound_leaves_defaults(),
after_place_node = default.after_place_leaves,
light_source = 9
})
-- palm tree leaves
minetest.register_node("ethereal:palmleaves", {
description = S("Palm Leaves"),
drawtype = leaftype,
visual_scale = leafscale,
tiles = {"moretrees_palm_leaves.png"},
inventory_image = "moretrees_palm_leaves.png",
wield_image = "moretrees_palm_leaves.png",
paramtype = "light",
walkable = ethereal.leafwalk,
waving = 1,
groups = {snappy = 3, leafdecay = 3, leaves = 1, flammable = 2},
drop = {
max_items = 1,
items = {
{items = {"ethereal:palm_sapling"}, rarity = 10},
{items = {"ethereal:palmleaves"}}
}
},
sounds = default.node_sound_leaves_defaults(),
after_place_node = default.after_place_leaves
})
-- birch tree leaves
minetest.register_node("ethereal:birch_leaves", {
description = S("Birch Leaves"),
drawtype = leaftype,
visual_scale = leafscale,
tiles = {"moretrees_birch_leaves.png"},
inventory_image = "moretrees_birch_leaves.png",
wield_image = "moretrees_birch_leaves.png",
paramtype = "light",
walkable = ethereal.leafwalk,
waving = 1,
groups = {snappy = 3, leafdecay = 3, leaves = 1, flammable = 2},
drop = {
max_items = 1,
items = {
{items = {"ethereal:birch_sapling"}, rarity = 20},
{items = {"ethereal:birch_leaves"}}
}
},
sounds = default.node_sound_leaves_defaults(),
after_place_node = default.after_place_leaves
})
-- frost tree leaves
minetest.register_node("ethereal:frost_leaves", {
description = S("Frost Leaves"),
drawtype = leaftype,
visual_scale = leafscale,
tiles = {"ethereal_frost_leaves.png"},
inventory_image = "ethereal_frost_leaves.png",
wield_image = "ethereal_frost_leaves.png",
paramtype = "light",
walkable = ethereal.leafwalk,
waving = 1,
groups = {snappy = 3, leafdecay = 3, leaves = 1, puts_out_fire = 1},
drop = {
max_items = 1,
items = {
{items = {"ethereal:frost_tree_sapling"}, rarity = 15},
{items = {"ethereal:frost_leaves"}}
}
},
light_source = 9,
sounds = default.node_sound_leaves_defaults(),
after_place_node = default.after_place_leaves
})
-- bamboo stalk leaves
minetest.register_node("ethereal:bamboo_leaves", {
description = S("Bamboo Leaves"),
drawtype = leaftype,
visual_scale = leafscale,
tiles = {"ethereal_bamboo_leaves.png"},
inventory_image = "ethereal_bamboo_leaves.png",
wield_image = "ethereal_bamboo_leaves.png",
paramtype = "light",
walkable = ethereal.leafwalk,
waving = 1,
groups = {snappy = 3, leafdecay = 3, leaves = 1, flammable = 2},
drop = {
max_items = 1,
items = {
{items = {"ethereal:bamboo_sprout"}, rarity = 10},
{items = {"ethereal:bamboo_leaves"}}
}
},
sounds = default.node_sound_leaves_defaults(),
after_place_node = default.after_place_leaves
})
-- sakura leaves
minetest.register_node("ethereal:sakura_leaves", {
description = S("Sakura Leaves"),
drawtype = leaftype,
visual_scale = leafscale,
tiles = {"ethereal_sakura_leaves.png"},
inventory_image = "ethereal_sakura_leaves.png",
wield_image = "ethereal_sakura_leaves.png",
paramtype = "light",
walkable = ethereal.leafwalk,
waving = 1,
groups = {snappy = 3, leafdecay = 3, leaves = 1, flammable = 2},
drop = {
max_items = 1,
items = {
{items = {"ethereal:sakura_sapling"}, rarity = 30},
{items = {"ethereal:sakura_leaves"}}
}
},
sounds = default.node_sound_leaves_defaults(),
after_place_node = default.after_place_leaves
})
minetest.register_node("ethereal:sakura_leaves2", {
description = S("Sakura Leaves"),
drawtype = leaftype,
visual_scale = leafscale,
tiles = {"ethereal_sakura_leaves2.png"},
inventory_image = "ethereal_sakura_leaves2.png",
wield_image = "ethereal_sakura_leaves2.png",
paramtype = "light",
walkable = ethereal.leafwalk,
waving = 1,
groups = {snappy = 3, leafdecay = 3, leaves = 1, flammable = 2},
drop = {
max_items = 1,
items = {
{items = {"ethereal:sakura_sapling"}, rarity = 30},
{items = {"ethereal:sakura_leaves2"}}
}
},
sounds = default.node_sound_leaves_defaults(),
after_place_node = default.after_place_leaves
})
-- lemon tree leaves
minetest.register_node("ethereal:lemon_leaves", {
description = S("Lemon Tree Leaves"),
drawtype = leaftype,
visual_scale = leafscale,
tiles = {"ethereal_lemon_leaves.png"},
inventory_image = "ethereal_lemon_leaves.png",
wield_image = "ethereal_lemon_leaves.png",
paramtype = "light",
walkable = ethereal.leafwalk,
waving = 1,
groups = {snappy = 3, leafdecay = 3, leaves = 1, flammable = 2},
drop = {
max_items = 1,
items = {
{items = {"ethereal:lemon_tree_sapling"}, rarity = 25},
{items = {"ethereal:lemon_leaves"}}
}
},
sounds = default.node_sound_leaves_defaults(),
after_place_node = default.after_place_leaves
})
-- olive tree leaves
minetest.register_node("ethereal:olive_leaves", {
description = S("Olive Tree Leaves"),
drawtype = leaftype,
visual_scale = leafscale,
tiles = {"ethereal_olive_leaves.png"},
inventory_image = "ethereal_olive_leaves.png",
wield_image = "ethereal_olive_leaves.png",
paramtype = "light",
walkable = ethereal.leafwalk,
waving = 1,
groups = {snappy = 3, leafdecay = 3, leaves = 1, flammable = 2},
drop = {
max_items = 1,
items = {
{items = {"ethereal:olive_tree_sapling"}, rarity = 25},
{items = {"ethereal:olive_leaves"}}
}
},
sounds = default.node_sound_leaves_defaults(),
after_place_node = default.after_place_leaves
})
-- red mushroom top
minetest.register_node("ethereal:mushroom", {
description = S("Mushroom Cap"),
tiles = {"ethereal_mushroom_block.png"},
groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2, leafdecay = 3},
drop = {
max_items = 1,
items = {
{items = {"ethereal:mushroom_sapling"}, rarity = 20},
{items = {"ethereal:mushroom"}}
}
},
sounds = default.node_sound_wood_defaults()
})
minetest.register_craft({
type = "fuel",
recipe = "ethereal:mushroom",
burntime = 10
})
-- brown mushroom top
minetest.register_node("ethereal:mushroom_brown", {
description = S("Brown Mushroom Cap"),
tiles = {"ethereal_mushroom_block_brown.png"},
groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2, leafdecay = 3},
drop = {
max_items = 1,
items = {
{items = {"ethereal:mushroom_brown_sapling"}, rarity = 15},
{items = {"ethereal:mushroom_brown"}}
}
},
sounds = default.node_sound_wood_defaults()
})
minetest.register_craft({
type = "fuel",
recipe = "ethereal:mushroom_brown",
burntime = 10
})
-- mushroom pore (spongelike material found inside giant shrooms)
minetest.register_node("ethereal:mushroom_pore", {
description = S("Mushroom Pore"),
tiles = {"ethereal_mushroom_pore.png"},
groups = {
snappy = 3, cracky = 3, choppy = 3, oddly_breakable_by_hand = 3,
flammable = 2, disable_jump = 1, fall_damage_add_percent = -100,
leafdecay = 3
},
sounds = default.node_sound_dirt_defaults()
})
minetest.register_craft({
type = "fuel",
recipe = "ethereal:mushroom_pore",
burntime = 3
})
-- hedge block
minetest.register_node("ethereal:bush", {
description = S("Bush"),
tiles = {"ethereal_bush.png"},
walkable = true,
groups = {snappy = 3, flammable = 2},
sounds = default.node_sound_leaves_defaults()
})
minetest.register_craft({
output = "ethereal:bush",
recipe = {
{"group:leaves", "group:leaves", "group:leaves"},
{"group:leaves", "ethereal:bamboo_leaves", "group:leaves"},
{"group:leaves", "group:leaves", "group:leaves"}
}
})
minetest.register_craft({
type = "fuel",
recipe = "ethereal:bush",
burntime = 1
})
-- bush block #2
minetest.register_node("ethereal:bush2", {
drawtype = "allfaces_optional",
description = S("Bush #2"),
tiles = {"default_aspen_leaves.png"},
paramtype = "light",
walkable = true,
groups = {snappy = 3, flammable = 2},
sounds = default.node_sound_leaves_defaults()
})
minetest.register_craft({
output = "ethereal:bush2",
recipe = {
{"group:leaves", "group:leaves", "group:leaves"},
{"group:leaves", "default:aspen_leaves", "group:leaves"},
{"group:leaves", "group:leaves", "group:leaves"}
}
})
minetest.register_craft({
type = "fuel",
recipe = "ethereal:bush2",
burntime = 1
})
-- pine needles bush (replaces bush 3)
minetest.register_alias("ethereal:bush3", "default:pine_bush_needles")
minetest.register_craft({
output = "default:pine_bush_needles",
recipe = {
{"group:leaves", "group:leaves", "group:leaves"},
{"group:leaves", "default:pine_needles", "group:leaves"},
{"group:leaves", "group:leaves", "group:leaves"}
}
})
-- basandra bush stem, leaves
minetest.register_node("ethereal:basandra_bush_stem", {
description = S("Basandra Bush Stem"),
drawtype = "plantlike",
visual_scale = 1.41,
walkable = false,
damage_per_second = 2,
tiles = {"ethereal_basandra_bush_stem.png"},
inventory_image = "ethereal_basandra_bush_stem.png",
wield_image = "ethereal_basandra_bush_stem.png",
paramtype = "light",
sunlight_propagates = true,
groups = {choppy = 2, oddly_breakable_by_hand = 1},
sounds = default.node_sound_wood_defaults(),
selection_box = {
type = "fixed", fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, 0.5, 7 / 16},
}
})
minetest.register_node("ethereal:basandra_bush_leaves", {
description = S("Basandra Bush Leaves"),
drawtype = "allfaces_optional",
tiles = {"ethereal_basandra_bush_leaves.png"},
paramtype = "light",
groups = {snappy = 3, leaves = 1},
drop = {
max_items = 1,
items = {
{items = {"ethereal:basandra_bush_sapling"}, rarity = 5},
{items = {"ethereal:basandra_bush_leaves"}}
}
},
sounds = default.node_sound_leaves_defaults()
})
-- leafdecay helper function
local function decay(tru, lea, rad)
default.register_leafdecay({trunks = tru, leaves = lea, radius = rad})
end
-- add leafdecay registrations
decay({"default:tree"}, {"default:apple", "default:leaves", "ethereal:orange",
"ethereal:orange_leaves", "ethereal:lemon", "ethereal:lemon_leaves"}, 3)
decay({"ethereal:willow_trunk"}, {"ethereal:willow_twig"}, 3)
decay({"ethereal:redwood_trunk"}, {"ethereal:redwood_leaves"}, 3)
decay({"ethereal:frost_tree"}, {"ethereal:frost_leaves"}, 3)
decay({"ethereal:yellow_trunk"}, {"ethereal:yellowleaves", "ethereal:golden_apple"}, 3)
decay({"ethereal:palm_trunk"}, {"ethereal:palmleaves", "ethereal:coconut"}, 3)
decay({"ethereal:banana_trunk"}, {"ethereal:bananaleaves", "ethereal:banana",
"ethereal:banana_bunch"}, 3)
decay({"ethereal:birch_trunk"}, {"ethereal:birch_leaves"}, 3)
decay({"ethereal:bamboo"}, {"ethereal:bamboo_leaves"}, 3)
decay({"ethereal:sakura_trunk"}, {"ethereal:sakura_leaves", "ethereal:sakura_leaves2"}, 3)
decay({"ethereal:olive_trunk"}, {"ethereal:olive_leaves", "ethereal:olive"}, 3)
decay({"ethereal:mushroom_trunk"}, {"ethereal:mushroom", "ethereal:mushroom_brown",
"ethereal:mushroom_pore", "ethereal:lightstring"}, 4)
-- falling leaf particles
if minetest.settings:get_bool("ethereal.leaf_particles",false) ~= false then
local leaf_list = {
{"ethereal:frost_leaves", "331b37", 9},
{"ethereal:bananaleaves", "28581e"},
{"ethereal:lemon_leaves", "507c1e"},
{"ethereal:olive_leaves", "416531"},
{"ethereal:orange_leaves", "1a3b1b"},
{"ethereal:redwood_leaves", "15342a"},
{"ethereal:sakura_leaves", "c281a9"},
{"ethereal:sakura_leaves2", "d4cbac"},
{"ethereal:willow_twig", "0b9445"},
{"ethereal:yellowleaves", "8b5f00", 9},
{"ethereal:birch_leaves", "274527"},
{"ethereal:palmleaves", "2b6000"},
{"ethereal:bamboo_leaves", "445811"},
{"default:acacia_leaves", "296600"},
{"default:aspen_leaves", "395d16"},
{"default:jungleleaves", "141e10"},
{"default:pine_needles", "00280e"},
{"default:leaves", "223a20"}
}
minetest.register_abm({
label = "Ethereal falling leaves",
nodenames = {"group:leaves"},
neighbors = {"air"},
interval = 7,
chance = 50,
catch_up = false,
action = function(pos, node)
local text, glow
for n = 1, #leaf_list do
if node.name == leaf_list[n][1] then
text = "ethereal_falling_leaf.png^[multiply:#"
.. leaf_list[n][2] .. "70"
glow = leaf_list[n][3] ; break
end
end
if text then
minetest.add_particlespawner({
amount = 1,
time = 2,
minpos = {x = pos.x - 1, y = pos.y - 1, z = pos.z - 1},
maxpos = {x = pos.x + 1, y = pos.y, z = pos.z + 1},
minvel = {x = -0.8, y = -1, z = -0.8},
maxvel = {x = 0.8, y = -3, z = 0.8},
minacc = {x = -0.1, y = -1, z = -0.1},
maxacc = {x = 0.2, y = -3, z = 0.2},
minexptime = 5,
maxexptime = 10,
minsize = 3,
maxsize = 4,
collisiondetection = true, collision_removal = true,
texture = text,
vertical = true,
glow = glow
})
end
end
})
end
-- Special vine decay
local vo = vector.offset
local vinedir = {
[2] = function(v)
return vo(v,1,0,0)
end,
[3] = function(v)
return vo(v,-1,0,0)
end,
[4] = function(v)
return vo(v,0,0,1)
end,
[5] = function(v)
return vo(v,0,0,-1)
end,
}
minetest.register_abm({
label = "Ethereal vine decay",
nodenames = "ethereal:vine",
interval = 3,
chance = 2,
catch_up = false,
action = function(pos,node)
-- Only process if the vine is under a node that isn't another vine; vines
-- below vines are allowed to hang in the air
pos = vo(pos,0,1,0)
if minetest.get_node(pos).name ~= "ethereal:vine" then
local param2 = node.param2
local behindpos = vinedir[param2]
-- Do nothing if the vine is on the floor or ceiling
if not behindpos then
return
end
-- Process entire length of vine
behindpos = behindpos(pos)
local behind = nil
while true do
pos = vo(pos,0,-1,0)
behindpos = vo(behindpos,0,-1,0)
node = minetest.get_node(pos)
-- Remove the vine if it's part of a vine that's suspended in the air
if node.name == "ethereal:vine" and node.param2 == param2 and minetest.get_node(behindpos).name == "air" then
minetest.remove_node(pos)
minetest.check_for_falling(pos)
minetest.add_particlespawner({
amount = 8,
time = 0.001,
minpos = vector.subtract(pos, {x=0.5, y=0.5, z=0.5}),
maxpos = vector.add(pos, {x=0.5, y=0.5, z=0.5}),
minvel = vector.new(-0.5, -1, -0.5),
maxvel = vector.new(0.5, 0, 0.5),
minacc = vector.new(0, -9.81, 0),
maxacc = vector.new(0, -9.81, 0),
minsize = 0,
maxsize = 0,
node = { name = "ethereal:vine" },
})
else
-- We've reached something that isn't a vine, a vine facing in a
-- different direction, or a vine that is actually attached to
-- something, so stop processing
break
end
end
end
end,
})

223
mods/ethereal/license.txt Normal file
View file

@ -0,0 +1,223 @@
The MIT License (MIT)
Copyright (c) 2016 TenPlus1
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
Textures by TenPlus1 (CC0) unless listed below...
Textures by Hugues Ross (CC BY-SA 4.0):
ethereal_strawberry*.png
ethereal_wild_onion*.png
Textures by NameNotQuality (CC0):
ethereal_olive_leaves.png
ethereal_lemon_leaves.png
ethereal_frost_wood.png
ethereal_frost_tree.png
ethereal_frost_tree_top.png
ethereal_yellow_tree.png
ethereal_yellow_tree_top.png
ethereal_yellow_wood.png
Textures by Jeterel from OpenGameArt.org (CC0):
ethereal_banana_bread.png
Textures by SickleMoon and edited by TenPlus1 (CC0):
ethereal_illumishroom_red.png
ethereal_illumishroom_green.png
ethereal_illumishroom_cyan.png
Textures by TenPlus1 and resized/edited by NameNotQuality (CC0):
ethereal_banana_leaf.png
ethereal_basandra_bush_wood.png
ethereal_blue_marble.png
ethereal_blue_marble_tile.png
ethereal_redwood_wood.png
ethereal_redwood_trunk.png
ethereal_redwood_trunk_top.png
ethereal_sakura_trunk.png
ethereal_sakura_trunk_top.png
ethereal_sakura_wood.png
ethereal_willow_trunk.png
ethereal_willow_trunk_top.png
ethereal_willow_wood.png
Textures by Felfa and resized/edited by NameNotQuality (CC0):
ethereal_olive_trunk.png
ethereal_olive_trunk_top.png
ethereal_orange_leaves.png
Textures based on default minetest wood by alerikaisattera (CC BY-SA 3.0):
ethereal_birch_wood_alt.png
ethereal_redwood_wood_alt.png
ethereal_banana_wood_alt.png
ethereal_olive_wood_alt.png
ethereal_palm_wood_alt.png
ethereal_sakura_wood_alt.png
ethereal_willow_wood_alt.png
Based on pilzmod_giant_mushroom_brown_side.png (CC BY-SA 3.0) by Phseiff
ethereal_mushroom_block_brown.png
Based on default_leaves.png (Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
ethereal_frost_leaves.png [edited by TenPlus1]
ethereal_yellow_leaves.png [edited by TenPlus1]
ethereal_basandra_leaves.png [edited by TenPlus1]
Textures by BlueTangs Rock (CC BY-SA 3.0):
ethereal_seaweed.png
ethereal_fish_angler.png
ethereal_fish_bluefin.png
ethereal_fish_blueram.png
ethereal_fish_carp.png
ethereal_fish_catfish.png
ethereal_fish_chichlid.png
ethereal_fish_clownfish.png
ethereal_fish_cod.png
ethereal_fish_flathead.png
ethereal_fish_flounder.png
ethereal_fish_jellyfish.png
ethereal_fish_mackerel.png
ethereal_fish_parrot.png
ethereal_fish_pike.png
ethereal_fish_piranha.png
ethereal_fish_plaice.png
ethereal_fish_pufferfish.png
ethereal_fish_redsnapper.png
ethereal_fish_salmon.png
ethereal_fish_shrimp.png
ethereal_fish_shrimp_cooked.png
ethereal_fish_squid.png
ethereal_fish_tetra.png
ethereal_fish_tilapia.png
ethereal_fish_trevally.png
ethereal_fish_tuna.png
ethereal_fish_trout.png
ethereal_sashimi.png
ethereal_fugu.png
ethereal_fish_chips.png
ethereal_calamari_raw.png
ethereal_calamari_cooked.png
ethereal_garlic_butter_shrimp.png
Texture by Sirrobzeroone (CC0)
ethereal_fish_seahorse*.png
ethereal_fish_coy.png
ethereal_fish_cooked.png
Textures by Epoxum (CC0)
ethereal_sushi_*.png
Based on candle textures and coloured by wRothbard (CC0):
ethereal_candle_black.png
ethereal_candle_blue.png
ethereal_candle_cyan.png
ethereal_candle_dark_green.png
ethereal_candle_dark_grey.png
ethereal_candle_green.png
ethereal_candle_grey.png
ethereal_candle_magenta.png
ethereal_candle_orange.png
ethereal_candle_pink.png
ethereal_candle_red.png
ethereal_candle_violet.png
ethereal_candle_yellow.png
Based on default tool textures by BlockMen in Minetest (CC BY-SA 3.0):
ethereal_crystal_pick.png
ethereal_crystal_shovel.png
ethereal_crystal_axe.png
ethereal_crystal_sword.png
Based on texture by ElementW (CC BY-SA 3.0):
bucket_cactus.png
Based on tree textures by ElementW (CC BY-SA 3.0):
ethereal_scorched_tree.png
ethereal_scorched_tree_top.png
Based on wood texture by BlockMen (CC BY-SA 3.0):
ethereal_yellow_wood_alt.png [edited by alerikaisattera]
ethereal_frost_wood_alt.png [edited by alerikaisattera]
Based on bottle texture by Thomas-S (CC BY-SA 3.0):
ethereal_flight_potion.png
ethereal_firethorn_jelly.png
Textures based on default_grass.png and default_grass_side.png by TumeniNodes (CC BY-SA 3.0)
ethereal_grass_*.png [Edited by TenPlus1]
ethereal_crystal_moss.png
ethereal_mushroom_moss.png
ethereal_fiery_moss.png
ethereal_gray_moss.png
ethereal_green_moss.png
Texture by ZonerDarkRevention (CC0)
ethereal_bowl.png_32px
ethereal_crystal_spike_32px.png [edited by TenPlus1]
ethereal_teriyaki_beef_32px.png [edited by TenPlus1]
ethereal_hearty_stew_32px.png
Textures by VanessaE (CC-BY-SA 4.0)
moretrees_acacia_leaves.png
moretrees_birch_wood.png
moretrees_palm_trunk.png
moretrees_birch_leaves.png
moretrees_coconut.png
moretrees_palm_trunk_top.png
moretrees_birch_sapling.png
moretrees_coconut_slice.png
moretrees_palm_wood.png
moretrees_birch_trunk.png
moretrees_palm_leaves.png
moretrees_birch_trunk_top.png
moretrees_palm_sapling.png
ethereal_banana_wood.png (edited)
ethereal_olive_wood.png (edited)
Based on default ice texture by asl97 (CC BY-SA 3.0):
ethereal_brick_ice.png [edited by philipmi]
Based on default snow texture by Gambit (CC BY-SA 3.0):
ethereal_brick_snow.png [edited by philipmi]
Textures by Felfa (CC0)
ethereal_olive_trunk_32px.png
ethereal_olive_trunk_top_32px.png
ethereal_olive_leaves_32px.png
ethereal_olive_fruit.png
ethereal_lemon.png
ethereal_lemon_leaves.png
Textures by Isaiah658 (CC0)
ethereal_lemonade.png
ethereal_bamboo.png
Created by XSSheep (CC BY-SA 4.0 - https://minecraft.curseforge.com/projects/pixel-perfection-freshly-updated)
default_apple_gold.png
Sound by I_q (Attribution 3.0) https://freesound.org/people/l_q/sounds/440956/
ethereal_casting_rod.ogg
Sounds by eZZin (CC0) https://freesound.org/people/eZZin/sounds/667122/
ethereal_mushroom.ogg
Sound by Kostrava (CC0) https://freesound.org/people/Kostrava/sounds/333988/
ethereal_crystal.ogg

View file

@ -0,0 +1,151 @@
# textdomain: ethereal
Blue Marble=
Blue Marble Tile=
Crystal Spike=Kristallnadel
Crystal Ingot=Kristallbarren
Crystal Block=Kristallblock
Crystal Sword=Kristallschwert
Crystal Axe=Kristallaxt
Crystal Pickaxe=Kristallspitzhacke
Crystal Shovel=
Crystal Gilly Staff=Kristallener Gilly-Stab
Dried Dirt=Vertrocknete Erde
Red Baked Clay=Roter gebrannter Ton
Orange Baked Clay=Orange gebrannter Ton
Grey Baked Clay=Grauer gebrannter Ton
Quicksand=Treibsand
Etherium Dust=Etheriumstaub
Etherium Ore=Etheriumerz
Bamboo Floor=Bambusboden
Bamboo Block=Bambusblock
Palm Wax=Palmwachs
Bowl=Schale
Stone Ladder=Steinleiter
Paper Wall=Papierwand
Glo Stone=Leuchtstein
Lump of Charcoal=Holzkohleklumpen
Staff of Light=Stab des Lichts
Sakura Wood Door=Sakuraholztür
Fishing Rod (USE to cast and again when the time is right)=
Cooked Fish=Gekochter Fisch
Sashimi=Sashimi
Worm=Wurm
Flight timer about to expire!=
Flight Potion=
unlimited=
Flight already granted, @1 seconds left!=
Flight granted, you have @1 seconds!=
Banana=Banane
Banana Bunch=Bananenbündel
Banana Dough=Bananenteig
Orange=Orange
Pine Nuts=Kiefernkerne
Banana Loaf=Bananenbrot
Coconut=Kokosnuss
Coconut Slice=Kokosscheibe
Golden Apple=Goldener Apfel
Hearty Stew=Deftiger Eintopf
Bucket of Cactus Pulp=Eimer Kaktusmark
Firethorn Jelly=Feuerdorngelee
Lemon=
Candied Lemon=
Lemonade=
Olive=
Olive Oil=
Kappa Maki Sushi=
Nigiri Sushi=
Tamago Sushi=
Fugusashi=
Teriyaki Chicken=
Teriyaki Beef=
Mushroom Soup=Pilzsuppe
Boiled Shrimp=
Garlic Butter Shrimp=
Jellyfish Salad=
Raw Calamari=
Calamari=
Fish & Chips=
Willow Twig=Weidenrute
Redwood Leaves=Mammutbaumblätter
Orange Leaves=Orangenblätter
Banana Leaves=Bananenblätter
Healing Tree Leaves=Lebensbaumblätter
Palm Leaves=Palmenblätter
Birch Leaves=Birkenblätter
Frost Leaves=Frostblätter
Bamboo Leaves=Bambusblätter
Sakura Leaves=Sakurablätter
Lemon Tree Leaves=
Olive Tree Leaves=
Mushroom Cap=Pilzkappe
Mushroom Pore=Pilzpore
Bush=Busch
Bush #2=Busch #2
Bush #3=Busch #3
Basandra Bush Stem=
Basandra Bush Leaves=
Wild Onion=Wildzwiebel
Spore Grass=
Firethorn Shrub=Feuerdornbusch
Fire Flower=Feuerblume
Fire Dust=Feuerstaub
Vine=Liane
Light String Vine=Leuchtschnurrebe
Fern=Farn
Fern Tubers=Farnsporenkapseln
Fiery Dry Shrub=Feuerroter vertrockneter Strauch
Snowy Grass=Verschneites Gras
Crystal Grass=Kristallgras
Lilac=
Basandra Bush Sapling=
Bamboo Sprout=Bambussprosse
Schematic not found=Schematic nicht gefunden
Seaweed=Seetang
Agar Powder=Agarpulver
Blue Glow Coral=Blaue Leuchtende Koralle
Orange Glow Coral=Orange Leuchtende Koralle
Pink Glow Coral=Rosa Leuchtende Koralle
Green Glow Coral=Grüne Leuchtende Koralle
Sandy=Sandy
Wet sponge=Nasser Schwamm
Sponge=Schwamm
Strawberry=Erdbeere
Ice Brick=Eisziegel
Snow Brick=Schneeziegel
Basandra Wood=
Sakura Trunk=Sakurastamm
Sakura Wood=Sakuraholz
Willow Trunk=Weidenstamm
Willow Wood=Weidenholz
Redwood Trunk=Mammutbaumstamm
Redwood Wood=Mammutbaumholz
Frost Tree=Frostbaum
Frost Wood=Frostholz
Healing Tree Trunk=Lebensbaumstamm
Healing Tree Wood=Lebensbaumholz
Palm Trunk=Palmstamm
Palm Wood=Palmholz
Banana Trunk=Bananenstamm
Banana Wood=Bananenholz
Scorched Tree=Verbrannter Baum
Mushroom=Pilz
Birch Trunk=Birkenstamm
Birch Wood=Birkenholz
Bamboo=Bambus
Olive Trunk=
Olive Wood=
Candle=Kerze
Black Candle=Schwarze Kerze
Blue Candle=Blaue Kerze
Brown Candle=Braune Kerze
Cyan Candle=Türkise Kerze
Dark Green Candle=Dunkelgrüne Kerze
Dark Grey Candle=Dunkelgraue Kerze
Green Candle=Grüne Kerze
Grey Candle=Graue Kerze
Magenta Candle=Magenta Kerze
Orange Candle=Orange Kerze
Pink Candle=Rosa Kerze
Red Candle=Rote Kerze
Violet Candle=Violette Kerze
Yellow Candle=Gelbe Kerze

View file

@ -0,0 +1,136 @@
# textdomain: ethereal
Blue Marble=
Blue Marble Tile=
Crystal Spike=
Crystal Ingot=
Crystal Block=
Crystal Sword=
Crystal Axe=
Crystal Pickaxe=
Crystal Shovel=
Crystal Gilly Staff=
Dried Dirt=
Red Baked Clay=
Orange Baked Clay=
Grey Baked Clay=
Quicksand=
Etherium Dust=
Etherium Ore=
Bamboo Floor=
Bamboo Block=
Palm Wax=
Bowl=
Stone Ladder=
Paper Wall=
Glo Stone=
Lump of Charcoal=
Staff of Light=
Sakura Wood Door=
Fishing Rod (USE to cast and again when the time is right)=
Cooked Fish=
Sashimi=
Worm=
Flight timer about to expire!=
Flight Potion=
unlimited=
Flight already granted, @1 seconds left!=
Flight granted, you have @1 seconds!=
Banana=
Banana Bunch=
Banana Dough=
Orange=
Pine Nuts=
Banana Loaf=
Coconut=
Coconut Slice=
Golden Apple=
Hearty Stew=
Bucket of Cactus Pulp=
Firethorn Jelly=
Lemon=
Candied Lemon=
Lemonade=
Olive=
Olive Oil=
Kappa Maki Sushi=
Nigiri Sushi=
Tamago Sushi=
Fugusashi=
Teriyaki Chicken=
Teriyaki Beef=
Mushroom Soup=
Boiled Shrimp=
Garlic Butter Shrimp=
Jellyfish Salad=
Raw Calamari=
Calamari=
Fish & Chips=
Willow Twig=
Redwood Leaves=
Orange Leaves=
Banana Leaves=
Healing Tree Leaves=
Palm Leaves=
Birch Leaves=
Frost Leaves=
Bamboo Leaves=
Sakura Leaves=
Lemon Tree Leaves=
Olive Tree Leaves=
Mushroom Cap=
Mushroom Pore=
Bush=
Bush #2=
Bush #3=
Basandra Bush Stem=
Basandra Bush Leaves=
Wild Onion=
Spore Grass=
Firethorn Shrub=
Fire Flower=
Fire Dust=
Vine=
Light String Vine=
Fern=
Fern Tubers=
Fiery Dry Shrub=
Snowy Grass=
Crystal Grass=
Lilac=
Basandra Bush Sapling=
Bamboo Sprout=
Schematic not found=
Seaweed=
Agar Powder=
Blue Glow Coral=
Orange Glow Coral=
Pink Glow Coral=
Green Glow Coral=
Sandy=
Wet sponge=
Sponge=
Strawberry=
Ice Brick=
Snow Brick=
Basandra Wood=
Sakura Trunk=
Sakura Wood=
Willow Trunk=
Willow Wood=
Redwood Trunk=
Redwood Wood=
Frost Tree=
Frost Wood=
Healing Tree Trunk=
Healing Tree Wood=
Palm Trunk=
Palm Wood=
Banana Trunk=
Banana Wood=
Scorched Tree=
Mushroom=
Birch Trunk=
Birch Wood=
Bamboo=
Olive Trunk=
Olive Wood=

View file

@ -0,0 +1,136 @@
# textdomain: ethereal
Blue Marble=Mármol azul
Blue Marble Tile=Baldosa de marmol azul
Crystal Spike=Púa de Cristal
Crystal Ingot=Lingote de Cristal
Crystal Block=Bloque de Cristal
Crystal Sword=Espada de Cristal
Crystal Axe=Hacha de Cristal
Crystal Pickaxe=Pico de Cristal
Crystal Shovel=Pala de Cristal
Crystal Gilly Staff=Bastón de Cristal de Gilly
Dried Dirt=Tierra seca
Red Baked Clay=Arcilla roja cocida
Orange Baked Clay=Arcilla naranja cocida
Grey Baked Clay=Arcilla gris cocida
Quicksand=Arena movediza
Etherium Dust=Polvo de Etherium
Etherium Ore=Mineral de Etherium
Bamboo Floor=Piso de bamboo
Bamboo Block=Bloque de bamboo
Palm Wax=Cera de palma
Bowl=Tazón
Stone Ladder=Escalera de piedra
Paper Wall=Papel mural
Glo Stone=Piedra brillante
Lump of Charcoal=Carbón de madera
Staff of Light=Bastón de Luz
Sakura Wood Door=Puerta de madera de sakura
Fishing Rod (USE to cast and again when the time is right)=Caña de pescar (Botón principal para lanzar, cuando sea el momento adecuado vuelve a presionarlo)
Cooked Fish=Pescado cocido
Sashimi=Sashimi
Worm=Gusano
Flight timer about to expire!=¡El tiempo de vuelo está apunto de acabarse!
Flight Potion=Poción de vuelo
unlimited=
Flight already granted, @1 seconds left!=El vuelo ya ha sido otorgado, ¡te quedan @1 segundos!
Flight granted, you have @1 seconds!=Ya puedes volar, ¡tienes @1 segundos!
Banana=Banana
Banana Bunch=Racimo de bananas
Banana Dough=Masa de banana
Orange=Naranja
Pine Nuts=Piñones
Banana Loaf=Pan de banana
Coconut=Coco
Coconut Slice=Trozo de coco
Golden Apple=Manzana de oro
Hearty Stew=Guiso abundante
Bucket of Cactus Pulp=Cubo de pulpa de cactus
Firethorn Jelly=Jalea de Firethorn
Lemon=Limón
Candied Lemon=Limón confitado
Lemonade=Limonada
Olive=Aceituna
Olive Oil=Aceite de oliva
Kappa Maki Sushi=Sushi Kappa Maki
Nigiri Sushi=Sushi Nigiri
Tamago Sushi=Sushi Tamago
Fugusashi=Fugusashi
Teriyaki Chicken=Pollo Teriyaki
Teriyaki Beef=Asado Teriyaki
Mushroom Soup=Sopa de champiñón
Boiled Shrimp=
Garlic Butter Shrimp=
Jellyfish Salad=
Raw Calamari=
Calamari=
Fish & Chips=
Willow Twig=Ramas de sauce
Redwood Leaves=Hojas de secoya
Orange Leaves=Hojas de naranja
Banana Leaves=Hojas de banana
Healing Tree Leaves=Hojas de árbol sanador
Palm Leaves=Hojas de palma
Birch Leaves=Hojas de abedul
Frost Leaves=Hojas congeladas
Bamboo Leaves=Hojas de bamboo
Sakura Leaves=Hojas de sakura
Lemon Tree Leaves=Hojas de limonero
Olive Tree Leaves=Hojas de olivo
Mushroom Cap=Sombrero de champiñón
Mushroom Pore=Esporas de champiñón
Bush=Arbusto
Bush #2=Arbusto #2
Bush #3=Arbusto #3
Basandra Bush Stem=
Basandra Bush Leaves=
Wild Onion=Cebolla silvestre
Spore Grass=
Firethorn Shrub=Arbusto de Firethorn
Fire Flower=Flor de fuego
Fire Dust=Polvo de fuego
Vine=Enredadera
Light String Vine=Enredadera luminosa
Fern=Helecho
Fern Tubers=Tubérculos de helecho
Fiery Dry Shrub=Arbusto seco de fuego
Snowy Grass=Pasto nevado
Crystal Grass=Pasto de cristal
Lilac=
Basandra Bush Sapling=
Bamboo Sprout=Brote de bamboo
Schematic not found=Schematica no encontrada
Seaweed=Alga marina
Agar Powder=Polvo de Agar
Blue Glow Coral=Coral azul brillante
Orange Glow Coral=Coral naranjo brillante
Pink Glow Coral=Coral rosado brillante
Green Glow Coral=Coral verde brillante
Sandy=
Wet sponge=Esponja de mar con agua
Sponge=Esponja de mar
Strawberry=Fresa
Ice Brick=Ladrillo de hielo
Snow Brick=Ladrillo de nieve
Basandra Wood=
Sakura Trunk=Tronco de sakura
Sakura Wood=Madera de sakura
Willow Trunk=Tronco de sauce
Willow Wood=Madera de sauce
Redwood Trunk=Tronco de secoya
Redwood Wood=Madera de secoya
Frost Tree=Árbol sanador
Frost Wood=Madera congelada
Healing Tree Trunk=Tronco de árbol sanador
Healing Tree Wood=Madera de árbol sanador
Palm Trunk=Tronco de palma
Palm Wood=Madera de palma
Banana Trunk=Tronco de banana
Banana Wood=Madera de banana
Scorched Tree=Árbol quemado
Mushroom=Champiñón
Birch Trunk=Tronco de abedul
Birch Wood=Madera de abedul
Bamboo=Bamboo
Olive Trunk=Tronco de olivo
Olive Wood=Madera de olivo

View file

@ -0,0 +1,137 @@
# textdomain: ethereal
Blue Marble=Marbre bleu
Blue Marble Tile=Dalle de marbre bleu
Crystal Spike=Pic de cristal
Crystal Ingot=Lingot de cristal
Crystal Block=Bloc de cristal
Crystal Sword=Épée de cristal
Crystal Axe=Hâche de cristal
Crystal Pickaxe=Pioche de cristal
Crystal Shovel=Pelle de cristal
Crystal Gilly Staff=Baton de cristal
Dried Dirt=Terre désséché
Red Baked Clay=Terre cuite rouge
Orange Baked Clay=Terre cuite orange
Grey Baked Clay=Terre cuite grise
Quicksand=Sables mouvants
Etherium Dust=Poudre céleste
Etherium Ore=Minerai céleste
Bamboo Floor=Plancher de bambou
Bamboo Block=Bloc de bambou
Paper Wall=Mur en papiers
Palm Wax=Cire de palmier
Bowl=Bol
Stone Ladder=Échelle en pierre
Paper Wall=Mur en papier
Glo Stone=Pierre luminescente
Lump of Charcoal=Morceau de charbon de bois
Staff of Light=Bâton de lumière
Sakura Wood Door=Porte en bois de cerisier Japonais
Fishing Rod (USE to cast and again when the time is right)=Canne à pêche (Action pour lancer, puis action pour mouliner au bon moment)
Cooked Fish=Poisson cuisiné
Sashimi=Sashimi
Worm=Ver
Flight timer about to expire!=La potion de vol se discipe!
Flight Potion=Potion de vol
unlimited=illimité
Flight already granted, @1 seconds left!=Vous pouvez déjà voler pendant @1 secondes!
Flight granted, you have @1 seconds!=Vous pouvez maintenant voler pendant @1 secondes!
Banana=Banane
Banana Bunch=Régime de banane
Banana Dough=Pâton de pain de banane
Orange=Orange
Pine Nuts=Pignon de pin
Banana Loaf=Pain de banane
Coconut=Noix de coco
Coconut Slice=Morceau de noix de coco
Golden Apple=Pomme dorée
Hearty Stew=Ragoût copieux
Bucket of Cactus Pulp=Seau de pulpe de cactus
Firethorn Jelly=Gelée de Pyracantha
Lemon=Citron
Candied Lemon=Citron confit
Lemonade=Limonade
Olive=Olive
Olive Oil=Huile d'olive
Kappa Maki Sushi=Maki au concombre
Nigiri Sushi=Nigiri au saumon
Tamago Sushi=Yaki à l'omelette
Fugusashi=Sashimi au fugu
Teriyaki Chicken=Poulet teriyaki
Teriyaki Beef=Boeuf teriyaki
Mushroom Soup=Soupe aux champignons
Boiled Shrimp=Crevettes vapeur
Garlic Butter Shrimp=Crevettes au beurre d'ail
Jellyfish Salad=Salade de calamar
Raw Calamari=Calamar cru
Calamari=Beignet de calamar
Fish & Chips=Fish & chips
Willow Twig=Brindille de saule
Redwood Leaves=Feuilles de séquoia
Orange Leaves=Feuilles d'oranger
Banana Leaves=Feuilles de bananier
Healing Tree Leaves=Feuilles de l'arbre à soins
Palm Leaves=Feuilles de palmier
Birch Leaves=Feuilles de bouleau
Frost Leaves=Feuilles de givrier
Bamboo Leaves=Feuilles de bambou
Sakura Leaves=Feuilles de cerisier du Japon
Lemon Tree Leaves=Feuilles de citronier
Olive Tree Leaves=Feuilles d'olivier
Mushroom Cap=Chapeau de champignon
Mushroom Pore=spore de champignon
Bush=Arbuste
Bush #2=Arbuste #2
Bush #3=Arbuste #3
Basandra Bush Stem=Tige de buisson de bassandre
Basandra Bush Leaves=Feuilles de buisson de bassandre
Wild Onion=Oignon sauvage
Spore Grass=Spore d'herbe
Firethorn Shrub=Arbuste Pyracantha
Fire Flower=Fleur de feu
Fire Dust=Poudre de feu
Vine=Vigne
Light String Vine=File de lumière de vigne
Fern=Fougère
Fern Tubers=Tubercules de fougère
Fiery Dry Shrub=Arbuste ardent sec
Snowy Grass=Herbe des neiges
Crystal Grass=Herbe de cristal
Lilac=Lilas
Basandra Bush Sapling=Buisson de bassandre
Bamboo Sprout=Germe de bambou
Schematic not found=Schéma introuvable
Seaweed=Algues
Agar Powder=Poudre d'agar
Blue Glow Coral=Corail lueur bleu
Orange Glow Coral=Corail lueur orange
Pink Glow Coral=Corail lueur rose
Green Glow Coral=Corail lueur vert
Sandy=Sable de mer
Wet sponge=Éponge mouillée
Sponge=Éponge
Strawberry=Fraise
Ice Brick=Brique de glace
Snow Brick=Brique de neige
Basandra Wood=Bois de bassandre
Sakura Trunk=Tronc de cerisier du Japon
Sakura Wood=Bois de cerisier du Japon
Willow Trunk=Tronc de saule
Willow Wood=Bois de saule
Redwood Trunk=Tronc de séquoia
Redwood Wood=Bois de séquoia
Frost Tree=Abre de gîvre
Frost Wood=Bois de l'arbre à givre
Healing Tree Trunk=Tronc de l'arbre à soins
Healing Tree Wood=Bois de l'arbre à soins
Palm Trunk=Tronc de palmier
Palm Wood=Bois de palmier
Banana Trunk=Tronc de bananier
Banana Wood=Bois de bananier
Scorched Tree=Arbre brûlé
Mushroom=Champignon
Birch Trunk=Tronc de bouleau
Birch Wood=Bois de bouleau
Bamboo=Bambou
Olive Trunk=Tronc d'olivier
Olive Wood=Bois d'olivier

View file

@ -0,0 +1,140 @@
# textdomain: ethereal
## Items, nodes and other in-game stuff
Blue Marble=Голубой Мрамор
Blue Marble Tile=Плитка Голубого Мрамора
Crystal Spike=Кристальный Шип
Crystal Ingot=Кристальный Слиток
Crystal Block=Кристальный Блок
Crystal Sword=Кристальный Меч
Crystal Axe=Кристальный Топор
Crystal Pickaxe=Кристальная Кирка
Crystal Shovel=Кристальная Лопата
Crystal Gilly Staff=Кристальный Джилли Посох
Dried Dirt=Сухая Земля
Red Baked Clay=Красная Приготовленная Глина
Orange Baked Clay=Оранжевая Приготовленная Глина
Grey Baked Clay=Серая Приготовленная Глина
Quicksand=Зыбучий песок
Etherium Dust=Эфирная Пыль
Etherium Ore=Эфирная Руда
Bamboo Floor=Бамбуковый Пол
Bamboo Block=Бамбуковый Блок
Paper Wall=Бумажная Стена
Palm Wax=Пальмовый Воск
Bowl=Миска
Stone Ladder=Каменная Лестница
Glo Stone=Гло Камень
Lump of Charcoal=Кусочек Древесного угля
Staff of Light=Посох Света
Sakura Wood Door=Деревянная Дверь из Сакуры
Fishing Rod (USE to cast and again when the time is right)=Удочка (ИСПОЛЬЗУЙТЕ для заброса и повторите, когда придет время)
Cooked Fish=Приготовленная Рыба
Sashimi=Сашими
Worm=Червяк
Flight Potion=Зелье Полёта
Banana=Банан
Banana Bunch=Кучка Бананов
Banana Dough=Банановое Тесто
Orange=Апельсин
Pine Nuts=Кедровые Орехи
Banana Loaf=Банановый Рулет
Coconut=Кокос
Coconut Slice=Кокосовый Кусочек
Golden Apple=Золотое Яблоко
Hearty Stew=Сытное Рагу
Bucket of Cactus Pulp=Ведро с Кактусовой Мякотью
Firethorn Jelly=Желе из Терновника
Lemon=Лимон
Candied Lemon=Засахаренный Лимон
Lemonade=Лимонад
Olive=Оливка
Olive Oil=Оливковое Масло
Kappa Maki Sushi=Суши "Каппа Маки"
Nigiri Sushi=Суши "Нигири"
Tamago Sushi=Суши "Тамаго"
Fugusashi=Фугусаши
Teriyaki Chicken=Курица Терияки
Teriyaki Beef=Говядина Терияки
Mushroom Soup=Суп из Грибов
Boiled Shrimp=Вареные Креветки
Garlic Butter Shrimp=Креветки в чесночном масле
Jellyfish Salad=Салат из Медуз
Raw Calamari=Сырой Кальмар
Calamari=Кальмар
Fish & Chips=Рыба и Чипсы
Willow Twig=Ивовый Прутик
Redwood Leaves=Листья Красного дерева
Orange Leaves=Апельсиновые Листья
Banana Leaves=Банановые Листья
Healing Tree Leaves=Листья Целебного Дерева
Palm Leaves=Пальмовые Листья
Birch Leaves=Берёзовые Листья
Frost Leaves=Морозные Листья
Bamboo Leaves=Бамбуковые Листья
Sakura Leaves=Листья Сакуры
Lemon Tree Leaves=Листья Лимонного Дерева
Olive Tree Leaves=Листья Оливкого Дерева
Mushroom Cap=Шапка Гриба
Mushroom Pore=Скважина Гриба
Bush=Куст
Bush #2=Куст #2
Bush #3=Куст #3
Basandra Bush Stem=Стебель Куста Басандры
Basandra Bush Leaves=Листья Куста Басандры
Wild Onion=Дикий Лук
Spore Grass=Споровая Трава
Firethorn Shrub=Куст Терновника
Fire Flower=Огненный Цветок
Fire Dust=Огненная Пыль
Vine=Лианы
Light String Vine=Легко-Струнная Виноградная Лоза
Fern=Папоротник
Fern Tubers=Клубни Папоротника
Fiery Dry Shrub=Огненный Сухой кустарник
Snowy Grass=Заснеженная Трава
Crystal Grass=Кристальная Трава
Lilac=Сирень
Basandra Bush Sapling=Росток Куста Басандры
Bamboo Sprout=Росток Бамбука
Seaweed=Морские водоросли
Agar Powder=Агаровый Порошок
Blue Glow Coral=Голубой Cветящийся Коралл
Orange Glow Coral=Оранжевый Cветящийся Коралл
Pink Glow Coral=Розовый Cветящийся Коралл
Green Glow Coral=Зелёный Cветящийся Коралл
Sandy=Песчаный
Wet sponge=Мокрая губка
Sponge=Губка
Strawberry=Клубника
Ice Brick=Ледяной Кирпич
Snow Brick=Снежный Кирпич
Basandra Wood=Древесина Басандры
Sakura Trunk=Ствол Сакуры
Sakura Wood=Древесина Сакуры
Willow Trunk=Ствол Ивы
Willow Wood=Древесина Ивы
Redwood Trunk=Ствол Красного дерева
Redwood Wood=Древесина Красного дерева
Frost Tree=Морозное Дерево
Frost Wood=Морозная Древесина
Healing Tree Trunk=Ствол Целебного Дерева
Healing Tree Wood=Древесина Целебного Дерева
Palm Trunk=Пальмовый Ствол
Palm Wood=Пальмовая Древесина
Banana Trunk=Банановый Ствол
Banana Wood=Банановая Древесина
Scorched Tree=Обгоревшее Дерево
Mushroom=Гриб
Birch Trunk=
Birch Wood=
Bamboo=Бамбук
Olive Trunk=Оливковый Ствол
Olive Wood=Оливковая Древесина
## Messages
unlimited=неограниченно
Flight timer about to expire!=Таймер полёта скоро истечёт!
Flight already granted, @1 seconds left!=Полёт уже выдан, @1 секунд осталось!
Flight granted, you have @1 seconds!=Полёт выдан, у вас @1 секунд!
Schematic not found=

View file

@ -0,0 +1,136 @@
# textdomain: ethereal
Blue Marble=
Blue Marble Tile=
Crystal Spike=水晶尖
Crystal Ingot=水晶锭
Crystal Block=水晶块
Crystal Sword=水晶剑
Crystal Axe=水晶斧
Crystal Pickaxe=水晶锄
Crystal Shovel=
Crystal Gilly Staff=水晶网络人员
Dried Dirt=干土
Red Baked Clay=红色烤粘土
Orange Baked Clay=橙色烤粘土
Grey Baked Clay=灰色烤粘土
Quicksand=流沙
Etherium Dust=
Etherium Ore=
Bamboo Floor=竹地板
Bamboo Block=
Palm Wax=棕榈蜡
Bowl=碗
Stone Ladder=石梯
Paper Wall=纸墙
Glo Stone=荧光石
Lump of Charcoal=块木炭
Staff of Light=灯柱
Sakura Wood Door=
Fishing Rod (USE to cast and again when the time is right)=
Cooked Fish=煮熟的鱼
Sashimi=生鱼片
Worm=蠕虫
Flight timer about to expire!=
Flight Potion=
unlimited=
Flight already granted, @1 seconds left!=
Flight granted, you have @1 seconds!=
Banana=香蕉
Banana Bunch=
Banana Dough=香蕉皮
Orange=橙子
Pine Nuts=松子
Banana Loaf=香蕉面包
Coconut=椰子
Coconut Slice=椰子片
Golden Apple=金苹果
Hearty Stew=丰盛的炖肉
Bucket of Cactus Pulp=仙人掌果肉桶
Firethorn Jelly=
Lemon=
Candied Lemon=
Lemonade=
Olive=
Olive Oil=
Kappa Maki Sushi=
Nigiri Sushi=
Tamago Sushi=
Fugusashi=
Teriyaki Chicken=
Teriyaki Beef=
Mushroom Soup=蘑菇汤
Boiled Shrimp=
Garlic Butter Shrimp=
Jellyfish Salad=
Raw Calamari=
Calamari=
Fish & Chips=
Willow Twig=柳树枝
Redwood Leaves=红杉树叶
Orange Leaves=橙子树叶
Banana Leaves=香蕉树叶
Healing Tree Leaves=治疗树叶
Palm Leaves=棕榈叶
Birch Leaves=白桦树叶
Frost Leaves=霜叶子
Bamboo Leaves=竹叶
Sakura Leaves=
Lemon Tree Leaves=
Olive Tree Leaves=
Mushroom Cap=蘑菇帽
Mushroom Pore=蘑菇孔隙
Bush=灌木
Bush #2=灌木 #2
Bush #3=灌木 #3
Basandra Bush Stem=
Basandra Bush Leaves=
Wild Onion=野生洋葱
Spore Grass=
Firethorn Shrub=
Fire Flower=火焰花
Fire Dust=火土
Vine=藤蔓
Light String Vine=荧光藤蔓
Fern=蕨类植物
Fern Tubers=蕨类植物的茎
Fiery Dry Shrub=干枯灌木
Snowy Grass=雪草
Crystal Grass=水晶草
Lilac=
Basandra Bush Sapling=
Bamboo Sprout=竹笋
Schematic not found=没有找到示意图
Seaweed=海藻
Agar Powder=
Blue Glow Coral=蓝色珊瑚
Orange Glow Coral=橙色珊瑚
Pink Glow Coral=粉色珊瑚
Green Glow Coral=绿色珊瑚
Sandy=沙子
Wet sponge=
Sponge=
Strawberry=草莓
Ice Brick=冰砖
Snow Brick=雪砖
Basandra Wood=
Sakura Trunk=
Sakura Wood=
Willow Trunk=柳树树干
Willow Wood=柳树木
Redwood Trunk=红木箱子
Redwood Wood=红木木材
Frost Tree=霜树
Frost Wood=霜木
Healing Tree Trunk=治疗树干
Healing Tree Wood=治疗树木材
Palm Trunk=棕榈树干
Palm Wood=棕榈木
Banana Trunk=香蕉树干
Banana Wood=香蕉木
Scorched Tree=烧焦的树
Mushroom=蘑菇
Birch Trunk=桦树树干
Birch Wood=白桦木材
Bamboo=竹子
Olive Trunk=
Olive Wood=

View file

@ -0,0 +1,152 @@
# textdomain: ethereal
Blue Marble=
Blue Marble Tile=
Crystal Spike=
Crystal Ingot=
Crystal Block=
Crystal Sword=
Crystal Axe=
Crystal Pickaxe=
Crystal Shovel=
Crystal Gilly Staff=
Dried Dirt=
Red Baked Clay=
Orange Baked Clay=
Grey Baked Clay=
Quicksand=
Etherium Dust=
Etherium Ore=
Bamboo Floor=
Bamboo Block=
Paper Wall=
Palm Wax=
Bowl=
Stone Ladder=
Paper Wall=
Glo Stone=
Lump of Charcoal=
Staff of Light=
Sakura Wood Door=
Fishing Rod (USE to cast and again when the time is right)=
Cooked Fish=
Sashimi=
Worm=
Flight timer about to expire!=
Flight Potion=
unlimited=
Flight already granted, @1 seconds left!=
Flight granted, you have @1 seconds!=
Banana=
Banana Bunch=
Banana Dough=
Orange=
Pine Nuts=
Banana Loaf=
Coconut=
Coconut Slice=
Golden Apple=
Hearty Stew=
Bucket of Cactus Pulp=
Firethorn Jelly=
Lemon=
Candied Lemon=
Lemonade=
Olive=
Olive Oil=
Kappa Maki Sushi=
Nigiri Sushi=
Tamago Sushi=
Fugusashi=
Teriyaki Chicken=
Teriyaki Beef=
Mushroom Soup=
Boiled Shrimp=
Garlic Butter Shrimp=
Jellyfish Salad=
Raw Calamari=
Calamari=
Fish & Chips=
Willow Twig=
Redwood Leaves=
Orange Leaves=
Banana Leaves=
Healing Tree Leaves=
Palm Leaves=
Birch Leaves=
Frost Leaves=
Bamboo Leaves=
Sakura Leaves=
Lemon Tree Leaves=
Olive Tree Leaves=
Mushroom Cap=
Mushroom Pore=
Bush=
Bush #2=
Bush #3=
Basandra Bush Stem=
Basandra Bush Leaves=
Wild Onion=
Spore Grass=
Firethorn Shrub=
Fire Flower=
Fire Dust=
Vine=
Light String Vine=
Fern=
Fern Tubers=
Fiery Dry Shrub=
Snowy Grass=
Crystal Grass=
Lilac=
Basandra Bush Sapling=
Bamboo Sprout=
Schematic not found=
Seaweed=
Agar Powder=
Blue Glow Coral=
Orange Glow Coral=
Pink Glow Coral=
Green Glow Coral=
Sandy=
Wet sponge=
Sponge=
Strawberry=
Ice Brick=
Snow Brick=
Basandra Wood=
Sakura Trunk=
Sakura Wood=
Willow Trunk=
Willow Wood=
Redwood Trunk=
Redwood Wood=
Frost Tree=
Frost Wood=
Healing Tree Trunk=
Healing Tree Wood=
Palm Trunk=
Palm Wood=
Banana Trunk=
Banana Wood=
Scorched Tree=
Mushroom=
Birch Trunk=
Birch Wood=
Bamboo=
Olive Trunk=
Olive Wood=
Candle=
Black Candle=
Blue Candle=
Brown Candle=
Cyan Candle=
Dark Green Candle=
Dark Grey Candle=
Green Candle=
Grey Candle=
Magenta Candle=
Orange Candle=
Pink Candle=
Red Candle=
Violet Candle=
Yellow Candle=

View file

@ -0,0 +1,231 @@
-- ethereal schematic path
local epath = minetest.get_modpath("ethereal") .. "/schematics/"
-- add schematics
lucky_block:add_schematics({
{"pinetree", ethereal.pinetree, {x = 3, y = 0, z = 3}},
{"palmtree", ethereal.palmtree, {x = 4, y = 0, z = 4}},
{"bananatree", ethereal.bananatree, {x = 3, y = 0, z = 3}},
{"orangetree", ethereal.orangetree, {x = 2, y = 0, z = 2}},
{"birchtree", ethereal.birchtree, {x = 2, y = 0, z = 2}},
{"basandrabush", ethereal.basandrabush, {x = 1, y = 0, z = 1}},
{"mushroomone", ethereal.mushroomone, {x = 4, y = 0, z = 4}},
{"mushroomtwo", ethereal.mushroomtwo, {x = 1, y = 0, z = 1}},
{"underspike", ethereal.desertstone_under_spike, {x = 1, y = 0, z = 1}},
{"ethereal_pond", ethereal.pond, {x = 6, y = 2, z = 7}}
})
-- add lucky blocks
lucky_block:add_blocks({
{"sch", "basandrabush", 0, false},
{"dro", {"ethereal:basandra_wood"}, 5},
{"dro", {"ethereal:firethorn"}, 3},
{"dro", {"ethereal:firethorn_jelly"}, 3},
{"nod", "ethereal:crystal_spike", 1},
{"sch", "pinetree", 0, false},
{"dro", {"ethereal:orange"}, 10},
{"sch", "appletree", 0, false},
{"dro", {"ethereal:strawberry"}, 10},
{"sch", "bananatree", 0, false},
{"sch", "orangetree", 0, false},
{"dro", {"ethereal:banana"}, 10},
{"sch", "acaciatree", 0, false},
{"dro", {"ethereal:golden_apple"}, 3},
{"sch", "palmtree", 0, false},
{"dro", {"ethereal:tree_sapling"}, 5},
{"dro", {"ethereal:orange_tree_sapling"}, 5},
{"dro", {"ethereal:banana_tree_sapling"}, 5},
{"dro", {"ethereal:willow_sapling"} ,5},
{"dro", {"ethereal:mushroom_sapling"} ,5},
{"dro", {"ethereal:palm_sapling"} ,5},
{"sch", "mushroomone", 0, false},
{"dro", {"ethereal:flight_potion"}, 1},
{"dro", {"ethereal:birch_sapling"} ,5},
{"dro", {"ethereal:redwood_sapling"} ,1},
{"dro", {"ethereal:prairie_dirt"}, 10},
{"dro", {"ethereal:grove_dirt"}, 10},
{"fal", {"default:lava_source", "default:lava_source", "default:lava_source",
"default:lava_source", "default:lava_source"}, 1, true, 4},
{"dro", {"ethereal:cold_dirt"}, 10},
{"dro", {"ethereal:mushroom_dirt"}, 10},
{"dro", {"ethereal:fiery_dirt"}, 10},
{"sch", "mushroomtwo", 0, false},
{"dro", {"ethereal:axe_crystal"}},
{"nod", "ethereal:fire_flower", 1},
{"dro", {"ethereal:sword_crystal"}},
{"nod", "ethereal:basandra_bush_stem", 1},
{"dro", {"ethereal:pick_crystal"}},
{"sch", "birchtree", 0, false},
{"dro", {"ethereal:fish_raw"}},
{"dro", {"ethereal:shovel_crystal"}},
{"dro", {"ethereal:fishing_rod_baited"}},
{"exp"},
{"sch", "underspike", 0, false},
{"sch", "underspike", 0, false, {
{"default:cobble", "default:desert_cobble"},
{"default:stone", "default:desert_stone"}
}},
{"sch", "underspike", 0, false, {
{"default:cobble", "default:sandstone"},
{"default:stone", "default:sandstonebrick"}
}},
{"sch", "underspike", 0, false, {
{"default:cobble", "default:desert_sandstone"},
{"default:stone", "default:desert_sandstone_brick"}
}},
{"sch", "underspike", 0, false, {
{"default:cobble", "default:silver_sandstone"},
{"default:stone", "default:silver_sandstone_brick"}
}},
{"dro", {"ethereal:fire_dust"}, 2},
{"exp", 4},
{"dro", {"ethereal:crystal_gilly_staff"}},
{"dro", {"ethereal:light_staff"}},
{"nod", "default:chest", 0, {
{name = "ethereal:birch_sapling", max = 10},
{name = "ethereal:palm_sapling", max = 10},
{name = "ethereal:orange_tree_sapling", max = 10},
{name = "ethereal:redwood_sapling", max = 10},
{name = "ethereal:bamboo_sprout", max = 10},
{name = "ethereal:banana_tree_sapling", max = 10},
{name = "ethereal:mushroom_sapling", max = 10},
{name = "ethereal:mushroom_brown_sapling", max = 10},
{name = "ethereal:frost_tree_sapling", max = 10},
{name = "ethereal:sakura_sapling", max = 10},
{name = "ethereal:willow_sapling", max = 10},
{name = "ethereal:lemon_tree_sapling", max = 10},
{name = "ethereal:olive_tree_sapling", max = 10}
}},
{"flo", 5, {"ethereal:blue_marble_tile"}, 2},
{"dro", {"ethereal:blue_marble", "ethereal:blue_marble_tile"}, 8},
{"dro", {"ethereal:etherium_ore"}, 5},
{"nod", "default:chest", 0, {
{name = "ethereal:fish_bluefin", max = 4},
{name = "ethereal:fish_blueram", max = 4},
{name = "ethereal:fish_catfish", max = 4},
{name = "ethereal:fish_clownfish", max = 4},
{name = "ethereal:fish_pike", max = 4},
{name = "ethereal:fish_flathead", max = 4},
{name = "ethereal:fish_plaice", max = 4},
{name = "ethereal:fish_pufferfish", max = 4},
{name = "ethereal:fish_salmon", max = 4},
{name = "ethereal:fish_cichlid", max = 4},
{name = "ethereal:fish_trout", max = 4},
{name = "ethereal:fish_tilapia", max = 4},
{name = "ethereal:fish_parrot", max = 4},
{name = "ethereal:fishing_rod", max = 1},
{name = "ethereal:worm", max = 10}
}},
{"nod", "default:chest", 0, {
{name = "ethereal:fish_carp", max = 4},
{name = "ethereal:fish_coy", max = 4},
{name = "ethereal:fish_flounder", max = 4},
{name = "ethereal:fish_jellyfish", max = 4},
{name = "ethereal:fish_mackerel", max = 4},
{name = "ethereal:fish_redsnapper", max = 4},
{name = "ethereal:fish_tuna", max = 4},
{name = "ethereal:fish_squid", max = 4},
{name = "ethereal:fish_shrimp", max = 4},
{name = "ethereal:fish_angler", max = 4},
{name = "ethereal:fish_piranha", max = 4},
{name = "ethereal:fish_trevally", max = 4},
{name = "ethereal:fishing_rod", max = 1},
{name = "ethereal:worm", max = 10}
}},
{"dro", {"ethereal:lemon"}, 9},
{"dro", {"ethereal:fish_seahorse", "ethereal:fish_seahorse_green",
"ethereal:fish_seahorse_pink", "ethereal:fish_seahorse_blue",
"ethereal:fish_seahorse_yellow"}, 1},
{"dro", {"ethereal:jellyfish_salad"}, 2},
{"dro", {"ethereal:calamari_cooked", "ethereal:calamari_raw"}, 4},
{"dro", {"ethereal:fish_shrimp", "ethereal:fish_shrimp_cooked"}, 4},
{"dro", {"ethereal:teriyaki_chicken", "ethereal:teriyaki_beef"}, 4},
{"dro", {"ethereal:sushi_tamago", "ethereal:sushi_nigiri",
"ethereal:sushi_kappamaki", "ethereal:fugu", "ethereal:sashimi"}, 4},
{"flo", 3, {"ethereal:gray_moss", "ethereal:fiery_moss", "ethereal:green_moss",
"ethereal:crystal_moss", "ethereal:mushroom_moss"}, 1},
{"tro", "ethereal:candle_red", "tnt_blast", true},
{"nod", "ethereal:candle_orange", 0},
{"nod", "ethereal:candle", 0},
{"dro", {"ethereal:fish_tetra", "ethereal:fish_shrimp", "ethereal:worm"}, 1},
{"nod", "default:chest", 0, {
{name = "ethereal:fish_n_chips", max = 1},
{name = "ethereal:calamari_cooked", max = 1},
{name = "ethereal:jellyfish_salad", max = 1},
{name = "ethereal:garlic_shrimp", max = 1},
{name = "ethereal:fish_shrimp_cooked", max = 1},
{name = "ethereal:mushroom_soup", max = 1},
{name = "ethereal:teriyaki_beed", max = 1},
{name = "ethereal:teriyaki_chicken", max = 1},
{name = "ethereal:fugu", max = 1},
{name = "ethereal:sushu_tamago", max = 1},
{name = "ethereal:sushi_nigiri", max = 1},
{name = "ethereal:sushi_kappamaki", max = 1},
{name = "ethereal:hearty_stew", max = 1},
}},
{"sch", "ethereal_pond", 0, false},
{"sch", "ethereal_pond", 0, false, {
{"default:river_water_source", "default:lava_source"},
{"default:clay", "default:stone"},
{"default:dirt", "ethereal:fiery_dirt"},
{"default:mossycobble", "default:obsidian"},
{"ethereal:bush2", "ethereal:basandra_bush_leaves"},
{"default:fern_1", "ethereal:dry_shrub"},
{"default:fern_2", "ethereal:dry_shrub"},
{"default:fern_3", "ethereal:fire_flower"},
{"default:grass_4", "ethereal:dry_shrub"}
}},
{"sch", "ethereal_pond", 0, false, {
{"default:clay", "default:dirt"},
{"default:dirt", "default:dry_dirt_with_dry_grass"},
{"default:mossycobble", "default:dry_dirt"},
{"ethereal:bush2", "default:acacia_bush_leaves"},
{"default:fern_1", "default:dry_grass_1"},
{"default:fern_2", "default:dry_grass_2"},
{"default:fern_3", "default:dry_grass_3"},
{"default:grass_4", "default:dry_grass_4"}
}},
{"sch", "ethereal_pond", 0, false, {
{"default:river_water_source", "default:water_source"},
{"default:dirt", "default:sand"},
{"default:mossycobble", "default:dirt"},
{"ethereal:bush2", "default:pine_bush_needles"},
{"default:fern_1", "default:marram_grass_1"},
{"default:fern_2", "default:marram_grass_2"},
{"default:fern_3", "default:marram_grass_3"},
{"default:grass_4", "default:dry_shrub"}
}},
{"sch", "ethereal_pond", 0, false, {
{"default:river_water_source", "default:water_source"},
{"default:dirt", "default:coral_brown"},
{"default:mossycobble", "default:coral_orange"},
{"ethereal:bush2", "default:coral_skeleton"},
{"default:fern_1", "ethereal:coral2"},
{"default:fern_2", "ethereal:coral3"},
{"default:fern_3", "ethereal:coral4"},
{"default:grass_4", "ethereal:seaweed"}
}}
})
if minetest.get_modpath("3d_armor") then
lucky_block:add_blocks({
{"dro", {"3d_armor:helmet_crystal"}},
{"dro", {"3d_armor:chestplate_crystal"}},
{"dro", {"3d_armor:leggings_crystal"}},
{"dro", {"3d_armor:boots_crystal"}},
{"lig"}
})
end
if minetest.get_modpath("shields") then
lucky_block:add_blocks({
{"dro", {"shields:shield_crystal"}},
{"exp"}
})
end

5
mods/ethereal/mod.conf Normal file
View file

@ -0,0 +1,5 @@
name = ethereal
description = Adds many new biomes, items and features into your world.
depends = default, flowers
optional_depends = stairs, doors, farming, bakedclay, moreblocks, lucky_block, toolranks, ambience
min_minetest_version = 5.2

127
mods/ethereal/onion.lua Normal file
View file

@ -0,0 +1,127 @@
local S = minetest.get_translator("ethereal")
-- wild onion
minetest.register_craftitem("ethereal:wild_onion_plant", {
description = S("Wild Onion"),
inventory_image = "ethereal_wild_onion.png",
wield_image = "ethereal_wild_onion.png",
groups = {food_onion = 1},
on_use = minetest.item_eat(2),
on_place = function(itemstack, placer, pointed_thing)
return farming.place_seed(itemstack, placer, pointed_thing, "ethereal:wild_onion_1")
end
})
ethereal.add_eatable("ethereal:wild_onion_plant", 2)
-- Onion definition
local def = {
description = S("Wild Onion") .. S(" Crop"),
drawtype = "plantlike",
tiles = {"ethereal_wild_onion_1.png"},
paramtype = "light",
sunlight_propagates = true,
walkable = false,
buildable_to = true,
drop = "",
selection_box = {
type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}
},
groups = {
snappy = 3, flammable = 2, plant = 1, attached_node = 1,
growing = 1, not_in_creative_inventory = 1
},
sounds = default.node_sound_leaves_defaults()
}
--stage 1
minetest.register_node("ethereal:onion_1", table.copy(def))
--stage 2
def.tiles = {"ethereal_wild_onion_2.png"}
minetest.register_node("ethereal:onion_2", table.copy(def))
--stage 3
def.tiles = {"ethereal_wild_onion_3.png"}
minetest.register_node("ethereal:onion_3", table.copy(def))
--stage 4
def.tiles = {"ethereal_wild_onion_4.png"}
def.drop = {
items = {
{items = {"ethereal:wild_onion_plant"}, rarity = 1},
{items = {"ethereal:wild_onion_plant 2"}, rarity = 3},
}
}
minetest.register_node("ethereal:onion_4", table.copy(def))
--stage 5
def.tiles = {"ethereal_wild_onion_5.png"}
def.groups.growing = nil
def.selection_box = {
type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -2.5/16, 0.5}
}
def.drop = {
items = {
{items = {"ethereal:wild_onion_plant 2"}, rarity = 1},
{items = {"ethereal:wild_onion_plant 3"}, rarity = 2},
}
}
minetest.register_node("ethereal:onion_5", table.copy(def))
-- register for use with farming redo growth routines
if farming and farming.mod and farming.mod == "redo" then
-- add to registered_plants
farming.registered_plants["ethereal:wild_onion_plant"] = {
crop = "ethereal:onion",
seed = "ethereal:wild_onion_plant",
minlight = farming.min_light,
maxlight = farming.max_light,
steps = 5
}
else
minetest.register_abm({
label = "Ethereal grow onion",
nodenames = {
"ethereal:onion_1", "ethereal:onion_2", "ethereal:onion_3",
"ethereal:onion_4"
},
neighbors = {"farming:soil_wet"},
interval = 11,
chance = 20,
catch_up = false,
action = function(pos, node)
-- are we on wet soil?
pos.y = pos.y - 1
if minetest.get_item_group(minetest.get_node(pos).name, "soil") < 3 then
return
end
pos.y = pos.y + 1
-- do we have enough light?
local light = minetest.get_node_light(pos) or 0 ; if light < 13 then return end
-- grow to next stage
local num = node.name:split("_")[2]
node.name = "ethereal:onion_" .. tonumber(num + 1)
minetest.swap_node(pos, node)
end
})
end

119
mods/ethereal/ores.lua Normal file
View file

@ -0,0 +1,119 @@
-- stratum ore helper
local function add_stratum(y_min, y_max, node)
minetest.register_ore({
ore_type = "stratum",
ore = node,
wherein = {"bakedclay:orange"},
clust_scarcity = 1,
y_max = y_max,
y_min = y_min,
biomes = {"mesa"}
})
end
-- add baked clay layers (mesa biome is between 20 and 71)
for n = 0, 5 do
add_stratum(20 + (n * 9), 21 + (n * 9), "bakedclay:brown")
add_stratum(22 + (n * 9), 23 + (n * 9), "bakedclay:grey")
add_stratum(25 + (n * 9), 26 + (n * 9), "bakedclay:red")
end
-- scatter ore helper
local function add_ore(a, b, c, d, e, f, g)
minetest.register_ore({
ore_type = "scatter",
ore = a,
wherein = b,
clust_scarcity = c,
clust_num_ores = d,
clust_size = e,
y_min = f,
y_max = g
})
end
-- Coal
add_ore("default:stone_with_coal", "default:desert_stone", 24*24*24, 27, 6, -31000, -16)
-- Iron
add_ore("default:stone_with_iron", "default:desert_stone", 9*9*9, 5, 3, -63, -16)
add_ore("default:stone_with_iron", "default:desert_stone", 24*24*24, 27, 6, -31000, -64)
--Mese
add_ore("default:stone_with_mese", "default:desert_stone", 14*14*14, 5, 3, -31000, -256)
-- Gold
add_ore("default:stone_with_gold", "default:desert_stone", 15*15*15, 3, 2, -255, -64)
add_ore("default:stone_with_gold", "default:desert_stone", 13*13*13, 5, 3, -31000, -256)
-- Diamond
add_ore("default:stone_with_diamond", "default:desert_stone", 17*17*17, 4, 3, -255, -128)
add_ore("default:stone_with_diamond", "default:desert_stone", 15*15*15, 4, 3, -31000, -256)
-- Copper
add_ore("default:stone_with_copper", "default:desert_stone", 9*9*9, 5, 3, -31000, -64)
-- Coral Sand
add_ore("ethereal:sandy", "default:sand", 10*10*10, 24, 4, -45, -10)
-- Etherium
minetest.register_ore({
ore_type = "scatter",
ore = "ethereal:etherium_ore",
wherein = "default:desert_stone",
clust_scarcity = 10 * 10 * 10,
clust_num_ores = 1,
clust_size = 1,
y_min = 5,
y_max = 40,
biomes = {"caves"}
})
-- Etherium in floatlands
minetest.register_ore({
ore_type = "scatter",
ore = "ethereal:stone_with_etherium_ore",
wherein = "default:stone",
clust_scarcity = 9 * 9 * 9,
clust_num_ores = 6,
clust_size = 2,
y_min = 1025,
y_max = 31000
})
-- Clay in silver and desert sand beaches
minetest.register_ore({
ore_type = "blob",
ore = "default:clay",
wherein = {"default:silver_sand", "default:desert_sand"},
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = 0,
y_min = -15,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = {x = 5, y = 5, z = 5},
seed = -316,
octaves = 1,
persist = 0.0
}
})

376
mods/ethereal/plantlife.lua Normal file
View file

@ -0,0 +1,376 @@
local S = minetest.get_translator("ethereal")
-- Spore Grass
minetest.register_node("ethereal:spore_grass", {
description = S("Spore Grass"),
drawtype = "plantlike",
tiles = {"ethereal_spore_grass.png"},
inventory_image = "ethereal_spore_grass.png",
wield_image = "ethereal_spore_grass.png",
paramtype = "light",
sunlight_propagates = true,
waving = 1,
walkable = false,
buildable_to = true,
groups = {snappy = 3, flora = 1, attached_node = 1},
sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "fixed", fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 4 / 16, 5 / 16}
}
})
-- Firethorn (poisonous when eaten raw, must be crushed and washed with water 1st)
minetest.register_node("ethereal:firethorn", {
description = S("Firethorn Shrub"),
drawtype = "plantlike",
tiles = {"ethereal_firethorn.png"},
inventory_image = "ethereal_firethorn.png",
wield_image = "ethereal_firethorn.png",
paramtype = "light",
sunlight_propagates = true,
waving = 1,
walkable = false,
buildable_to = true,
groups = {snappy = 3, flora = 1, attached_node = 1},
sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "fixed", fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 4 / 16, 5 / 16}
}
})
-- Fire Flower
minetest.register_node("ethereal:fire_flower", {
description = S("Fire Flower"),
drawtype = "plantlike",
tiles = { "ethereal_fire_flower.png" },
inventory_image = "ethereal_fire_flower.png",
wield_image = "ethereal_fire_flower.png",
paramtype = "light",
light_source = 5,
sunlight_propagates = true,
walkable = false,
buildable_to = true,
damage_per_second = 2,
groups = {snappy = 1, oddly_breakable_by_hand = 3, igniter = 2},
sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "fixed", fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 1 / 2, 5 / 16}
},
on_punch = function(pos, node, puncher) -- hurts when punched
puncher:punch(puncher, 1.0, {
full_punch_interval = 1.0, damage_groups = {fleshy = 2}}, nil)
end
})
minetest.register_craft({
type = "fuel",
recipe = "ethereal:fire_flower",
burntime = 20
})
-- Fire Dust
minetest.register_craftitem("ethereal:fire_dust", {
description = S("Fire Dust"),
inventory_image = "ethereal_fire_dust.png"
})
minetest.register_craft({
output = "ethereal:fire_dust 2",
recipe = {{"ethereal:fire_flower"}}
})
minetest.register_craft({
type = "fuel",
recipe = "ethereal:fire_dust",
burntime = 10
})
-- vines
minetest.register_node("ethereal:vine", {
description = S("Vine"),
drawtype = "signlike",
tiles = {"ethereal_vine.png"},
inventory_image = "ethereal_vine.png",
wield_image = "ethereal_vine.png",
paramtype = "light",
paramtype2 = "wallmounted",
walkable = false,
climbable = true,
is_ground_content = false,
selection_box = {type = "wallmounted"},
groups = {choppy = 3, oddly_breakable_by_hand = 1, flammable = 2},
legacy_wallmounted = true,
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_craft({
output = "ethereal:vine 2",
recipe = {
{"group:leaves", "", "group:leaves"},
{"", "group:leaves", ""},
{"group:leaves", "", "group:leaves"}
}
})
-- light strings (glowing vine)
minetest.register_node("ethereal:lightstring", {
description = S("Light String Vine"),
drawtype = "signlike",
tiles = {"ethereal_lightstring.png"},
inventory_image = "ethereal_lightstring.png",
wield_image = "ethereal_lightstring.png",
paramtype = "light",
paramtype2 = "wallmounted",
light_source = 10,
walkable = false,
climbable = true,
is_ground_content = false,
selection_box = {type = "wallmounted"},
groups = {choppy = 3, oddly_breakable_by_hand = 1, flammable = 2},
legacy_wallmounted = true,
sounds = default.node_sound_leaves_defaults()
})
minetest.register_craft({
output = "ethereal:lightstring 8",
recipe = {
{"ethereal:vine", "ethereal:vine", "ethereal:vine"},
{"ethereal:vine", "ethereal:fire_dust", "ethereal:vine"},
{"ethereal:vine", "ethereal:vine", "ethereal:vine"}
}
})
-- Boston Fern
-- Fern (boston)
if minetest.get_modpath("default") then
minetest.register_alias("ethereal:fern","default:fern_3")
minetest.override_item("default:fern_3",{
drop = {
max_items = 1,
items = {
{items = {"ethereal:fern_tubers"}, rarity = 6},
{items = {"default:fern_1"}},
},
},
})
else
minetest.register_node("ethereal:fern", {
description = S("Fern"),
drawtype = "plantlike",
visual_scale = 1.4,
tiles = {"ethereal_fern.png"},
inventory_image = "ethereal_fern.png",
wield_image = "ethereal_fern.png",
paramtype = "light",
sunlight_propagates = true,
waving = 1,
walkable = false,
buildable_to = true,
drop = {
max_items = 1,
items = {
{items = {"ethereal:fern_tubers"}, rarity = 6},
{items = {"ethereal:fern"}}
}
},
groups = {snappy = 3, flora = 1, attached_node = 1, flammable = 2},
sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "fixed",
fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 0.67, 5 / 16}
}
})
end
-- Boston Ferns sometimes drop edible Tubers
minetest.register_craftitem("ethereal:fern_tubers", {
description = S("Fern Tubers"),
inventory_image = "ethereal_fern_tubers.png",
groups = {food_tuber = 1},
on_use = minetest.item_eat(1)
})
ethereal.add_eatable("ethereal:fern_tubers", 1)
-- Red Shrub (not flammable)
minetest.register_node("ethereal:dry_shrub", {
description = S("Fiery Dry Shrub"),
drawtype = "plantlike",
tiles = {"ethereal_dry_shrub.png"},
inventory_image = "ethereal_dry_shrub.png",
wield_image = "ethereal_dry_shrub.png",
paramtype = "light",
sunlight_propagates = true,
waving = 1,
walkable = false,
buildable_to = true,
groups = {snappy = 3, flora = 1, attached_node = 1},
sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "fixed", fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 4 / 16, 5 / 16}
}
})
-- Grey Shrub (not Flammable - too cold to burn)
minetest.register_node("ethereal:snowygrass", {
description = S("Snowy Grass"),
drawtype = "plantlike",
visual_scale = 0.9,
tiles = {"ethereal_snowygrass.png"},
inventory_image = "ethereal_snowygrass.png",
wield_image = "ethereal_snowygrass.png",
paramtype = "light",
sunlight_propagates = true,
waving = 1,
walkable = false,
buildable_to = true,
groups = {snappy = 3, flora = 1, attached_node = 1},
sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "fixed", fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 5 / 16, 5 / 16}
}
})
-- Crystal Shrub (not Flammable - too cold to burn)
minetest.register_node("ethereal:crystalgrass", {
description = S("Crystal Grass"),
drawtype = "plantlike",
visual_scale = 0.9,
tiles = {"ethereal_crystalgrass.png"},
inventory_image = "ethereal_crystalgrass.png",
wield_image = "ethereal_crystalgrass.png",
paramtype = "light",
sunlight_propagates = true,
waving = 1,
walkable = false,
buildable_to = true,
groups = {snappy = 3, flora = 1, attached_node = 1},
sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "fixed", fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 5 / 16, 5 / 16}
}
})
-- tall lilac
minetest.register_node("ethereal:lilac", {
description = S("Lilac"),
drawtype = "plantlike",
visual_scale = 1.9,
tiles = {"ethereal_lilac.png"},
inventory_image = "ethereal_lilac.png",
wield_image = "ethereal_lilac.png",
paramtype = "light",
sunlight_propagates = true,
waving = 1,
walkable = false,
buildable_to = true,
groups = {snappy = 3, flora = 1, attached_node = 1, flammable = 2},
sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "fixed", fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 0.67, 5 / 16}
}
})
minetest.register_craft({
output = "dye:magenta 2",
recipe = {{"ethereal:lilac"}}
})
-- moss helper function
local function add_moss(typ, descr, texture, receipe_item)
minetest.register_node("ethereal:" .. typ .. "_moss", {
description = S(descr .. " Moss"),
tiles = {texture},
groups = {crumbly = 3},
sounds = default.node_sound_dirt_defaults({
footstep = {name = "default_grass_footstep", gain = 0.4}})
})
minetest.register_craft({
output = "ethereal:" .. typ .. "_moss",
recipe = {{"default:dirt", receipe_item}}
})
end
-- add moss types (has grass texture on all sides)
add_moss("crystal", "Crystal", "ethereal_grass_crystal_top.png", "ethereal:frost_leaves")
add_moss("mushroom", "Mushroom", "ethereal_grass_mushroom_top.png", "ethereal:spore_grass")
add_moss("fiery", "Fiery", "ethereal_grass_fiery_top.png", "ethereal:dry_shrub")
add_moss("gray", "Gray", "ethereal_grass_gray_top.png", "ethereal:snowygrass")
add_moss("green", "Green", "default_grass.png", "default:jungleleaves")
add_moss("bamboo", "Bamboo", "ethereal_grass_bamboo_top.png", "ethereal:bamboo_leaves")
-- shroom helper function
local function add_shroom(name, desc, ad)
minetest.register_node("ethereal:illumishroom" .. ad, {
description = S(desc .. " Illumishroom"),
drawtype = "plantlike",
tiles = {"ethereal_illumishroom_" .. name .. ".png"},
inventory_image = "ethereal_illumishroom_" .. name .. ".png",
wield_image = "ethereal_illumishroom_" .. name .. ".png",
paramtype = "light",
light_source = 5,
sunlight_propagates = true,
walkable = false,
groups = {dig_immediate = 3, attached_node = 1, flammable = 3},
sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "fixed", fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 0.47, 6 / 16}
}
})
end
-- add illuminated cave shrooms
add_shroom("red", "Red", "")
add_shroom("green", "Green", "2")
add_shroom("cyan", "Cyan", "3")
-- poppy
if not minetest.get_modpath("xanadu") then
minetest.register_node(":xanadu:poppy", {
description = S("Poppy"),
tiles = {"ethereal_poppy.png"},
inventory_image = "ethereal_poppy.png",
wield_image = "ethereal_poppy.png",
sunlight_propagates = true,
buildable_to = true,
waving = 1,
drawtype = "plantlike",
paramtype = "light",
walkable = false,
groups = {flower = 1, flora = 1, snappy = 3, attached_node = 1, flammable = 3},
selection_box = {
type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}
},
sounds = default.node_sound_leaves_defaults(),
})
-- craft dye from plant
minetest.register_craft({
output = "dye:red 4",
recipe = {{"xanadu:poppy"}}
})
end

328
mods/ethereal/sapling.lua Normal file
View file

@ -0,0 +1,328 @@
-- translator and protection check setting
local S = minetest.get_translator("ethereal")
local sapling_protection_check = minetest.settings:get_bool(
"ethereal.sapling_protection_check", false)
-- sapling placement helper
local function prepare_on_place(itemstack, placer, pointed_thing, name, w, h)
if sapling_protection_check then
-- check if grown tree area intersects any players protected area
return default.sapling_on_place(itemstack, placer, pointed_thing,
name, {x = -w, y = 1, z = -w}, {x = w, y = h, z = w}, 4)
end
-- Position of sapling
local pos = pointed_thing.under
local node = minetest.get_node_or_nil(pos)
local pdef = node and minetest.registered_nodes[node.name]
-- Check if node clicked on has it's own on_rightclick function
if pdef and pdef.on_rightclick
and not (placer and placer:is_player() and placer:get_player_control().sneak) then
return pdef.on_rightclick(pos, node, placer, itemstack, pointed_thing)
end
-- place normally
return minetest.item_place_node(itemstack, placer, pointed_thing)
end
-- Basandra Bush Sapling
minetest.register_node("ethereal:basandra_bush_sapling", {
description = S("Basandra Bush Sapling"),
drawtype = "plantlike",
tiles = {"ethereal_basandra_bush_sapling.png"},
inventory_image = "ethereal_basandra_bush_sapling.png",
wield_image = "ethereal_basandra_bush_sapling.png",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "fixed", fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 2 / 16, 4 / 16}
},
groups = {snappy = 2, dig_immediate = 3, attached_node = 1, ethereal_sapling = 1,
sapling = 1},
sounds = default.node_sound_leaves_defaults(),
grown_height = 2,
on_place = function(itemstack, placer, pointed_thing)
return prepare_on_place(itemstack, placer, pointed_thing,
"ethereal:basandra_bush_sapling", 1, 2)
end
})
-- Bamboo Sprout
minetest.register_node("ethereal:bamboo_sprout", {
description = S("Bamboo Sprout"),
drawtype = "plantlike",
tiles = {"ethereal_bamboo_sprout.png"},
inventory_image = "ethereal_bamboo_sprout.png",
wield_image = "ethereal_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 = {-3 / 16, -0.5, -3 / 16, 3 / 16, -0.1, 3 / 16}
},
on_use = minetest.item_eat(2),
grown_height = 11,
on_place = function(itemstack, placer, pointed_thing)
return prepare_on_place(itemstack, placer, pointed_thing,
"ethereal:bamboo_sprout", 1, 18)
end
})
-- register Sapling helper
local function register_sapling(name, desc, texture, width, 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,
on_place = function(itemstack, placer, pointed_thing)
return prepare_on_place(itemstack, placer, pointed_thing,
name .. "_sapling", width, height)
end
})
end
-- add saplings
register_sapling("ethereal:willow", "Willow", "ethereal_willow_sapling", 5, 14)
register_sapling("ethereal:yellow_tree", "Healing", "ethereal_yellow_tree_sapling", 4, 19)
register_sapling("ethereal:big_tree", "Big", "ethereal_big_tree_sapling", 4, 7)
register_sapling("ethereal:banana_tree", "Banana", "ethereal_banana_tree_sapling", 3, 8)
register_sapling("ethereal:frost_tree", "Frost", "ethereal_frost_tree_sapling", 4, 19)
register_sapling("ethereal:mushroom", "Mushroom", "ethereal_mushroom_sapling", 4, 11)
register_sapling("ethereal:mushroom_brown", "Brown Mushroom",
"ethereal_mushroom_brown_sapling", 1, 11)
register_sapling("ethereal:palm", "Palm", "moretrees_palm_sapling", 4, 9)
register_sapling("ethereal:giant_redwood", "Giant Redwood",
"ethereal_giant_redwood_sapling", 7, 33)
register_sapling("ethereal:redwood", "Redwood", "ethereal_redwood_sapling", 4, 21)
register_sapling("ethereal:orange_tree", "Orange", "ethereal_orange_tree_sapling", 2, 6)
register_sapling("ethereal:birch", "Birch", "moretrees_birch_sapling", 2, 7)
register_sapling("ethereal:sakura", "Sakura", "ethereal_sakura_sapling", 4, 10)
register_sapling("ethereal:lemon_tree", "Lemon", "ethereal_lemon_tree_sapling", 2, 7)
register_sapling("ethereal:olive_tree", "Olive", "ethereal_olive_tree_sapling", 3, 10)
-- add tree schematic
local function add_tree(pos, schem, replace)
minetest.swap_node(pos, {name = "air"})
minetest.place_schematic(pos, schem, "random", replace, false,
"place_center_x, place_center_z")
end
-- get mod path and schematic folder
local path = minetest.get_modpath("ethereal") .. "/schematics/"
-- global tree grow functions
function ethereal.grow_basandra_bush(pos)
add_tree(pos, ethereal.basandrabush)
end
function ethereal.grow_yellow_tree(pos)
add_tree(pos, ethereal.yellowtree)
end
function ethereal.grow_big_tree(pos)
add_tree(pos, ethereal.bigtree)
end
function ethereal.grow_banana_tree(pos)
if math.random(2) == 1 and minetest.find_node_near(pos, 1, {"farming:soil_wet"}) then
add_tree(pos, ethereal.bananatree,
{{"ethereal:banana", "ethereal:banana_bunch"}})
else
add_tree(pos, ethereal.bananatree)
end
end
function ethereal.grow_frost_tree(pos)
add_tree(pos, ethereal.frosttrees)
end
function ethereal.grow_mushroom_tree(pos)
add_tree(pos, ethereal.mushroomone)
end
function ethereal.grow_mushroom_brown_tree(pos)
add_tree(pos, ethereal.mushroomtwo)
end
function ethereal.grow_palm_tree(pos)
add_tree(pos, ethereal.palmtree)
end
function ethereal.grow_willow_tree(pos)
add_tree(pos, ethereal.willow)
end
function ethereal.grow_redwood_tree(pos)
add_tree(pos, ethereal.redwood_small_tree)
end
function ethereal.grow_giant_redwood_tree(pos)
add_tree(pos, ethereal.redwood_tree)
end
function ethereal.grow_orange_tree(pos)
add_tree(pos, ethereal.orangetree)
end
function ethereal.grow_bamboo_tree(pos)
add_tree(pos, ethereal.bambootree)
end
function ethereal.grow_birch_tree(pos)
add_tree(pos, ethereal.birchtree)
end
function ethereal.grow_sakura_tree(pos)
if math.random(10) == 1 then
add_tree(pos, ethereal.sakura_tree,
{{"ethereal:sakura_leaves", "ethereal:sakura_leaves2"}})
else
add_tree(pos, ethereal.sakura_tree)
end
end
function ethereal.grow_lemon_tree(pos)
add_tree(pos, ethereal.lemontree)
end
function ethereal.grow_olive_tree(pos)
add_tree(pos, ethereal.olivetree)
end
-- return True if sapling has enough height room to grow
local function enough_height(pos, height)
return minetest.line_of_sight(
{x = pos.x, y = pos.y + 1, z = pos.z},
{x = pos.x, y = pos.y + height, z = pos.z})
end
-- global function run by Abm
function ethereal.grow_sapling(pos, node)
if (minetest.get_node_light(pos) or 0) < 13 then return end
-- get node below sapling
local under = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}).name
local def = minetest.registered_nodes[node.name] ; if not def then return end
local height = def.grown_height or 33
-- 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:basandra_bush_sapling"
and under == "ethereal:fiery_dirt" then ethereal.grow_basandra_bush(pos)
elseif 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:mushroom_brown_sapling"
and under == "ethereal:mushroom_dirt" then ethereal.grow_mushroom_brown_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:giant_redwood_sapling"
and under == "default:dirt_with_dry_grass" then ethereal.grow_giant_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)
elseif node.name == "ethereal:olive_tree_sapling"
and under == "ethereal:grove_dirt" then ethereal.grow_olive_tree(pos)
elseif node.name == "ethereal:lemon_tree_sapling"
and under == "ethereal:grove_dirt" then ethereal.grow_lemon_tree(pos) end
end
-- grow saplings Abm
minetest.register_abm({
label = "Ethereal grow sapling",
nodenames = {"group:ethereal_sapling"},
interval = 10,
chance = 50,
catch_up = false,
action = ethereal.grow_sapling -- (pos, node)
})
-- 2x redwood saplings make 1x giant redwood sapling
minetest.register_craft({
output = "ethereal:giant_redwood_sapling",
recipe = {{"ethereal:redwood_sapling", "ethereal:redwood_sapling"}}
})

View file

@ -0,0 +1,87 @@
local _ = {name = "air", param1 = 000}
local b = {name = "ethereal:bamboo", param1 = 255}
local B = {name = "ethereal:bamboo", param1 = 255, force_place = true}
local L = {name = "ethereal:bamboo_leaves", param1 = 255}
local l = {name = "ethereal:bamboo_leaves", param1 = 100}
ethereal.bambootree = {
size = {x = 3, y = 18, z = 3},
yslice_prob = {
{ypos = 2, prob = 127},
{ypos = 3, prob = 127},
{ypos = 4, prob = 127},
{ypos = 5, prob = 127}
},
data = {
_,_,_,
_,_,_,
_,_,_,
_,_,_,
_,_,_,
_,_,_,
_,_,_,
_,_,_,
_,_,_,
_,_,_,
_,_,_,
_,_,_,
_,_,_,
_,_,_,
_,_,_,
l,L,l,
_,L,_,
_,_,_,
_,B,_,
_,B,_,
_,B,_,
_,B,_,
_,B,_,
_,B,_,
_,b,_,
_,b,_,
_,b,_,
_,b,_,
_,b,_,
_,b,_,
_,b,_,
_,b,_,
_,b,_,
l,b,l,
_,L,_,
_,l,_,
_,_,_,
_,_,_,
_,_,_,
_,_,_,
_,_,_,
_,_,_,
_,_,_,
_,_,_,
_,_,_,
_,_,_,
_,_,_,
_,_,_,
_,_,_,
_,_,_,
_,_,_,
l,L,l,
_,L,_,
_,_,_,
}
}
if ethereal.papyruswalk == true then
minetest.override_item("default:papyrus", {
walkable = true,
sunlight_propagates = true
})
end

View file

@ -0,0 +1,85 @@
local _ = {name = "air", param1 = 0}
local t = {name = "ethereal:banana_trunk", param1 = 255}
local T = {name = "ethereal:banana_trunk", param1 = 255, force_place = true}
local L = {name = "ethereal:bananaleaves", param1 = 255}
local l = {name = "ethereal:bananaleaves", param1 = 180}
local B = {name = "ethereal:banana", param1 = 255}
local b = {name = "ethereal:banana", param1 = 070}
ethereal.bananatree = {
size = {x = 7, y = 8, z = 7},
yslice_prob = {
{ypos = 2, prob = 127},
{ypos = 3, prob = 127}
},
data = {
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,l,_,_,_,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,l,_,_,_,
_,_,_,L,_,_,_,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,b,_,_,_,
_,_,_,B,_,_,_,
_,_,_,L,_,_,_,
_,_,_,_,_,_,_,
_,_,_,T,_,_,_,
_,_,_,T,_,_,_,
_,_,_,T,_,_,_,
_,_,_,T,_,_,_,
_,_,b,t,b,_,_,
_,_,B,t,B,_,_,
_,L,L,L,L,L,_,
l,l,_,L,_,l,l,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,b,_,_,_,
_,_,_,B,_,_,_,
_,_,_,L,_,_,_,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,L,_,_,_,
_,_,_,l,_,_,_,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,l,_,_,_,
}
}

View file

@ -0,0 +1,23 @@
local _ = {name = "air", param1 = 0}
local S = {name = "ethereal:basandra_bush_stem", param1 = 255, force_place = true}
local B = {name = "ethereal:basandra_bush_leaves", param1 = 255}
local b = {name = "ethereal:basandra_bush_leaves", param1 = 100}
ethereal.basandrabush = {
size = {x = 3, y = 2, z = 3},
data = {
b,B,b,
b,b,b,
B,S,B,
b,B,b,
b,B,b,
b,b,b,
}
}

View file

@ -0,0 +1,101 @@
local _ = {name = "air", prob = 0}
local L = {name = "default:leaves", prob = 255}
local T = {name = "default:tree", prob = 255}
local t = {name = "default:tree", prob = 127}
local M = {name = "default:tree", prob = 255, force_place = true}
ethereal.bigtree = {
size = {x = 9, y = 8, z = 9},
yslice_prob = {
{ypos = 0, prob = 127},
{ypos = 1, prob = 127}
},
data = {
_,_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,_,
_,_,_,_,L,_,_,_,_,
_,_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,_,
_,_,t,t,_,t,t,_,_,
_,_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,_,
_,_,_,L,L,L,_,_,_,
_,_,_,_,L,_,_,_,_,
_,_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,_,
_,t,t,t,t,t,t,t,_,
_,_,_,t,_,t,_,_,_,
_,_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,_,
_,_,L,L,L,L,L,_,_,
_,_,_,L,L,L,_,_,_,
_,_,_,_,L,_,_,_,_,
_,_,_,_,_,_,_,_,_,
_,t,t,t,T,t,t,t,_,
_,_,t,t,T,t,t,_,_,
_,_,_,_,T,_,_,_,_,
_,_,_,_,T,_,_,_,_,
_,L,L,L,T,L,L,L,_,
_,_,L,L,L,L,L,_,_,
_,_,_,L,L,L,_,_,_,
_,_,_,_,_,_,_,_,_,
_,_,t,T,M,T,t,_,_,
_,_,_,T,M,T,_,_,_,
_,_,_,T,M,T,_,_,_,
_,_,_,T,T,T,_,_,_,
L,L,L,L,T,L,L,L,L,
_,L,L,L,T,L,L,L,_,
_,_,L,L,L,L,L,_,_,
_,_,_,_,_,_,_,_,_,
_,t,t,t,T,t,t,t,_,
_,_,t,t,T,t,t,_,_,
_,_,_,_,T,_,_,_,_,
_,_,_,_,T,_,_,_,_,
_,L,L,L,T,L,L,L,_,
_,_,L,L,L,L,L,_,_,
_,_,_,L,L,L,_,_,_,
_,_,_,_,_,_,_,_,_,
_,t,t,t,t,t,t,t,_,
_,_,_,t,_,t,_,_,_,
_,_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,_,
_,_,L,L,L,L,L,_,_,
_,_,_,L,L,L,_,_,_,
_,_,_,_,L,_,_,_,_,
_,_,_,_,_,_,_,_,_,
_,_,t,t,_,t,t,_,_,
_,_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,_,
_,_,_,L,L,L,_,_,_,
_,_,_,_,L,_,_,_,_,
_,_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,_,
_,_,_,_,L,_,_,_,_,
_,_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,_,
}
}

View file

@ -0,0 +1,65 @@
local _ = {name = "air", param1 = 0}
local t = {name = "ethereal:birch_trunk", param1 = 255}
local T = {name = "ethereal:birch_trunk", param1 = 255, force_place = true}
local L = {name = "ethereal:birch_leaves", param1 = 255}
local l = {name = "ethereal:birch_leaves", param1 = 150}
ethereal.birchtree = {
size = {x = 5, y = 8, z = 5},
yslice_prob = {
{ypos = 2, prob = 127},
{ypos = 3, prob = 127}
},
data = {
_,_,_,_,_,
_,_,_,_,_,
_,_,_,_,_,
_,_,_,_,_,
l,L,L,L,l,
l,L,L,L,l,
_,_,_,_,_,
_,_,_,_,_,
_,_,_,_,_,
_,_,_,_,_,
_,_,_,_,_,
_,_,_,_,_,
L,L,L,L,L,
L,L,L,L,L,
_,l,L,l,_,
_,_,L,_,_,
_,_,T,_,_,
_,_,T,_,_,
_,_,T,_,_,
_,_,T,_,_,
L,L,T,L,L,
L,L,t,L,L,
_,L,t,L,_,
_,L,L,L,_,
_,_,_,_,_,
_,_,_,_,_,
_,_,_,_,_,
_,_,_,_,_,
L,L,L,L,L,
L,L,L,L,L,
_,l,L,l,_,
_,_,L,_,_,
_,_,_,_,_,
_,_,_,_,_,
_,_,_,_,_,
_,_,_,_,_,
l,L,L,L,l,
l,L,L,L,l,
_,_,_,_,_,
_,_,_,_,_,
}
}

View file

@ -0,0 +1,38 @@
local _ = {name = "air", param1 = 0}
local B = {name = "ethereal:bush", param1 = 255}
local b = {name = "ethereal:bush", param1 = 100}
ethereal.bush = {
size = {x = 5, y = 3, z = 5},
yslice_prob = {
{ypos = 0, prob = 127},
{ypos = 2, prob = 127}
},
data = {
b,B,B,B,b,
_,_,_,_,_,
_,_,_,_,_,
B,B,B,B,B,
_,b,B,b,_,
_,_,_,_,_,
B,B,B,B,B,
_,B,B,B,_,
_,_,b,_,_,
B,B,B,B,B,
_,b,B,b,_,
_,_,_,_,_,
b,B,B,B,b,
_,_,_,_,_,
_,_,_,_,_,
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,33 @@
-- simple fix for Flux's stairsplus mod as it breaks compatibility
local nodname = minetest.get_modpath("stairsplus")
and "default:stair_desert_cobble_outer" or "stairs:stair_outer_desert_cobble"
local _ = {name = "air", param1 = 0}
local ds = {name = "default:desert_stone", param1 = 255, param2 = 0}
local dc = {name = "default:desert_cobble", param1 = 255, param2 = 0}
local s0 = {name = nodname, param1 = 255, param2 = 0}
local s2 = {name = nodname, param1 = 255, param2 = 2}
local s3 = {name = nodname, param1 = 255, param2 = 3}
local et = {name = "ethereal:etherium_ore", param1 = 128}
ethereal.desertstone_spike = {
size = {x = 2, y = 3, z = 2},
yslice_prob = {
{ypos = 2, prob = 127}
},
data = {
et, ds,
dc, s0,
s3, _,
ds, ds,
s2,s3,
_,_,
}
}

View file

@ -0,0 +1,48 @@
local _ = {name = "air", param1 = 000}
local S = {name = "default:stone", param1 = 255}
local s = {name = "default:stone", param1 = 127}
local C = {name = "default:cobble", param1 = 255}
local c = {name = "default:cobble", param1 = 127}
ethereal.desertstone_under_spike = {
size = {x = 3, y = 8, z = 3},
yslice_prob = {
{ypos = 3, prob = 127},
{ypos = 5, prob = 127},
{ypos = 6, prob = 127},
},
data = {
C,S,C,
C,S,C,
_,S,_,
_,S,_,
_,C,_,
_,_,_,
_,_,_,
_,_,_,
S,S,S,
S,S,S,
S,S,S,
_,S,_,
_,S,_,
_,S,_,
_,S,_,
_,C,_,
C,S,C,
C,S,C,
_,S,_,
_,S,_,
_,C,_,
_,_,_,
_,_,_,
_,_,_,
}
}

View file

@ -0,0 +1,185 @@
local _ = {name = "air", prob = 0}
local l = {name = "ethereal:frost_leaves", prob = 255}
local t = {name = "ethereal:frost_tree", prob = 255}
local T = {name = "ethereal:frost_tree", prob = 255, force_place = true}
ethereal.frosttrees = {
size = {x = 8, y = 19, z = 8},
yslice_prob = {
{ypos = 2, prob = 127}, -- trunk
{ypos = 3, prob = 127},
{ypos = 4, prob = 127},
{ypos = 5, prob = 127},
{ypos = 6, prob = 127},
{ypos = 7, prob = 127},
{ypos = 13, prob = 127}, -- leaves
{ypos = 15, prob = 127}
},
data = {
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,l,l,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,l,l,l,l,_,_,
_,_,_,_,_,_,_,_,
_,_,_,l,l,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,l,l,_,_,_,
_,l,l,l,l,l,l,_,
_,_,_,l,l,_,_,_,
_,_,l,l,l,l,_,_,
_,_,_,l,l,_,_,_,
_,_,_,l,l,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,T,T,_,_,_,
_,_,_,T,T,_,_,_,
_,_,_,T,T,_,_,_,
_,_,_,t,t,_,_,_,
_,_,_,t,t,_,_,_,
_,_,_,t,t,_,_,_,
_,_,_,t,t,_,_,_,
_,_,_,t,t,_,_,_,
_,_,_,t,t,_,_,_,
_,_,_,t,t,_,_,_,
_,_,_,t,t,_,_,_,
_,_,_,t,t,_,_,_,
_,_,l,t,t,l,_,_,
l,l,l,t,t,l,l,l,
_,_,l,t,t,l,_,_,
_,l,l,t,t,l,l,_,
_,_,l,t,t,l,_,_,
_,_,l,t,t,l,_,_,
_,_,_,l,l,_,_,_,
_,_,_,T,T,_,_,_,
_,_,_,T,T,_,_,_,
_,_,_,T,T,_,_,_,
_,_,_,t,t,_,_,_,
_,_,_,t,t,_,_,_,
_,_,_,t,t,_,_,_,
_,_,_,t,t,_,_,_,
_,_,_,t,t,_,_,_,
_,_,_,t,t,_,_,_,
_,_,_,t,t,_,_,_,
_,_,_,t,t,_,_,_,
_,_,_,t,t,_,_,_,
_,_,l,t,t,l,_,_,
l,l,l,t,t,l,l,l,
_,_,l,t,t,l,_,_,
_,l,l,t,t,l,l,_,
_,_,l,t,t,l,_,_,
_,_,l,t,t,l,_,_,
_,_,_,l,l,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,l,l,_,_,_,
_,l,l,l,l,l,l,_,
_,_,_,l,l,_,_,_,
_,_,l,l,l,l,_,_,
_,_,_,l,l,_,_,_,
_,_,_,l,l,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,l,l,l,l,_,_,
_,_,_,_,_,_,_,_,
_,_,_,l,l,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,l,l,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,62 @@
local _ = {name = "air", prob = 255, force_place = true}
local S = {name = "default:snowblock", prob = 255}
local P = {name = "default:pine_bush_stem", prob = 50}
local C = {name = "ethereal:coconut", prob = 50}
ethereal.igloo = {
size = {x = 7, y = 5, z = 8},
data = {
_,_,S,S,S,_,_,
_,_,S,_,S,_,_,
_,_,S,_,S,_,_,
_,_,_,S,_,_,_,
_,_,_,_,_,_,_,
_,_,S,S,S,_,_,
_,_,S,_,S,_,_,
_,_,S,_,S,_,_,
_,_,_,S,_,_,_,
_,_,_,_,_,_,_,
_,S,S,S,S,S,_,
_,S,_,_,_,S,_,
_,S,_,_,_,S,_,
_,_,S,S,S,_,_,
_,_,_,_,_,_,_,
S,S,S,S,S,S,S,
S,P,_,_,_,C,S,
S,_,_,_,_,_,S,
_,S,_,_,_,S,_,
_,_,S,S,S,_,_,
S,S,S,S,S,S,S,
S,_,_,_,_,_,S,
S,_,_,_,_,_,S,
_,S,_,_,_,S,_,
_,_,S,S,S,_,_,
S,S,S,S,S,S,S,
S,_,_,_,_,_,S,
S,_,_,_,_,_,S,
_,S,_,_,_,S,_,
_,_,S,S,S,_,_,
_,S,S,S,S,S,_,
_,S,_,_,_,S,_,
_,S,_,_,_,S,_,
_,_,S,S,S,_,_,
_,_,_,_,_,_,_,
_,_,S,S,S,_,_,
_,_,S,S,S,_,_,
_,_,S,S,S,_,_,
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
}
}

View file

@ -0,0 +1,71 @@
local _ = {name = "air", param1 = 0}
local L = {name = "ethereal:lemon_leaves", param1 = 255}
local l = {name = "ethereal:lemon_leaves", param1 = 127}
local t = {name = "default:tree", param1 = 255}
local T = {name = "default:tree", param1 = 255, force_place = true}
local e = {name = "ethereal:lemon", param1 = 100}
ethereal.lemontree = {
size = {x = 5, y = 9, z = 5},
yslice_prob = {
{ypos = 1, prob = 127},
{ypos = 3, prob = 127}
},
data = {
_,_,_,_,_,
_,_,_,_,_,
_,_,_,_,_,
_,_,_,_,_,
_,_,e,_,_,
_,L,L,L,e,
e,L,L,l,_,
_,l,L,L,_,
_,_,l,_,_,
_,_,_,_,_,
_,_,_,_,_,
_,_,_,_,_,
_,_,_,_,_,
_,L,L,l,_,
l,L,l,L,L,
L,l,L,L,L,
L,L,L,l,L,
_,L,L,L,_,
_,_,T,_,_,
_,_,T,_,_,
_,_,T,_,_,
_,_,T,_,_,
l,e,T,l,l,
L,L,t,L,l,
l,L,t,L,L,
L,L,L,l,L,
l,L,L,L,l,
_,_,_,_,_,
_,_,_,_,_,
_,_,_,_,_,
_,_,_,_,_,
_,L,L,L,_,
L,l,L,L,L,
L,L,L,L,L,
L,L,L,L,l,
_,l,L,L,_,
_,_,_,_,_,
_,_,_,_,_,
_,_,_,_,_,
_,_,_,_,_,
_,_,l,_,_,
e,L,L,l,_,
_,l,L,L,_,
_,L,L,L,e,
_,_,l,_,_,
}
}

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show more