mirror of
https://github.com/BenjieFiftysix/sponge.git
synced 2025-01-04 12:07:38 +01:00
fixed bug, updated textures
This commit is contained in:
parent
0db129e3de
commit
7adeb5cb71
14
README.md
14
README.md
@ -2,15 +2,17 @@
|
|||||||
## Water-removing sponges for Minetest.
|
## Water-removing sponges for Minetest.
|
||||||
|
|
||||||
made by Benjie/Fiftysix - 27/8/18
|
made by Benjie/Fiftysix - 27/8/18
|
||||||
|
updated 22/12/20
|
||||||
|
|
||||||
[Forum topic](https://forum.minetest.net/viewtopic.php?f=9&t=20729)
|
[Forum topic](https://forum.minetest.net/viewtopic.php?f=9&t=20729)
|
||||||
|
|
||||||
Soggy sponges are quite rare, found deep in the sea where it is dark (below -11).
|
Soggy sponges can rarely be found deep in the sea where the darkness begins.
|
||||||
These can be cooked into dry sponges, and then placed near a liquid to remove an area of it. They will hold the water away until they are removed.
|
These can be cooked into dry sponges, and then placed near a liquid to remove an area of it
|
||||||
They turn in to soggy sponges when used, so to use them again, they have to be cooked.
|
They will hold the water away until they are removed.
|
||||||
|
This will cause them to become soggy, so to use them again they have to be cooked.
|
||||||
|
|
||||||
### How it works:
|
### How it works:
|
||||||
* sponges create a 9x9 area of air-like nodes that water can't flow through (checks for protection)
|
* Sponges create a 9x9 area of air-like nodes that water can't flow through (checks for protection).
|
||||||
* if sponges have cleared more than 3 nodes of liquid, they become soggy sponges
|
* If sponges have cleared more than 3 nodes of liquid, they become soggy sponges.
|
||||||
* removing a sponge or soggy sponge will turn a 9x9 area of air-like nodes back into air.
|
* Removing a sponge or soggy sponge will turn a 9x9 area of air-like nodes back into air, as long as they are not in the area of another sponge.
|
||||||
*(Air-like nodes can be removed in protection by removing a sponge outside the protection, they are not meant to be permanent)*
|
*(Air-like nodes can be removed in protection by removing a sponge outside the protection, they are not meant to be permanent)*
|
||||||
|
129
init.lua
129
init.lua
@ -3,105 +3,142 @@
|
|||||||
- water removal for survival
|
- water removal for survival
|
||||||
|
|
||||||
made by Benjie/Fiftysix - 27/8/18
|
made by Benjie/Fiftysix - 27/8/18
|
||||||
|
updated 22/12/20
|
||||||
|
|
||||||
soggy sponges can be found quite rare, deep in the sea where it is dark
|
Soggy sponges can rarely be found deep in the sea where the darkness begins.
|
||||||
these can be cooked into dry sponges, and then placed near a liquid to remove an area of it
|
These can be cooked into dry sponges, and then placed near a liquid to remove an area of it
|
||||||
they will hold the water away until they are removed.
|
They will hold the water away until they are removed.
|
||||||
to use them again, they have to be cooked.
|
This will cause them to become soggy, so to use them again they have to be cooked.
|
||||||
|
|
||||||
sponges create a 9x9 area of air-like nodes that water can't flow through (checks for protection)
|
Sponges create a 9x9 area of air-like nodes that water can't flow through (checks for protection)
|
||||||
if sponges have cleared more than 3 nodes of liquid, they become soggy sponges
|
If sponges have cleared more than 3 nodes of liquid, they become soggy sponges
|
||||||
removing a sponge or soggy sponge will turn a 9x9 area of air-like nodes back into air
|
removing a sponge or soggy sponge will turn a 9x9 area of air-like nodes back into air
|
||||||
(air-like nodes can be removed in protection by removing a sponge outside the protection, they are not meant to be permanent)
|
(air-like nodes can be removed in protection by removing a sponge outside the protection, they are not meant to be permanent)
|
||||||
]]--
|
]]--
|
||||||
|
|
||||||
local area = 4
|
local area = 4 -- The "radius" (of the cube) to clear water
|
||||||
|
local keep_dry = 3 -- The maximum amount of water cleared where the sponge doesn't turn soggy
|
||||||
|
|
||||||
|
local modname = minetest.get_current_modname()
|
||||||
|
|
||||||
|
|
||||||
|
-- called by after_destruct()
|
||||||
local destruct = function(pos) -- removing the air-like nodes
|
local destruct = function(pos) -- removing the air-like nodes
|
||||||
|
|
||||||
|
-- find all sponges that intersect with this sponge's area
|
||||||
|
local sponge_info = minetest.find_nodes_in_area(
|
||||||
|
{x=pos.x-area*2, y=pos.y-area*2, z=pos.z-area*2}, {x=pos.x+area*2, y=pos.y+area*2, z=pos.z+area*2},
|
||||||
|
{modname..":soggy_sponge", modname..":sponge"}, true
|
||||||
|
)
|
||||||
|
local sponges = {}
|
||||||
|
for _, p in pairs(sponge_info) do
|
||||||
|
local node = minetest.get_node(p)
|
||||||
|
if node.param1 == 1 or node.name == modname..":sponge" then
|
||||||
|
table.insert(sponges, p)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
for x = pos.x-area, pos.x+area do
|
for x = pos.x-area, pos.x+area do
|
||||||
for y = pos.y-area, pos.y+area do
|
for y = pos.y-area, pos.y+area do
|
||||||
for z = pos.z-area, pos.z+area do
|
for z = pos.z-area, pos.z+area do
|
||||||
local n = minetest.get_node({x=x, y=y, z=z}).name
|
local n = minetest.get_node({x=x, y=y, z=z}).name
|
||||||
if n == "sponge:liquid_stop" then
|
if n == modname..":liquid_stop" then
|
||||||
minetest.remove_node({x=x, y=y, z=z})
|
|
||||||
|
-- check if position intersects with another sponge
|
||||||
|
local intersect = false
|
||||||
|
for _, s_pos in pairs(sponges) do
|
||||||
|
if math.abs(s_pos.x-x) <= area and math.abs(s_pos.y-y) <= area and math.abs(s_pos.z-z) <= area then
|
||||||
|
intersect = true
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if not intersect then
|
||||||
|
minetest.remove_node({x=x, y=y, z=z})
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- called by after_place_node()
|
||||||
|
local construct = function(pos, placer, itemstack, pointed_thing)
|
||||||
|
local playername = placer:get_player_name()
|
||||||
|
|
||||||
minetest.register_node("sponge:liquid_stop", { -- air-like node
|
if not minetest.is_protected(pos, playername) then
|
||||||
|
local count = 0
|
||||||
|
|
||||||
|
for x = pos.x-area, pos.x+area do
|
||||||
|
for y = pos.y-area, pos.y+area do
|
||||||
|
for z = pos.z-area, pos.z+area do
|
||||||
|
|
||||||
|
local n = minetest.get_node({x=x, y=y, z=z}).name
|
||||||
|
local def = minetest.registered_nodes[n]
|
||||||
|
if def ~= nil and (n == "air" or def["drawtype"] == "liquid" or def["drawtype"] == "flowingliquid") then
|
||||||
|
local p = {x=x, y=y, z=z}
|
||||||
|
if not minetest.is_protected(p, playername) then
|
||||||
|
if n ~= "air" then
|
||||||
|
count = count + 1 -- counting liquids
|
||||||
|
end
|
||||||
|
minetest.set_node(p, {name=modname..":liquid_stop"})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if count > keep_dry then -- turns soggy if it removed more than `keep_dry` nodes
|
||||||
|
minetest.swap_node(pos, {name=modname..":soggy_sponge", param1=1})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
minetest.register_node(modname..":liquid_stop", { -- air-like node
|
||||||
description = "liquid blocker for sponges",
|
description = "liquid blocker for sponges",
|
||||||
drawtype = "airlike",
|
drawtype = "airlike",
|
||||||
drop = {max_items=0, items={}},
|
drop = {max_items=0, items={}},
|
||||||
groups = {not_in_creative_inventory=1},
|
groups = {not_in_creative_inventory=1},
|
||||||
pointable = false,
|
pointable = false,
|
||||||
walkable = false,
|
walkable = false,
|
||||||
|
floodable = false,
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
buildable_to = true,
|
buildable_to = true,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
minetest.register_node("sponge:sponge", { -- dry sponge
|
minetest.register_node(modname..":sponge", { -- dry sponge
|
||||||
description = "Sponge",
|
description = "Sponge",
|
||||||
tiles = {"sponge_sponge.png"},
|
tiles = {"sponge_sponge.png"},
|
||||||
groups = {crumbly=3},
|
groups = {crumbly=3},
|
||||||
sounds = default.node_sound_dirt_defaults(),
|
sounds = default.node_sound_dirt_defaults(),
|
||||||
|
|
||||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
after_place_node = construct,
|
||||||
local name = placer:get_player_name()
|
|
||||||
|
|
||||||
if not minetest.is_protected(pos, name) then
|
|
||||||
local count = 0
|
|
||||||
for x = pos.x-area, pos.x+area do
|
|
||||||
for y = pos.y-area, pos.y+area do
|
|
||||||
for z = pos.z-area, pos.z+area do
|
|
||||||
local n = minetest.get_node({x=x, y=y, z=z}).name
|
|
||||||
local d = minetest.registered_nodes[n]
|
|
||||||
if d ~= nil and (n == "air" or d["drawtype"] == "liquid" or d["drawtype"] == "flowingliquid") then
|
|
||||||
local p = {x=x, y=y, z=z}
|
|
||||||
if not minetest.is_protected(p, name) then
|
|
||||||
if n ~= "air" then
|
|
||||||
count = count + 1 -- counting liquids
|
|
||||||
end
|
|
||||||
minetest.set_node(p, {name="sponge:liquid_stop"})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if count > 3 then -- turns soggy if it removed more than 3 nodes
|
|
||||||
minetest.set_node(pos, {name="sponge:soggy_sponge"})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
|
|
||||||
after_dig_node = destruct
|
after_destruct = destruct,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
minetest.register_node("sponge:soggy_sponge", { -- soggy sponge
|
minetest.register_node(modname..":soggy_sponge", { -- soggy sponge
|
||||||
description = "Soggy sponge",
|
description = "Soggy sponge",
|
||||||
tiles = {"sponge_soggy_sponge.png"},
|
tiles = {"sponge_soggy_sponge.png"},
|
||||||
groups = {crumbly=3},
|
groups = {crumbly=3},
|
||||||
sounds = default.node_sound_dirt_defaults(),
|
sounds = default.node_sound_dirt_defaults(),
|
||||||
|
|
||||||
on_destruct = destruct
|
after_destruct = destruct,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({ -- cooking soggy sponge back into dry sponge
|
minetest.register_craft({ -- cooking soggy sponge back into dry sponge
|
||||||
type = "cooking",
|
type = "cooking",
|
||||||
recipe = "sponge:soggy_sponge",
|
recipe = modname..":soggy_sponge",
|
||||||
output = "sponge:sponge",
|
output = modname..":sponge",
|
||||||
cooktime = 2,
|
cooktime = 2,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_decoration({ -- sponges are found deep in the sea
|
minetest.register_decoration({ -- sponges are found deep in the sea
|
||||||
name = "sponge:sponges",
|
name = modname..":sponges",
|
||||||
deco_type = "simple",
|
deco_type = "simple",
|
||||||
place_on = {"default:sand"},
|
place_on = {"default:sand"},
|
||||||
spawn_by = "default:water_source",
|
spawn_by = "default:water_source",
|
||||||
@ -109,5 +146,5 @@ minetest.register_decoration({ -- sponges are found deep in the sea
|
|||||||
fill_ratio = 0.0003,
|
fill_ratio = 0.0003,
|
||||||
y_max = -12,
|
y_max = -12,
|
||||||
flags = "force_placement",
|
flags = "force_placement",
|
||||||
decoration = "sponge:soggy_sponge",
|
decoration = modname..":soggy_sponge",
|
||||||
})
|
})
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 388 B After Width: | Height: | Size: 1.1 KiB |
Binary file not shown.
Before Width: | Height: | Size: 363 B After Width: | Height: | Size: 1.2 KiB |
Binary file not shown.
Loading…
Reference in New Issue
Block a user