summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcheapie <no-email-for-you@example.com>2025-05-02 10:05:35 -0500
committercheapie <no-email-for-you@example.com>2025-05-02 10:05:35 -0500
commitb7a3e32183d6e58742965dabf50cfb8805b96f49 (patch)
treea4c184800e20be28bcffd6ae3b4387cee6c97c7d
parent87ef4357b5e2f8d4f0213481cd09b3f2d5c068fe (diff)
downloadfirealarm-master.tar
firealarm-master.tar.gz
firealarm-master.tar.bz2
firealarm-master.tar.xz
firealarm-master.zip
Improve smoke detector performance and behaviorHEADmaster
-rw-r--r--firealarm_smokedetector/init.lua26
1 files changed, 17 insertions, 9 deletions
diff --git a/firealarm_smokedetector/init.lua b/firealarm_smokedetector/init.lua
index dc67a1b..9297f2c 100644
--- a/firealarm_smokedetector/init.lua
+++ b/firealarm_smokedetector/init.lua
@@ -42,6 +42,11 @@ minetest.register_node(":firealarm:smokedetector_off",{
on_punch = function(pos,_,player)
local name = player:get_player_name()
minetest.chat_send_player(name,string.format("Position: %d,%d,%d",pos.x,pos.y,pos.z))
+ local item = player:get_wielded_item()
+ if item and string.find(item:get_name(),"magnet") then
+ --Simulate the effect of the old beehive smoker
+ minetest.get_meta(pos):set_int("agressive",0)
+ end
end,
after_place_node = function(pos)
firealarm.setDevInfo("signaling",pos,{active = false,manualReset = false})
@@ -91,17 +96,20 @@ minetest.register_abm({
action = function(pos,node)
local devInfo = firealarm.getDevInfo("signaling",pos)
if not devInfo then return end
- local minp = vector.add(pos,vector.new(-4,-10,-4))
- local maxp = vector.add(pos,vector.new(4,0,4))
- local fire = false
- local fire_nodes = {["fire:permanent_flame"] = true,["fire:basic_flame"] = true}
- for x=minp.x,maxp.x,1 do
- for y=minp.y,maxp.y,1 do
- for z=minp.z,maxp.z,1 do
- if fire_nodes[minetest.get_node({x=x,y=y,z=z}).name] then fire = true end
- end
+ local minheight
+ for i=-1,-10,-1 do
+ local checkpos = vector.add(pos,vector.new(0,i,0))
+ local ndef = minetest.registered_nodes[minetest.get_node(checkpos).name]
+ if ndef and ndef.drawtype == "normal" then
+ minheight = i
+ break
end
end
+ minheight = minheight or -10
+ local minp = vector.add(pos,vector.new(-4,minheight,-4))
+ local maxp = vector.add(pos,vector.new(4,0,4))
+ local fire_nodes = {"fire:permanent_flame","fire:basic_flame"}
+ local fire = #minetest.find_nodes_in_area(minp,maxp,fire_nodes) > 0
if fire or minetest.get_meta(pos):get_int("agressive") == 0 then
devInfo.active = true
firealarm.setDevInfo("signaling",pos,devInfo)