Implement Magnetizer
This commit is contained in:
125
nodes.lua
125
nodes.lua
@@ -489,3 +489,128 @@ minetest.register_craft({
|
||||
{industrialtest.elementKeys.glass,"industrialtest:advanced_alloy",industrialtest.elementKeys.glass}
|
||||
}
|
||||
})
|
||||
|
||||
-- \brief Function which should be called after iron fence was constructed
|
||||
-- \param pos vector
|
||||
-- \returns nil
|
||||
local function ironFenceOnConstruct(pos)
|
||||
local neighbours={
|
||||
vector.offset(pos,0,-1,0),
|
||||
vector.offset(pos,0,1,0)
|
||||
}
|
||||
for _,neighbourPosition in ipairs(neighbours) do
|
||||
local meta=minetest.get_meta(neighbourPosition)
|
||||
if meta:contains("magnetizerPosition") then
|
||||
local magnetizerPosition=minetest.deserialize(meta:get_string("magnetizerPosition"))
|
||||
industrialtest.Magnetizer:determineFenceRail(magnetizerPosition)
|
||||
industrialtest.Magnetizer:determinePowerCapacity(magnetizerPosition)
|
||||
industrialtest.Magnetizer:updateFormspec(magnetizerPosition)
|
||||
industrialtest.Magnetizer:requestPower(magnetizerPosition)
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
neighbours={
|
||||
vector.offset(pos,1,0,0),
|
||||
vector.offset(pos,-1,0,0),
|
||||
vector.offset(pos,0,0,1),
|
||||
vector.offset(pos,0,0,-1)
|
||||
}
|
||||
for _,neighbourPosition in ipairs(neighbours) do
|
||||
local neighbourNode=minetest.get_node(neighbourPosition)
|
||||
if neighbourNode.name=="industrialtest:magnetizer" then
|
||||
local meta=minetest.get_meta(neighbourPosition)
|
||||
if not meta:contains("railPosition") then
|
||||
industrialtest.Magnetizer:determineFenceRail(neighbourPosition)
|
||||
industrialtest.Magnetizer:determinePowerCapacity(neighbourPosition)
|
||||
industrialtest.Magnetizer:updateFormspec(neighbourPosition)
|
||||
industrialtest.Magnetizer:requestPower(neighbourPosition)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- \brief Function which should be called before iron fence was removed
|
||||
-- \param pos vector
|
||||
-- \returns nil
|
||||
local function ironFenceOnDestruct(pos)
|
||||
local meta=minetest.get_meta(pos)
|
||||
if not meta:contains("magnetizerPosition") then
|
||||
return
|
||||
end
|
||||
local magnetizerPosition=minetest.deserialize(meta:get_string("magnetizerPosition"))
|
||||
industrialtest.Magnetizer.detachFenceRail(magnetizerPosition)
|
||||
end
|
||||
|
||||
-- \brief Function which should be called after iron fence was removed
|
||||
-- \param meta table
|
||||
-- \returns nil
|
||||
local function ironFenceDetach(meta)
|
||||
if not meta or not meta.fields or not meta.fields.magnetizerPosition then
|
||||
return
|
||||
end
|
||||
local magnetizerPosition=minetest.deserialize(meta.fields.magnetizerPosition)
|
||||
industrialtest.Magnetizer:determineFenceRail(magnetizerPosition)
|
||||
industrialtest.Magnetizer:determinePowerCapacity(magnetizerPosition)
|
||||
industrialtest.Magnetizer:updateFormspec(magnetizerPosition)
|
||||
end
|
||||
|
||||
if industrialtest.mtgAvailable then
|
||||
local inventoryImage="default_fence_overlay.png^default_steel_block.png^default_fence_overlay.png^[makealpha:255,126,126"
|
||||
default.register_fence("industrialtest:iron_fence",{
|
||||
description=S("Iron Fence"),
|
||||
texture="default_steel_block.png",
|
||||
inventory_image=inventoryImage,
|
||||
wield_image=inventoryImage,
|
||||
groups={
|
||||
cracky=1,
|
||||
level=2,
|
||||
_industrialtest_metalFence=1
|
||||
},
|
||||
sounds=default.node_sound_metal_defaults(),
|
||||
connects_to={
|
||||
"group:fence",
|
||||
"group:wood",
|
||||
"group:tree",
|
||||
"group:wall",
|
||||
"industrialtest:magnetizer"
|
||||
},
|
||||
on_construct=ironFenceOnConstruct,
|
||||
on_destruct=ironFenceOnDestruct,
|
||||
after_dig_node=function(pos,oldnode,oldmeta)
|
||||
ironFenceDetach(oldmeta)
|
||||
end
|
||||
})
|
||||
minetest.register_craft({
|
||||
type="shaped",
|
||||
output="industrialtest:iron_fence 4",
|
||||
recipe={
|
||||
{"industrialtest:iron_plate","industrialtest:iron_plate","industrialtest:iron_plate"},
|
||||
{"industrialtest:iron_plate","industrialtest:iron_plate","industrialtest:iron_plate"}
|
||||
}
|
||||
})
|
||||
elseif industrialtest.mclAvailable then
|
||||
mcl_fences.register_fence_def("iron_fence",{
|
||||
description=S("Iron Fence"),
|
||||
tiles={"default_steel_block.png"},
|
||||
groups={
|
||||
_industrialtest_metalFence=1
|
||||
},
|
||||
connects_to={
|
||||
"group:fence",
|
||||
"group:fence_gate",
|
||||
"group:solid",
|
||||
"industrialtest:magnetizer"
|
||||
},
|
||||
on_construct=ironFenceOnConstruct,
|
||||
on_destruct=ironFenceOnDestruct,
|
||||
after_destruct=function(pos,oldnode,oldmeta)
|
||||
ironFenceDetach(oldmeta)
|
||||
end,
|
||||
_mcl_fences_baseitem="industrialtest:iron_plate",
|
||||
_mcl_fences_stickreplacer="industrialtest:iron_plate"
|
||||
})
|
||||
-- mcl_fences.register_fence_def registers fences in it's own namespace so register alias here to keep compatibility
|
||||
minetest.register_alias("industrialtest:iron_fence","mcl_fences:iron_fence")
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user