forked from mtcontrib/scaffolding
577 lines
17 KiB
Lua
577 lines
17 KiB
Lua
|
|
|
|
print("scaffolding: Loading 'functions.lua'")
|
|
dofile(minetest.get_modpath("scaffolding").."/functions.lua")
|
|
|
|
minetest.register_craftitem("scaffolding:scaffolding_wrench", {
|
|
description = "Scaffolding Wrench",
|
|
inventory_image = "scaffolding_wrench.png",
|
|
})
|
|
|
|
minetest.register_node("scaffolding:scaffolding", {
|
|
description = "Wooden Scaffolding",
|
|
drawtype = "nodebox",
|
|
tiles = {"scaffolding_wooden_scaffolding_top.png", "scaffolding_wooden_scaffolding_top.png", "scaffolding_wooden_scaffolding.png",
|
|
"scaffolding_wooden_scaffolding.png", "scaffolding_wooden_scaffolding.png", "scaffolding_wooden_scaffolding.png"},
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
climbable = true,
|
|
walkable = false,
|
|
is_ground_content = true,
|
|
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3},
|
|
sounds = default.node_sound_wood_defaults(),
|
|
on_punch = function(pos, node, puncher)
|
|
local tool = puncher:get_wielded_item():get_name()
|
|
if tool and tool == "scaffolding:scaffolding_wrench" then
|
|
node.name = "scaffolding:reinforced_scaffolding"
|
|
minetest.env:set_node(pos, node)
|
|
puncher:get_inventory():add_item("main", ItemStack("scaffolding:scaffolding"))
|
|
end
|
|
end,
|
|
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
|
|
if itemstack:get_name() == "scaffolding:platform" then
|
|
|
|
--arrayZ ( 1, 0, -1, -1, 0, 0, 1, 1 );
|
|
-- arrayX( 0, -1, 0, 0, 1, 1, 0, 0 );
|
|
|
|
local name = minetest.get_node(pos).name
|
|
|
|
posZ = {'1', '0', '-1', '-1', '0', '0', '1', '1' };
|
|
posX = {'0', '-1', '0', '0', '1', '1', '0', '0' };
|
|
|
|
for nameCount = 1, 8 do
|
|
pos.z = pos.z + posZ[nameCount];
|
|
pos.x = pos.x + posX[nameCount];
|
|
local current_node = minetest.get_node(pos);
|
|
if current_node.name == "air" then
|
|
minetest.set_node(pos, {name = "scaffolding:platform"} )
|
|
itemstack:take_item(1); --//and remove one if its the correct one
|
|
break;
|
|
end
|
|
end
|
|
end
|
|
|
|
if itemstack:get_name() == "scaffolding:scaffolding" then
|
|
|
|
-- many thanks to addi for improveing (rewriteing) my crappy code --
|
|
local name = minetest.get_node(pos).name -- get loacation of node
|
|
height = 0;
|
|
depth = 0; -- !!Note!! depth is not needed at the moment
|
|
|
|
--[[ debug stuff ]]
|
|
minetest.chat_send_all(string.format("node: %s",name))
|
|
|
|
minetest.chat_send_all(string.format("node: %s %s %s ",pos.x, pos.y, pos.z ))
|
|
|
|
-- set pos at bottom of scafolding tower.
|
|
repeat
|
|
pos.y = pos.y - 1; --every run get one node up
|
|
depth = depth - 1
|
|
local current_node = minetest.get_node(pos); --get the node of the new position
|
|
minetest.chat_send_all(string.format("found %q at location: %s",
|
|
current_node.name,
|
|
minetest.pos_to_string(pos)
|
|
))
|
|
|
|
until current_node.name ~= "scaffolding:scaffolding" -- will repeat untill it dose not find a scaffolding node
|
|
minetest.chat_send_all(string.format("exit loop"))
|
|
|
|
-- check height of scaffolding tower --
|
|
|
|
repeat
|
|
pos.y = pos.y + 1; --every run get one node up
|
|
height = height + 1
|
|
local current_node = minetest.get_node(pos); --get the node of the new position
|
|
minetest.chat_send_all(string.format("found %q at location: %s",
|
|
current_node.name,
|
|
minetest.pos_to_string(pos)
|
|
))
|
|
|
|
if current_node.name == "air" then
|
|
minetest.set_node(pos, {name = "scaffolding:scaffolding"} )
|
|
itemstack:take_item(1); --//and remove one if its the correct one
|
|
player:set_wielded_item(itemstack);--//update inventory of the player
|
|
end
|
|
until current_node.name ~= "scaffolding:scaffolding" or height >= 32 --we repeat until we find something else then "scaffolding:scaffolding"
|
|
--maybe there should be also another limit, because its currently possible to build infinite towers
|
|
minetest.chat_send_all(string.format("exit loop"))
|
|
|
|
end
|
|
|
|
end,
|
|
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
|
},
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
|
},
|
|
},
|
|
after_dig_node = function(pos, node, metadata, digger)
|
|
default.dig_up(pos, node, digger)
|
|
end,
|
|
})
|
|
|
|
minetest.register_node("scaffolding:reinforced_scaffolding", {
|
|
description = "Wooden Scaffolding",
|
|
drawtype = "nodebox",
|
|
tiles = {"scaffolding_wooden_scaffolding.png^scaffolding_reinforced.png", "scaffolding_wooden_scaffolding.png^scaffolding_reinforced.png",
|
|
"scaffolding_wooden_scaffolding.png^scaffolding_reinforced.png"},
|
|
drop = "scaffolding:scaffolding",
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
climbable = true,
|
|
walkable = false,
|
|
is_ground_content = true,
|
|
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3},
|
|
sounds = default.node_sound_wood_defaults(),
|
|
on_punch = function(pos, node, puncher)
|
|
local tool = puncher:get_wielded_item():get_name()
|
|
if tool and tool == "scaffolding:scaffolding_wrench" then
|
|
node.name = "scaffolding:scaffolding"
|
|
minetest.env:set_node(pos, node)
|
|
puncher:get_inventory():add_item("main", ItemStack("scaffolding:scaffolding"))
|
|
end
|
|
end,
|
|
--[[ on_rightclick = function(pos, node, puncher)
|
|
local tool = puncher:get_wielded_item():get_name()
|
|
if tool and tool == "scaffolding:scaffolding_wrench" then
|
|
node.name = "scaffolding:scaffolding"
|
|
minetest.env:set_node(pos, node)
|
|
end
|
|
end,
|
|
on_punch = function(pos, node, puncher)
|
|
local tool = puncher:get_wielded_item():get_name()
|
|
if tool and tool == "scaffolding:scaffolding_wrench" then
|
|
node.name = "air"
|
|
minetest.env:set_node(pos, node)
|
|
puncher:get_inventory():add_item("main", ItemStack("scaffolding:scaffolding"))
|
|
end
|
|
end,]]
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
|
},
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
|
},
|
|
},
|
|
})
|
|
|
|
minetest.register_node("scaffolding:platform", {
|
|
description = "Wooden Platform",
|
|
drawtype = "nodebox",
|
|
tiles = {"scaffolding_wooden_scaffolding_top.png", "scaffolding_wooden_scaffolding_top.png", "scaffolding_wooden_scaffolding.png^scaffolding_platform.png"},
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
climbable = false,
|
|
walkable = true,
|
|
is_ground_content = true,
|
|
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3},
|
|
sounds = default.node_sound_wood_defaults(),
|
|
on_punch = function(pos, node, puncher)
|
|
local tool = puncher:get_wielded_item():get_name()
|
|
if tool and tool == "scaffolding:scaffolding_wrench" then
|
|
node.name = "scaffolding:reinforced_platform"
|
|
minetest.env:set_node(pos, node)
|
|
end
|
|
end,
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.3, -0.5, 0.5, 0.1, 0.5},
|
|
},
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.3, -0.5, 0.5, 0.1, 0.5},
|
|
},
|
|
},
|
|
after_dig_node = function(pos, node, metadata, digger)
|
|
default.dig_horx(pos, node, digger)
|
|
default.dig_horx2(pos, node, digger)
|
|
default.dig_horz(pos, node, digger)
|
|
default.dig_horz2(pos, node, digger)
|
|
end,
|
|
})
|
|
|
|
minetest.register_node("scaffolding:reinforced_platform", {
|
|
description = "Wooden Platform",
|
|
drawtype = "nodebox",
|
|
tiles = {"scaffolding_wooden_scaffolding.png^scaffolding_reinforced.png", "scaffolding_wooden_scaffolding.png^scaffolding_reinforced.png", "scaffolding_wooden_scaffolding.png^scaffolding_platform.png"},
|
|
drop = "scaffolding:platform",
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
climbable = false,
|
|
walkable = true,
|
|
is_ground_content = true,
|
|
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3},
|
|
sounds = default.node_sound_wood_defaults(),
|
|
on_punch = function(pos, node, puncher)
|
|
local tool = puncher:get_wielded_item():get_name()
|
|
if tool and tool == "scaffolding:scaffolding_wrench" then
|
|
node.name = "scaffolding:platform"
|
|
minetest.env:set_node(pos, node)
|
|
end
|
|
end,
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.3, -0.5, 0.5, 0.1, 0.5},
|
|
},
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.3, -0.5, 0.5, 0.1, 0.5},
|
|
},
|
|
},
|
|
})
|
|
|
|
minetest.register_node("scaffolding:iron_scaffolding", {
|
|
description = "Iron Scaffolding",
|
|
drawtype = "nodebox",
|
|
tiles = {"scaffolding_iron_scaffolding_top.png", "scaffolding_iron_scaffolding_top.png", "scaffolding_iron_scaffolding.png",
|
|
"scaffolding_iron_scaffolding.png", "scaffolding_iron_scaffolding.png", "scaffolding_iron_scaffolding.png"},
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
climbable = true,
|
|
walkable = false,
|
|
is_ground_content = true,
|
|
groups = {snappy=2,cracky=3},
|
|
sounds = default.node_sound_wood_defaults(),
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
|
},
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
|
},
|
|
},
|
|
on_punch = function(pos, node, puncher)
|
|
local tool = puncher:get_wielded_item():get_name()
|
|
if tool and tool == "scaffolding:scaffolding_wrench" then
|
|
node.name = "scaffolding:reinforced_iron_scaffolding"
|
|
minetest.env:set_node(pos, node)
|
|
puncher:get_inventory():add_item("main", ItemStack("scaffolding:scaffolding"))
|
|
end
|
|
end,
|
|
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
|
|
if itemstack:get_name() == "scaffolding:iron_scaffolding" then
|
|
|
|
-- many thanks to addi for improveing (rewriteing) my crappy code --
|
|
local name = minetest.get_node(pos).name -- get loacation of node
|
|
height = 0;
|
|
depth = 0; -- !!Note!! depth is not deeded at the moment
|
|
|
|
--[[ debug stuff ]]
|
|
minetest.chat_send_all(string.format("node: %s",name))
|
|
|
|
minetest.chat_send_all(string.format("node: %s %s %s ",pos.x, pos.y, pos.z ))
|
|
|
|
-- set pos at bottom of scafolding tower.
|
|
repeat
|
|
pos.y = pos.y - 1; --every run get one node up
|
|
depth = depth - 1 -- !!Note!! depth is not needed at the moment
|
|
|
|
local current_node = minetest.get_node(pos); --get the node of the new position
|
|
minetest.chat_send_all(string.format("found %q at location: %s",
|
|
current_node.name,
|
|
minetest.pos_to_string(pos)
|
|
))
|
|
|
|
until current_node.name ~= "scaffolding:iron_scaffolding" -- will repeat untill it dose not find a scaffolding node
|
|
minetest.chat_send_all(string.format("exit loop"))
|
|
|
|
-- check height of scaffolding tower --
|
|
|
|
repeat
|
|
pos.y = pos.y + 1; --every run get one node up
|
|
height = height + 1
|
|
local current_node = minetest.get_node(pos); --get the node of the new position
|
|
minetest.chat_send_all(string.format("found %q at location: %s",
|
|
current_node.name,
|
|
minetest.pos_to_string(pos)
|
|
))
|
|
|
|
if current_node.name == "air" then
|
|
minetest.set_node(pos, {name = "scaffolding:iron_scaffolding"} )
|
|
itemstack:take_item(1); --//and remove one if its the correct one
|
|
player:set_wielded_item(itemstack);--//update inventory of the player
|
|
end
|
|
until current_node.name ~= "scaffolding:iron_scaffolding" or height >= 32 --we repeat until we find something else then "scaffolding:scaffolding"
|
|
--maybe there should be also another limit, because its currently possible to build infinite towers
|
|
minetest.chat_send_all(string.format("exit loop"))
|
|
|
|
end
|
|
|
|
end,
|
|
after_dig_node = function(pos, node, metadata, digger)
|
|
default.dig_up(pos, node, digger)
|
|
end,
|
|
})
|
|
|
|
minetest.register_node("scaffolding:reinforced_iron_scaffolding", {
|
|
description = "Iron Scaffolding",
|
|
drawtype = "nodebox",
|
|
tiles = {"scaffolding_iron_scaffolding.png^scaffolding_reinforced.png", "scaffolding_iron_scaffolding.png^scaffolding_reinforced.png",
|
|
"scaffolding_iron_scaffolding.png^scaffolding_reinforced.png"},
|
|
drop = "scaffolding:iron_scaffolding",
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
climbable = true,
|
|
walkable = false,
|
|
is_ground_content = true,
|
|
groups = {snappy=2,cracky=3},
|
|
sounds = default.node_sound_wood_defaults(),
|
|
on_punch = function(pos, node, puncher)
|
|
local tool = puncher:get_wielded_item():get_name()
|
|
if tool and tool == "scaffolding:scaffolding_wrench" then
|
|
node.name = "scaffolding:iron_scaffolding"
|
|
minetest.env:set_node(pos, node)
|
|
puncher:get_inventory():add_item("main", ItemStack("scaffolding:scaffolding"))
|
|
end
|
|
end,
|
|
--[[on_rightclick = function(pos, node, puncher)
|
|
local tool = puncher:get_wielded_item():get_name()
|
|
if tool and tool == "scaffolding:scaffolding_wrench" then
|
|
node.name = "scaffolding:iron_scaffolding"
|
|
minetest.env:set_node(pos, node)
|
|
end
|
|
end,
|
|
on_punch = function(pos, node, puncher)
|
|
local tool = puncher:get_wielded_item():get_name()
|
|
if tool and tool == "scaffolding:scaffolding_wrench" then
|
|
node.name = "air"
|
|
minetest.env:set_node(pos, node)
|
|
--puncher:get_inventory():remove_item("main", ItemStack("beer_test:tankard"))
|
|
puncher:get_inventory():add_item("main", ItemStack("scaffolding:scaffolding"))
|
|
end
|
|
end,]]
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
|
},
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
|
},
|
|
},
|
|
})
|
|
|
|
minetest.register_node("scaffolding:iron_platform", {
|
|
description = "Iron Platform",
|
|
drawtype = "nodebox",
|
|
tiles = {"scaffolding_iron_scaffolding_top.png", "scaffolding_iron_scaffolding_top.png", "scaffolding_iron_scaffolding.png^scaffolding_platform.png"},
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
climbable = false,
|
|
walkable = true,
|
|
is_ground_content = true,
|
|
groups = {snappy=2,cracky=3},
|
|
sounds = default.node_sound_wood_defaults(),
|
|
on_punch = function(pos, node, puncher)
|
|
local tool = puncher:get_wielded_item():get_name()
|
|
if tool and tool == "scaffolding:scaffolding_wrench" then
|
|
node.name = "scaffolding:reinforced_iron_platform"
|
|
minetest.env:set_node(pos, node)
|
|
end
|
|
end,
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.3, -0.5, 0.5, 0.1, 0.5},
|
|
},
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.3, -0.5, 0.5, 0.1, 0.5},
|
|
},
|
|
},
|
|
after_dig_node = function(pos, node, metadata, digger)
|
|
default.dig_horx(pos, node, digger)
|
|
default.dig_horx2(pos, node, digger)
|
|
default.dig_horz(pos, node, digger)
|
|
default.dig_horz2(pos, node, digger)
|
|
end,
|
|
})
|
|
|
|
minetest.register_node("scaffolding:reinforced_iron_platform", {
|
|
description = "Iron Platform",
|
|
drawtype = "nodebox",
|
|
tiles = {"scaffolding_iron_scaffolding.png^scaffolding_reinforced.png", "scaffolding_iron_scaffolding.png^scaffolding_reinforced.png", "scaffolding_iron_scaffolding.png^scaffolding_platform.png"},
|
|
drop = "scaffolding:iron_platform",
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
climbable = false,
|
|
walkable = true,
|
|
is_ground_content = true,
|
|
groups = {snappy=2,cracky=3},
|
|
sounds = default.node_sound_wood_defaults(),
|
|
on_punch = function(pos, node, puncher)
|
|
local tool = puncher:get_wielded_item():get_name()
|
|
if tool and tool == "scaffolding:scaffolding_wrench" then
|
|
node.name = "scaffolding:iron_platform"
|
|
minetest.env:set_node(pos, node)
|
|
end
|
|
end,
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.3, -0.5, 0.5, 0.1, 0.5},
|
|
},
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.3, -0.5, 0.5, 0.1, 0.5},
|
|
},
|
|
},
|
|
})
|
|
|
|
----------------------
|
|
-- wood scaffolding --
|
|
----------------------
|
|
|
|
minetest.register_craft({
|
|
output = 'scaffolding:scaffolding 12',
|
|
recipe = {
|
|
{'default:wood', 'default:wood', 'default:wood'},
|
|
{'default:stick', '', 'default:stick'},
|
|
{'default:wood', 'default:wood', 'default:wood'},
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = 'scaffolding:scaffolding 4',
|
|
recipe = {
|
|
{'default:wood'},
|
|
{'default:stick'},
|
|
{'default:wood'},
|
|
}
|
|
})
|
|
|
|
-- back to scaffolding --
|
|
|
|
minetest.register_craft({
|
|
output = 'scaffolding:scaffolding',
|
|
recipe = {
|
|
{'scaffolding:platform'},
|
|
{'scaffolding:platform'},
|
|
}
|
|
})
|
|
|
|
-- wood platforms --
|
|
|
|
minetest.register_craft({
|
|
output = 'scaffolding:platform 2',
|
|
recipe = {
|
|
{'scaffolding:scaffolding'},
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = 'scaffolding:platform 6',
|
|
recipe = {
|
|
{'scaffolding:scaffolding', 'scaffolding:scaffolding', 'scaffolding:scaffolding'},
|
|
}
|
|
})
|
|
|
|
-- get wood back --
|
|
|
|
minetest.register_craft({
|
|
output = 'default:wood',
|
|
recipe = {
|
|
{'scaffolding:scaffolding', 'scaffolding:scaffolding'},
|
|
}
|
|
})
|
|
|
|
----------------------
|
|
-- iron scaffolding --
|
|
----------------------
|
|
|
|
minetest.register_craft({
|
|
output = 'scaffolding:iron_scaffolding 12',
|
|
recipe = {
|
|
{'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
|
|
{'default:stick', '', 'default:stick'},
|
|
{'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = 'scaffolding:iron_scaffolding 4',
|
|
recipe = {
|
|
{'default:steel_ingot'},
|
|
{'default:stick'},
|
|
{'default:steel_ingot'},
|
|
}
|
|
})
|
|
-- back to scaffolding --
|
|
|
|
minetest.register_craft({
|
|
output = 'scaffolding:iron_scaffolding',
|
|
recipe = {
|
|
{'scaffolding:iron_platform'},
|
|
{'scaffolding:iron_platform'},
|
|
}
|
|
})
|
|
|
|
-- iron platforms --
|
|
|
|
minetest.register_craft({
|
|
output = 'scaffolding:iron_platform 2',
|
|
recipe = {
|
|
{'scaffolding:iron_scaffolding'},
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = 'scaffolding:iron_platform 6',
|
|
recipe = {
|
|
{'scaffolding:iron_scaffolding', 'scaffolding:iron_scaffolding', 'scaffolding:iron_scaffolding'},
|
|
}
|
|
})
|
|
|
|
-- get iron back --
|
|
|
|
minetest.register_craft({
|
|
output = 'default:steel_ingot',
|
|
recipe = {
|
|
{'scaffolding:iron_scaffolding', 'scaffolding:iron_scaffolding'},
|
|
}
|
|
})
|
|
|
|
|
|
|
|
------------
|
|
-- wrench --
|
|
------------
|
|
|
|
minetest.register_craft({
|
|
output = 'scaffolding:scaffolding_wrench',
|
|
recipe = {
|
|
{'', 'default:steel_ingot', ''},
|
|
{'', 'default:steel_ingot', 'default:steel_ingot'},
|
|
{'default:steel_ingot', '', ''},
|
|
}
|
|
})
|