techage/lamps/lightblock.lua
2022-01-04 19:40:27 +01:00

66 lines
1.4 KiB
Lua

--[[
TechAge
=======
Copyright (C) 2020 Joachim Stolberg
AGPL v3
See LICENSE.txt for more information
TA4 Invisible Light Block
]]--
local S = techage.S
-- 9 light positions in a 3x3 field
local Positions = {
{x =-1, y = 0, z = 0},
{x = 0, y = 0, z =-1},
{x = 1, y = 0, z = 0},
{x = 0, y = 0, z = 1},
{x =-1, y = 0, z =-1},
{x = 1, y = 0, z = 1},
{x =-1, y = 0, z = 1},
{x = 1, y = 0, z =-1},
}
minetest.register_node("techage:lightblock", {
description = "Techage Light Block",
drawtype = "airlike",
paramtype = "light",
light_source = minetest.LIGHT_MAX,
sunlight_propagates = true,
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
floodable = true,
is_ground_content = false,
groups = {not_in_creative_inventory=1},
drop = "",
})
function techage.light_ring(center_pos, on, large)
if on then
for _,dir in ipairs(Positions) do
if large then
dir = vector.multiply(dir, 2)
end
local pos1 = vector.add(center_pos, dir)
local node = techage.get_node_lvm(pos1)
if node.name == "air" then
minetest.set_node(pos1, {name = "techage:lightblock"})
end
end
else
local pos1 = {x=center_pos.x-2, y=center_pos.y-2, z=center_pos.z-2}
local pos2 = {x=center_pos.x+2, y=center_pos.y+2, z=center_pos.z+2}
for _,pos in ipairs(minetest.find_nodes_in_area(pos1, pos2, "techage:lightblock")) do
minetest.remove_node(pos)
end
minetest.fix_light(pos1, pos2)
end
end