forked from Mirrorlandia_minetest/portalgun
323 lines
11 KiB
Lua
323 lines
11 KiB
Lua
local pgad_rules = {
|
|
{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 = 0, y = 0, z = 1},
|
|
{x = 0, y = 0, z = -1}
|
|
}
|
|
stone_sounds = {}
|
|
stone_sounds.footstep = {name = "stone_walk", gain = 1.0}
|
|
stone_sounds.dug = {name = "stone_break", gain = 1.0}
|
|
stone_sounds.place = {name = "block_place", gain = 1.0}
|
|
glass_sounds = {}
|
|
glass_sounds.footstep = {name = "glass_walk", gain = 1.0}
|
|
glass_sounds.dug = {name = "glass_break", gain = 1.0}
|
|
glass_sounds.place = {name = "block_place", gain = 1.0}
|
|
wood_sounds = {}
|
|
wood_sounds.footstep = {name = "wood_walk", gain = 1.0}
|
|
wood_sounds.dug = {name = "wood_break", gain = 1.0}
|
|
wood_sounds.place = {name = "block_place", gain = 1.0}
|
|
minetest.register_node(
|
|
"portalgun:powerdoor1_1",
|
|
{
|
|
description = "Power door",
|
|
inventory_image = "portalgun_powerwall.png",
|
|
wield_image = "portalgun_powerwall.png",
|
|
groups = {mesecon = 1, unbreakable = 1, not_in_creative_inventory = 0},
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
sunlight_propagates = true,
|
|
sounds = stone_sounds,
|
|
drawtype = "nodebox",
|
|
alpha = 160,
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {-0.5, -0.5, 0.4, 0.5, 0.5, 0.5}
|
|
},
|
|
tiles = {
|
|
{
|
|
name = "portalgun_powerwall1.png",
|
|
animation = {
|
|
type = "vertical_frames",
|
|
aspect_w = 16,
|
|
aspect_h = 16,
|
|
length = 0.2
|
|
}
|
|
}
|
|
},
|
|
after_place_node = function(pos, placer, itemstack)
|
|
local name = placer:get_player_name()
|
|
minetest.get_meta(pos):set_string("owner", name)
|
|
local p2 = minetest.get_node(pos)
|
|
pos.y = pos.y + 1
|
|
local n = minetest.get_node(pos)
|
|
if n.name == "air" then
|
|
minetest.set_node(pos, {name = "portalgun:powerdoor1_2", param2 = p2.param2})
|
|
minetest.get_meta(pos):set_string("owner", name)
|
|
end
|
|
end,
|
|
on_punch = function(pos, node, player, pointed_thing)
|
|
local meta = minetest.get_meta(pos)
|
|
if meta:get_string("owner") == player:get_player_name() then
|
|
minetest.node_dig(pos, minetest.get_node(pos), player)
|
|
pos.y = pos.y + 1
|
|
local un = minetest.get_node(pos).name
|
|
if un == "portalgun:powerdoor1_2" then
|
|
minetest.set_node(pos, {name = "air"})
|
|
end
|
|
pos.y = pos.y - 1
|
|
return true
|
|
end
|
|
end,
|
|
mesecons = {
|
|
conductor = {
|
|
state = mesecon.state.off,
|
|
onstate = "portalgun:powerdoor2_1",
|
|
rules = pgad_rules
|
|
}
|
|
}
|
|
}
|
|
)
|
|
|
|
minetest.register_node(
|
|
"portalgun:powerdoor1_2",
|
|
{
|
|
description = "Power door",
|
|
inventory_image = "portalgun_powerwall.png",
|
|
groups = {mesecon = 1, unbreakable = 1, not_in_creative_inventory = 1},
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
sunlight_propagates = true,
|
|
sounds = stone_sounds,
|
|
drawtype = "nodebox",
|
|
alpha = 160,
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {-0.5, -0.5, 0.4, 0.5, 0.5, 0.5}
|
|
},
|
|
tiles = {
|
|
{
|
|
name = "portalgun_powerwall1.png",
|
|
animation = {
|
|
type = "vertical_frames",
|
|
aspect_w = 16,
|
|
aspect_h = 16,
|
|
length = 0.2
|
|
}
|
|
}
|
|
},
|
|
on_punch = function(pos, node, player, pointed_thing)
|
|
local meta = minetest.get_meta(pos)
|
|
if meta:get_string("owner") == player:get_player_name() then
|
|
minetest.set_node(pos, {name = "air"})
|
|
pos.y = pos.y - 1
|
|
local un = minetest.get_node(pos).name
|
|
if un == "portalgun:powerdoor1_1" then
|
|
minetest.node_dig(pos, minetest.get_node(pos), player)
|
|
end
|
|
pos.y = pos.y + 1
|
|
return true
|
|
end
|
|
end,
|
|
mesecons = {
|
|
conductor = {
|
|
state = mesecon.state.off,
|
|
onstate = "portalgun:powerdoor2_2",
|
|
rules = pgad_rules
|
|
}
|
|
}
|
|
}
|
|
)
|
|
|
|
minetest.register_node(
|
|
"portalgun:powerdoor2_1",
|
|
{
|
|
description = "Power door",
|
|
inventory_image = "portalgun_powerwall.png",
|
|
groups = {unbreakable = 1, mesecon = 1, not_in_creative_inventory = 1},
|
|
paramtype = "light",
|
|
sunlight_propagates = true,
|
|
drawtype = "airlike",
|
|
walkable = false,
|
|
pointable = false,
|
|
diggable = false,
|
|
mesecons = {
|
|
conductor = {
|
|
state = mesecon.state.on,
|
|
offstate = "portalgun:powerdoor1_1",
|
|
rules = pgad_rules
|
|
}
|
|
}
|
|
}
|
|
)
|
|
|
|
minetest.register_node(
|
|
"portalgun:powerdoor2_2",
|
|
{
|
|
description = "Power door",
|
|
inventory_image = "portalgun_powerwall.png",
|
|
groups = {unbreakable = 1, mesecon = 1, not_in_creative_inventory = 1},
|
|
paramtype = "light",
|
|
sunlight_propagates = true,
|
|
drawtype = "airlike",
|
|
walkable = false,
|
|
pointable = false,
|
|
diggable = false,
|
|
mesecons = {
|
|
conductor = {
|
|
state = mesecon.state.on,
|
|
offstate = "portalgun:powerdoor1_2",
|
|
rules = pgad_rules
|
|
}
|
|
}
|
|
}
|
|
)
|
|
minetest.register_node(
|
|
"portalgun:door_1",
|
|
{
|
|
description = "Mesecon Door",
|
|
drop = "portalgun:door_1",
|
|
drawtype = "nodebox",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.5, -0.125, 0.5, 0.5, 0.125}
|
|
}
|
|
},
|
|
tiles = {"portalgun_testblock.png"},
|
|
groups = {mesecon = 1, cracky = 1, level = 2, not_in_creative_inventory = 0},
|
|
sounds = stone_sounds,
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
sunlight_propagates = true,
|
|
is_ground_content = false,
|
|
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
|
local p = {x = pos.x, y = pos.y + 1, z = pos.z}
|
|
if minetest.registered_nodes[minetest.get_node(p).name].walkable then
|
|
return false
|
|
else
|
|
minetest.set_node(p, {name = "portalgun:door_2", param2 = minetest.get_node(pos).param2})
|
|
end
|
|
end,
|
|
mesecons = {
|
|
effector = {
|
|
action_on = function(pos, node)
|
|
local p = {x = pos.x, y = pos.y + 1, z = pos.z}
|
|
minetest.swap_node(p, {name = "portalgun:door_open_2", param2 = minetest.get_node(pos).param2})
|
|
minetest.swap_node(pos, {name = "portalgun:door_open_1", param2 = minetest.get_node(pos).param2})
|
|
minetest.sound_play("portalgun_door", {pos = pos, gain = 1, max_hear_distance = 5})
|
|
end
|
|
}
|
|
},
|
|
after_dig_node = function(pos, name, digger)
|
|
minetest.set_node({x = pos.x, y = pos.y + 1, z = pos.z}, {name = "air"})
|
|
end
|
|
}
|
|
)
|
|
|
|
minetest.register_node(
|
|
"portalgun:door_2",
|
|
{
|
|
description = "Door 2-1",
|
|
drawtype = "nodebox",
|
|
drop = "portalgun:door_1",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.5, -0.125, 0.5, 0.5, 0.125}
|
|
}
|
|
},
|
|
tiles = {"portalgun_testblock.png"},
|
|
groups = {mesecon = 1, cracky = 1, level = 2, not_in_creative_inventory = 1},
|
|
sounds = wood_sounds,
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
sunlight_propagates = true,
|
|
is_ground_content = false,
|
|
mesecons = {
|
|
effector = {
|
|
action_on = function(pos, node)
|
|
local p = {x = pos.x, y = pos.y - 1, z = pos.z}
|
|
minetest.swap_node(p, {name = "portalgun:door_open_1", param2 = minetest.get_node(pos).param2})
|
|
minetest.swap_node(pos, {name = "portalgun:door_open_2", param2 = minetest.get_node(pos).param2})
|
|
minetest.sound_play("portalgun_door", {pos = pos, gain = 1, max_hear_distance = 5})
|
|
end
|
|
}
|
|
},
|
|
after_dig_node = function(pos, name, digger)
|
|
minetest.set_node({x = pos.x, y = pos.y - 1, z = pos.z}, {name = "air"})
|
|
end
|
|
}
|
|
)
|
|
|
|
minetest.register_node(
|
|
"portalgun:door_open_1",
|
|
{
|
|
description = "Door (open) 2-o-1",
|
|
drop = "portalgun:door_1",
|
|
drawtype = "nodebox",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{0.41, -0.5, -0.124, 1.41, 0.5, 0.125}
|
|
}
|
|
},
|
|
tiles = {"portalgun_testblock.png"},
|
|
groups = {mesecon = 1, cracky = 1, level = 2, not_in_creative_inventory = 1},
|
|
sounds = wood_sounds,
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
sunlight_propagates = true,
|
|
is_ground_content = false,
|
|
after_dig_node = function(pos, name, digger)
|
|
minetest.set_node({x = pos.x, y = pos.y + 1, z = pos.z}, {name = "air"})
|
|
end,
|
|
mesecons = {
|
|
effector = {
|
|
action_off = function(pos, node)
|
|
local p = {x = pos.x, y = pos.y + 1, z = pos.z}
|
|
minetest.sound_play("portalgun_door", {pos = pos, gain = 1, max_hear_distance = 5})
|
|
minetest.swap_node(p, {name = "portalgun:door_2", param2 = minetest.get_node(pos).param2})
|
|
minetest.swap_node(pos, {name = "portalgun:door_1", param2 = minetest.get_node(pos).param2})
|
|
end
|
|
}
|
|
}
|
|
}
|
|
)
|
|
|
|
minetest.register_node(
|
|
"portalgun:door_open_2",
|
|
{
|
|
description = "Door (open) 2-o-1",
|
|
drawtype = "nodebox",
|
|
drop = "portalgun:door_1",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{0.41, -0.5, -0.124, 1.41, 0.5, 0.125}
|
|
}
|
|
},
|
|
tiles = {"portalgun_testblock.png"},
|
|
groups = {mesecon = 1, cracky = 1, level = 2, not_in_creative_inventory = 1},
|
|
sounds = wood_sounds,
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
sunlight_propagates = true,
|
|
is_ground_content = false,
|
|
after_dig_node = function(pos, name, digger)
|
|
minetest.set_node({x = pos.x, y = pos.y - 1, z = pos.z}, {name = "air"})
|
|
end,
|
|
mesecons = {
|
|
effector = {
|
|
action_off = function(pos, node)
|
|
local p = {x = pos.x, y = pos.y - 1, z = pos.z}
|
|
minetest.sound_play("portalgun_door", {pos = pos, gain = 1, max_hear_distance = 5})
|
|
minetest.swap_node(p, {name = "portalgun:door_1", param2 = minetest.get_node(pos).param2})
|
|
minetest.swap_node(pos, {name = "portalgun:door_2", param2 = minetest.get_node(pos).param2})
|
|
end
|
|
}
|
|
}
|
|
}
|
|
)
|