Skip to content
Snippets Groups Projects
init.lua 3.59 KiB
illuna = {}

dofile(minetest.get_modpath("illuna").."/nodes.lua")
dofile(minetest.get_modpath("illuna").."/crafting.lua")
dofile(minetest.get_modpath("illuna").."/commands.lua")
dofile(minetest.get_modpath("illuna").."/register.lua")
dofile(minetest.get_modpath("illuna").."/aliases.lua")
dofile(minetest.get_modpath("illuna").."/functions.lua")
dofile(minetest.get_modpath("illuna").."/craftitems.lua")
dofile(minetest.get_modpath("illuna").."/shop.lua")
if minetest.get_modpath("moreblocks") then
    dofile(minetest.get_modpath("illuna").."/moreblocks.lua")
end
--[[
minetest.register_on_chat_message(function(name, message)
    if message:sub(1,1) == "/" then
        return false
    else
        minetest.chat_send_all(core.colorize("#A3B5CB", "<"..name.."> ") ..core.colorize("#66BEF5", message))
        return true
    end
    return ""
end)
]]
-- Water mechanics from the ethereal mod
--
-- If Crystal Spike, Crystal Dirt, Snow near Water, change Water to Ice
minetest.register_abm({
	label = "Illuna freeze water",
	nodenames = {
		"default:snow", "default:snowblock"
	},
	neighbors = {"default:water_source", "default:river_water_source"},
	interval = 15,
	chance = 4,
	catch_up = false,
	action = function(pos, node)

		local near = minetest.find_node_near(pos, 1,
			{"default:water_source", "default:river_water_source"})

		if near then
			minetest.swap_node(near, {name = "default:ice"})
		end
	end,
})

-- If Heat Source near Ice or Snow then melt
minetest.register_abm({
	label = "Ethereal melt snow/ice",
	nodenames = {
		"default:ice", "default:snowblock", "default:snow",
		"default:dirt_with_snow"
	},
	neighbors = {
		"fire:basic_fire", "default:lava_source", "default:lava_flowing",
		"default:furnace_active", "default:torch"
	},
	interval = 5,
	chance = 4,
	catch_up = false,
	action = function(pos, node)

		local water_node = "default:water"

		if pos.y > 2 then
			water_node = "default:river_water"
		end

		if node.name == "default:ice"
		or node.name == "default:snowblock"
		or node.name == "ethereal:icebrick"
		or node.name == "ethereal:snowbrick" then
			minetest.swap_node(pos, {name = water_node.."_source"})

		elseif node.name == "default:snow" then
			minetest.swap_node(pos, {name = water_node.."_flowing"})

		elseif node.name == "default:dirt_with_snow" then
			minetest.swap_node(pos, {name = "default:dirt_with_grass"})
		end

		nodeupdate(pos)
	end,
})

-- If Water Source near Dry Dirt, change to normal Dirt
minetest.register_abm({
	label = "Ethereal wet dry dirt",
	nodenames = {"ethereal:dry_dirt", "default:dirt_with_dry_grass"},
	neighbors = {"group:water"},
	interval = 15,
	chance = 2,
	catch_up = false,
	action = function(pos, node)

		if node == "ethereal:dry_dirt" then
			minetest.swap_node(pos, {name = "default:dirt"})
		else
			minetest.swap_node(pos, {name = "ethereal:green_dirt"})
		end
	end,
})

-- If torch touching water then drop as item
minetest.register_abm({
	label = "Ethereal drop torch",
	nodenames = {"default:torch"},
	neighbors = {"group:water"},
	interval = 5,
	chance = 1,
	catch_up = false,
	action = function(pos, node)

		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"})

		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"})

		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"})

		if num > 0 then

			minetest.swap_node(pos, {name = "air"})

			minetest.add_item(pos, {name = node.name})
		end
	end,
})