codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
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 })
Private
[
?
]
Run code
Submit