Crafter/mods/redstone/player_detector.lua

60 lines
1.8 KiB
Lua

--detects players and outputs accordingly
for i = 0,9 do
minetest.register_node("redstone:player_detector_"..i, {
description = "Redstone Player Detector",
--inventory_image = "redstone_torch.png",
--wield_image = "redstone_torch.png",
--wield_scale = {x = 1, y = 1, z = 1 + 2/16},
drawtype = "normal",
tiles = {"player_detector.png"},
paramtype = "light",
paramtype2 = "none",
power = 9,
--sunlight_propagates = true,
drop = "redstone:player_detector_0",
--walkable = false,
light_source = i,
groups = {stone = 1, hard = 1, pickaxe = 1, hand = 4, torch=1,redstone=1,redstone_torch=1,redstone_power=i, redstone_player_detection = 1},
legacy_wallmounted = true,
on_construct = function(pos)
redstone.collect_info(pos)
end,
after_destruct = function(pos, oldnode)
redstone.collect_info(pos)
end,
sounds = main.stoneSound(),
})
end
minetest.register_abm{
label = "Redstone Player Detection",
nodenames = {"group:redstone_player_detection"},
--neighbors = {"group:water"},
interval = 0.2,
chance = 1,
action = function(pos)
local found_player = false
for _,object in ipairs(minetest.get_objects_inside_radius(pos, 9)) do
if object:is_player() and object:get_hp() > 0 then
local level = minetest.get_node_group(minetest.get_node(pos).name, "redstone_power")
found_player = true
local pos2 = object:get_pos()
pos2 = vector.floor(vector.add(pos2,0.5))
local distance = math.floor(vector.distance(pos2,pos))
distance = math.abs(distance - 9)
--print(distance)
if level ~= distance then
minetest.set_node(pos,{name="redstone:player_detector_"..distance})
redstone.collect_info(pos)
--print(distance)
end
end
end
if found_player == false then
minetest.set_node(pos,{name="redstone:player_detector_0"})
redstone.collect_info(pos)
end
end,
}