forked from minetest-mods/nether
blasts extinguish portals
This commit is contained in:
parent
363872c760
commit
e3ac1ade79
@ -648,8 +648,10 @@ end
|
|||||||
-- Do this whenever a portal is created or changes its ignition state
|
-- Do this whenever a portal is created or changes its ignition state
|
||||||
local function store_portal_location_info(portal_name, anchorPos, orientation, ignited)
|
local function store_portal_location_info(portal_name, anchorPos, orientation, ignited)
|
||||||
if not DEBUG_IGNORE_MODSTORAGE then
|
if not DEBUG_IGNORE_MODSTORAGE then
|
||||||
|
local key = minetest.pos_to_string(anchorPos) .. " is " .. portal_name
|
||||||
|
if DEBUG then minetest.chat_send_all("Adding/updating portal in mod_storage: " .. key) end
|
||||||
mod_storage:set_string(
|
mod_storage:set_string(
|
||||||
minetest.pos_to_string(anchorPos) .. " is " .. portal_name,
|
key,
|
||||||
minetest.serialize({orientation = orientation, active = ignited})
|
minetest.serialize({orientation = orientation, active = ignited})
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
@ -659,7 +661,9 @@ end
|
|||||||
-- Do this if a portal frame is destroyed such that it cannot be ignited anymore.
|
-- Do this if a portal frame is destroyed such that it cannot be ignited anymore.
|
||||||
local function remove_portal_location_info(portal_name, anchorPos)
|
local function remove_portal_location_info(portal_name, anchorPos)
|
||||||
if not DEBUG_IGNORE_MODSTORAGE then
|
if not DEBUG_IGNORE_MODSTORAGE then
|
||||||
mod_storage:set_string(minetest.pos_to_string(anchorPos) .. " is " .. portal_name, "")
|
local key = minetest.pos_to_string(anchorPos) .. " is " .. portal_name
|
||||||
|
if DEBUG then minetest.chat_send_all("Removing portal from mod_storage: " .. key) end
|
||||||
|
mod_storage:set_string(key, "")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -744,6 +748,7 @@ end
|
|||||||
|
|
||||||
|
|
||||||
-- WARNING - this is invoked by on_destruct, so you can't assume there's an accesible node at pos
|
-- WARNING - this is invoked by on_destruct, so you can't assume there's an accesible node at pos
|
||||||
|
-- Returns true if a portal was found to extinguish
|
||||||
function extinguish_portal(pos, node_name, frame_was_destroyed)
|
function extinguish_portal(pos, node_name, frame_was_destroyed)
|
||||||
|
|
||||||
-- mesecons seems to invoke action_off() 6 times every time you place a block?
|
-- mesecons seems to invoke action_off() 6 times every time you place a block?
|
||||||
@ -755,13 +760,13 @@ function extinguish_portal(pos, node_name, frame_was_destroyed)
|
|||||||
local target = minetest.string_to_pos(meta:get_string("target"))
|
local target = minetest.string_to_pos(meta:get_string("target"))
|
||||||
if p1 == nil or p2 == nil then
|
if p1 == nil or p2 == nil then
|
||||||
if DEBUG then minetest.chat_send_all(" no active portal found to extinguish") end
|
if DEBUG then minetest.chat_send_all(" no active portal found to extinguish") end
|
||||||
return
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
local portal_definition = get_portal_definition(node_name, p1, p2)
|
local portal_definition = get_portal_definition(node_name, p1, p2)
|
||||||
if portal_definition == nil then
|
if portal_definition == nil then
|
||||||
minetest.log("error", "extinguish_portal() invoked on " .. node_name .. " but no registered portal is constructed from " .. node_name)
|
minetest.log("error", "extinguish_portal() invoked on " .. node_name .. " but no registered portal is constructed from " .. node_name)
|
||||||
return -- no portal frames are made from this type of node
|
return false -- no portal frames are made from this type of node
|
||||||
end
|
end
|
||||||
|
|
||||||
if portal_definition.sounds.extinguish ~= nil then
|
if portal_definition.sounds.extinguish ~= nil then
|
||||||
@ -813,6 +818,8 @@ function extinguish_portal(pos, node_name, frame_was_destroyed)
|
|||||||
if portal_definition.on_extinguish ~= nil then
|
if portal_definition.on_extinguish ~= nil then
|
||||||
portal_definition.on_extinguish(portal_definition, anchorPos, orientation)
|
portal_definition.on_extinguish(portal_definition, anchorPos, orientation)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -1553,6 +1560,16 @@ function register_frame_node(frame_node_name)
|
|||||||
if DEBUG then minetest.chat_send_all("portal frame material: destruct") end
|
if DEBUG then minetest.chat_send_all("portal frame material: destruct") end
|
||||||
extinguish_portal(pos, frame_node_name, true)
|
extinguish_portal(pos, frame_node_name, true)
|
||||||
end
|
end
|
||||||
|
extended_node_def.replaced_by_portalapi.on_blast = extended_node_def.on_blast
|
||||||
|
extended_node_def.on_blast = function(pos, intensity)
|
||||||
|
if DEBUG then minetest.chat_send_all("portal frame material: blast") end
|
||||||
|
extinguish_portal(pos, frame_node_name, extended_node_def.replaced_by_portalapi.on_blast == nil)
|
||||||
|
if extended_node_def.replaced_by_portalapi.on_blast ~= nil then
|
||||||
|
extended_node_def.replaced_by_portalapi.on_blast(pos, intensity)
|
||||||
|
else
|
||||||
|
minetest.remove_node(pos)
|
||||||
|
end
|
||||||
|
end
|
||||||
extended_node_def.replaced_by_portalapi.on_timer = extended_node_def.on_timer
|
extended_node_def.replaced_by_portalapi.on_timer = extended_node_def.on_timer
|
||||||
extended_node_def.on_timer = function(pos, elapsed)
|
extended_node_def.on_timer = function(pos, elapsed)
|
||||||
run_wormhole(pos, elapsed)
|
run_wormhole(pos, elapsed)
|
||||||
|
Loading…
Reference in New Issue
Block a user