diff --git a/README.md b/README.md index 4699b78..7f179a4 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ Ethereal Mapgen mod for Minetest (works on all except v6) - Added Etherium ore and dust - Added sparse decoration of dry grass and shrub to caves biome + - Added sponges that spawn near coral, dry sponge in furnace to soak up water ### 1.26 diff --git a/sealife.lua b/sealife.lua index aa1a31e..50866de 100644 --- a/sealife.lua +++ b/sealife.lua @@ -165,19 +165,24 @@ minetest.register_abm({ catch_up = false, action = function(pos, node) - local sel = math.random(1, 5) + local sel = math.random(1, 6) pos.y = pos.y + 1 local nod = minetest.get_node(pos).name + if nod == "default:water_source" + and sel == 6 then + + minetest.swap_node(pos, {name = "ethereal:sponge_wet"}) + + return + end + if nod == "default:water_source" and sel > 1 then - if minetest.get_node(pos).name == "default:water_source" then - - minetest.swap_node(pos, {name = "ethereal:coral" .. sel}) - end + minetest.swap_node(pos, {name = "ethereal:coral" .. sel}) return end @@ -206,3 +211,85 @@ minetest.register_abm({ end, }) end + +-- sponges + +minetest.register_node("ethereal:sponge_air", { + drawtype = "airlike", + paramtype = "light", + walkable = false, + buildable_to = true, + sunlight_propagates = true, + pointable = false, + drop = "", + groups = {not_in_creative_inventory = 1}, +}) + + +minetest.register_node("ethereal:sponge", { + description = S("Sponge"), + tiles = {"ethereal_sponge.png"}, + groups = {crumbly = 3}, + sounds = default.node_sound_sand_defaults(), + + after_place_node = function(pos, placer, itemstack, pointed_thing) + + -- get player name + local name = placer:get_player_name() + + -- is area protected + if minetest.is_protected(pos, name) then + return + end + + -- get water nodes within range + local num = minetest.find_nodes_in_area( + {x = pos.x - 3, y = pos.y - 3, z = pos.z - 3}, + {x = pos.x + 3, y = pos.y + 3, z = pos.z + 3}, + {"group:water"}) + + -- no water + if #num == 0 then return end + + -- replace water nodes with sponge air + for _, w in pairs(num) do + + if not minetest.is_protected(pos, name) then + minetest.swap_node(w, {name = "ethereal:sponge_air"}) + end + end + + -- replace dry sponge with wet sponge + minetest.swap_node(pos, {name="ethereal:sponge_wet"}) + end +}) + + +minetest.register_node("ethereal:sponge_wet", { + description = S("Wet sponge"), + tiles = {"ethereal_sponge_wet.png"}, + groups = {crumbly = 3}, + sounds = default.node_sound_sand_defaults(), +}) + +-- cook wet sponge into dry sponge +minetest.register_craft({ + type = "cooking", + recipe = "ethereal:sponge_wet", + output = "ethereal:sponge", + cooktime = 3, +}) + +-- use leaf decay to remove sponge air nodes +default.register_leafdecay({ + trunks = {"ethereal:sponge_wet"}, + leaves = {"ethereal:sponge_air"}, + radius = 3 +}) + +-- dry sponges can be used as fuel +minetest.register_craft({ + type = "fuel", + recipe = "ethereal:sponge", + burntime = 5, +}) diff --git a/textures/ethereal_sponge.png b/textures/ethereal_sponge.png new file mode 100644 index 0000000..e739ec4 Binary files /dev/null and b/textures/ethereal_sponge.png differ diff --git a/textures/ethereal_sponge_wet.png b/textures/ethereal_sponge_wet.png new file mode 100644 index 0000000..ddf1aac Binary files /dev/null and b/textures/ethereal_sponge_wet.png differ