diff options
Diffstat (limited to 'dirt.lua')
-rw-r--r-- | dirt.lua | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/dirt.lua b/dirt.lua new file mode 100644 index 0000000..250b9a2 --- /dev/null +++ b/dirt.lua @@ -0,0 +1,139 @@ +-- Override default Dirt (to stop caves cutting away dirt) +minetest.override_item("default:dirt", {is_ground_content = false}) + +-- Green Dirt +minetest.register_node("ethereal:green_dirt", { + description = "Green Dirt", + tiles = {"default_grass.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"}, + is_ground_content = false, + groups = {crumbly=3,soil=1,ethereal_grass=1}, + drop = "default:dirt", + sounds = default.node_sound_dirt_defaults() +}) + +-- Dry Dirt +minetest.register_node("ethereal:dry_dirt", { + description = "Dried Dirt", + tiles = {"ethereal_dry_dirt.png"}, + is_ground_content = false, + groups = {crumbly=3}, + sounds = default.node_sound_dirt_defaults() +}) + +minetest.register_craft({ + type = "cooking", + output = "ethereal:dry_dirt", + recipe = "default:dirt", + cooktime = 3, +}) + +local dirt = {} +dirt.type = { + {"Bamboo"}, {"Jungle"}, {"Grove"}, {"Prairie"}, {"Cold"}, {"Crystal"}, {"Mushroom"}, {"Fiery"}, {"Gray"}, +} + +for _, row in ipairs(dirt.type) do + + local desc = row[1] + local name = desc:lower() + + minetest.register_node("ethereal:"..name.."_dirt", { + description = desc.." Dirt", + tiles = {"ethereal_grass_"..name.."_top.png", "default_dirt.png", + "default_dirt.png^ethereal_grass_"..name.."_side.png"}, + is_ground_content = false, + groups = {crumbly=3,soil=1,ethereal_grass=1}, + drop = "default:dirt", + sounds = default.node_sound_dirt_defaults() + }) + +end + +-- Compatibility with old maps +minetest.register_alias("ethereal:crystal_topped_dirt", "ethereal:crystal_dirt") +minetest.register_alias("ethereal:fiery_dirt_top", "ethereal:fiery_dirt") +minetest.register_alias("ethereal:gray_dirt_top", "ethereal:gray_dirt") +minetest.register_alias("ethereal:green_dirt_top", "ethereal:green_dirt") + +-- Check surrounding grass and change dirt to Same colour (by Sokomine) +minetest.register_abm({ + nodenames = {"default:dirt_with_grass"}, + interval = 5, + chance = 5, + action = function(pos, node) + local count_grasses = {} + local curr_max = 0 + local curr_type = "ethereal:green_dirt_top"; -- Fallback Colour + local positions = minetest.find_nodes_in_area( {x=(pos.x-2), y=(pos.y-2), z=(pos.z-2)}, + {x=(pos.x+2), y=(pos.y+2), z=(pos.z+2)}, + "group:ethereal_grass" ) + for _,p in ipairs(positions) do + -- count the new grass node + local n = minetest.get_node( p ) + if( n and n.name ) then + if( not( count_grasses[ n.name ] )) then + count_grasses[ n.name ] = 1 + else + count_grasses[ n.name ] = count_grasses[ n.name ] + 1 + end + -- we found a grass type of which there"s more than the current max + if( count_grasses[ n.name ] > curr_max ) then + curr_max = count_grasses[ n.name ] + curr_type = n.name + end + end + end + minetest.set_node(pos, {name = curr_type }) + end +}) + +-- If Grass devoid of light, change to Dirt +minetest.register_abm({ + nodenames = {"group:ethereal_grass"}, + interval = 5, + chance = 20, + action = function(pos, node) + local name = minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}).name + local nodedef = minetest.registered_nodes[name] + if name ~= "ignore" and nodedef + and not ((nodedef.sunlight_propagates or nodedef.paramtype == "light") + and nodedef.liquidtype == "none") then + minetest.set_node(pos, {name = "default:dirt"}) + end + end +}) + +-- If Baked Clay mod not active, make Red and Orange nodes +if not minetest.get_modpath("bakedclay") then + + minetest.register_node(":bakedclay:red", { + description = "Red Baked Clay", + tiles = {"baked_clay_red.png"}, + groups = {cracky=3}, + is_ground_content = false, + sounds = default.node_sound_stone_defaults(), + }) + + stairs.register_stair_and_slab("bakedclay_red", "bakedclay:red", + {cracky=3, not_in_craft_guide=1}, + {"baked_clay_red.png"}, + "Baked Clay Red Stair", + "Baked Clay Red Slab", + default.node_sound_stone_defaults()) + + minetest.register_node(":bakedclay:orange", { + description = "Orange Baked Clay", + tiles = {"baked_clay_orange.png"}, + groups = {cracky=3}, + is_ground_content = false, + sounds = default.node_sound_stone_defaults(), + }) + + stairs.register_stair_and_slab("bakedclay_orange", "bakedclay:orange", + {cracky=3, not_in_craft_guide=1}, + {"baked_clay_orange.png"}, + "Baked Clay Orange Stair", + "Baked Clay Orange Slab", + default.node_sound_stone_defaults()) + +end |