[ create a new paste ] login | about

Link: http://codepad.org/NRcYdzUx    [ raw code | fork ]

Lua, pasted on Jul 5:
local function addvec(p1, p2)
	return {
		x = p1.x + p2.x,
		y = p1.y + p2.y,
		z = p1.z + p2.z,
	}
end

local function subvec(p1, p2)
	return {
		x = p1.x - p2.x,
		y = p1.y - p2.y,
		z = p1.z - p2.z,
	}
end

local p2s = minetest.pos_to_string

local function get_light_banks(n)
	local nn = n.name
	if minetest.registered_nodes[nn] and minetest.registered_nodes[nn].paramtype == 'light' then
		local lightday = n.param1 % 16
		local lightnight = (n.param1 - lightday) / 16
		local light_source = minetest.registered_nodes[nn].light_source
		if light_source and lightday < light_source then
			lightday = light_source
		end
		if light_source and lightnight < light_source then
			lightnight = light_source
		end
		return lightday, lightnight
	else
		return nil, nil
	end
end

local function lightcheck(pos, dir, playername)
	local topdir = {x=0, y=1, z=0}
	local frontdir = {x=-1, y=0, z=0}
	if dir.y == 0 then
		frontdir = dir
	end
	local leftdir = {x=frontdir.z, y=0, z=-frontdir.x}
	local nodes_to_check = {
		{prefix="self:   ", pos=pos},
		{prefix="top:    ", pos=addvec(pos, topdir)},
		{prefix="bottom: ", pos=subvec(pos, topdir)},
		{prefix="front:  ", pos=addvec(pos, frontdir)},
		{prefix="back:   ", pos=subvec(pos, frontdir)},
		{prefix="left:   ", pos=addvec(pos, leftdir)},
		{prefix="right:  ", pos=subvec(pos, leftdir)},
	}

	minetest.chat_send_player(playername, 'Light check at '..p2s(pos))

	for _, node_to_check in ipairs(nodes_to_check) do
		local n = minetest.get_node(node_to_check.pos)
		local light = 'undefined'
		local lightday, lightnight = get_light_banks(n)
		if lightday ~= nil or lightnight ~= nil then
			light = 'day='..tostring(lightday)..' night='..tostring(lightnight)
		end
		msg = node_to_check.prefix..p2s(node_to_check.pos)..' ('..n.name..'): '..light
		minetest.chat_send_player(playername, msg, false)
	end
end

minetest.register_craftitem("lightcheck:lightcheck", {
	description = "Light checker",
	inventory_image = "lightcheck.png",
	liquids_pointable = true,
	on_use = function(itemstack, user, pointed)
		playername = user:get_player_name()
		if pointed.type == 'node' and playername and playername ~= "" then
			local frontdir = {
				x = pointed.above.x - pointed.under.x,
				y = pointed.above.y - pointed.under.y,
				z = pointed.above.z - pointed.under.z,
			}
			lightcheck(pointed.under, subvec(pointed.above, pointed.under), playername)
		end
	end
})


Create a new paste based on this one


Comments: