streets/streets_accessories/init.lua

204 lines
6.4 KiB
Lua

--[[
## StreetsMod 2.0 ##
Submod: accessories
Optional: true
]]
minetest.register_node(":streets:delineator", {
description = "Delineator",
tiles = { "streets_delineator_top.png", "streets_delineator_top.png", "streets_delineator_left.png", "streets_delineator_right.png", "streets_delineator_back.png", "streets_delineator_front.png" },
drawtype = "nodebox",
paramtype = "light",
paramtype2 = "facedir",
groups = { snappy = 2 },
light_source = 2,
sunlight_propagates = true,
node_box = {
type = "fixed",
fixed = {
{ -0.125, -0.5, -0.0625, 0.125, 0.4375, 0.0625 }, -- Body
{ 0, 0.4375, -0.0625, 0.125, 0.5, 0.0625 }, -- Top
}
},
selection_box = {
type = "fixed",
fixed = {
{ -0.125, -0.5, -0.0625, 0.125, 0.5, 0.0625 }, -- Body
}
}
})
minetest.register_craft({
output = "streets:delineator 10",
recipe = {
{ "dye:orange", "default:steel_ingot", "dye:orange" },
{ "dye:white", "default:steel_ingot", "dye:black" }
}
})
minetest.register_node("streets:fence_chainlink", {
description = "Chainlink Fence",
paramtype = "light",
drawtype = "nodebox",
tiles = { "streets_fence_chainlink.png" },
sunlight_propagates = true,
groups = { snappy = 1, wall = 1 },
node_box = {
type = "connected",
fixed = { { -1 / 32, -0.5, -1 / 32, 1 / 32, 0.5, 1 / 32 } },
connect_front = { { 0, -0.5, -0.5, 0, 0.5, 0 } }, -- z-
connect_back = { { 0, -0.5, 0, 0, 0.5, 0.5 } }, -- z+
connect_left = { { -0.5, -0.5, 0, 0, 0.5, 0 } }, -- x-
connect_right = { { 0, -0.5, 0, 0.5, 0.5, 0 } }, -- x+
},
selection_box = {
type = "connected",
fixed = { { -1 / 16, -0.5, -1 / 16, 1 / 16, 0.5, 1 / 16 } },
connect_front = { { 0, -0.5, -0.5, 0, 0.5, 0 } }, -- z-
connect_back = { { 0, -0.5, 0, 0, 0.5, 0.5 } }, -- z+
connect_left = { { -0.5, -0.5, 0, 0, 0.5, 0 } }, -- x-
connect_right = { { 0, -0.5, 0, 0.5, 0.5, 0 } }, -- x+
},
connects_to = { "group:wall", "group:stone", "group:wood", "group:tree", "group:concrete" },
sound = default.node_sound_stone_defaults()
})
local function toggleDoor(pos, node, player, action)
local name = player: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
local newnode = node
if action == "close" then
newnode.name = node.name:gsub("open", "closed")
elseif action == "open" then
newnode.name = node.name:gsub("closed", "open")
end
minetest.swap_node(pos, newnode)
local upper_pos = streets.copytable(pos)
upper_pos.y = upper_pos.y + 1
local upper_node = minetest.get_node(upper_pos)
if (upper_node.name == "streets:fence_chainlink_door_closed" and action == "open")
or (upper_node.name == "streets:fence_chainlink_door_open" and action == "close") then
toggleDoor(upper_pos, upper_node, player, action)
end
local under_pos = streets.copytable(pos)
under_pos.y = under_pos.y - 1
local under_node = minetest.get_node(under_pos)
if (under_node.name == "streets:fence_chainlink_door_closed" and action == "open")
or (under_node.name == "streets:fence_chainlink_door_open" and action == "close") then
toggleDoor(under_pos, under_node, player, action)
end
end
minetest.register_node("streets:fence_chainlink_door_open", {
description = "Chainlink Fence Door (Locked)",
paramtype = "light",
paramtype2 = "facedir",
drawtype = "nodebox",
tiles = { "streets_fence_chainlink_door.png" },
sunlight_propagates = true,
groups = { snappy = 1, wall = 1, not_in_creative_inventory = 1 },
node_box = {
type = "fixed",
fixed = {
{ -16 / 32, -0.5, -1 / 32, -14 / 32, 0.5, 1 / 32 },
{ 14 / 32, -0.5, -1 / 32, 16 / 32, 0.5, 1 / 32 },
{ -15 / 32, -0.5, 0, -15 / 32, 0.5, 0.5 },
{ 15 / 32, -0.5, 0, 15 / 32, 0.5, 0.5 }
},
},
sound = default.node_sound_stone_defaults(),
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
toggleDoor(pos, node, player, "close")
end,
drop = "streets:fence_chainlink_door_closed",
})
minetest.register_node("streets:fence_chainlink_door_closed", {
description = "Chainlink Fence Door (Locked)",
paramtype = "light",
paramtype2 = "facedir",
drawtype = "nodebox",
tiles = { "streets_fence_chainlink_door.png" },
sunlight_propagates = true,
groups = { snappy = 1, wall = 1 },
node_box = {
type = "fixed",
fixed = {
{ -16 / 32, -0.5, -1 / 32, -14 / 32, 0.5, 1 / 32 },
{ 14 / 32, -0.5, -1 / 32, 16 / 32, 0.5, 1 / 32 },
{ -15 / 32, -0.5, 0, 15 / 32, 0.5, 0 }
},
},
sound = default.node_sound_stone_defaults(),
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
toggleDoor(pos, node, player, "open")
end,
})
minetest.register_craft({
output = "streets:fence_chainlink 33",
recipe = {
{ "", "dye:dark_green", "" },
{ "default:steel_ingot", "default:stick", "default:steel_ingot" },
{ "default:steel_ingot", "default:stick", "default:steel_ingot" }
}
})
minetest.register_craft({
output = "streets:fence_chainlink_door_closed",
recipe = {
{ "streets:fence_chainlink", "streets:fence_chainlink", "" },
{ "streets:fence_chainlink", "streets:fence_chainlink", "" },
{ "streets:fence_chainlink", "streets:fence_chainlink", "" }
}
})
minetest.register_node("streets:guardrail", {
description = "Guardrail",
paramtype = "light",
drawtype = "nodebox",
tiles = { "streets_guardrail.png" },
sunlight_propagates = true,
groups = { cracky = 1, wall = 1 },
node_box = {
type = "connected",
fixed = {
{ -0.1, -0.5, -0.1, 0.1, 0.5, 0.1 },
},
connect_front = {
{ 0, -0.1875, -0.5, 0, 0.4375, 0 },
{ -0.0625, 0.1875, -0.5, 0.0625, 0.3125, 0 },
{ -0.0625, -0.0625, -0.5, 0.0625, 0.0625, 0 },
}, -- z-
connect_back = {
{ 0, -0.1875, 0, 0, 0.4375, 0.5 },
{ -0.0625, 0.1875, 0, 0.0625, 0.3125, 0.5 },
{ -0.0625, -0.0625, 0, 0.0625, 0.0625, 0.5 },
}, -- z+
connect_left = {
{ -0.5, -0.1875, 0, 0, 0.4375, 0 },
{ -0.5, 0.1875, -0.0625, 0, 0.3125, 0.0625 },
{ -0.5, -0.0625, -0.0625, 0, 0.0625, 0.0625 },
}, -- x-
connect_right = {
{ 0, -0.1875, 0, 0.5, 0.4375, 0 },
{ 0, 0.1875, -0.0625, 0.5, 0.3125, 0.0625 },
{ 0, -0.0625, -0.0625, 0.5, 0.0625, 0.0625 },
}, -- x+
},
connects_to = { "group:wall", "group:stone", "group:wood", "group:tree", "group:concrete" },
sound = default.node_sound_stone_defaults()
})
minetest.register_craft({
output = "streets:guardrail 12",
recipe = {
{ "streets:bigpole", "default:steel_ingot", "streets:bigpole" },
{ "streets:bigpole", "default:steel_ingot", "streets:bigpole" }
}
})