172 lines
5.1 KiB
Lua
172 lines
5.1 KiB
Lua
--[[
|
|
## StreetsMod 2.0 ##
|
|
Submod: bollards
|
|
Optional: true
|
|
]]
|
|
|
|
local function toggle_bollard(pos, node, clicker, itemstack, pointed_thing, to_role)
|
|
if minetest.registered_nodes[minetest.get_node(pos).name].bollard then
|
|
local n = minetest.get_node(pos)
|
|
local ndef = minetest.registered_nodes[n.name]
|
|
if clicker and ndef.bollard.protection then
|
|
local name = clicker:get_player_name()
|
|
if minetest.is_protected(pos, name) and not minetest.check_player_privs(name, { protection_bypass = true }) then
|
|
minetest.record_protection_violation(pos, name)
|
|
return
|
|
end
|
|
end
|
|
if to_role then
|
|
local to = minetest.registered_nodes[ndef.bollard.counterpart]
|
|
if to.bollard.role ~= to_role then
|
|
return
|
|
end
|
|
end
|
|
minetest.set_node(pos, { name = ndef.bollard.counterpart, param2 = n.param2 })
|
|
end
|
|
end
|
|
|
|
minetest.register_node("streets:bollard_driver", {
|
|
description = "Driver for Bollards",
|
|
tiles = { "streets_bollard_driver_top.png", "default_steel_block.png" },
|
|
groups = { cracky = 1 },
|
|
-- on_rightclick = toggle_bollard, -- Automatic bollards mustn't be toggled manually!
|
|
mesecons = {
|
|
effector = {
|
|
rules = {
|
|
{ x = 0, y = 0, z = -1 },
|
|
{ x = 0, y = 0, z = 1 },
|
|
{ x = 1, y = 0, z = 0 },
|
|
{ x = -1, y = 0, z = 0 },
|
|
{ x = 0, y = -1, z = 0 },
|
|
{ x = 0, y = 1, z = 0 },
|
|
{ x = 1, y = 1, z = 0 },
|
|
{ x = 1, y = -1, z = 0 },
|
|
{ x = -1, y = 1, z = 0 },
|
|
{ x = -1, y = -1, z = 0 },
|
|
{ x = 0, y = 1, z = 1 },
|
|
{ x = 0, y = -1, z = 1 },
|
|
{ x = 0, y = 1, z = -1 },
|
|
{ x = 0, y = -1, z = -1 }
|
|
},
|
|
action_off = function(pos, node)
|
|
toggle_bollard(vector.add(pos, vector.new(0, 1, 0)), node, nil, nil, { type = "node", under = vector.add(pos, vector.new(0, -1, 0)), above = vector.add(pos, vector.new(0, 1, 0)) }, "up")
|
|
end,
|
|
action_on = function(pos, node)
|
|
toggle_bollard(vector.add(pos, vector.new(0, 1, 0)), node, nil, nil, { type = "node", under = vector.add(pos, vector.new(0, -1, 0)), above = vector.add(pos, vector.new(0, 1, 0)) }, "down")
|
|
end
|
|
}
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "streets:bollard_driver",
|
|
recipe = {
|
|
{ "default:steel_ingot", "streets:bollard_steel_automatic_up", "default:steel_ingot" },
|
|
{ "default:steel_ingot", "default:mese_crystal_fragment", "default:steel_ingot" },
|
|
}
|
|
})
|
|
|
|
minetest.register_node("streets:bollard_steel_automatic_up", {
|
|
description = "Steel Bollard",
|
|
tiles = { "streets_bollard_driver_top.png", "streets_bollard_driver_top.png", "streets_bollard_automatic_side.png" },
|
|
groups = { cracky = 1 },
|
|
paramtype = "light",
|
|
drawtype = "nodebox",
|
|
sunlight_propagates = true,
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{ -0.3125, -0.5, -0.3125, 0.3125, 0.5, 0.3125 }
|
|
}
|
|
},
|
|
bollard = {
|
|
role = "up",
|
|
counterpart = "streets:bollard_steel_automatic_down"
|
|
}
|
|
})
|
|
|
|
minetest.register_node("streets:bollard_steel_automatic_down", {
|
|
tiles = { "streets_bollard_driver_top.png", "streets_bollard_driver_top.png", "streets_bollard_automatic_side.png" },
|
|
groups = { cracky = 1, not_in_creative_inventory = 1 },
|
|
drop = "streets:bollard_steel_automatic_up",
|
|
paramtype = "light",
|
|
drawtype = "nodebox",
|
|
walkable = false,
|
|
sunlight_propagates = true,
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{ -0.3125, -0.5, -0.3125, 0.3125, -0.4375, 0.3125 }
|
|
}
|
|
},
|
|
bollard = {
|
|
role = "down",
|
|
counterpart = "streets:bollard_steel_automatic_up"
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "streets:bollard_steel_automatic_up",
|
|
recipe = {
|
|
{ "dye:red", "dye:white", "dye:red" },
|
|
{ "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" },
|
|
{ "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" },
|
|
}
|
|
})
|
|
|
|
minetest.register_node("streets:bollard_steel_manual_up", {
|
|
description = "Manual Bollard",
|
|
tiles = { "streets_bollard_manual_top.png", "streets_bollard_manual_top.png", "streets_bollard_manual_side.png" },
|
|
groups = { cracky = 1 },
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
drawtype = "nodebox",
|
|
sunlight_propagates = true,
|
|
on_rightclick = toggle_bollard,
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{ -0.125, -0.5, -0.125, 0.125, 0.5, 0.125 }
|
|
}
|
|
},
|
|
bollard = {
|
|
role = "up",
|
|
counterpart = "streets:bollard_steel_manual_down",
|
|
protection = true
|
|
}
|
|
})
|
|
|
|
minetest.register_node("streets:bollard_steel_manual_down", {
|
|
tiles = {
|
|
"streets_bollard_manual_side_down.png", "streets_bollard_manual_side_down.png^[transformR180", "streets_bollard_manual_side_down.png^[transformR270", "streets_bollard_manual_side_down.png^[transformR90", "streets_bollard_manual_top.png",
|
|
},
|
|
groups = { cracky = 1, not_in_creative_inventory = 1 },
|
|
drop = "streets:bollard_steel_manual_up",
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
drawtype = "nodebox",
|
|
walkable = false,
|
|
sunlight_propagates = true,
|
|
on_rightclick = toggle_bollard,
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{ -0.125, -0.5, 0.125, 0.125, -0.25, 1.00 }
|
|
}
|
|
},
|
|
bollard = {
|
|
role = "down",
|
|
counterpart = "streets:bollard_steel_manual_up",
|
|
protection = true
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "streets:bollard_steel_manual_up",
|
|
recipe = {
|
|
{ "dye:red", "dye:white", "dye:red" },
|
|
{ "", "default:steel_ingot", "" },
|
|
{ "", "default:steel_ingot", "" },
|
|
}
|
|
})
|