forked from MineClone5/MineClone5
Destroy end portal if end portal frame with eye is removed
This commit is contained in:
parent
206bd3d29f
commit
5f4d73143e
|
@ -170,12 +170,19 @@ local function check_end_portal_frame(pos)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Generate a 3×3 end portal beginning at pos. To be used to fill an end portal frame
|
-- Generate or destroy a 3×3 end portal beginning at pos. To be used to fill an end portal framea.
|
||||||
local function spawn_end_portal(pos)
|
-- If destroy == true, the 3×3 area is removed instead.
|
||||||
|
local function end_portal_area(pos, destroy)
|
||||||
local SIZE = 3
|
local SIZE = 3
|
||||||
|
local name
|
||||||
|
if destroy then
|
||||||
|
name = "air"
|
||||||
|
else
|
||||||
|
name = "mcl_portals:portal_end"
|
||||||
|
end
|
||||||
for x=pos.x, pos.x+SIZE-1 do
|
for x=pos.x, pos.x+SIZE-1 do
|
||||||
for z=pos.z, pos.z+SIZE-1 do
|
for z=pos.z, pos.z+SIZE-1 do
|
||||||
minetest.set_node({x=x,y=pos.y,z=z}, {name="mcl_portals:portal_end"})
|
minetest.set_node({x=x,y=pos.y,z=z}, {name=name})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -265,8 +272,14 @@ minetest.register_abm({
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
local rotate_frame, rotate_frame_eye
|
||||||
|
|
||||||
--[[ ITEM OVERRIDES ]]
|
if minetest.get_modpath("screwdriver") then
|
||||||
|
rotate_frame = screwdriver.rotate_simple
|
||||||
|
-- TODO: Make the other node rotatable as well.
|
||||||
|
-- Problem: We need to capture edge cases and update the portal accordingly.
|
||||||
|
rotate_frame_eye = false
|
||||||
|
end
|
||||||
|
|
||||||
minetest.register_node("mcl_portals:end_portal_frame", {
|
minetest.register_node("mcl_portals:end_portal_frame", {
|
||||||
description = "End Portal Frame",
|
description = "End Portal Frame",
|
||||||
|
@ -285,6 +298,9 @@ minetest.register_node("mcl_portals:end_portal_frame", {
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
sunlight_propagates = false,
|
sunlight_propagates = false,
|
||||||
light_source = 1,
|
light_source = 1,
|
||||||
|
|
||||||
|
on_rotate = rotate_frame,
|
||||||
|
|
||||||
_mcl_blast_resistance = 18000000,
|
_mcl_blast_resistance = 18000000,
|
||||||
_mcl_hardness = -1,
|
_mcl_hardness = -1,
|
||||||
})
|
})
|
||||||
|
@ -308,9 +324,17 @@ minetest.register_node("mcl_portals:end_portal_frame_eye", {
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
sunlight_propagates = false,
|
sunlight_propagates = false,
|
||||||
light_source = 1,
|
light_source = 1,
|
||||||
|
on_destruct = function(pos)
|
||||||
|
local ok, ppos = check_end_portal_frame(pos)
|
||||||
|
if ok then
|
||||||
|
end_portal_area(ppos, true)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
|
||||||
|
on_rotate = rotate_frame_eye,
|
||||||
|
|
||||||
_mcl_blast_resistance = 18000000,
|
_mcl_blast_resistance = 18000000,
|
||||||
_mcl_hardness = -1,
|
_mcl_hardness = -1,
|
||||||
-- TODO: Destroy end portal if this block got destroyed
|
|
||||||
})
|
})
|
||||||
|
|
||||||
if minetest.get_modpath("doc") then
|
if minetest.get_modpath("doc") then
|
||||||
|
@ -318,6 +342,8 @@ if minetest.get_modpath("doc") then
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--[[ ITEM OVERRIDES ]]
|
||||||
|
|
||||||
-- Portal opener
|
-- Portal opener
|
||||||
minetest.override_item("mcl_end:ender_eye", {
|
minetest.override_item("mcl_end:ender_eye", {
|
||||||
_doc_items_longdesc = "Eye of ender can be used in the construction of End portal frames.",
|
_doc_items_longdesc = "Eye of ender can be used in the construction of End portal frames.",
|
||||||
|
@ -347,7 +373,7 @@ minetest.override_item("mcl_end:ender_eye", {
|
||||||
|
|
||||||
local ok, ppos = check_end_portal_frame(pointed_thing.under)
|
local ok, ppos = check_end_portal_frame(pointed_thing.under)
|
||||||
if ok then
|
if ok then
|
||||||
spawn_end_portal(ppos)
|
end_portal_area(ppos)
|
||||||
if minetest.get_modpath("doc") then
|
if minetest.get_modpath("doc") then
|
||||||
doc.mark_entry_as_revealed(user:get_player_name(), "nodes", "mcl_portals:portal_end")
|
doc.mark_entry_as_revealed(user:get_player_name(), "nodes", "mcl_portals:portal_end")
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue