ethereal/water.lua

157 lines
3.8 KiB
Lua
Raw Normal View History

2016-06-09 07:08:34 -07:00
local S = ethereal.intllib
2014-11-09 11:17:41 -08:00
-- Ice Brick
minetest.register_node("ethereal:icebrick", {
2016-06-09 07:08:34 -07:00
description = S("Ice Brick"),
2014-11-09 11:17:41 -08:00
tiles = {"brick_ice.png"},
paramtype = "light",
freezemelt = "default:water_source",
2015-06-24 02:00:12 -07:00
is_ground_content = false,
2015-07-04 04:22:39 -07:00
groups = {cracky = 3, melts = 1},
2014-11-09 11:17:41 -08:00
sounds = default.node_sound_glass_defaults(),
})
minetest.register_craft({
output = 'ethereal:icebrick 4',
recipe = {
{'default:ice', 'default:ice'},
{'default:ice', 'default:ice'},
}
})
-- Snow Brick
minetest.register_node("ethereal:snowbrick", {
2016-06-09 07:08:34 -07:00
description = S("Snow Brick"),
2014-11-09 11:17:41 -08:00
tiles = {"brick_snow.png"},
paramtype = "light",
freezemelt = "default:water_source",
2015-06-24 02:00:12 -07:00
is_ground_content = false,
2015-07-04 04:22:39 -07:00
groups = {crumbly = 3, melts = 1},
2014-11-09 11:17:41 -08:00
sounds = default.node_sound_dirt_defaults({
2015-07-04 04:22:39 -07:00
footstep = {name="default_snow_footstep", gain = 0.25},
dug = {name="default_snow_footstep", gain = 0.75},
2014-11-09 11:17:41 -08:00
}),
})
minetest.register_craft({
output = 'ethereal:snowbrick 4',
recipe = {
{'default:snowblock', 'default:snowblock'},
{'default:snowblock', 'default:snowblock'},
}
})
-- If Crystal Spike, Crystal Dirt, Snow near Water, change Water to Ice
minetest.register_abm({
2016-08-19 09:22:09 -07:00
label = "Ethereal freeze water",
2015-07-04 04:22:39 -07:00
nodenames = {
"ethereal:crystal_spike", "default:snow", "default:snowblock",
"ethereal:snowbrick"
},
2015-07-15 09:32:19 -07:00
neighbors = {"default:water_source", "default:river_water_source"},
2014-11-09 11:17:41 -08:00
interval = 15,
chance = 4,
2015-11-07 12:50:50 -08:00
catch_up = false,
2014-11-09 11:17:41 -08:00
action = function(pos, node)
2016-08-19 09:22:09 -07:00
local near = minetest.find_node_near(pos, 1,
2015-07-15 09:32:19 -07:00
{"default:water_source", "default:river_water_source"})
2015-11-17 12:35:10 -08:00
2016-08-19 09:22:09 -07:00
if near then
minetest.swap_node(near, {name = "default:ice"})
2014-11-09 11:17:41 -08:00
end
end,
})
-- If Heat Source near Ice or Snow then melt
minetest.register_abm({
2016-08-19 09:22:09 -07:00
label = "Ethereal melt snow/ice",
2015-07-04 04:22:39 -07:00
nodenames = {
"default:ice", "default:snowblock", "default:snow",
"default:dirt_with_snow", "ethereal:snowbrick", "ethereal:icebrick"
},
neighbors = {
"fire:basic_fire", "default:lava_source", "default:lava_flowing",
"default:furnace_active", "default:torch"
},
2015-04-11 02:26:30 -07:00
interval = 5,
chance = 4,
2015-11-07 12:50:50 -08:00
catch_up = false,
action = function(pos, node)
local water_node = "default:water"
if pos.y > 2 then
water_node = "default:river_water"
end
2015-07-04 04:22:39 -07:00
if node.name == "default:ice"
or node.name == "default:snowblock"
or node.name == "ethereal:icebrick"
or node.name == "ethereal:snowbrick" then
2016-01-09 04:25:33 -08:00
minetest.swap_node(pos, {name = water_node.."_source"})
2015-04-11 02:26:30 -07:00
elseif node.name == "default:snow" then
2016-01-09 04:25:33 -08:00
minetest.swap_node(pos, {name = water_node.."_flowing"})
2014-11-09 11:17:41 -08:00
elseif node.name == "default:dirt_with_snow" then
2016-01-09 04:25:33 -08:00
minetest.swap_node(pos, {name = "default:dirt_with_grass"})
2014-11-09 11:17:41 -08:00
end
2014-11-09 11:17:41 -08:00
nodeupdate(pos)
end,
})
-- If Water Source near Dry Dirt, change to normal Dirt
minetest.register_abm({
2016-08-19 09:22:09 -07:00
label = "Ethereal wet dry dirt",
nodenames = {"ethereal:dry_dirt", "default:dirt_with_dry_grass"},
2014-11-09 11:17:41 -08:00
neighbors = {"group:water"},
interval = 15,
chance = 2,
2015-11-07 12:50:50 -08:00
catch_up = false,
action = function(pos, node)
if node == "ethereal:dry_dirt" then
2016-01-09 04:25:33 -08:00
minetest.swap_node(pos, {name = "default:dirt"})
else
2016-01-09 04:25:33 -08:00
minetest.swap_node(pos, {name = "ethereal:green_dirt"})
end
2014-11-09 11:17:41 -08:00
end,
})
2014-12-29 03:03:11 -08:00
2015-04-11 02:26:30 -07:00
-- If torch touching water then drop as item
2015-03-01 03:20:12 -08:00
minetest.register_abm({
2016-08-19 09:22:09 -07:00
label = "Ethereal drop torch",
2015-03-01 03:20:12 -08:00
nodenames = {"default:torch"},
2015-04-11 02:26:30 -07:00
neighbors = {"group:water"},
interval = 5,
2015-03-01 03:20:12 -08:00
chance = 1,
2015-11-07 12:50:50 -08:00
catch_up = false,
2015-03-01 03:20:12 -08:00
action = function(pos, node)
2015-07-04 04:22:39 -07:00
local num = #minetest.find_nodes_in_area(
{x = pos.x - 1, y = pos.y, z = pos.z},
{x = pos.x + 1, y = pos.y, z = pos.z},
{"group:water"})
2015-07-04 04:22:39 -07:00
num = num + #minetest.find_nodes_in_area(
{x = pos.x, y = pos.y, z = pos.z - 1},
{x = pos.x, y = pos.y, z = pos.z + 1},
{"group:water"})
2015-07-04 04:22:39 -07:00
num = num + #minetest.find_nodes_in_area(
{x = pos.x, y = pos.y + 1, z = pos.z},
{x = pos.x, y = pos.y + 1, z = pos.z},
{"group:water"})
2015-04-11 02:26:30 -07:00
if num > 0 then
minetest.swap_node(pos, {name = "air"})
2015-05-08 12:36:32 -07:00
minetest.add_item(pos, {name = node.name})
2015-03-01 03:20:12 -08:00
end
end,
2016-01-09 04:25:33 -08:00
})