Tidy and tweak with minetest 5.1 as base

This commit is contained in:
tenplus1 2024-08-16 11:05:33 +01:00
parent 9082c7181e
commit c292a0a345
26 changed files with 929 additions and 1081 deletions

View File

@ -101,6 +101,7 @@ who helped make this mod bigger and better throughout it's release :)
- 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.1 and above
### 1.31
- Fix fishing biome checks

View File

@ -1,40 +1,9 @@
local S = ethereal.translate
-- Blue Marble Nodes
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"}
}
})
-- helper strings
local tmp, tmp2
-- helper function
local add_biome = function(a, l, m, n, o, p, b, c, d, e, f, g, nd, na, ns)
-- if not 1 then biome disabled, don't add
if p ~= 1 then return end
local function add_biome(a, l, m, n, o, p, b, c, d, e, f, g, nd, na, ns)
if p ~= 1 then return end -- if not 1 then biome disabled
minetest.register_biome({
name = a,
@ -59,8 +28,8 @@ local add_biome = function(a, l, m, n, o, p, b, c, d, e, f, g, nd, na, ns)
})
end
-- always registered biomes
add_biome("mountain", 140, 31000, 50, 50, 1,
nil, "default:snow", 1, "default:snowblock", 2)
@ -85,19 +54,18 @@ minetest.register_biome({
--add_biome("underground", -31000, -192, 50, 50, 1,
-- nil, nil, nil, nil, nil)
-- biomes with disable setting
tmp = "default:desert_stone"
add_biome("desert", 3, 23, 35, 20, ethereal.desert,
nil, "default:desert_sand", 1, "default:desert_sand", 3, tmp,
nil, "default:desert_sand", 1, "default:desert_sand", 3, "default:desert_stone",
"default:desert_stone", nil, "stairs:stair_desert_stone")
add_biome("desert_ocean", -192, 3, 35, 20, ethereal.desert,
nil, "default:sand", 1, "default:sand", 2, tmp,
nil, "default:sand", 1, "default:sand", 2, "default:desert_stone",
"default:desert_stone", nil, "stairs:stair_desert_stone")
if ethereal.desert then
minetest.register_biome({
name = "desert_under",
node_cave_liquid = {"default:water_source", "default:lava_source"},
@ -127,21 +95,15 @@ add_biome("mesa", 1, 71, 25, 28, ethereal.mesa,
add_biome("mesa_ocean", -192, 2, 25, 28, ethereal.mesa,
nil, "default:sand", 1, "default:sand", 2)
tmp = "default:dirt_with_coniferous_litter"
if not minetest.registered_nodes[tmp] then
tmp = "ethereal:cold_dirt"
end
-- was 'snowy' biome
add_biome("coniferous_forest", 5, 40, 10, 40, ethereal.snowy,
nil, tmp, 1, "default:dirt", 2)
nil, "default:dirt_with_coniferous_litter", 1, "default:dirt", 2)
add_biome("coniferous_forest_ocean", -192, 1, 10, 40, (ethereal.snowy or ethereal.frost),
nil, "default:silver_sand", 1, "default:sand", 2)
if ethereal.snowy then
minetest.register_biome({
name = "coniferous_forest_under",
node_cave_liquid = {"default:water_source", "default:lava_source"},
@ -159,6 +121,7 @@ add_biome("taiga", 40, 140, 10, 40, ethereal.alpine,
nil, "default:dirt_with_snow", 1, "default:dirt", 2)
if ethereal.alpine then
minetest.register_biome({
name = "taiga_under",
node_cave_liquid = {"default:water_source", "default:lava_source"},
@ -186,6 +149,7 @@ add_biome("deciduous_forest_ocean", -31000, 3, 13, 40, ethereal.grassy,
nil, "default:sand", 2, "default:gravel", 1)
if ethereal.grassy then
minetest.register_biome({
name = "deciduous_forest_under",
node_cave_liquid = {"default:water_source", "default:lava_source"},
@ -202,20 +166,14 @@ end
add_biome("caves", 4, 41, 15, 25, ethereal.caves,
nil, "default:desert_stone", 3, "air", 8)
tmp = "default:silver_sand"
if not minetest.registered_nodes[tmp] then
tmp = "default:sand"
end
add_biome("grayness", 2, 41, 15, 30, ethereal.grayness,
nil, "ethereal:gray_dirt", 1, "default:dirt", 3)
add_biome("grayness_ocean", -18, 2, 15, 30, ethereal.grayness,
nil, tmp, 2, "default:sand", 2, "ethereal:blue_marble")
nil, "default:silver_sand", 2, "default:sand", 2, "ethereal:blue_marble")
if ethereal.grayness then
minetest.register_biome({
name = "grayness_under",
node_cave_liquid = {"default:water_source", "default:lava_source"},
@ -249,19 +207,14 @@ add_biome("jumble", 1, 71, 25, 50, ethereal.jumble,
add_biome("jumble_ocean", -192, 1, 25, 50, ethereal.jumble,
nil, "default:sand", 1, "default:sand", 2)
tmp = "default:dirt_with_rainforest_litter"
if not minetest.registered_nodes[tmp] then
tmp = "ethereal:jungle_dirt"
end
add_biome("junglee", 1, 71, 30, 60, ethereal.junglee,
nil, tmp, 1, "default:dirt", 3)
nil, "default:dirt_with_rainforest_litter", 1, "default:dirt", 3)
add_biome("junglee_ocean", -192, 2, 30, 60, ethereal.junglee,
nil, "default:sand", 1, "default:sand", 2)
if ethereal.junglee then
minetest.register_biome({
name = "junglee_under",
node_cave_liquid = {"default:water_source", "default:lava_source"},
@ -302,6 +255,7 @@ add_biome("sandstone_desert_ocean", -192, 2, 50, 20, ethereal.sandstone,
"default:sandstone", nil, "stairs:stair_sandstone")
if ethereal.sandstone then
minetest.register_biome({
name = "sandstone_desert_under",
node_cave_liquid = {"default:water_source", "default:lava_source"},
@ -325,21 +279,14 @@ add_biome("plains", 3, 25, 65, 25, ethereal.plains,
add_biome("plains_ocean", -192, 2, 55, 25, ethereal.plains,
nil, "default:sand", 1, "default:sand", 2)
tmp = "default:dry_dirt_with_dry_grass"
tmp2 = "default:dry_dirt"
if not minetest.registered_nodes[tmp] then
tmp = "default:dirt_with_dry_grass"
tmp2 = "default:dirt"
end
add_biome("savanna", 3, 50, 55, 25, ethereal.savanna,
nil, tmp, 1, tmp2, 3)
nil, "default:dry_dirt_with_dry_grass", 1, "default:dry_dirt", 3)
add_biome("savanna_ocean", -192, 2, 55, 25, ethereal.savanna,
nil, "default:sand", 1, "default:sand", 2)
if ethereal.savanna then
minetest.register_biome({
name = "savanna_under",
node_cave_liquid = {"default:water_source", "default:lava_source"},
@ -363,6 +310,7 @@ add_biome("fiery_ocean", -192, 2, 75, 10, ethereal.fiery,
nil, "default:sand", 1, "default:sand", 2)
if ethereal.fiery then
minetest.register_biome({
name = "fiery_under",
node_cave_liquid = {"default:lava_source"},
@ -437,7 +385,7 @@ if ethereal.glacier == 1 then
end
if ethereal.tundra == 1 and minetest.registered_nodes["default:permafrost"] then
if ethereal.tundra == 1 then
minetest.register_biome({
name = "tundra_highland",

View File

@ -1,24 +1,29 @@
-- storage tables
local old_biomes = {}
local old_decor = {}
-- backup registered biomes
-- backup registered biome data
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_swamp"] = 1,
["grassland_dunes"] = 1,
@ -65,17 +70,15 @@ local def_biomes = {
["coniferous_forest"] = 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)
if not def_biomes[key] then minetest.register_biome(def) end
end
end
-- loop through decorations
for key, def in pairs(old_decor) do
local can_add = true
@ -86,15 +89,11 @@ for key, def in pairs(old_decor) do
-- 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
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
if #new_biomes == 0 then can_add = false end
elseif type(def.biomes) == "string" then
@ -104,9 +103,7 @@ for key, def in pairs(old_decor) do
new_biomes = {def.biomes} -- convert to table
end
elseif not def.biomes then
new_biomes = nil -- keep it nil for re-adding
end
elseif not def.biomes then new_biomes = nil end -- keep it nil for re-adding
if can_add == true then

View File

@ -1,5 +1,6 @@
-- add compatibility for ethereal nodes already in default game or name changed
-- 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")
@ -44,8 +45,3 @@ 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")
-- check if pine bush stem exists, if not create alias
if not minetest.registered_nodes["default:pine_bush_stem"] then
minetest.register_alias("default:pine_bush_stem", "default:wood")
end

View File

@ -1,8 +1,26 @@
local S = ethereal.translate
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",
@ -21,30 +39,15 @@ minetest.register_node("ethereal:crystal_spike", {
},
node_box = {
type = "fixed", fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 0, 5 / 16}
}
})
},
-- Crystal Ingot
minetest.register_craftitem("ethereal:crystal_ingot", {
description = S("Crystal Ingot"),
inventory_image = "ethereal_crystal_ingot.png",
wield_image = "ethereal_crystal_ingot.png"
})
-- Check for builtin_item mod and add custom drop code to crystal spikes
if minetest.get_modpath("builtin_item") then
minetest.override_item("ethereal:crystal_spike", {
dropped_step = function(self, pos, dtime)
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
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
if self.node_inside and self.node_inside.name ~= "default:water_source" then
return
end
@ -60,13 +63,11 @@ if minetest.get_modpath("builtin_item") then
if ent and ent.name == "__builtin:item" then
if ent.itemstring == "default:mese_crystal 2"
and not mese 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
elseif ent.itemstring == "ethereal:crystal_spike 2" and not crystal then
crystal = obj
end
@ -84,20 +85,9 @@ if minetest.get_modpath("builtin_item") then
end
end
})
end
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 Block and recipe
-- Crystal Block
minetest.register_node("ethereal:crystal_block", {
description = S("Crystal Block"),
tiles = {"ethereal_crystal_block.png"},
@ -121,8 +111,8 @@ minetest.register_craft({
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",
@ -132,9 +122,7 @@ minetest.register_tool("ethereal:sword_crystal", {
max_drop_level = 1,
groupcaps = {
snappy = {
times = {[1] = 1.70, [2] = 0.70, [3] = 0.25},
uses = 50,
maxlevel = 3
times = {[1] = 1.70, [2] = 0.70, [3] = 0.25}, uses = 50, maxlevel = 3
}
},
damage_groups = {fleshy = 10}
@ -152,8 +140,8 @@ minetest.register_craft({
}
})
-- Crystal Axe
minetest.register_tool("ethereal:axe_crystal", {
description = S("Crystal Axe"),
inventory_image = "ethereal_crystal_axe.png",
@ -163,9 +151,7 @@ minetest.register_tool("ethereal:axe_crystal", {
max_drop_level = 1,
groupcaps = {
choppy = {
times = {[1] = 2.00, [2] = 0.80, [3] = 0.40},
uses = 40,
maxlevel = 3
times = {[1] = 2.00, [2] = 0.80, [3] = 0.40}, uses = 40, maxlevel = 3
}
},
damage_groups = {fleshy = 7}
@ -192,8 +178,8 @@ minetest.register_craft({
}
})
-- Crystal Pick (This will last a while)
minetest.register_tool("ethereal:pick_crystal", {
description = S("Crystal Pickaxe"),
inventory_image = "ethereal_crystal_pick.png",
@ -203,9 +189,7 @@ minetest.register_tool("ethereal:pick_crystal", {
max_drop_level = 3,
groupcaps={
cracky = {
times = {[1] = 1.8, [2] = 0.8, [3] = 0.40},
uses = 40,
maxlevel = 3
times = {[1] = 1.8, [2] = 0.8, [3] = 0.40}, uses = 40, maxlevel = 3
}
},
damage_groups = {fleshy = 6}
@ -223,8 +207,8 @@ minetest.register_craft({
}
})
-- backup old function and replace with new silk touch ability for crystal shovel
-- dig override for crystal shovel's silk touch ability
local old_handle_node_drops = minetest.handle_node_drops
function minetest.handle_node_drops(pos, drops, digger)
@ -245,6 +229,8 @@ function minetest.handle_node_drops(pos, drops, digger)
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",
@ -254,9 +240,7 @@ minetest.register_tool("ethereal:shovel_crystal", {
max_drop_level = 1,
groupcaps = {
crumbly = {
times = {[1] = 1.10, [2] = 0.50, [3] = 0.30},
uses = 30,
maxlevel = 3
times = {[1] = 1.10, [2] = 0.50, [3] = 0.30}, uses = 30, maxlevel = 3
}
},
damage_groups = {fleshy = 4}
@ -274,8 +258,8 @@ minetest.register_craft({
}
})
-- 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",
@ -283,9 +267,7 @@ minetest.register_tool("ethereal:crystal_gilly_staff", {
on_use = function(itemstack, user, pointed_thing)
if user and user:get_breath() < 10 then
user:set_breath(10)
end
if user and user:get_breath() < 10 then user:set_breath(10) end
end
})
@ -298,12 +280,11 @@ minetest.register_craft({
},
})
-- Add Toolranks mod support
-- Add [toolranks] mod support if found
if minetest.get_modpath("toolranks") then
-- Helper function
local function add_tool(name, desc, afteruse)
local function add_tool(name, desc, afteruse) -- helper function
minetest.override_item(name, {
original_description = desc,

206
decor.lua
View File

@ -1,4 +1,6 @@
-- wild cotton added in 5.3.0
if minetest.registered_nodes["farming:cotton_wild"] then
minetest.register_decoration({
@ -21,8 +23,7 @@ if minetest.registered_nodes["farming:cotton_wild"] then
})
end
-- water pools in swamp areas if 5.0 detected
if minetest.registered_nodes["default:permafrost"] then
-- water pools in swamp areas
minetest.register_decoration({
deco_type = "simple",
@ -53,9 +54,8 @@ if minetest.registered_nodes["default:permafrost"] then
spawn_by = {"default:dirt_with_grass", "default:water_source"},
num_spawn_by = 8
})
end
if minetest.registered_nodes["default:dry_dirt_with_dry_grass"] then
-- dry dirt patches
minetest.register_decoration({
deco_type = "simple",
@ -76,14 +76,14 @@ if minetest.registered_nodes["default:dry_dirt_with_dry_grass"] then
place_offset_y = -1,
flags = "force_placement"
})
end
-- helper string
local tmp
-- helper function
local add_node = function(a, b, c, d, e, f, g, h, i, j)
-- decoration helper function
local function add_deco(a, b, c, d, e, f, g, h, i, j)
if j ~= 1 then return end
@ -102,60 +102,65 @@ local add_node = function(a, b, c, d, e, f, g, h, i, j)
})
end
--firethorn shrub
add_node({"default:snowblock"}, 0.001, {"glacier"}, 1, 30,
add_deco({"default:snowblock"}, 0.001, {"glacier"}, 1, 30,
{"ethereal:firethorn"}, nil, nil, nil, ethereal.glacier)
-- scorched tree
add_node({"ethereal:dry_dirt"}, 0.006, {"plains"}, 1, 100,
add_deco({"ethereal:dry_dirt"}, 0.006, {"plains"}, 1, 100,
{"ethereal:scorched_tree"}, 6, nil, nil, ethereal.plains)
-- dry shrub
add_node({"ethereal:dry_dirt"}, 0.015, {"plains"}, 1, 100,
add_deco({"ethereal:dry_dirt"}, 0.015, {"plains"}, 1, 100,
{"default:dry_shrub"}, nil, nil, nil, ethereal.plains)
add_node({"default:sand"}, 0.015, {"deciduous_forest_ocean"}, 1, 100,
add_deco({"default:sand"}, 0.015, {"deciduous_forest_ocean"}, 1, 100,
{"default:dry_shrub"}, nil, nil, nil, ethereal.grassy)
add_node({"default:desert_sand"}, 0.015, {"desert"}, 1, 100,
add_deco({"default:desert_sand"}, 0.015, {"desert"}, 1, 100,
{"default:dry_shrub"}, nil, nil, nil, ethereal.desert)
add_node({"default:sandstone"}, 0.015, {"sandstone_desert"}, 1, 100,
add_deco({"default:sandstone"}, 0.015, {"sandstone_desert"}, 1, 100,
{"default:dry_shrub"}, nil, nil, nil, ethereal.sandstone)
add_node({"bakedclay:red", "bakedclay:orange"}, 0.015, {"mesa"}, 1, 100,
add_deco({"bakedclay:red", "bakedclay:orange"}, 0.015, {"mesa"}, 1, 100,
{"default:dry_shrub"}, nil, nil, nil, ethereal.mesa)
-- dry grass
add_node({"default:dry_dirt_with_dry_grass",
add_deco({"default:dry_dirt_with_dry_grass",
"default:dirt_with_dry_grass"}, 0.25, {"savanna"}, 1, 100,
{"default:dry_grass_2", "default:dry_grass_3", "default:dry_grass_4",
"default:dry_grass_5"}, nil, nil, nil, ethereal.savanna)
add_node({"default:dirt_with_dry_grass"}, 0.10, {"mesa"}, 1, 100,
add_deco({"default:dirt_with_dry_grass"}, 0.10, {"mesa"}, 1, 100,
{"default:dry_grass_2", "default:dry_grass_3", "default:dry_grass_4",
"default:dry_grass_5"}, nil, nil, nil, ethereal.mesa)
add_node({"default:desert_stone"}, 0.005, {"caves"}, 5, 40,
add_deco({"default:desert_stone"}, 0.005, {"caves"}, 5, 40,
{"default:dry_grass_2", "default:dry_grass_3", "default:dry_shrub"},
nil, nil, nil, ethereal.caves)
-- flowers & strawberry
add_node({"default:dirt_with_grass"}, 0.025, {"deciduous_forest"}, 1, 100,
add_deco({"default:dirt_with_grass"}, 0.025, {"deciduous_forest"}, 1, 100,
{"flowers:dandelion_white", "flowers:dandelion_yellow",
"flowers:geranium", "flowers:rose", "flowers:tulip",
"flowers:viola", "ethereal:strawberry_7"}, nil, nil, nil,
ethereal.grassy)
add_node({"default:dirt_with_grass"}, 0.025, {"grassytwo"}, 1, 100,
add_deco({"default:dirt_with_grass"}, 0.025, {"grassytwo"}, 1, 100,
{"flowers:dandelion_white", "flowers:dandelion_yellow",
"flowers:geranium", "flowers:rose", "flowers:tulip",
"flowers:viola", "ethereal:strawberry_7"}, nil, nil, nil,
ethereal.grassytwo)
-- prairie flowers & strawberry
add_node({"ethereal:prairie_dirt"}, 0.035, {"prairie"}, 1, 100,
add_deco({"ethereal:prairie_dirt"}, 0.035, {"prairie"}, 1, 100,
{"flowers:dandelion_white", "flowers:dandelion_yellow",
"flowers:geranium", "flowers:rose", "flowers:tulip",
"flowers:viola", "ethereal:strawberry_7",
@ -163,40 +168,43 @@ add_node({"ethereal:prairie_dirt"}, 0.035, {"prairie"}, 1, 100,
ethereal.prairie)
-- crystal spike & crystal grass
add_node({"ethereal:crystal_dirt"}, 0.02, {"frost", "frost_floatland"}, 1, 1750,
add_deco({"ethereal:crystal_dirt"}, 0.02, {"frost", "frost_floatland"}, 1, 1750,
{"ethereal:crystal_spike", "ethereal:crystalgrass"}, nil, nil, nil,
ethereal.frost)
-- red shrub
add_node({"ethereal:fiery_dirt"}, 0.10, {"fiery"}, 1, 100,
add_deco({"ethereal:fiery_dirt"}, 0.10, {"fiery"}, 1, 100,
{"ethereal:dry_shrub"}, nil, nil, nil, ethereal.fiery)
-- snowy grass
add_node({"ethereal:gray_dirt"}, 0.05, {"grayness"}, 1, 100,
add_deco({"ethereal:gray_dirt"}, 0.05, {"grayness"}, 1, 100,
{"ethereal:snowygrass"}, nil, nil, nil, ethereal.grayness)
add_node({"ethereal:cold_dirt", "default:dirt_with_coniferous_litter"}, 0.05,
add_deco({"ethereal:cold_dirt", "default:dirt_with_coniferous_litter"}, 0.05,
{"coniferous_forest"}, 1, 100, {"ethereal:snowygrass"}, nil, nil, nil, ethereal.snowy)
-- cactus
add_node({"default:sandstone"}, 0.002, {"sandstone_desert"}, 1, 100,
add_deco({"default:sandstone"}, 0.002, {"sandstone_desert"}, 1, 100,
{"default:cactus"}, 3, nil, nil, ethereal.sandstone)
add_node({"default:desert_sand"}, 0.005, {"desert"}, 1, 100,
add_deco({"default:desert_sand"}, 0.005, {"desert"}, 1, 100,
{"default:cactus"}, 4, nil, nil, ethereal.desert)
-- spore grass
add_node({"ethereal:mushroom_dirt"}, 0.1, {"mushroom"}, 1, 100,
add_deco({"ethereal:mushroom_dirt"}, 0.1, {"mushroom"}, 1, 100,
{"ethereal:spore_grass"}, nil, nil, nil, ethereal.mushroom)
-- red and brown mushrooms
minetest.register_decoration({
deco_type = "simple",
place_on = {
"default:dirt_with_rainforest_litter",
"default:dirt_with_grass",
"ethereal:prairie_dirt",
"ethereal:mushroom_dirt"
"default:dirt_with_rainforest_litter", "default:dirt_with_grass",
"ethereal:prairie_dirt", "ethereal:mushroom_dirt"
},
sidelen = 16,
fill_ratio = 0.01,
@ -209,105 +217,107 @@ minetest.register_decoration({
})
-- jungle grass
add_node({"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"},
add_deco({"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"},
0.10, {"junglee"}, 1, 100, {"default:junglegrass"}, nil, nil, nil,
ethereal.junglee)
add_node({"default:dirt_with_grass"}, 0.15, {"jumble"}, 1, 100,
add_deco({"default:dirt_with_grass"}, 0.15, {"jumble"}, 1, 100,
{"default:junglegrass"}, nil, nil, nil, ethereal.jumble)
add_node({"default:dirt_with_grass"}, 0.25, {"swamp"}, 1, 100,
add_deco({"default:dirt_with_grass"}, 0.25, {"swamp"}, 1, 100,
{"default:junglegrass"}, nil, nil, nil, ethereal.swamp)
-- grass
add_node({"default:dirt_with_grass"}, 0.35, {"deciduous_forest"}, 1, 100,
add_deco({"default:dirt_with_grass"}, 0.35, {"deciduous_forest"}, 1, 100,
{"default:grass_2", "default:grass_3", "default:grass_4",
"default:grass_5"}, nil, nil, nil, ethereal.grassy)
add_node({"default:dirt_with_grass"}, 0.35, {"grassytwo"}, 1, 100,
add_deco({"default:dirt_with_grass"}, 0.35, {"grassytwo"}, 1, 100,
{"default:grass_2", "default:grass_3", "default:grass_4",
"default:grass_5"}, nil, nil, nil, ethereal.grassytwo)
add_node({"default:dirt_with_grass"}, 0.35, {"jumble"}, 1, 100,
add_deco({"default:dirt_with_grass"}, 0.35, {"jumble"}, 1, 100,
{"default:grass_2", "default:grass_3", "default:grass_4",
"default:grass_5"}, nil, nil, nil, ethereal.jumble)
add_node({"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"},
add_deco({"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"},
0.35, {"junglee"}, 1, 100, {"default:grass_2", "default:grass_3",
"default:grass_4", "default:grass_5"}, nil, nil, nil, ethereal.junglee)
add_node({"ethereal:prairie_dirt"}, 0.35, {"prairie"}, 1, 100,
add_deco({"ethereal:prairie_dirt"}, 0.35, {"prairie"}, 1, 100,
{"default:grass_2", "default:grass_3", "default:grass_4",
"default:grass_5"}, nil, nil, nil, ethereal.prairie)
add_node({"ethereal:grove_dirt"}, 0.35, {"grove"}, 1, 100,
add_deco({"ethereal:grove_dirt"}, 0.35, {"grove"}, 1, 100,
{"default:grass_2", "default:grass_3", "default:grass_4",
"default:grass_5"}, nil, nil, nil, ethereal.grove)
add_node({"ethereal:grove_dirt"}, 0.35, {"mediterranean"}, 1, 100,
add_deco({"ethereal:grove_dirt"}, 0.35, {"mediterranean"}, 1, 100,
{"default:grass_2", "default:grass_3", "default:grass_4",
"default:grass_5"}, nil, nil, nil, ethereal.mediterranean)
add_node({"ethereal:bamboo_dirt"}, 0.35, {"bamboo"}, 1, 100,
add_deco({"ethereal:bamboo_dirt"}, 0.35, {"bamboo"}, 1, 100,
{"default:grass_2", "default:grass_3", "default:grass_4",
"default:grass_5"}, nil, nil, nil, ethereal.bamboo)
add_node({"default:dirt_with_grass"}, 0.35, {"grassland", "swamp"},
add_deco({"default:dirt_with_grass"}, 0.35, {"grassland", "swamp"},
1, 100, {"default:grass_3", "default:grass_4"}, nil, nil, nil, 1)
add_node({"ethereal:bamboo_dirt"}, 0.35, {"sakura"}, 1, 100,
add_deco({"ethereal:bamboo_dirt"}, 0.35, {"sakura"}, 1, 100,
{"default:grass_2", "default:grass_3", "default:grass_4",
"default:grass_5"}, nil, nil, nil, ethereal.sakura)
add_node({"ethereal:bamboo_dirt"}, 0.025, {"sakura"}, 1, 100,
add_deco({"ethereal:bamboo_dirt"}, 0.025, {"sakura"}, 1, 100,
{"ethereal:lilac"}, nil, nil, nil, ethereal.sakura)
-- grass on sand
if minetest.registered_nodes["default:marram_grass_1"] then
-- marram grass
add_node({"default:sand"}, 0.25, {"sandclay"}, 3, 4, {"default:marram_grass_1",
add_deco({"default:sand"}, 0.25, {"sandclay"}, 3, 4, {"default:marram_grass_1",
"default:marram_grass_2", "default:marram_grass_3"}, nil, nil, nil,
ethereal.sandclay)
else
add_node({"default:sand"}, 0.25, {"sandclay"}, 3, 4, {"default:grass_2",
"default:grass_3"}, nil, nil, nil, ethereal.sandclay)
end
-- ferns
add_node({"ethereal:grove_dirt"}, 0.2, {"grove"}, 1, 100, {"ethereal:fern"},
add_deco({"ethereal:grove_dirt"}, 0.2, {"grove"}, 1, 100, {"ethereal:fern"},
nil, nil, nil, ethereal.grove)
add_node({"default:dirt_with_grass"}, 0.1, {"swamp"}, 1, 100,
add_deco({"default:dirt_with_grass"}, 0.1, {"swamp"}, 1, 100,
{"ethereal:fern"}, nil, nil, nil, ethereal.swamp)
add_node({"ethereal:crystal_dirt"}, 0.001, {"frost_floatlands"}, 1025, 1750,
add_deco({"ethereal:crystal_dirt"}, 0.001, {"frost_floatlands"}, 1025, 1750,
{"ethereal:fern"}, nil, nil, nil, ethereal.frost)
-- snow
add_node({"ethereal:cold_dirt", "default:dirt_with_coniferous_litter"},
add_deco({"ethereal:cold_dirt", "default:dirt_with_coniferous_litter"},
0.8, {"coniferous_forest"}, 20, 40, {"default:snow"}, nil, nil, nil, ethereal.snowy)
add_node({"default:dirt_with_snow"}, 0.8, {"taiga"}, 40, 140,
add_deco({"default:dirt_with_snow"}, 0.8, {"taiga"}, 40, 140,
{"default:snow"}, nil, nil, nil, ethereal.alpine)
-- Check onion setting
local abundant = minetest.settings:get_bool("ethereal.abundant_onions") ~= false
local onion_rate = abundant and 0.025 or 0.005
-- wild onion
add_node({"default:dirt_with_grass", "ethereal:prairie_dirt"}, onion_rate,
add_deco({"default:dirt_with_grass", "ethereal:prairie_dirt"}, onion_rate,
{"deciduous_forest", "grassytwo", "jumble", "prairie"}, 1, 100,
{"ethereal:onion_4"}, nil, nil, nil, 1)
-- papyrus
add_node({"default:dirt_with_grass"}, 0.1, {"deciduous_forest"}, 1, 1,
add_deco({"default:dirt_with_grass"}, 0.1, {"deciduous_forest"}, 1, 1,
{"default:papyrus"}, 4, "default:water_source", 1, ethereal.grassy)
add_node({"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"},
add_deco({"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"},
0.1, {"junglee"}, 1, 1, {"default:papyrus"}, 4, "default:water_source",
1, ethereal.junglee)
add_node({"default:dirt_with_grass"}, 0.1, {"swamp"}, 1, 1,
add_deco({"default:dirt_with_grass"}, 0.1, {"swamp"}, 1, 1,
{"default:papyrus"}, 4, "default:water_source", 1, ethereal.swamp)
--= Farming Redo plants
@ -317,12 +327,14 @@ if farming and farming.mod and farming.mod == "redo" then
print ("[MOD] Ethereal - Farming Redo detected and in use")
-- potato
add_node({"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"},
add_deco({"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"},
0.002, {"junglee"}, 1, 100, {"farming:potato_3"}, nil, nil, nil,
ethereal.junglee)
-- carrot, cucumber, potato, tomato, corn, coffee, raspberry, rhubarb
add_node({"default:dirt_with_grass"}, 0.002, {"grassytwo"}, 1, 100,
add_deco({"default:dirt_with_grass"}, 0.002, {"grassytwo"}, 1, 100,
{"farming:carrot_7", "farming:cucumber_4", "farming:potato_3", "farming:vanilla_7",
"farming:tomato_7", "farming:corn_8", "farming:coffee_5", "farming:blackberry_4",
"farming:raspberry_4", "farming:rhubarb_3", "farming:blueberry_4",
@ -330,66 +342,72 @@ add_node({"default:dirt_with_grass"}, 0.002, {"grassytwo"}, 1, 100,
"farming:asparagus"}, nil, nil, nil,
ethereal.grassytwo)
add_node({"default:dirt_with_grass"}, 0.002, {"deciduous_forest"}, 1, 100,
add_deco({"default:dirt_with_grass"}, 0.002, {"deciduous_forest"}, 1, 100,
{"farming:carrot_7", "farming:cucumber_4", "farming:potato_3", "farming:vanilla_7",
"farming:tomato_7", "farming:corn_8", "farming:coffee_5", "farming:blackberry_4",
"farming:raspberry_4", "farming:rhubarb_3", "farming:blueberry_4",
"farming:beetroot_5", "farming:sunflower_8",
"farming:eggplant_3"}, nil, nil, nil, ethereal.grassy)
add_node({"default:dirt_with_grass"}, 0.002, {"jumble"}, 1, 100,
add_deco({"default:dirt_with_grass"}, 0.002, {"jumble"}, 1, 100,
{"farming:carrot_7", "farming:cucumber_4", "farming:potato_3", "farming:vanilla_7",
"farming:tomato_7", "farming:corn_8", "farming:coffee_5", "farming:blackberry_4",
"farming:raspberry_4", "farming:rhubarb_3", "farming:blueberry_4",
"farming:cabbage_6", "farming:lettuce_5",
"farming:spinach_3"}, nil, nil, nil, ethereal.jumble)
add_node({"ethereal:prairie_dirt"}, 0.025, {"prairie"}, 1, 100,
add_deco({"ethereal:prairie_dirt"}, 0.025, {"prairie"}, 1, 100,
{"farming:carrot_7", "farming:cucumber_4", "farming:potato_3", "farming:parsley_3",
"farming:tomato_7", "farming:corn_8", "farming:coffee_5", "farming:blackberry_4",
"farming:raspberry_4", "farming:rhubarb_3", "farming:blueberry_4",
"farming:pea_5", "farming:beetroot_5", "farming:sunflower_8"}, nil, nil, nil,
ethereal.prairie)
add_node({"ethereal:grove_dirt"}, 0.002, {"mediterranean"}, 1, 100,
add_deco({"ethereal:grove_dirt"}, 0.002, {"mediterranean"}, 1, 100,
{"farming:parsley_3"}, nil, nil, nil, ethereal.mediterranean)
-- melon and pumpkin
add_node({"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"},
add_deco({"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"},
0.001, {"junglee"}, 1, 1, {"farming:melon_8", "farming:pumpkin_8"},
nil, "default:water_source", 1, ethereal.junglee)
add_node({"default:dirt_with_grass"}, 0.001, {"deciduous_forest"}, 1, 1,
add_deco({"default:dirt_with_grass"}, 0.001, {"deciduous_forest"}, 1, 1,
{"farming:melon_8", "farming:pumpkin_8"}, nil, "default:water_source",
1, ethereal.grassy)
add_node({"default:dirt_with_grass"}, 0.001, {"grassytwo"}, 1, 1,
add_deco({"default:dirt_with_grass"}, 0.001, {"grassytwo"}, 1, 1,
{"farming:melon_8", "farming:pumpkin_8"}, nil, "default:water_source",
1, ethereal.grassytwo)
add_node({"default:dirt_with_grass"}, 0.001, {"jumble"}, 1, 1,
add_deco({"default:dirt_with_grass"}, 0.001, {"jumble"}, 1, 1,
{"farming:melon_8", "farming:pumpkin_8"}, nil, "default:water_source",
1, ethereal.jumble)
-- mint
add_node({"default:dirt_with_grass", "default:dirt_with_coniferous_litter",
add_deco({"default:dirt_with_grass", "default:dirt_with_coniferous_litter",
"ethereal:bamboo_dirt"}, 0.005, nil, 1, 75, "farming:mint_4", nil,
{"group:water", "group:sand"}, 1, 1)
-- green beans
add_node({"default:dirt_with_grass"}, 0.001, {"grassytwo"}, 1, 100,
add_deco({"default:dirt_with_grass"}, 0.001, {"grassytwo"}, 1, 100,
{"farming:beanbush"}, nil, nil, nil, ethereal.grassytwo)
-- grape bushel
add_node({"default:dirt_with_grass"}, 0.001, {"grassytwo"}, 1, 100,
add_deco({"default:dirt_with_grass"}, 0.001, {"grassytwo"}, 1, 100,
{"farming:grapebush"}, nil, nil, nil, ethereal.grassytwo)
add_node({"default:dirt_with_grass"}, 0.001, {"deciduous_forest"}, 1, 100,
add_deco({"default:dirt_with_grass"}, 0.001, {"deciduous_forest"}, 1, 100,
{"farming:grapebush"}, nil, nil, nil, ethereal.grassy)
add_node({"ethereal:prairie_dirt"}, 0.001, {"prairie"}, 1, 100,
add_deco({"ethereal:prairie_dirt"}, 0.001, {"prairie"}, 1, 100,
{"farming:grapebush"}, nil, nil, nil, ethereal.prairie)
-- chili, garlic, pepper, onion, hemp, soy, ginger
minetest.register_decoration({
deco_type = "simple",
place_on = {"default:dirt_with_grass", "ethereal:prairie_dirt",
@ -414,6 +432,8 @@ minetest.register_decoration({
num_spawn_by = 1
})
-- pineapple,soy
minetest.register_decoration({
deco_type = "simple",
place_on = {"default:dirt_with_dry_grass"},
@ -431,6 +451,8 @@ minetest.register_decoration({
decoration = {"farming:pineapple_8", "farming:soy_5"}
})
-- artichoke
minetest.register_decoration({
deco_type = "simple",
place_on = {"ethereal:grove_dirt"},
@ -451,15 +473,14 @@ minetest.register_decoration({
})
end
-- new flowers from baked clay mod
-- is baked clay mod active? add new flowers if so
if minetest.get_modpath("bakedclay") then
minetest.register_decoration({
deco_type = "simple",
place_on = {
"ethereal:prairie_dirt", "default:dirt_with_grass",
"ethereal:grove_dirt"
"ethereal:prairie_dirt", "default:dirt_with_grass", "ethereal:grove_dirt"
},
sidelen = 16,
noise_params = {
@ -534,6 +555,7 @@ minetest.register_decoration({
})
end
-- blue agave from wine mod
if ethereal.desert == 1 and minetest.get_modpath("wine") then
@ -548,7 +570,7 @@ if ethereal.desert == 1 and minetest.get_modpath("wine") then
end
if ethereal.snowy == 1 and minetest.registered_nodes["default:fern_1"] then
if ethereal.snowy == 1 then
local function register_fern_decoration(seed, length)
@ -577,8 +599,9 @@ if ethereal.snowy == 1 and minetest.registered_nodes["default:fern_1"] then
register_fern_decoration(5, 1)
end
-- Tundra moss and stones
if ethereal.tundra == 1 and minetest.registered_nodes["default:permafrost"] then
if ethereal.tundra == 1 then
-- Tundra moss
@ -628,6 +651,7 @@ if ethereal.tundra == 1 and minetest.registered_nodes["default:permafrost"] then
})
end
-- butterflies mod
if minetest.get_modpath("butterflies") then
@ -659,12 +683,11 @@ if minetest.get_modpath("butterflies") then
},
run_at_every_load = true,
action = function(pos)
minetest.get_node_timer(pos):start(5)
end
action = function(pos) minetest.get_node_timer(pos):start(5) end
})
end
-- fireflies mod
if minetest.get_modpath("fireflies") then
@ -694,15 +717,11 @@ if minetest.get_modpath("fireflies") then
nodenames = {"fireflies:firefly", "fireflies:hidden_firefly"},
run_at_every_load = true,
action = function(pos)
minetest.get_node_timer(pos):start(5)
end
action = function(pos) minetest.get_node_timer(pos):start(5) end
})
end
-- Coral Reef (Minetest 5.0)
if minetest.registered_nodes["default:coral_green"] then
-- Coral Reef
minetest.register_decoration({
name = "default:corals",
@ -754,10 +773,9 @@ if minetest.registered_nodes["default:coral_green"] then
param2 = 48,
param2_max = 96
})
end
-- illumishrooms using underground decoration placement
local function add_illumishroom(low, high, nodename)
minetest.register_decoration({

View File

@ -1,14 +1,16 @@
local S = ethereal.translate
local S = minetest.get_translator("ethereal")
-- 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"},
@ -24,12 +26,14 @@ minetest.register_craft({
cooktime = 3,
})
-- ethereal dirt types
-- register 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]
@ -38,8 +42,7 @@ for n = 1, #dirts do
minetest.register_node("ethereal:" .. name .. "_dirt", {
description = S(desc .. " Dirt"),
tiles = {
"ethereal_grass_" .. name .. "_top.png",
"default_dirt.png",
"ethereal_grass_" .. name .. "_top.png", "default_dirt.png",
{
name = "default_dirt.png^ethereal_grass_" .. name .. "_side.png",
tileable_vertical = false
@ -59,23 +62,18 @@ for n = 1, #dirts do
})
end
-- flower spread, also crystal and fire flower regeneration
local flower_spread = function(pos, node)
if (minetest.get_node_light(pos) or 0) < 13 then
return
end
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 minetest.find_node_near(pos, 2, "ignore") then return end
if num > 3 and node.name == "ethereal:crystalgrass" then
@ -135,8 +133,7 @@ local flower_spread = function(pos, node)
return
end
local seedling = minetest.find_nodes_in_area_under_air(
pos0, pos1, {under.name})
local seedling = minetest.find_nodes_in_area_under_air(pos0, pos1, {under.name})
if #seedling > 0 then
@ -144,16 +141,14 @@ local flower_spread = function(pos, node)
pos.y = pos.y + 1
if (minetest.get_node_light(pos) or 0) < 13 then
return
end
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 grow_papyrus = function(pos, node)
local oripos = pos.y
@ -165,32 +160,24 @@ local grow_papyrus = function(pos, node)
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
or minetest.find_node_near(pos, 3, {"group:water"}) == nil then return end
if node.name == "ethereal:bamboo" then
high = 8
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
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 nod and nod.name == "air" and height < high then
if node.name == "ethereal:bamboo"
and height == (high - 1) then
if node.name == "ethereal:bamboo" and height == (high - 1) then
ethereal.grow_bamboo_tree({x = pos.x, y = oripos, z = pos.z})
else
@ -201,11 +188,10 @@ local grow_papyrus = function(pos, node)
end
-- override abm function
local function override_abm(name, redef)
if not name or not redef then
return
end
if not name or not redef then return end
for _, ab in pairs(minetest.registered_abms) do
@ -241,8 +227,8 @@ override_abm("Mushroom spread", {
nodenames = {"group:mushroom"}
})
-- Add Red, Orange and Grey baked clay if mod isn't active
-- If Baked Clay mod not active, make Red, Orange and Grey nodes
if not minetest.get_modpath("bakedclay") then
minetest.register_node(":bakedclay:red", {
@ -270,30 +256,8 @@ if not minetest.get_modpath("bakedclay") then
})
end
-- Quicksand (new style, sinking inside shows yellow effect
-- Quicksand (old style, sinking inside shows black instead of yellow effect,
-- works ok with noclip enabled though)
minetest.register_node("ethereal:quicksand", {
description = S("Quicksand"),
tiles = {"default_sand.png"},
drop = "default:sand",
liquid_viscosity = 15,
liquidtype = "source",
liquid_alternative_flowing = "ethereal:quicksand",
liquid_alternative_source = "ethereal:quicksand",
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,
not_in_creative_inventory = 1},
sounds = default.node_sound_sand_defaults()
})
-- Quicksand (new style, sinking inside shows yellow effect with or without noclip,
-- but old quicksand is shown as black until block placed nearby to update light)
minetest.register_node("ethereal:quicksand2", {
description = S("Quicksand"),
tiles = {"default_sand.png^[colorize:#00004F10"},
@ -314,7 +278,12 @@ minetest.register_node("ethereal:quicksand2", {
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 = {
@ -322,7 +291,5 @@ minetest.register_craft({
{"group:sand", "bucket:bucket_water", "group:sand"},
{"group:sand", "group:sand", "group:sand"}
},
replacements = {
{"bucket:bucket_water", "bucket:bucket_empty"}
}
replacements = {{"bucket:bucket_water", "bucket:bucket_empty"}}
})

View File

@ -1,8 +1,33 @@
local S = ethereal.translate
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",
@ -10,6 +35,7 @@ minetest.register_craftitem("ethereal:etherium_dust", {
})
-- Ethereium Ore
minetest.register_node("ethereal:etherium_ore", {
description = S("Etherium Ore"),
tiles = {"default_desert_stone.png^ethereal_etherium_ore.png"},
@ -26,8 +52,8 @@ minetest.register_node("ethereal:stone_with_etherium_ore", {
sounds = default.node_sound_stone_defaults()
})
-- Bamboo Flooring
minetest.register_node("ethereal:bamboo_floor", {
description = S("Bamboo Floor"),
drawtype = "nodebox",
@ -56,8 +82,8 @@ minetest.register_craft({
}
})
-- Bamboo Block
minetest.register_node("ethereal:bamboo_block", {
description = S("Bamboo Block"),
tiles = {"ethereal_bamboo_floor.png"},
@ -83,8 +109,8 @@ minetest.register_craft({
}
})
-- Paper recipes
minetest.register_craft({
output = "default:paper 6",
recipe = {
@ -101,8 +127,8 @@ minetest.register_craft({
}
})
-- 4x red mushrooms make mushroom block
minetest.register_craft({
output = "ethereal:mushroom",
recipe = {
@ -120,6 +146,7 @@ minetest.register_craft({
})
-- X pattern craft recipes (5x 'a' in X pattern gives 5 of 'b')
if ethereal.xcraft == true then
local cheat = {
@ -144,8 +171,8 @@ if ethereal.xcraft == true then
end
end
-- Palm Wax
minetest.register_craftitem("ethereal:palm_wax", {
description = S("Palm Wax"),
inventory_image = "ethereal_palm_wax.png",
@ -159,6 +186,7 @@ minetest.register_craft({
recipe = "ethereal:palmleaves"
})
-- candle helper function
local function add_candle(col, dcol)
@ -178,10 +206,7 @@ local function add_candle(col, dcol)
{
name = "ethereal_candle" .. col .. ".png",
animation = {
type="vertical_frames",
aspect_w = 32,
aspect_h = 32,
length = 1.0
type="vertical_frames", aspect_w = 32, aspect_h = 32, length = 1.0
}
}
},
@ -192,8 +217,7 @@ local function add_candle(col, dcol)
groups = {candle = 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 }
type = "fixed", fixed = { -0.15, -0.5, -0.15, 0.15, 0, 0.15 }
}
})
@ -224,8 +248,8 @@ add_candle("red", "Red ")
add_candle("violet", "Violet ")
add_candle("yellow", "Yellow ")
-- white candle recipe
minetest.register_craft({
output = "ethereal:candle",
recipe = {
@ -233,7 +257,8 @@ minetest.register_craft({
}
})
-- candle recipe
-- base candle recipe
minetest.register_craft({
output = "ethereal:candle 2",
recipe = {
@ -243,15 +268,16 @@ minetest.register_craft({
}
})
-- Wooden Bowl
minetest.register_craftitem("ethereal:bowl", {
description = S("Bowl"),
inventory_image = "ethereal_bowl.png",
groups = {food_bowl = 1, flammable = 2}
})
-- use farming redo's recipe if found
-- dont add bowl recipe if farming redo already has one
if not minetest.registered_items["farming:bowl"] then
minetest.register_craft({
@ -263,8 +289,8 @@ if not minetest.registered_items["farming:bowl"] then
})
end
-- stone Ladder
minetest.register_node("ethereal:stone_ladder", {
description = S("Stone Ladder"),
drawtype = "signlike",
@ -277,9 +303,7 @@ minetest.register_node("ethereal:stone_ladder", {
walkable = false,
climbable = true,
is_ground_content = false,
selection_box = {
type = "wallmounted"
},
selection_box = {type = "wallmounted"},
groups = {cracky = 3, oddly_breakable_by_hand = 1},
legacy_wallmounted = true,
sounds = default.node_sound_stone_defaults()
@ -294,8 +318,8 @@ minetest.register_craft({
}
})
-- Paper Wall
minetest.register_node("ethereal:paper_wall", {
drawtype = "nodebox",
description = S("Paper Wall"),
@ -310,14 +334,10 @@ minetest.register_node("ethereal:paper_wall", {
sunlight_propagates = true,
paramtype2 = "facedir",
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, 5/11, 0.5, 0.5, 8/16}
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}
}
type = "fixed", fixed = {{-0.5, -0.5, 5/11, 0.5, 0.5, 8/16}}
}
})
@ -330,8 +350,8 @@ minetest.register_craft({
}
})
-- Glostone (A little bit of light decoration)
minetest.register_node("ethereal:glostone", {
description = S("Glo Stone"),
tiles = {"ethereal_glostone.png"},
@ -350,8 +370,8 @@ minetest.register_craft({
}
})
-- Charcoal Lump
minetest.register_craftitem("ethereal:charcoal_lump", {
description = S("Lump of Charcoal"),
inventory_image = "ethereal_charcoal_lump.png"
@ -378,6 +398,7 @@ minetest.register_craft({
})
-- Make Torch from Charcoal Lump
minetest.register_craft({
output = "default:torch 4",
recipe = {
@ -386,14 +407,15 @@ minetest.register_craft({
}
})
-- 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",
@ -404,9 +426,7 @@ minetest.register_tool("ethereal:light_staff", {
on_use = function(itemstack, user, pointed_thing)
if pointed_thing.type ~= "node" then
return
end
if pointed_thing.type ~= "node" then return end
local pos = pointed_thing.under
local pname = user:get_player_name()

View File

@ -1,9 +1,12 @@
local S = ethereal.translate
-- translation and mod check
local S = minetest.get_translator("ethereal")
local door_mod = minetest.get_modpath("doors")
local add_fence = function(name, node, desc, texture)
-- fence registration helper (fence, rail, gate, mese post)
local function add_fence(name, node, desc, texture)
if default.register_fence then
@ -48,6 +51,7 @@ local add_fence = function(name, node, desc, texture)
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")
@ -63,21 +67,19 @@ add_fence("olive", "olive_wood", "Olive", "ethereal_olive_wood")
add_fence("basandra", "basandra_wood", "Basandra", "ethereal_basandra_bush_wood")
-- add compatibility for ethereal's to default wooden gates
-- 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", {

View File

@ -4,7 +4,7 @@
]]--
local S = ethereal.translate
-- fish and where they can be caught
local fish_items = {
"ethereal:fish_bluefin",
@ -46,10 +46,15 @@ local fish_items = {
-- 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",
@ -65,6 +70,8 @@ local junk_items = {
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",
@ -80,28 +87,25 @@ local bonus_items = {
"ethereal:fishing_rod 9000"
}
-- helpers
local default_item = "default:dirt"
local random = math.random -- yup we use this a lot
-- global add item function
-- add item function
ethereal.add_item = function(fish, junk, bonus)
if fish and fish ~= "" then
table.insert(fish_items, fish)
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
if junk and junk ~= "" then
table.insert(junk_items, junk)
end
-- bubble particle effect
if bonus and bonus ~= "" then
table.insert(bonus_items, bonus)
end
end
local effect = function(pos)
local function effect(pos)
minetest.add_particle({
pos = {
@ -119,8 +123,8 @@ local effect = function(pos)
})
end
-- fishing bob entity
minetest.register_entity("ethereal:bob_entity", {
initial_properties = {
@ -185,8 +189,8 @@ if not self.cast then
-- splash
effect(pos) ; effect(pos) ; effect(pos) ; effect(pos)
minetest.sound_play("default_water_footstep", {
pos = pos, gain = 0.1}, true)
minetest.sound_play("default_water_footstep",
{pos = pos, gain = 0.1}, true)
end
else -- already cast and waiting for fish
@ -222,12 +226,9 @@ else -- already cast and waiting for fish
-- 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
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")
@ -298,8 +299,8 @@ end -- if not self.cast
end -- on_step
})
-- narrow item list depending on biome
-- narrow item list depending on biome if applicable
local find_item = function(list, pos)
local item
@ -327,15 +328,13 @@ local find_item = function(list, pos)
--print("==biome: " .. biome, dump(items))
if #items > 0 then
return items[random(#items)]
end
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()
@ -348,9 +347,7 @@ local use_rod = function(itemstack, player, pointed_thing)
ent = objs[n]:get_luaentity()
if ent
and ent.fisher
and ent.name == "ethereal:bob_entity"
if ent and ent.fisher and ent.name == "ethereal:bob_entity"
and player:get_player_name() == ent.fisher then
found = false
@ -364,6 +361,7 @@ local use_rod = function(itemstack, player, pointed_thing)
-- 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)
@ -415,9 +413,7 @@ local use_rod = function(itemstack, player, pointed_thing)
ent = objs[n]:get_luaentity()
if ent
and ent.fisher
and ent.name == "ethereal:bob_entity"
if ent and ent.fisher and ent.name == "ethereal:bob_entity"
and player:get_player_name() == ent.fisher then
found = false
@ -449,8 +445,8 @@ local use_rod = function(itemstack, player, pointed_thing)
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)
@ -471,20 +467,20 @@ local remove_bob = function(player)
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},
@ -511,6 +507,7 @@ minetest.register_craft({
burntime = 15
})
-- table of fish and edibility
local fish = {
{"Blue Fin", "bluefin", 2},
@ -547,6 +544,8 @@ local fish = {
{"Stoplight Parrotfish", "parrot", 2}
}
-- register above fish
for n = 1, #fish do
local usage
@ -569,47 +568,12 @@ for n = 1, #fish do
end
end
-- Make Neon Tetra glow slightly
minetest.override_item("ethereal:fish_tetra", {light_source = 3})
-- 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"},
}
})
-- Worm
minetest.register_craftitem("ethereal:worm", {
description = S("Worm"),
inventory_image = "ethereal_worm.png",
@ -624,6 +588,7 @@ minetest.register_craft({
})
-- 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")

View File

@ -1,24 +1,28 @@
-- 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
local S = ethereal.translate
-- 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
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)
@ -27,6 +31,7 @@ local function set_timer(user, timer)
meta:set_string("ethereal:fly_timer", timer)
end
-- give or revoke fly priv
local function set_flight(user, set)
@ -38,13 +43,11 @@ local function set_flight(user, set)
minetest.set_player_privs(name, privs)
-- when flight removed set timer to temp position
if set ~= true then
set_timer(user, "-99")
if set ~= true then set_timer(user, "-99") end
end
end
-- after function
local function ethereal_set_flight(user)
local name = user and user:get_player_name() ; if not name then return end
@ -62,9 +65,7 @@ local function ethereal_set_flight(user)
local privs = minetest.get_player_privs(name)
-- have we already applied 'fly' privelage?
if not privs.fly then
set_flight(user, true)
end
if not privs.fly then set_flight(user, true) end
-- handle timer
timer = timer - timer_check
@ -72,16 +73,14 @@ local function ethereal_set_flight(user)
-- show expiration message and play sound
if timer <= 10 then
minetest.chat_send_player(name,
minetest.get_color_escape_sequence("#ff5500")
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 updated timer
set_timer(user, timer)
set_timer(user, timer) -- set update timer
-- restart checks
minetest.after(timer_check, function()
@ -89,8 +88,8 @@ local 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
@ -111,9 +110,7 @@ minetest.register_on_joinplayer(function(player)
timer = tonumber(timer) or 0
-- if timer is set to default then return
if timer == -99 then
return
end
if timer == -99 then return end
-- if we got this far and player is flying then start countdown check
if has_fly(name) then
@ -126,8 +123,8 @@ minetest.register_on_joinplayer(function(player)
end, player)
end)
-- potion item
minetest.register_node("ethereal:flight_potion", {
description = S("Flight Potion"),
drawtype = "plantlike",
@ -138,19 +135,16 @@ minetest.register_node("ethereal:flight_potion", {
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "fixed",
fixed = {-0.2, -0.37, -0.2, 0.2, 0.31, 0.2}
type = "fixed", fixed = {-0.2, -0.37, -0.2, 0.2, 0.31, 0.2}
},
groups = {dig_immediate = 3},
sounds = default.node_sound_glass_defaults(),
on_use = function(itemstack, user, pointed_thing)
if user.is_fake_player then
return
end
if user.is_fake_player then return end
-- get privs
-- get info
local name = user:get_player_name()
local privs = minetest.get_player_privs(name)
local timer = get_timer(user)
@ -159,30 +153,24 @@ minetest.register_node("ethereal:flight_potion", {
local msg = timer
if timer == "" or timer == "-99" then
msg = S("unlimited")
end
if timer == "" or timer == "-99" then msg = S("unlimited") end
minetest.chat_send_player(name,
minetest.get_color_escape_sequence("#ffff00")
minetest.chat_send_player(name, minetest.get_color_escape_sequence("#ffff00")
.. S("Flight already granted, @1 seconds left!", msg))
return
end
-- set flight timer
set_timer(user, flight_secs)
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))
-- start check
ethereal_set_flight(user)
ethereal_set_flight(user) -- start check
-- take item
itemstack:take_item()
itemstack:take_item() -- take item
-- return empty bottle
local inv = user:get_inventory()
@ -197,8 +185,8 @@ minetest.register_node("ethereal:flight_potion", {
end
})
-- recipe
minetest.register_craft({
output = "ethereal:flight_potion",
recipe = {

160
food.lua
View File

@ -1,8 +1,8 @@
local S = ethereal.translate
local S = minetest.get_translator("ethereal")
-- Banana
-- Banana (Heals one heart when eaten)
minetest.register_node("ethereal:banana", {
description = S("Banana"),
drawtype = "torchlike",
@ -13,8 +13,7 @@ minetest.register_node("ethereal:banana", {
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "fixed",
fixed = {-0.31, -0.5, -0.31, 0.31, 0.5, 0.31}
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
@ -31,6 +30,7 @@ minetest.register_node("ethereal:banana", {
ethereal.add_eatable("ethereal:banana", 2)
-- Banana Bunch
minetest.register_node("ethereal:banana_bunch", {
description = S("Banana Bunch"),
drawtype = "torchlike",
@ -41,8 +41,7 @@ minetest.register_node("ethereal:banana_bunch", {
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "fixed",
fixed = {-0.31, -0.5, -0.31, 0.31, 0.5, 0.31}
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
@ -58,7 +57,6 @@ minetest.register_node("ethereal:banana_bunch", {
ethereal.add_eatable("ethereal:banana_bunch", 6)
-- Bunch to Single
minetest.register_craft({
output = "ethereal:banana 3",
recipe = {{"ethereal:banana_bunch"}}
@ -70,6 +68,7 @@ minetest.register_craft({
})
-- Banana Dough
minetest.register_craftitem("ethereal:banana_dough", {
description = S("Banana Dough"),
inventory_image = "ethereal_banana_dough.png"
@ -87,8 +86,8 @@ minetest.register_craft({
recipe = "ethereal:banana_dough"
})
-- Orange
-- Orange (Heals 2 hearts when eaten)
minetest.register_node("ethereal:orange", {
description = S("Orange"),
drawtype = "plantlike",
@ -99,8 +98,7 @@ minetest.register_node("ethereal:orange", {
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "fixed",
fixed = {-0.27, -0.37, -0.27, 0.27, 0.44, 0.27}
type = "fixed", fixed = {-0.27, -0.37, -0.27, 0.27, 0.44, 0.27}
},
groups = {
food_orange = 1, fleshy = 3, dig_immediate = 3,
@ -117,8 +115,8 @@ minetest.register_node("ethereal:orange", {
ethereal.add_eatable("ethereal:orange", 4)
-- Pine Nuts
-- Pine Nuts (Heals 1/2 heart when eaten)
minetest.register_craftitem("ethereal:pine_nuts", {
description = S("Pine Nuts"),
inventory_image = "ethereal_pine_nuts.png",
@ -129,7 +127,8 @@ minetest.register_craftitem("ethereal:pine_nuts", {
ethereal.add_eatable("ethereal:pine_nuts", 1)
-- Banana Loaf (Heals 3 hearts when eaten)
-- Banana Loaf
minetest.register_craftitem("ethereal:banana_bread", {
description = S("Banana Loaf"),
inventory_image = "ethereal_banana_bread.png",
@ -141,6 +140,7 @@ minetest.register_craftitem("ethereal:banana_bread", {
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"
@ -148,6 +148,7 @@ 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",
@ -158,8 +159,7 @@ minetest.register_node("ethereal:coconut", {
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}
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],
@ -174,7 +174,8 @@ minetest.register_node("ethereal:coconut", {
end
})
-- Coconut Slice (Heals half heart when eaten)
-- Coconut Slice
minetest.register_craftitem("ethereal:coconut_slice", {
description = S("Coconut Slice"),
inventory_image = "moretrees_coconut_slice.png",
@ -186,6 +187,7 @@ minetest.register_craftitem("ethereal:coconut_slice", {
ethereal.add_eatable("ethereal:coconut_slice", 1)
-- coconut slice recipe (farming redo)
if fredo then
minetest.register_craft({
@ -196,6 +198,7 @@ if fredo then
end
-- coconut slice into whole coconut
minetest.register_craft({
output = "ethereal:coconut",
recipe = {
@ -204,8 +207,8 @@ minetest.register_craft({
}
})
-- Golden Apple
-- Golden Apple (Found on Healing Tree, heals all 10 hearts)
minetest.register_node("ethereal:golden_apple", {
description = S("Golden Apple"),
drawtype = "plantlike",
@ -216,8 +219,7 @@ minetest.register_node("ethereal:golden_apple", {
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "fixed",
fixed = {-0.2, -0.37, -0.2, 0.2, 0.31, 0.2}
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
@ -240,8 +242,8 @@ minetest.register_node("ethereal:golden_apple", {
end
})
-- Hearty Stew
-- Hearty Stew (Heals 5 hearts)
minetest.register_craftitem("ethereal:hearty_stew", {
description = S("Hearty Stew"),
inventory_image = "ethereal_hearty_stew.png",
@ -261,6 +263,7 @@ minetest.register_craft({
})
-- Extra recipe for hearty stew
if fredo then
minetest.register_craft({
@ -273,8 +276,8 @@ if fredo then
})
end
-- Bucket of Cactus Pulp
minetest.register_craftitem("ethereal:bucket_cactus", {
description = S("Bucket of Cactus Pulp"),
inventory_image = "bucket_cactus.png",
@ -291,8 +294,8 @@ minetest.register_craft({
recipe = {{"bucket:bucket_empty","default:cactus"}}
})
-- firethorn jelly
minetest.register_craftitem("ethereal:firethorn_jelly", {
description = S("Firethorn Jelly"),
inventory_image = "ethereal_firethorn_jelly.png",
@ -303,7 +306,7 @@ minetest.register_craftitem("ethereal:firethorn_jelly", {
ethereal.add_eatable("ethereal:firethorn_jelly", 2)
if minetest.registered_items["farming:bowl"] then
if fredo then
minetest.register_craft({
output = "ethereal:firethorn_jelly",
@ -319,8 +322,8 @@ if minetest.registered_items["farming:bowl"] then
})
end
-- Lemon
minetest.register_node("ethereal:lemon", {
description = S("Lemon"),
drawtype = "plantlike",
@ -331,12 +334,10 @@ minetest.register_node("ethereal:lemon", {
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "fixed",
fixed = {-0.27, -0.37, -0.27, 0.27, 0.44, 0.27}
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
food_lemon = 1, fleshy = 3, dig_immediate = 3, leafdecay = 3, leafdecay_drop = 1
},
drop = "ethereal:lemon",
on_use = minetest.item_eat(3),
@ -350,6 +351,7 @@ minetest.register_node("ethereal:lemon", {
ethereal.add_eatable("ethereal:lemon", 3)
-- Candied Lemon
minetest.register_craftitem("ethereal:candied_lemon", {
description = S("Candied Lemon"),
inventory_image = "ethereal_candied_lemon.png",
@ -371,6 +373,7 @@ minetest.register_craft({
})
-- Lemonade
minetest.register_node("ethereal:lemonade", {
description = S("Lemonade"),
drawtype = "plantlike",
@ -380,8 +383,7 @@ minetest.register_node("ethereal:lemonade", {
paramtype = "light",
walkable = false,
selection_box = {
type = "fixed",
fixed = {-0.25, -0.5, -0.25, 0.25, 0.25, 0.25}
type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.25, 0.25}
},
groups = {vessel = 1, dig_immediate = 3, attached_node = 1, drink = 1},
on_use = minetest.item_eat(5, "vessels:drinking_glass"),
@ -401,8 +403,8 @@ minetest.register_craft({
}
})
-- Olive
minetest.register_node("ethereal:olive", {
description = S("Olive"),
drawtype = "plantlike",
@ -414,13 +416,9 @@ minetest.register_node("ethereal:olive", {
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "fixed",
fixed = {-0.1, -0.5, -0.1, 0.1, -0.3, 0.1}
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
},
drop = "ethereal:olive",
groups = {fleshy = 3, dig_immediate = 3, leafdecay = 3, leafdecay_drop = 1},
on_use = minetest.item_eat(1),
sounds = default.node_sound_leaves_defaults(),
@ -432,6 +430,7 @@ minetest.register_node("ethereal:olive", {
ethereal.add_eatable("ethereal:olive", 1)
-- Olive Oil
minetest.register_craftitem("ethereal:olive_oil", {
description = S("Olive Oil"),
inventory_image = "ethereal_olive_oil.png",
@ -446,13 +445,11 @@ minetest.register_craft({
{"ethereal:olive", "ethereal:olive", "ethereal:olive"},
{"farming:juicer", "vessels:glass_bottle", ""}
},
replacements = {
{"farming:juicer", "farming:juicer"}
}
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",
@ -468,8 +465,8 @@ minetest.register_craft({
}
})
-- Nigiri (sushi with raw fish)
minetest.register_craftitem("ethereal:sushi_nigiri", {
description = S("Nigiri Sushi"),
inventory_image = "ethereal_sushi_nigiri.png",
@ -485,8 +482,8 @@ minetest.register_craft({
}
})
-- Tamago (sushi with sweet egg)
minetest.register_craftitem("ethereal:sushi_tamago", {
description = S("Tamago Sushi"),
inventory_image = "ethereal_sushi_tamago.png",
@ -502,8 +499,8 @@ minetest.register_craft({
}
})
-- Fugu (prepared pufferfish)
minetest.register_craftitem("ethereal:fugu", {
description = S("Fugusashi"),
inventory_image = "ethereal_fugu.png",
@ -534,8 +531,8 @@ minetest.register_craft({
}
})
-- Teriyaki Chicken
minetest.register_craftitem("ethereal:teriyaki_chicken", {
description = S("Teriyaki Chicken"),
inventory_image = "ethereal_teriyaki_chicken.png",
@ -556,8 +553,8 @@ minetest.register_craft({
}
})
-- Teriyaki Beef
minetest.register_craftitem("ethereal:teriyaki_beef", {
description = S("Teriyaki Beef"),
inventory_image = "ethereal_teriyaki_beef.png",
@ -579,8 +576,8 @@ minetest.register_craft({
}
})
-- mushroom soup
-- mushroom soup (Heals 1 heart)
minetest.register_craftitem("ethereal:mushroom_soup", {
description = S("Mushroom Soup"),
inventory_image = "ethereal_mushroom_soup.png",
@ -599,8 +596,8 @@ minetest.register_craft({
}
})
-- boiled shrimp
minetest.register_craftitem("ethereal:fish_shrimp_cooked", {
description = S("Boiled Shrimp"),
inventory_image = "ethereal_fish_shrimp_cooked.png",
@ -616,13 +613,11 @@ minetest.register_craft({
{"ethereal:fish_shrimp", "group:water_bucket", "ethereal:fish_shrimp"},
{"", "ethereal:fire_dust", ""}
},
replacements = {
{"group:water_bucket", "bucket:bucket_empty"},
}
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",
@ -640,8 +635,8 @@ minetest.register_craft({
replacements = {{"farming:skillet", "farming:skillet"}}
})
-- jellyfish salad
minetest.register_craftitem("ethereal:jellyfish_salad", {
description = S("Jellyfish Salad"),
inventory_image = "ethereal_jellyfish_salad.png",
@ -658,8 +653,8 @@ minetest.register_craft({
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",
@ -677,6 +672,7 @@ minetest.register_craft({
})
-- cooked calamari
minetest.register_craftitem("ethereal:calamari_cooked", {
description = S("Calamari"),
inventory_image = "ethereal_calamari_cooked.png",
@ -694,6 +690,7 @@ minetest.register_craft({
})
-- fish & chips
minetest.register_craftitem("ethereal:fish_n_chips", {
description = S("Fish & Chips"),
inventory_image = "ethereal_fish_chips.png",
@ -707,7 +704,60 @@ minetest.register_craft({
recipe = {
{"farming:baking_tray", "group:ethereal_fish", "group:food_potato"}
},
replacements = {
{"farming:baking_tray", "farming:baking_tray"}
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"}}
})

View File

@ -6,9 +6,11 @@
Updated by TenPlus1
]]
-- global
ethereal = {version = "20240803"}
ethereal = {version = "20240816"}
-- setting helper
local function setting(stype, name, default)
@ -22,14 +24,11 @@ local function setting(stype, name, default)
value = tonumber(minetest.settings:get("ethereal." .. name))
end
if value == nil then
value = default
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", 0)
@ -76,28 +75,27 @@ setting("bool", "wood_rotate", true)
local path = minetest.get_modpath("ethereal")
-- Load settings.conf file if found
local input = io.open(path.."/settings.conf", "r")
if input then
dofile(path .. "/settings.conf")
input:close()
input = nil
dofile(path .. "/settings.conf") ; input:close() ; input = nil
end
-- Translation support
ethereal.translate = minetest.get_translator("ethereal")
-- 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]
@ -112,12 +110,16 @@ function ethereal.add_eatable(item, hp)
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")
@ -144,16 +146,19 @@ 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")
@ -162,9 +167,10 @@ else -- or return to where it came from
minetest.register_alias("ethereal:bonemeal", "default:dirt")
end
-- Xanadu specific decoration
if minetest.get_modpath("xanadu") then
dofile(path .. "/plantpack.lua")
end
print ("[MOD] Ethereal loaded")

View File

@ -1,8 +1,8 @@
local S = ethereal.translate
local S = minetest.get_translator("ethereal")
-- set leaftype (0 for block, 1 for plantlike)
-- set leaftype (value inside init.lua)
local leaftype = "plantlike"
local leafscale = 1.4
@ -12,6 +12,7 @@ if ethereal.leaftype ~= 0 then
end
-- default apple tree leaves
minetest.override_item("default:leaves", {
drawtype = leaftype,
visual_scale = leafscale,
@ -21,12 +22,14 @@ minetest.override_item("default:leaves", {
})
-- 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,
@ -36,6 +39,7 @@ minetest.override_item("default:jungleleaves", {
})
-- default pine tree leaves
minetest.override_item("default:pine_needles", {
drawtype = leaftype,
visual_scale = leafscale,
@ -53,6 +57,7 @@ minetest.override_item("default:pine_needles", {
})
-- default acacia tree leaves
minetest.override_item("default:acacia_leaves", {
drawtype = leaftype,
inventory_image = "default_acacia_leaves.png",
@ -62,6 +67,7 @@ minetest.override_item("default:acacia_leaves", {
})
-- default aspen tree leaves
minetest.override_item("default:aspen_leaves", {
drawtype = leaftype,
inventory_image = "default_aspen_leaves.png",
@ -71,6 +77,7 @@ minetest.override_item("default:aspen_leaves", {
})
-- willow twig
minetest.register_node("ethereal:willow_twig", {
description = S("Willow Twig"),
drawtype = "plantlike",
@ -94,6 +101,7 @@ minetest.register_node("ethereal:willow_twig", {
})
-- redwood leaves
minetest.register_node("ethereal:redwood_leaves", {
description = S("Redwood Leaves"),
drawtype = leaftype,
@ -117,6 +125,7 @@ minetest.register_node("ethereal:redwood_leaves", {
})
-- orange tree leaves
minetest.register_node("ethereal:orange_leaves", {
description = S("Orange Leaves"),
drawtype = leaftype,
@ -140,6 +149,7 @@ minetest.register_node("ethereal:orange_leaves", {
})
-- banana tree leaves
minetest.register_node("ethereal:bananaleaves", {
description = S("Banana Leaves"),
drawtype = leaftype,
@ -163,6 +173,7 @@ minetest.register_node("ethereal:bananaleaves", {
})
-- healing tree leaves
minetest.register_node("ethereal:yellowleaves", {
description = S("Healing Tree Leaves"),
drawtype = leaftype,
@ -181,7 +192,6 @@ minetest.register_node("ethereal:yellowleaves", {
{items = {"ethereal:yellowleaves"}}
}
},
-- one leaf heals half a heart when eaten
on_use = minetest.item_eat(1),
sounds = default.node_sound_leaves_defaults(),
after_place_node = default.after_place_leaves,
@ -189,6 +199,7 @@ minetest.register_node("ethereal:yellowleaves", {
})
-- palm tree leaves
minetest.register_node("ethereal:palmleaves", {
description = S("Palm Leaves"),
drawtype = leaftype,
@ -212,6 +223,7 @@ minetest.register_node("ethereal:palmleaves", {
})
-- birch tree leaves
minetest.register_node("ethereal:birch_leaves", {
description = S("Birch Leaves"),
drawtype = leaftype,
@ -235,6 +247,7 @@ minetest.register_node("ethereal:birch_leaves", {
})
-- frost tree leaves
minetest.register_node("ethereal:frost_leaves", {
description = S("Frost Leaves"),
drawtype = leaftype,
@ -259,6 +272,7 @@ minetest.register_node("ethereal:frost_leaves", {
})
-- bamboo stalk leaves
minetest.register_node("ethereal:bamboo_leaves", {
description = S("Bamboo Leaves"),
drawtype = leaftype,
@ -282,6 +296,7 @@ minetest.register_node("ethereal:bamboo_leaves", {
})
-- sakura leaves
minetest.register_node("ethereal:sakura_leaves", {
description = S("Sakura Leaves"),
drawtype = leaftype,
@ -327,6 +342,7 @@ minetest.register_node("ethereal:sakura_leaves2", {
})
-- lemon tree leaves
minetest.register_node("ethereal:lemon_leaves", {
description = S("Lemon Tree Leaves"),
drawtype = leaftype,
@ -350,6 +366,7 @@ minetest.register_node("ethereal:lemon_leaves", {
})
-- olive tree leaves
minetest.register_node("ethereal:olive_leaves", {
description = S("Olive Tree Leaves"),
drawtype = leaftype,
@ -372,7 +389,8 @@ minetest.register_node("ethereal:olive_leaves", {
after_place_node = default.after_place_leaves
})
-- mushroom tops
-- red mushroom top
minetest.register_node("ethereal:mushroom", {
description = S("Mushroom Cap"),
tiles = {"ethereal_mushroom_block.png"},
@ -393,7 +411,8 @@ minetest.register_craft({
burntime = 10
})
-- brown mushroom tops
-- brown mushroom top
minetest.register_node("ethereal:mushroom_brown", {
description = S("Brown Mushroom Cap"),
tiles = {"ethereal_mushroom_block_brown.png"},
@ -415,6 +434,7 @@ minetest.register_craft({
})
-- mushroom pore (spongelike material found inside giant shrooms)
minetest.register_node("ethereal:mushroom_pore", {
description = S("Mushroom Pore"),
tiles = {"ethereal_mushroom_pore.png"},
@ -433,6 +453,7 @@ minetest.register_craft({
})
-- hedge block
minetest.register_node("ethereal:bush", {
description = S("Bush"),
tiles = {"ethereal_bush.png"},
@ -457,6 +478,7 @@ minetest.register_craft({
})
-- bush block #2
minetest.register_node("ethereal:bush2", {
drawtype = "allfaces_optional",
description = S("Bush #2"),
@ -483,6 +505,7 @@ minetest.register_craft({
})
-- bush block #3
minetest.register_node("ethereal:bush3", {
drawtype = "allfaces_optional",
description = S("Bush #3"),
@ -509,6 +532,7 @@ minetest.register_craft({
})
-- basandra bush stem, leaves
minetest.register_node("ethereal:basandra_bush_stem", {
description = S("Basandra Bush Stem"),
drawtype = "plantlike",
@ -523,8 +547,7 @@ minetest.register_node("ethereal:basandra_bush_stem", {
groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
sounds = default.node_sound_wood_defaults(),
selection_box = {
type = "fixed",
fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, 0.5, 7 / 16},
type = "fixed", fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, 0.5, 7 / 16},
}
})
@ -544,86 +567,38 @@ minetest.register_node("ethereal:basandra_bush_leaves", {
sounds = default.node_sound_leaves_defaults()
})
-- compatibility check for new mt version with leafdecay function
if default.register_leafdecay then
-- leafdecay helper function
default.register_leafdecay({
trunks = {"default:tree"},
leaves = {
"default:apple", "default:leaves",
"ethereal:orange", "ethereal:orange_leaves",
"ethereal:lemon", "ethereal:lemon_leaves",
"ethereal:vine"
},
radius = 3
})
default.register_leafdecay({
trunks = {"ethereal:willow_trunk"},
leaves = {"ethereal:willow_twig"},
radius = 3
})
default.register_leafdecay({
trunks = {"ethereal:redwood_trunk"},
leaves = {"ethereal:redwood_leaves"},
radius = 3
})
default.register_leafdecay({
trunks = {"ethereal:frost_tree"},
leaves = {"ethereal:frost_leaves"},
radius = 3
})
default.register_leafdecay({
trunks = {"ethereal:yellow_trunk"},
leaves = {"ethereal:yellowleaves", "ethereal:golden_apple"},
radius = 3
})
default.register_leafdecay({
trunks = {"ethereal:palm_trunk"},
leaves = {"ethereal:palmleaves", "ethereal:coconut"},
radius = 3
})
default.register_leafdecay({
trunks = {"ethereal:banana_trunk"},
leaves = {"ethereal:bananaleaves", "ethereal:banana", "ethereal:banana_bunch"},
radius = 3
})
default.register_leafdecay({
trunks = {"ethereal:birch_trunk"},
leaves = {"ethereal:birch_leaves"},
radius = 3
})
default.register_leafdecay({
trunks = {"ethereal:bamboo"},
leaves = {"ethereal:bamboo_leaves"},
radius = 3
})
default.register_leafdecay({
trunks = {"ethereal:sakura_trunk"},
leaves = {"ethereal:sakura_leaves", "ethereal:sakura_leaves2"},
radius = 3
})
default.register_leafdecay({
trunks = {"ethereal:olive_trunk"},
leaves = {"ethereal:olive_leaves", "ethereal:olive"},
radius = 3
})
default.register_leafdecay({
trunks = {"ethereal:mushroom_trunk"},
leaves = {
"ethereal:mushroom", "ethereal:mushroom_brown", "ethereal:mushroom_pore",
"ethereal:lightstring"
},
radius = 4
})
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",
"ethereal:vine"}, 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)

View File

@ -1,6 +1,10 @@
-- 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}},
@ -12,6 +16,8 @@ lucky_block:add_schematics({
{"mushroomtwo", ethereal.mushroomtwo, {x = 1, y = 0, z = 1}},
})
-- add lucky blocks
lucky_block:add_blocks({
{"sch", "basandrabush", 0, false},
{"dro", {"ethereal:basandra_wood"}, 5},

View File

@ -2,4 +2,4 @@ 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
min_minetest_version = 5.0
min_minetest_version = 5.1

View File

@ -1,8 +1,8 @@
local S = ethereal.translate
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",
@ -17,7 +17,8 @@ minetest.register_craftitem("ethereal:wild_onion_plant", {
ethereal.add_eatable("ethereal:wild_onion_plant", 2)
-- Define Onion growth stages
-- Onion definition
local def = {
drawtype = "plantlike",
tiles = {"ethereal_wild_onion_1.png"},
@ -27,8 +28,7 @@ local def = {
buildable_to = true,
drop = "",
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}
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,
@ -37,19 +37,22 @@ local def = {
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 = {
@ -60,11 +63,11 @@ def.drop = {
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}
type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -2.5/16, 0.5}
}
def.drop = {
items = {
@ -74,8 +77,8 @@ def.drop = {
}
minetest.register_node("ethereal:onion_5", table.copy(def))
-- register for use with farming redo growth routines
-- register for use with farming redo growth routines if present
if farming and farming.mod and farming.mod == "redo" then
-- add to registered_plants
@ -86,9 +89,7 @@ if farming and farming.mod and farming.mod == "redo" then
maxlight = farming.max_light,
steps = 5
}
else
minetest.register_abm({
label = "Ethereal grow onion",
nodenames = {
@ -112,11 +113,9 @@ else
pos.y = pos.y + 1
-- do we have enough light?
local light = minetest.get_node_light(pos)
local light = minetest.get_node_light(pos) or 0
if not light or light < 13 then
return
end
if light < 13 then return end
-- grow to next stage
local num = node.name:split("_")[2]
@ -127,4 +126,3 @@ else
end
})
end

View File

@ -1,7 +1,7 @@
-- Baked Clay (mesa biome is between 1 and 71)
-- stratum ore helper
local add_stratum = function(y_min, y_max, node)
local function add_stratum(y_min, y_max, node)
minetest.register_ore({
ore_type = "stratum",
@ -14,6 +14,8 @@ local add_stratum = function(y_min, y_max, node)
})
end
-- add baked clay layers (mesa biome is between 1 and 71)
add_stratum(5, 10, "bakedclay:red")
add_stratum(15, 20, "bakedclay:grey")
add_stratum(25, 30, "bakedclay:red")
@ -21,8 +23,9 @@ add_stratum(35, 40, "bakedclay:grey")
add_stratum(45, 50, "bakedclay:red")
add_stratum(55, 60, "bakedclay:grey")
-- scatter ore helper
local add_ore = function(a, b, c, d, e, f, g)
local function add_ore(a, b, c, d, e, f, g)
minetest.register_ore({
ore_type = "scatter",
@ -36,32 +39,39 @@ local add_ore = function(a, b, c, d, e, f, 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, -100, -10)
-- Etherium
minetest.register_ore({
ore_type = "scatter",
ore = "ethereal:etherium_ore",
@ -75,6 +85,7 @@ minetest.register_ore({
})
-- Etherium in floatlands
minetest.register_ore({
ore_type = "scatter",
ore = "ethereal:stone_with_etherium_ore",

View File

@ -1,7 +1,8 @@
local S = ethereal.translate
local S = minetest.get_translator("ethereal")
-- Spore Grass
minetest.register_node("ethereal:spore_grass", {
description = S("Spore Grass"),
drawtype = "plantlike",
@ -16,12 +17,12 @@ minetest.register_node("ethereal:spore_grass", {
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}
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 in flowing water 1st)
-- Firethorn (poisonous when eaten raw, must be crushed and washed water 1st)
minetest.register_node("ethereal:firethorn", {
description = S("Firethorn Shrub"),
drawtype = "plantlike",
@ -36,13 +37,12 @@ minetest.register_node("ethereal:firethorn", {
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}
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",
@ -58,16 +58,13 @@ minetest.register_node("ethereal:fire_flower", {
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}
type = "fixed", fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 1 / 2, 5 / 16}
},
on_punch = function(pos, node, puncher)
on_punch = function(pos, node, puncher) -- hurts when punched
puncher:punch(puncher, 1.0, {
full_punch_interval = 1.0,
damage_groups = {fleshy = 2}
}, nil)
full_punch_interval = 1.0, damage_groups = {fleshy = 2}}, nil)
end
})
@ -77,8 +74,8 @@ minetest.register_craft({
burntime = 20
})
-- Fire Dust
minetest.register_craftitem("ethereal:fire_dust", {
description = S("Fire Dust"),
inventory_image = "ethereal_fire_dust.png"
@ -95,8 +92,8 @@ minetest.register_craft({
burntime = 10
})
-- vines
minetest.register_node("ethereal:vine", {
description = S("Vine"),
drawtype = "signlike",
@ -108,9 +105,7 @@ minetest.register_node("ethereal:vine", {
walkable = false,
climbable = true,
is_ground_content = false,
selection_box = {
type = "wallmounted"
},
selection_box = {type = "wallmounted"},
groups = {choppy = 3, oddly_breakable_by_hand = 1, flammable = 2},
legacy_wallmounted = true,
sounds = default.node_sound_leaves_defaults()
@ -125,8 +120,8 @@ minetest.register_craft({
}
})
-- light strings (glowing vine)
minetest.register_node("ethereal:lightstring", {
description = S("Light String Vine"),
drawtype = "signlike",
@ -139,9 +134,7 @@ minetest.register_node("ethereal:lightstring", {
walkable = false,
climbable = true,
is_ground_content = false,
selection_box = {
type = "wallmounted"
},
selection_box = {type = "wallmounted"},
groups = {choppy = 3, oddly_breakable_by_hand = 1, flammable = 2},
legacy_wallmounted = true,
sounds = default.node_sound_leaves_defaults()
@ -156,8 +149,8 @@ minetest.register_craft({
}
})
-- Boston Fern
-- Fern (boston)
minetest.register_node("ethereal:fern", {
description = S("Fern"),
drawtype = "plantlike",
@ -180,12 +173,12 @@ minetest.register_node("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}
type = "fixed", fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 0.67, 5 / 16}
}
})
-- Boston Ferns sometimes drop edible Tubers (heals 1/2 heart when eaten)
-- Boston Ferns sometimes drop edible Tubers
minetest.register_craftitem("ethereal:fern_tubers", {
description = S("Fern Tubers"),
inventory_image = "ethereal_fern_tubers.png",
@ -196,6 +189,7 @@ minetest.register_craftitem("ethereal:fern_tubers", {
ethereal.add_eatable("ethereal:fern_tubers", 1)
-- Red Shrub (not flammable)
minetest.register_node("ethereal:dry_shrub", {
description = S("Fiery Dry Shrub"),
drawtype = "plantlike",
@ -210,13 +204,12 @@ minetest.register_node("ethereal:dry_shrub", {
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}
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",
@ -232,13 +225,12 @@ minetest.register_node("ethereal:snowygrass", {
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}
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",
@ -254,13 +246,12 @@ minetest.register_node("ethereal:crystalgrass", {
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}
type = "fixed", fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 5 / 16, 5 / 16}
}
})
-- tall lilac
-- lilac
minetest.register_node("ethereal:lilac", {
description = S("Lilac"),
drawtype = "plantlike",
@ -276,8 +267,7 @@ minetest.register_node("ethereal:lilac", {
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}
type = "fixed", fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 0.67, 5 / 16}
}
})
@ -286,9 +276,9 @@ minetest.register_craft({
recipe = {{"ethereal:lilac"}}
})
-- moss helper function
-- Define Moss Types (Has grass textures on all sides)
local add_moss = function(typ, descr, texture, receipe_item)
local function add_moss(typ, descr, texture, receipe_item)
minetest.register_node("ethereal:" .. typ .. "_moss", {
description = S(descr .. " Moss"),
@ -304,15 +294,17 @@ local add_moss = function(typ, descr, texture, 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")
-- shroom helper function
-- Illuminated Cave Shrooms (Red, Green and Blue)
local add_shroom = function(name, desc, ad)
local function add_shroom(name, desc, ad)
minetest.register_node("ethereal:illumishroom" .. ad, {
description = S(desc .. " Illumishroom"),
@ -327,12 +319,13 @@ local add_shroom = function(name, desc, ad)
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}
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")

View File

@ -1,10 +1,12 @@
local S = ethereal.translate
-- translator and protection check setting
-- Sapling protection check function
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
@ -21,8 +23,7 @@ local function prepare_on_place(itemstack, placer, pointed_thing, name, w, h)
-- 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
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
@ -30,8 +31,8 @@ local function prepare_on_place(itemstack, placer, pointed_thing, name, w, h)
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",
@ -42,21 +43,21 @@ minetest.register_node("ethereal:basandra_bush_sapling", {
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "fixed",
fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 2 / 16, 4 / 16}
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",
@ -72,20 +73,20 @@ minetest.register_node("ethereal:bamboo_sprout", {
},
sounds = default.node_sound_defaults(),
selection_box = {
type = "fixed",
fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 0, 4 / 16}
type = "fixed", fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 0, 4 / 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
-- Register Saplings
local register_sapling = function(name, desc, texture, width, height)
local function register_sapling(name, desc, texture, width, height)
minetest.register_node(name .. "_sapling", {
description = S(desc .. " Tree Sapling"),
@ -98,8 +99,7 @@ local register_sapling = function(name, desc, texture, width, height)
is_ground_content = false,
walkable = false,
selection_box = {
type = "fixed",
fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16}
type = "fixed", fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16}
},
groups = {
snappy = 2, dig_immediate = 3, flammable = 2,
@ -107,6 +107,7 @@ local register_sapling = function(name, desc, texture, width, height)
},
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)
@ -114,13 +115,16 @@ local register_sapling = function(name, desc, texture, width, height)
})
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: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)
@ -131,26 +135,23 @@ 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 add_tree = function (pos, ofx, ofy, ofz, schem, replace)
local function add_tree(pos, ofx, ofy, ofz, schem, replace)
-- check for schematic
if not schem then
print (S("Schematic not found"))
return
end
if not schem then print("Schematic not found") ; return end
-- remove sapling and place schematic
minetest.swap_node(pos, {name = "air"})
minetest.place_schematic({x = pos.x - ofx, y = pos.y - ofy, z = pos.z - ofz},
schem, 0, replace, false)
end
-- get mod path and schematic folder
local path = minetest.get_modpath("ethereal") .. "/schematics/"
-- grow tree functions
-- global tree grow functions
function ethereal.grow_basandra_bush(pos)
add_tree(pos, 1, 0, 1, ethereal.basandrabush)
@ -234,129 +235,96 @@ function ethereal.grow_olive_tree(pos)
add_tree(pos, 3, 0, 3, ethereal.olivetree)
end
-- return True if sapling has enough height room to grow
-- check if sapling has enough height room to grow
local enough_height = function(pos, height)
local function enough_height(pos, height)
local nod = minetest.line_of_sight(
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})
if not nod then
return false -- obstructed
else
return true -- can grow
end
end
-- global function run by Abm
ethereal.grow_sapling = function(pos, node)
function ethereal.grow_sapling(pos, node)
local light_level = minetest.get_node_light(pos) or 0
if light_level < 13 then
return
end
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
if not minetest.registered_nodes[node.name] then
return
end
local height = minetest.registered_nodes[node.name].grown_height
local def = minetest.registered_nodes[node.name] ; if not def then return end
local height = def.grown_height
-- do we have enough height to grow sapling into tree?
if not height or not enough_height(pos, height) then
return
end
if not height or not enough_height(pos, height) then return end
-- Check if Ethereal Sapling is growing on correct substrate
-- 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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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
and under == "ethereal:grove_dirt" then ethereal.grow_lemon_tree(pos) end
end
-- Grow saplings
-- grow saplings Abm
minetest.register_abm({
label = "Ethereal grow sapling",
nodenames = {"group:ethereal_sapling"},
interval = 10,
chance = 50,
catch_up = false,
action = function(pos, node)
ethereal.grow_sapling(pos, node)
end
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

@ -1,9 +1,11 @@
-- path to default and ethereal schematics
local path = minetest.get_modpath("ethereal") .. "/schematics/"
local dpath = minetest.get_modpath("default") .. "/schematics/"
-- load schematic tables
dofile(path .. "orange_tree.lua")
dofile(path .. "banana_tree.lua")
dofile(path .. "bamboo_tree.lua")
@ -29,12 +31,11 @@ dofile(path .. "lemon_tree.lua")
dofile(path .. "olive_tree.lua")
dofile(path .. "basandra_bush.lua")
-- add chematic helper function
-- helper function
local add_schem = function(a, b, c, d, e, f, g, h, i, j, k)
local function add_schem(a, b, c, d, e, f, g, h, i, j, k)
-- if not 1 then biome disabled, don't add
if g ~= 1 then return end
if g ~= 1 then return end -- add if setting is 1
minetest.register_decoration({
deco_type = "schematic",
@ -53,125 +54,149 @@ local add_schem = function(a, b, c, d, e, f, g, h, i, j, k)
})
end
-- igloo
add_schem("default:snowblock", 0.0005, {"glacier"}, 3, 50,
ethereal.igloo, ethereal.glacier, nil, "default:snowblock", 8, "random")
-- sakura tree
add_schem({"ethereal:bamboo_dirt"}, 0.001, {"sakura"}, 7, 100,
ethereal.sakura_tree, ethereal.sakura, nil,
"ethereal:bamboo_dirt", 6)
-- redwood tree
add_schem({"default:dirt_with_dry_grass"}, 0.0025, {"mesa"}, 1, 100,
ethereal.redwood_tree, ethereal.mesa, nil,
"default:dirt_with_dry_grass", 8)
-- banana tree
add_schem({"ethereal:grove_dirt"}, 0.015, {"grove"}, 1, 100,
ethereal.bananatree, ethereal.grove)
-- healing tree
add_schem({"default:dirt_with_snow"}, 0.01, {"taiga"}, 120, 140,
ethereal.yellowtree, ethereal.alpine, nil, "default:dirt_with_snow", 8)
-- crystal frost tree
add_schem({"ethereal:crystal_dirt"}, 0.01, {"frost", "frost_floatland"}, 1, 1750,
ethereal.frosttrees, ethereal.frost, nil,
"ethereal:crystal_dirt", 8)
-- giant mushroom
add_schem("ethereal:mushroom_dirt", 0.02, {"mushroom"}, 3, 25,
ethereal.mushroomone, ethereal.mushroom, nil,
"ethereal:mushroom_dirt", 8)
-- giant brown mushroom
add_schem("ethereal:mushroom_dirt", 0.02, {"mushroom"}, 26, 50,
ethereal.mushroomtwo, ethereal.mushroom, nil, nil, nil, "random")
-- small lava crater
add_schem("ethereal:fiery_dirt", 0.01, {"fiery"}, 1, 100,
ethereal.volcanom, ethereal.fiery, nil, "ethereal:fiery_dirt", 8)
-- large lava crater
add_schem("ethereal:fiery_dirt", 0.003, {"fiery"}, 1, 100,
ethereal.volcanol, ethereal.fiery, nil, "ethereal:fiery_dirt", 8, "random")
-- basandra bush
add_schem("ethereal:fiery_dirt", 0.03, {"fiery"}, 1, 100,
ethereal.basandrabush, ethereal.fiery)
-- default jungle tree
add_schem({"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"},
0.08, {"junglee"}, 1, 100, dpath .. "jungle_tree.mts", ethereal.junglee)
-- willow tree
add_schem({"ethereal:gray_dirt"}, 0.02, {"grayness"}, 1, 100,
ethereal.willow, ethereal.grayness, nil,
"ethereal:gray_dirt", 6)
ethereal.willow, ethereal.grayness, nil, "ethereal:gray_dirt", 6)
-- default large pine tree for lower elevation
add_schem({"ethereal:cold_dirt", "default:dirt_with_coniferous_litter"},
0.025, {"coniferous_forest"}, 10, 40, dpath .. "pine_tree.mts", ethereal.snowy)
-- small pine for higher elevation
add_schem({"default:dirt_with_snow"}, 0.025, {"taiga"}, 40, 140,
ethereal.pinetree, ethereal.alpine)
-- default apple tree
add_schem({"default:dirt_with_grass"}, 0.025, {"jumble", "deciduous_forest"}, 1, 100,
dpath .. "apple_tree.mts", ethereal.grassy)
-- big old tree
add_schem({"default:dirt_with_grass"}, 0.001, {"jumble"}, 1, 100,
ethereal.bigtree, ethereal.jumble, nil,
"default:dirt_with_grass", 8)
ethereal.bigtree, ethereal.jumble, nil, "default:dirt_with_grass", 8)
-- default aspen tree
add_schem({"default:dirt_with_grass"}, 0.02, {"grassytwo"}, 1, 50,
dpath .. "aspen_tree.mts", ethereal.jumble)
-- birch tree
add_schem({"default:dirt_with_grass"}, 0.02, {"grassytwo"}, 50, 100,
ethereal.birchtree, ethereal.grassytwo)
-- orange tree
add_schem({"ethereal:prairie_dirt"}, 0.01, {"prairie"}, 1, 100,
ethereal.orangetree, ethereal.prairie)
-- default acacia tree
add_schem({"default:dry_dirt_with_dry_grass",
"default:dirt_with_dry_grass"}, 0.004, {"savanna"}, 1, 100,
dpath .. "acacia_tree.mts", ethereal.savanna)
-- palm tree
add_schem("default:sand", 0.0025, {"desert_ocean", "plains_ocean", "sandclay",
"sandstone_ocean", "mesa_ocean", "grove_ocean", "deciduous_forest_ocean"}, 1, 1,
ethereal.palmtree, 1)
-- bamboo tree
add_schem({"ethereal:bamboo_dirt"}, 0.025, {"bamboo"}, 1, 100,
ethereal.bambootree, ethereal.bamboo)
-- bush
add_schem({"ethereal:bamboo_dirt"}, 0.08, {"bamboo"}, 1, 100, ethereal.bush,
ethereal.bamboo)
-- vine tree
add_schem({"default:dirt_with_grass"}, 0.02, {"swamp"}, 1, 100,
ethereal.vinetree, ethereal.swamp)
-- lemon tree
add_schem({"ethereal:grove_dirt"}, 0.002, {"mediterranean"}, 5, 50,
ethereal.lemontree, ethereal.mediterranean)
-- olive tree
add_schem({"ethereal:grove_dirt"}, 0.002, {"mediterranean"}, 5, 35,
ethereal.olivetree, ethereal.mediterranean)
-- default large cactus
if ethereal.desert == 1 then
minetest.register_decoration({
@ -195,8 +220,8 @@ if ethereal.desert == 1 then
})
end
-- default bush
minetest.register_decoration({
deco_type = "schematic",
place_on = {"default:dirt_with_grass", "default:dirt_with_snow"},
@ -216,8 +241,8 @@ minetest.register_decoration({
flags = "place_center_x, place_center_z"
})
-- default acacia bush
minetest.register_decoration({
deco_type = "schematic",
place_on = {
@ -238,8 +263,8 @@ minetest.register_decoration({
flags = "place_center_x, place_center_z"
})
-- default pine bush
if minetest.registered_nodes["default:pine_bush"] then
minetest.register_decoration({
@ -263,8 +288,8 @@ if minetest.registered_nodes["default:pine_bush"] then
})
end
-- default blueberry bush
if minetest.registered_nodes["default:blueberry_bush_leaves"] then
minetest.register_decoration({
@ -290,8 +315,8 @@ if minetest.registered_nodes["default:blueberry_bush_leaves"] then
})
end
-- place waterlily in beach areas
minetest.register_decoration({
deco_type = "schematic",
place_on = {"default:sand"},
@ -312,8 +337,8 @@ minetest.register_decoration({
rotation = "random"
})
-- coral reef
if ethereal.reefs == 1 then
-- override corals so crystal shovel can pick them up intact
@ -341,11 +366,12 @@ if ethereal.reefs == 1 then
})
end
-- tree logs
if ethereal.logs == 1 then
if ethereal.grassy == 1 or ethereal.prairie == 1 then
minetest.register_decoration({
name = "default:apple_log",
deco_type = "schematic",
@ -365,6 +391,7 @@ minetest.register_decoration({
end
if ethereal.junglee == 1 then
minetest.register_decoration({
name = "default:jungle_log",
deco_type = "schematic",
@ -384,6 +411,7 @@ if ethereal.junglee == 1 then
end
if ethereal.snowy == 1 then
minetest.register_decoration({
name = "default:pine_log",
deco_type = "schematic",
@ -403,6 +431,7 @@ if ethereal.snowy == 1 then
end
if ethereal.savanna == 1 then
minetest.register_decoration({
name = "default:acacia_log",
deco_type = "schematic",
@ -429,6 +458,7 @@ if ethereal.savanna == 1 then
end
if ethereal.plains == 1 then
minetest.register_decoration({
name = "ethereal:scorched_log",
deco_type = "schematic",
@ -456,6 +486,7 @@ if ethereal.plains == 1 then
end
if ethereal.grove == 1 then
minetest.register_decoration({
name = "ethereal:banana_log",
deco_type = "schematic",
@ -482,5 +513,4 @@ if ethereal.grove == 1 then
})
end
end
end -- end if ethereal.logs

View File

@ -1,8 +1,8 @@
local S = ethereal.translate
local S = minetest.get_translator("ethereal")
-- Seaweed
minetest.register_node("ethereal:seaweed", {
description = S("Seaweed"),
drawtype = "plantlike",
@ -14,8 +14,7 @@ minetest.register_node("ethereal:seaweed", {
climbable = true,
drowning = 1,
selection_box = {
type = "fixed",
fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
type = "fixed", fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
},
post_effect_color = {a = 64, r = 100, g = 100, b = 200},
groups = {food_seaweed = 1, snappy = 3},
@ -33,9 +32,7 @@ minetest.register_node("ethereal:seaweed", {
if def_up.liquidtype == nil or def_up.liquidtype ~= "none" then
if minetest.is_protected(pos, pname) then
return
end
if minetest.is_protected(pos, pname) then return end
if def_down.name ~= "default:sand" and def_down.name ~= "ethereal:sandy" then
return
@ -60,6 +57,8 @@ minetest.register_node("ethereal:seaweed", {
ethereal.add_eatable("ethereal:seaweed", 1)
-- seaweed rooted in sand
minetest.register_node("ethereal:seaweed_rooted", {
description = S("Seaweed"),
drop = "ethereal:seaweed",
@ -74,8 +73,7 @@ minetest.register_node("ethereal:seaweed_rooted", {
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
{-2/16, 0.5, -2/16, 2/16, 3.5, 2/16},
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, {-2/16, 0.5, -2/16, 2/16, 3.5, 2/16},
},
},
node_dig_prediction = "default:sand",
@ -114,6 +112,7 @@ minetest.register_node("ethereal:seaweed_rooted", {
end
})
-- update old style seaweed nodes to new
minetest.register_lbm({
label = "[ethereal] Upgrade seaweed",
@ -132,8 +131,7 @@ minetest.register_lbm({
local height = 0
while height < 14
and minetest.get_node(pos_up).name == "ethereal:seaweed" do
while height < 14 and minetest.get_node(pos_up).name == "ethereal:seaweed" do
minetest.remove_node(pos_up)
height = height + 1
pos_up.y = pos_up.y + 1
@ -147,34 +145,16 @@ minetest.register_lbm({
end
})
-- seaweed to dark green dye
-- seaweed to d.green dye
minetest.register_craft( {
output = "dye:dark_green 3",
recipe = {{"ethereal: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"}
}
})
-- Corals
-- coral on_place helper function
local coral_nodes = {}
local function register_coral(name, description, texture)
@ -190,9 +170,7 @@ local function register_coral(name, description, texture)
if def_up.liquidtype == nil or def_up.liquidtype ~= "none" then
if minetest.is_protected(pos, pname) then
return
end
if minetest.is_protected(pos, pname) then return end
if def_down.name ~= "default:sand"and def_down.name ~= "ethereal:sandy" then
return
@ -221,6 +199,7 @@ local function register_coral(name, description, texture)
return res
end
-- decorative coral node
minetest.register_node("ethereal:" .. name, {
description = description,
drawtype = "plantlike",
@ -229,8 +208,7 @@ local function register_coral(name, description, texture)
wield_image = texture,
paramtype = "light",
selection_box = {
type = "fixed",
fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 1 / 4, 6 / 16}
type = "fixed", fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 1 / 4, 6 / 16}
},
light_source = 3,
groups = {snappy = 3},
@ -238,6 +216,7 @@ local function register_coral(name, description, texture)
on_place = plantlike_on_place
})
-- coral node rooted in sand
minetest.register_node("ethereal:" .. name .. "_rooted", {
description = description,
drop = "ethereal:" .. name,
@ -248,8 +227,7 @@ local function register_coral(name, description, texture)
wield_image = texture,
paramtype = "light",
selection_box = {
type = "fixed",
fixed = {-6 / 16, 0.5, -6 / 16, 6 / 16, 1.25, 6 / 16}
type = "fixed", fixed = {-6 / 16, 0.5, -6 / 16, 6 / 16, 1.25, 6 / 16}
},
light_source = 3,
groups = {snappy = 3, not_in_creative_inventory = 1},
@ -260,6 +238,7 @@ local function register_coral(name, description, texture)
table.insert(coral_nodes, "ethereal:" .. name)
end
-- update old style coral to new
minetest.register_lbm({
label = "[ethereal] Upgrade corals",
@ -284,44 +263,32 @@ minetest.register_lbm({
end
})
-- Blua Coral
register_coral("coral2", S("Blue Glow Coral"), "ethereal_coral_blue.png")
minetest.register_craft( {
output = "dye:cyan 3",
recipe = {{"ethereal:coral2"}}
})
minetest.register_craft({output = "dye:cyan 3", recipe = {{"ethereal:coral2"}}})
-- Orange Coral
register_coral("coral3", S("Orange Glow Coral"), "ethereal_coral_orange.png")
minetest.register_craft( {
output = "dye:orange 3",
recipe = {{"ethereal:coral3"}}
})
minetest.register_craft({output = "dye:orange 3", recipe = {{"ethereal:coral3"}}})
-- Pink Coral
register_coral("coral4", S("Pink Glow Coral"), "ethereal_coral_pink.png")
minetest.register_craft( {
output = "dye:pink 3",
recipe = {{"ethereal:coral4"}}
})
minetest.register_craft({output = "dye:pink 3", recipe = {{"ethereal:coral4"}}})
-- Green Coral
register_coral("coral5", S("Green Glow Coral"), "ethereal_coral_green.png")
minetest.register_craft( {
output = "dye:green 3",
recipe = {{"ethereal:coral5"}}
})
minetest.register_craft({output = "dye:green 3", recipe = {{"ethereal:coral5"}}})
-- Undersea Sand (used for growing seaweed and corals)
minetest.register_node("ethereal:sandy", {
description = S("Sandy"),
tiles = {"default_sand.png"},
@ -333,8 +300,8 @@ minetest.register_node("ethereal:sandy", {
sounds = default.node_sound_sand_defaults()
})
-- randomly generate coral or seaweed and have seaweed grow up to 14 high
if ethereal.sealife == 1 then
minetest.register_abm({
@ -353,9 +320,7 @@ if ethereal.sealife == 1 then
local p2 = node.param2 or 16
local height = math.max(1, math.floor(p2 / 16))
if height > 13 then
return
end
if height > 13 then return end
height = height + 1
@ -397,8 +362,7 @@ if ethereal.sealife == 1 then
})
end
-- sponge nodes
-- sponge nodes (place dry sponge to suck up all water surrounding it, cook to dry)
minetest.register_node("ethereal:sponge_air", {
drawtype = "airlike",
@ -430,9 +394,7 @@ minetest.register_node("ethereal:sponge", {
local name = placer:get_player_name()
-- is area protected
if minetest.is_protected(pos, name) then
return
end
if minetest.is_protected(pos, name) then return end
-- get water nodes within range
local num = minetest.find_nodes_in_area(
@ -456,6 +418,7 @@ minetest.register_node("ethereal:sponge", {
})
-- cook wet sponge into dry sponge
minetest.register_craft({
type = "cooking",
recipe = "ethereal:sponge_wet",
@ -464,6 +427,7 @@ minetest.register_craft({
})
-- use leaf decay to remove sponge air nodes
default.register_leafdecay({
trunks = {"ethereal:sponge_wet"},
leaves = {"ethereal:sponge_air"},
@ -471,6 +435,7 @@ default.register_leafdecay({
})
-- dry sponges can be used as fuel
minetest.register_craft({
type = "fuel",
recipe = "ethereal:sponge",

View File

@ -1,13 +1,13 @@
-- language support
local S = ethereal.translate
-- translation and mod check
-- stair mods active
local S = minetest.get_translator("ethereal")
local stairs_mod = minetest.get_modpath("stairs")
local stairs_redo = stairs_mod and stairs.mod and stairs.mod == "redo"
local stairs_plus = minetest.global_exists("stairsplus")
-- stair selection function
-- register stair function (stair mod will be auto-selected)
local do_stair = function(description, name, node, groups, texture, sound)
if stairs_redo then
@ -39,51 +39,39 @@ local do_stair = function(description, name, node, groups, texture, sound)
mod .. ":slab_" .. name)
else
stairs.register_stair_and_slab(name, node, groups, texture,
S(description .. " Stair"), S(description .. " Slab"), sound, true)
end
end
-- Register Stairs (stair mod will be auto-selected)
-- Register Stairs
do_stair(
"Blue Marble",
"blue_marble",
"ethereal:blue_marble",
"Blue Marble", "blue_marble", "ethereal:blue_marble",
{cracky = 1},
{"ethereal_blue_marble.png"},
default.node_sound_stone_defaults())
do_stair(
"Blue Marble Tile",
"blue_marble_tile",
"ethereal:blue_marble_tile",
"Blue Marble Tile", "blue_marble_tile", "ethereal:blue_marble_tile",
{cracky = 1},
{"ethereal_blue_marble_tile.png"},
default.node_sound_stone_defaults())
do_stair(
"Crystal Block",
"crystal_block",
"ethereal:crystal_block",
"Crystal Block", "crystal_block", "ethereal:crystal_block",
{cracky = 1, level = 2, puts_out_fire = 1, cools_lava = 1},
{"ethereal_crystal_block.png"},
default.node_sound_glass_defaults())
do_stair(
"Ice Brick",
"icebrick",
"ethereal:icebrick",
"Ice Brick", "icebrick", "ethereal:icebrick",
{cracky = 3, puts_out_fire = 1, cools_lava = 1, slippery = 3},
{"ethereal_brick_ice.png"},
default.node_sound_glass_defaults())
do_stair(
"Snow Brick",
"snowbrick",
"ethereal:snowbrick",
"Snow Brick", "snowbrick", "ethereal:snowbrick",
{crumbly = 3, puts_out_fire = 1, cools_lava = 1},
{"ethereal_brick_snow.png"},
default.node_sound_dirt_defaults({
@ -92,105 +80,79 @@ do_stair(
}))
do_stair(
"Dried Dirt",
"dry_dirt",
"ethereal:dry_dirt",
"Dried Dirt", "dry_dirt", "ethereal:dry_dirt",
{crumbly = 3},
{"ethereal_dry_dirt.png"},
default.node_sound_dirt_defaults())
do_stair(
"Mushroom Trunk",
"mushroom_trunk",
"ethereal:mushroom_trunk",
"Mushroom Trunk", "mushroom_trunk", "ethereal:mushroom_trunk",
{choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
{"ethereal_mushroom_trunk.png"},
default.node_sound_wood_defaults())
do_stair(
"Mushroom Top",
"mushroom",
"ethereal:mushroom",
"Mushroom Top", "mushroom", "ethereal:mushroom",
{choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
{"ethereal_mushroom_block.png"},
default.node_sound_wood_defaults())
do_stair(
"Frost Wood",
"frost_wood",
"ethereal:frost_wood",
"Frost Wood", "frost_wood", "ethereal:frost_wood",
{choppy = 2, oddly_breakable_by_hand = 1, put_out_fire = 1},
{"ethereal_frost_wood.png"},
default.node_sound_wood_defaults())
do_stair(
"Healing Wood",
"yellow_wood",
"ethereal:yellow_wood",
"Healing Wood", "yellow_wood", "ethereal:yellow_wood",
{choppy = 2, oddly_breakable_by_hand = 1, put_out_fire = 1},
{"ethereal_yellow_wood.png"},
default.node_sound_wood_defaults())
do_stair(
"Palm Wood",
"palm_wood",
"ethereal:palm_wood",
"Palm Wood", "palm_wood", "ethereal:palm_wood",
{choppy = 2, oddly_breakable_by_hand = 1, flammable = 3},
{"moretrees_palm_wood.png"},
default.node_sound_wood_defaults())
do_stair(
"Birch Wood",
"birch_wood",
"ethereal:birch_wood",
"Birch Wood", "birch_wood", "ethereal:birch_wood",
{choppy = 2, oddly_breakable_by_hand = 1, flammable = 3},
{"moretrees_birch_wood.png"},
default.node_sound_wood_defaults())
do_stair(
"Banana Wood",
"banana_wood",
"ethereal:banana_wood",
"Banana Wood", "banana_wood", "ethereal:banana_wood",
{choppy = 2, oddly_breakable_by_hand = 1, flammable = 3},
{"ethereal_banana_wood.png"},
default.node_sound_wood_defaults())
do_stair(
"Willow Wood",
"willow_wood",
"ethereal:willow_wood",
"Willow Wood", "willow_wood", "ethereal:willow_wood",
{choppy = 2, oddly_breakable_by_hand = 1, flammable = 3},
{"ethereal_willow_wood.png"},
default.node_sound_wood_defaults())
do_stair(
"Redwood",
"redwood_wood",
"ethereal:redwood_wood",
"Redwood", "redwood_wood", "ethereal:redwood_wood",
{choppy = 2, oddly_breakable_by_hand = 1, flammable = 3},
{"ethereal_redwood_wood.png"},
default.node_sound_wood_defaults())
do_stair(
"Bamboo",
"bamboo_wood",
"ethereal:bamboo_block",
"Bamboo", "bamboo_wood", "ethereal:bamboo_block",
{snappy = 3, choppy = 2, oddly_breakable_by_hand = 1, flammable = 3},
{"ethereal_bamboo_floor.png"},
default.node_sound_wood_defaults())
do_stair(
"Sakura Wood",
"sakura_wood",
"ethereal:sakura_wood",
"Sakura Wood", "sakura_wood", "ethereal:sakura_wood",
{choppy = 2, oddly_breakable_by_hand = 1, flammable = 3},
{"ethereal_sakura_wood.png"},
default.node_sound_wood_defaults())
do_stair(
"Olive Wood",
"olive_wood",
"ethereal:olive_wood",
"Olive Wood", "olive_wood", "ethereal:olive_wood",
{choppy = 2, oddly_breakable_by_hand = 1, flammable = 3},
{"ethereal_olive_wood.png"},
default.node_sound_wood_defaults())

View File

@ -1,8 +1,8 @@
local S = ethereal.translate
local S = minetest.get_translator("ethereal")
-- Strawberry (can also be planted directly as seed)
-- Strawberry (can also be planted as seed)
minetest.register_craftitem("ethereal:strawberry", {
description = S("Strawberry"),
inventory_image = "ethereal_strawberry.png",
@ -17,7 +17,8 @@ minetest.register_craftitem("ethereal:strawberry", {
ethereal.add_eatable("ethereal:strawberry", 1)
-- Define Strawberry Bush growth stages
-- Strawberry definition
local def = {
drawtype = "plantlike",
tiles = {"ethereal_strawberry_1.png"},
@ -28,8 +29,7 @@ local def = {
buildable_to = true,
drop = "",
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}
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,
@ -39,25 +39,31 @@ local def = {
}
--stage 1
minetest.register_node("ethereal:strawberry_1", table.copy(def))
-- stage 2
def.tiles = {"ethereal_strawberry_2.png"}
minetest.register_node("ethereal:strawberry_2", table.copy(def))
-- stage 3
def.tiles = {"ethereal_strawberry_3.png"}
minetest.register_node("ethereal:strawberry_3", table.copy(def))
-- stage 4
def.tiles = {"ethereal_strawberry_4.png"}
minetest.register_node("ethereal:strawberry_4", table.copy(def))
-- stage 5
def.tiles = {"ethereal_strawberry_5.png"}
minetest.register_node("ethereal:strawberry_5", table.copy(def))
-- stage 6
def.tiles = {"ethereal_strawberry_6.png"}
def.drop = {
items = {
@ -68,6 +74,7 @@ def.drop = {
minetest.register_node("ethereal:strawberry_6", table.copy(def))
-- stage 7
def.tiles = {"ethereal_strawberry_7.png"}
def.drop = {
items = {
@ -78,11 +85,11 @@ def.drop = {
minetest.register_node("ethereal:strawberry_7", table.copy(def))
-- stage 8 (final)
def.tiles = {"ethereal_strawberry_8.png"}
def.groups.growing = nil
def.selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, -2.5/16, 0.5}
type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -2.5/16, 0.5}
}
def.drop = {
items = {
@ -92,6 +99,7 @@ def.drop = {
}
minetest.register_node("ethereal:strawberry_8", table.copy(def))
-- register Abm to grow strawberry (this file wont be loaded if farming redo active)
minetest.register_abm({
label = "Ethereal grow strawberry",
@ -117,11 +125,9 @@ minetest.register_abm({
pos.y = pos.y + 1
-- do we have enough light?
local light = minetest.get_node_light(pos)
local light = minetest.get_node_light(pos) or 0
if not light or light < 13 then
return
end
if light < 13 then return end
-- grow to next stage
local num = node.name:split("_")[2]
@ -131,4 +137,3 @@ minetest.register_abm({
minetest.swap_node(pos, node)
end
})

View File

@ -1,8 +1,8 @@
local S = ethereal.translate
local S = minetest.get_translator("ethereal")
-- Ice Brick
minetest.register_node("ethereal:icebrick", {
description = S("Ice Brick"),
tiles = {"ethereal_brick_ice.png"},
@ -20,8 +20,8 @@ minetest.register_craft({
}
})
-- Snow Brick
minetest.register_node("ethereal:snowbrick", {
description = S("Snow Brick"),
tiles = {"ethereal_brick_snow.png"},
@ -43,8 +43,8 @@ minetest.register_craft({
}
})
-- If Crystal Spike or Snow near Water, change Water to Ice
-- If Crystal Spike, Snow near Water, change Water to Ice
minetest.register_abm({
label = "Ethereal freeze water",
nodenames = {
@ -67,8 +67,8 @@ minetest.register_abm({
end
})
-- If Heat Source near Ice or Snow then melt.
minetest.register_abm({
label = "Ethereal melt snow/ice",
nodenames = {
@ -109,8 +109,8 @@ minetest.register_abm({
end
})
-- If Water Source near Dry Dirt, change to normal Dirt
minetest.register_abm({
label = "Ethereal wet dry dirt",
nodenames = {
@ -135,8 +135,8 @@ minetest.register_abm({
end
})
-- when enabled, drop torches that are touching water
if ethereal.torchdrop == true and not minetest.get_modpath("real_torch") then
minetest.register_abm({

View File

@ -1,7 +1,7 @@
local S = ethereal.translate
local S = minetest.get_translator("ethereal")
-- helper function
-- register wood and placement helper
local function add_wood(name, def)
@ -146,7 +146,6 @@ minetest.register_craft({
recipe = {{"ethereal:frost_tree"}}
})
-- healing
minetest.register_node("ethereal:yellow_trunk", {
@ -314,12 +313,10 @@ minetest.register_node("ethereal:bamboo", {
sunlight_propagates = true,
walkable = true,
selection_box = {
type = "fixed",
fixed = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15}
type = "fixed", fixed = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15}
},
collision_box = {
type = "fixed",
fixed = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15}
type = "fixed", fixed = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15}
},
groups = {choppy = 3, oddly_breakable_by_hand = 1, flammable = 2},
sounds = default.node_sound_leaves_defaults(),
@ -363,4 +360,3 @@ minetest.register_craft({
output = "ethereal:olive_wood 4",
recipe = {{"ethereal:olive_trunk"}}
})