technic/concrete/init.lua
2017-03-29 15:19:50 +02:00

157 lines
4.6 KiB
Lua

--Minetest 0.4.7 mod: concrete
--(c) 2013 by RealBadAngel <mk@realbadangel.pl>
local technic = rawget(_G, "technic") or {}
technic.concrete_posts = {}
-- Boilerplate to support localized strings if intllib mod is installed.
local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end
for i = 0, 31 do
minetest.register_alias("technic:concrete_post"..i,
"technic:concrete_post")
end
for i = 32, 63 do
minetest.register_alias("technic:concrete_post"..i,
"technic:concrete_post_with_platform")
end
local steel_ingot
if minetest.get_modpath("technic_worldgen") then
steel_ingot = "technic:carbon_steel_ingot"
else
steel_ingot = "default:steel_ingot"
end
minetest.register_craft({
output = 'technic:rebar 6',
recipe = {
{ '', '', steel_ingot },
{ '', steel_ingot, '' },
{ steel_ingot, '', '' },
}
})
minetest.register_craft({
output = 'technic:concrete 5',
recipe = {
{ 'default:stone', 'technic:rebar', 'default:stone' },
{ 'technic:rebar', 'default:stone', 'technic:rebar' },
{ 'default:stone', 'technic:rebar', 'default:stone' },
}
})
minetest.register_craft({
output = 'technic:concrete_post_platform 6',
recipe = {
{ 'technic:concrete', 'technic:concrete_post', 'technic:concrete' },
}
})
minetest.register_craft({
output = 'technic:concrete_post 12',
recipe = {
{ 'default:stone', 'technic:rebar', 'default:stone' },
{ 'default:stone', 'technic:rebar', 'default:stone' },
{ 'default:stone', 'technic:rebar', 'default:stone' },
}
})
minetest.register_craft({
output = 'technic:blast_resistant_concrete 5',
recipe = {
{ 'technic:concrete', 'technic:composite_plate', 'technic:concrete' },
{ 'technic:composite_plate', 'technic:concrete', 'technic:composite_plate' },
{ 'technic:concrete', 'technic:composite_plate', 'technic:concrete' },
}
})
minetest.register_craftitem(":technic:rebar", {
description = S("Rebar"),
inventory_image = "technic_rebar.png",
})
minetest.register_node(":technic:concrete", {
description = S("Concrete Block"),
tiles = { "technic_concrete_block.png", },
groups = { cracky = 1, level = 2, concrete = 1 },
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node(":technic:blast_resistant_concrete", {
description = S("Blast-resistant Concrete Block"),
tiles = { "technic_blast_resistant_concrete_block.png", },
groups = { cracky = 1, level = 3, concrete = 1 },
sounds = default.node_sound_stone_defaults(),
on_blast = function(pos, intensity)
if intensity > 9 then
minetest.remove_node(pos)
return { "technic:blast_resistant_concrete" }
end
end,
})
local box_platform = { -0.5, 0.3, -0.5, 0.5, 0.5, 0.5 }
local box_post = { -0.15, -0.5, -0.15, 0.15, 0.5, 0.15 }
local box_front = { -0.1, -0.3, 0, 0.1, 0.3, -0.5 }
local box_back = { -0.1, -0.3, 0, 0.1, 0.3, 0.5 }
local box_left = { 0, -0.3, -0.1, -0.5, 0.3, 0.1 }
local box_right = { 0, -0.3, -0.1, 0.5, 0.3, 0.1 }
minetest.register_node(":technic:concrete_post_platform", {
description = S("Concrete Post Platform"),
tiles = { "technic_concrete_block.png", },
groups = { cracky = 1, level = 2 },
sounds = default.node_sound_stone_defaults(),
paramtype = "light",
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = { box_platform }
},
on_place = function(itemstack, placer, pointed_thing)
local node = minetest.get_node(pointed_thing.under)
if node.name ~= "technic:concrete_post" then
return minetest.item_place_node(itemstack, placer, pointed_thing)
end
minetest.set_node(pointed_thing.under, { name = "technic:concrete_post_with_platform" })
itemstack:take_item()
placer:set_wielded_item(itemstack)
return itemstack
end,
})
for platform = 0, 1 do
local after_dig_node = nil
if platform == 1 then
after_dig_node = function(pos, old_node)
old_node.name = "technic:concrete_post"
minetest.set_node(pos, old_node)
end
end
minetest.register_node(":technic:concrete_post"..(platform == 1 and "_with_platform" or ""), {
description = S("Concrete Post"),
tiles = { "technic_concrete_block.png" },
groups = { cracky = 1, level = 2, concrete_post = 1, not_in_creative_inventory = platform },
sounds = default.node_sound_stone_defaults(),
drop = (platform == 1 and "technic:concrete_post_platform" or
"technic:concrete_post"),
paramtype = "light",
sunlight_propagates = true,
drawtype = "nodebox",
connects_to = { "group:concrete", "group:concrete_post" },
node_box = {
type = "connected",
fixed = { box_post, (platform == 1 and box_platform or nil) },
connect_front = box_front,
connect_back = box_back,
connect_left = box_left,
connect_right = box_right,
},
after_dig_node = after_dig_node,
})
end