Vanessa Ezekowitz
2013-03-20 6d1e9b4d61475b813f61b55425074712de8ecc24
Multiple changes, see below:

removed concrete, marble, marble brick, granite, obsidian

stairs/etc from creative inventory, made them work with circular saw in
moreblocks since this mod depends on that one anyway. Removed technic obsidian
block entirely and aliased it to the default obsidian block; all stairs/slabs
for obsidian are under the default: namespace.

This depends on a small fix to the circular saw that was just added by
Sokomine. If your copy of circular saw doesn't have this fix, you can still
use /giveme to get the blocks you need.

Removed custom generate_ore code and made generate-ore calls use
default.generate_ore() since that is the same function anyway. This is so that
technic can use the C++ version of that function when it is moved back into the
engine.
2 files added
2 files modified
616 ■■■■ changed files
technic/concrete.lua 4 ●●●● patch | view | raw | blame | history
technic/concrete.lua~ 94 ●●●●● patch | view | raw | blame | history
technic/ores.lua 141 ●●●● patch | view | raw | blame | history
technic/ores.lua~ 377 ●●●●● patch | view | raw | blame | history
technic/concrete.lua
@@ -74,7 +74,7 @@
})
if type(register_stair_and_slab_and_panel_and_micro) == "function" then
register_stair_and_slab_and_panel_and_micro(":stairsplus", "concrete", "technic:concrete",
        {cracky=3},
        {cracky=3, not_in_creative_inventory=1},
        {"technic_concrete_block.png"},
        "Concrete Stairs",
        "Concrete Slab",
@@ -84,7 +84,7 @@
end
if type(register_stair_slab_panel_micro) == "function" then
register_stair_slab_panel_micro(":stairsplus", "concrete", "technic:concrete",
        {cracky=3},
        {cracky=3, not_in_creative_inventory=1},
        {"technic_concrete_block.png"},
        "Concrete Stairs",
        "Concrete Slab",
technic/concrete.lua~
New file
@@ -0,0 +1,94 @@
minetest.register_craft({
    output = 'technic:rebar 6',
    recipe = {
        {'','', 'default:steel_ingot'},
        {'','default:steel_ingot',''},
        {'default: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 4',
    recipe = {
        {'default:stone','technic:rebar','default:stone'},
        {'default:stone','technic:rebar','default:stone'},
        {'default:stone','technic:rebar','default:stone'},
}
})
minetest.register_craftitem("technic:rebar", {
    description = "Rebar",
    inventory_image = "technic_rebar.png",
    stack_max = 99,
})
minetest.register_craftitem("technic:concrete", {
    description = "Concrete Block",
    inventory_image = "technic_concrete_block.png",
    stack_max = 99,
})
minetest.register_craftitem("technic:concrete_post", {
    description = "Concrete Post",
    inventory_image = "technic_concrete_post.png",
    stack_max = 99,
})
-- NODES:
minetest.register_node("technic:concrete", {
    description = "Concrete Block",
    tile_images = {"technic_concrete_block.png",},
    is_ground_content = true,
    groups = {cracky=1},
    sounds = default.node_sound_stone_defaults(),
})
minetest.register_node("technic:concrete_post", {
    description = "Concrete Post",
    drawtype = "fencelike",
    tiles = {"technic_concrete_block.png"},
    inventory_image = "default_fence.png",
    wield_image = "default_fence.png",
    paramtype = "light",
    is_ground_content = true,
    selection_box = {
        type = "fixed",
        fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
    },
    groups = {cracky=1},
    sounds = default.node_sound_stone_defaults(),
})
if type(register_stair_and_slab_and_panel_and_micro) == "function" then
register_stair_and_slab_and_panel_and_micro(":stairsplus", "concrete", "technic:concrete",
        {cracky=3},
        {"technic_concrete_block.png"},
        "Concrete Stairs",
        "Concrete Slab",
        "Concrete Panel",
        "Concrete Microblock",
        "concrete")
end
if type(register_stair_slab_panel_micro) == "function" then
register_stair_slab_panel_micro(":stairsplus", "concrete", "technic:concrete",
        {cracky=3},
        {"technic_concrete_block.png"},
        "Concrete Stairs",
        "Concrete Slab",
        "Concrete Panel",
        "Concrete Microblock",
        "concrete")
end
technic/ores.lua
@@ -30,17 +30,64 @@
    sounds = default.node_sound_stone_defaults(),
}) 
minetest.register_node( "technic:obsidian", {
    description = "Obsidian",
    tiles = { "technic_obsidian.png" },
    is_ground_content = true,
    groups = {cracky=3},
    sounds = default.node_sound_stone_defaults(),
})
-- cross-compatibility with default obsidian
function register_technic_stairs_alias(modname, origname, newmod, newname)
    minetest.register_alias(modname .. ":slab_" .. origname, newmod..":slab_" .. newname)
    minetest.register_alias(modname .. ":slab_" .. origname .. "_inverted", newmod..":slab_" .. newname .. "_inverted")
    minetest.register_alias(modname .. ":slab_" .. origname .. "_wall", newmod..":slab_" .. newname .. "_wall")
    minetest.register_alias(modname .. ":slab_" .. origname .. "_quarter", newmod..":slab_" .. newname .. "_quarter")
    minetest.register_alias(modname .. ":slab_" .. origname .. "_quarter_inverted", newmod..":slab_" .. newname .. "_quarter_inverted")
    minetest.register_alias(modname .. ":slab_" .. origname .. "_quarter_wall", newmod..":slab_" .. newname .. "_quarter_wall")
    minetest.register_alias(modname .. ":slab_" .. origname .. "_three_quarter", newmod..":slab_" .. newname .. "_three_quarter")
    minetest.register_alias(modname .. ":slab_" .. origname .. "_three_quarter_inverted", newmod..":slab_" .. newname .. "_three_quarter_inverted")
    minetest.register_alias(modname .. ":slab_" .. origname .. "_three_quarter_wall", newmod..":slab_" .. newname .. "_three_quarter_wall")
    minetest.register_alias(modname .. ":stair_" .. origname, newmod..":stair_" .. newname)
    minetest.register_alias(modname .. ":stair_" .. origname .. "_inverted", newmod..":stair_" .. newname .. "_inverted")
    minetest.register_alias(modname .. ":stair_" .. origname .. "_wall", newmod..":stair_" .. newname .. "_wall")
    minetest.register_alias(modname .. ":stair_" .. origname .. "_wall_half", newmod..":stair_" .. newname .. "_wall_half")
    minetest.register_alias(modname .. ":stair_" .. origname .. "_wall_half_inverted", newmod..":stair_" .. newname .. "_wall_half_inverted")
    minetest.register_alias(modname .. ":stair_" .. origname .. "_half", newmod..":stair_" .. newname .. "_half")
    minetest.register_alias(modname .. ":stair_" .. origname .. "_half_inverted", newmod..":stair_" .. newname .. "_half_inverted")
    minetest.register_alias(modname .. ":stair_" .. origname .. "_right_half", newmod..":stair_" .. newname .. "_right_half")
    minetest.register_alias(modname .. ":stair_" .. origname .. "_right_half_inverted", newmod..":stair_" .. newname .. "_right_half_inverted")
    minetest.register_alias(modname .. ":stair_" .. origname .. "_wall_half", newmod..":stair_" .. newname .. "_wall_half")
    minetest.register_alias(modname .. ":stair_" .. origname .. "_wall_half_inverted", newmod..":stair_" .. newname .. "_wall_half_inverted")
    minetest.register_alias(modname .. ":stair_" .. origname .. "_inner", newmod..":stair_" .. newname .. "_inner")
    minetest.register_alias(modname .. ":stair_" .. origname .. "_inner_inverted", newmod..":stair_" .. newname .. "_inner_inverted")
    minetest.register_alias(modname .. ":stair_" .. origname .. "_outer", newmod..":stair_" .. newname .. "_outer")
    minetest.register_alias(modname .. ":stair_" .. origname .. "_outer_inverted", newmod..":stair_" .. newname .. "_outer_inverted")
    minetest.register_alias(modname .. ":panel_" .. origname .. "_bottom", newmod..":panel_" .. newname .. "_bottom")
    minetest.register_alias(modname .. ":panel_" .. origname .. "_top", newmod..":panel_" .. newname .. "_top")
    minetest.register_alias(modname .. ":panel_" .. origname .. "_vertical", newmod..":panel_" .. newname .. "_vertical")
    minetest.register_alias(modname .. ":micro_" .. origname .. "_bottom", newmod..":micro_" .. newname .. "_bottom")
    minetest.register_alias(modname .. ":micro_" .. origname .. "_top", newmod..":micro_" .. newname .. "_top")
end
minetest.register_alias("technic:obsidian", "default:obsidian")
minetest.register_alias("moreblocks:obsidian", "default:obsidian")
register_stair_slab_panel_micro(
    ":default",
    "obsidian",
    "default:obsidian",
    {cracky=3, not_in_creative_inventory=1},
    {"default_obsidian.png"},
    "Obsidian",
    "default:obsidian",
    "none",
    light
)
register_technic_stairs_alias("moreblocks", "obsidian", "default", "obsidian")
table.insert(circular_saw.known_stairs, "default:obsidian")
-- other stairs/slabs
if type(register_stair_and_slab_and_panel_and_micro) == "function" then
register_stair_and_slab_and_panel_and_micro(":stairsplus", "marble", "technic:marble",
        {cracky=3},
        {cracky=3, not_in_creative_inventory=1},
        {"technic_marble.png"},
        "Marble Stairs",
        "Marble Slab",
@@ -48,7 +95,7 @@
        "Marble Microblock",
        "marble")
register_stair_and_slab_and_panel_and_micro(":stairsplus", "marble_bricks", "technic:marble_bricks",
        {cracky=3},
        {cracky=3, not_in_creative_inventory=1},
        {"technic_marble_bricks.png"},
        "Marble Bricks Stairs",
        "Marble Bricks Slab",
@@ -56,16 +103,16 @@
        "Marble Bricks Microblock",
        "marble_bricks")
register_stair_and_slab_and_panel_and_micro(":stairsplus", "granite", "technic:granite",
        {cracky=3},
        {cracky=3, not_in_creative_inventory=1},
        {"technic_granite.png"},
        "Granite Stairs",
        "Granite Slab",
        "Granite Panel",
        "Granite Microblock",
        "granite")
register_stair_and_slab_and_panel_and_micro(":stairsplus", "obsidian", "technic:obsidian",
        {cracky=3},
        {"technic_obsidian.png"},
register_stair_and_slab_and_panel_and_micro(":stairsplus", "obsidian", "default:obsidian",
        {cracky=3, not_in_creative_inventory=1},
        {"default_obsidian.png"},
        "Obsidian Stairs",
        "Obsidian Slab",
        "Obsidian Panel",
@@ -75,7 +122,7 @@
if type(register_stair_slab_panel_micro) == "function" then
register_stair_slab_panel_micro(":stairsplus", "marble", "technic:marble",
        {cracky=3},
        {cracky=3, not_in_creative_inventory=1},
        {"technic_marble.png"},
        "Marble Stairs",
        "Marble Slab",
@@ -83,7 +130,7 @@
        "Marble Microblock",
        "marble")
register_stair_slab_panel_micro(":stairsplus", "marble_bricks", "technic:marble_bricks",
        {cracky=3},
        {cracky=3, not_in_creative_inventory=1},
        {"technic_marble_bricks.png"},
        "Marble Bricks Stairs",
        "Marble Bricks Slab",
@@ -91,7 +138,7 @@
        "Marble Bricks Microblock",
        "marble_bricks")
register_stair_slab_panel_micro(":stairsplus", "granite", "technic:granite",
        {cracky=3},
        {cracky=3, not_in_creative_inventory=1},
        {"technic_granite.png"},
        "Granite Stairs",
        "Granite Slab",
@@ -99,7 +146,7 @@
        "Granite Microblock",
        "granite")
register_stair_slab_panel_micro(":stairsplus", "obsidian", "technic:obsidian",
        {cracky=3},
        {cracky=3, not_in_creative_inventory=1},
        {"technic_obsidian.png"},
        "Obsidian Stairs",
        "Obsidian Slab",
@@ -201,60 +248,14 @@
                recipe = "technic:zinc_lump"
            })
local function generate_ore(name, wherein, minp, maxp, seed, chunks_per_volume, ore_per_chunk, height_min, height_max)
    if maxp.y < height_min or minp.y > height_max then
        return
    end
    local y_min = math.max(minp.y, height_min)
    local y_max = math.min(maxp.y, height_max)
    local volume = (maxp.x-minp.x+1)*(y_max-y_min+1)*(maxp.z-minp.z+1)
    local pr = PseudoRandom(seed)
    local num_chunks = math.floor(chunks_per_volume * volume)
    local chunk_size = 3
    if ore_per_chunk <= 4 then
        chunk_size = 2
    end
    local inverse_chance = math.floor(chunk_size*chunk_size*chunk_size / ore_per_chunk)
    --print("generate_ore num_chunks: "..dump(num_chunks))
    for i=1,num_chunks do
    if (y_max-chunk_size+1 <= y_min) then return end
        local y0 = pr:next(y_min, y_max-chunk_size+1)
        if y0 >= height_min and y0 <= height_max then
            local x0 = pr:next(minp.x, maxp.x-chunk_size+1)
            local z0 = pr:next(minp.z, maxp.z-chunk_size+1)
            local p0 = {x=x0, y=y0, z=z0}
            for x1=0,chunk_size-1 do
            for y1=0,chunk_size-1 do
            for z1=0,chunk_size-1 do
                if pr:next(1,inverse_chance) == 1 then
                    local x2 = x0+x1
                    local y2 = y0+y1
                    local z2 = z0+z1
                    local p2 = {x=x2, y=y2, z=z2}
                    if minetest.env:get_node(p2).name == wherein then
                        minetest.env:set_node(p2, {name=name})
                    end
                end
            end
            end
            end
        end
    end
    --print("generate_ore done")
end
minetest.register_on_generated(function(minp, maxp, seed)
generate_ore("technic:mineral_diamond", "default:stone", minp, maxp, seed+21,   1/11/11/11,    4, -31000,  -450)
generate_ore("technic:mineral_uranium", "default:stone", minp, maxp, seed+22,   1/10/10/10,    3, -300,  -80)
generate_ore("technic:mineral_chromium", "default:stone", minp, maxp, seed+23,   1/10/10/10,    2, -31000,  -100)
generate_ore("technic:mineral_zinc", "default:stone", minp, maxp, seed+24,   1/9/9/9,    4, -31000,  2)
generate_ore("technic:marble", "default:stone", minp, maxp, seed+25,    1/128, 20, -100, -32)
generate_ore("technic:granite", "default:stone", minp, maxp, seed+25,    1/128, 15, -190, -90)
generate_stratus("technic:obsidian",
                {"default:stone"},
                {"default:lava_source"},{"default:air"},
                  minp, maxp, seed+4, 10, 25, 7, -450, -31000, -450)
default.generate_ore("technic:mineral_diamond", "default:stone", minp, maxp, seed+21,   1/11/11/11,    4, -31000,  -450)
default.generate_ore("technic:mineral_uranium", "default:stone", minp, maxp, seed+22,   1/10/10/10,    3, -300,  -80)
default.generate_ore("technic:mineral_chromium", "default:stone", minp, maxp, seed+23,   1/10/10/10,    2, -31000,  -100)
default.generate_ore("technic:mineral_zinc", "default:stone", minp, maxp, seed+24,   1/9/9/9,    4, -31000,  2)
default.generate_ore("technic:marble", "default:stone", minp, maxp, seed+25,    1/128, 20, -100, -32)
default.generate_ore("technic:granite", "default:stone", minp, maxp, seed+25,    1/128, 15, -190, -90)
end)
function generate_stratus(name, wherein, ceilin, ceil, minp, maxp, seed, stratus_chance, radius, radius_y, deep, height_min, height_max)
technic/ores.lua~
New file
@@ -0,0 +1,377 @@
minetest.register_node( "technic:marble", {
    description = "Marble",
    tiles = { "technic_marble.png" },
    is_ground_content = true,
    groups = {cracky=3},
    sounds = default.node_sound_stone_defaults(),
})
minetest.register_node( "technic:marble_bricks", {
    description = "Marble Bricks",
    tiles = { "technic_marble_bricks.png" },
    is_ground_content = true,
    groups = {cracky=3},
    sounds = default.node_sound_stone_defaults(),
})
minetest.register_craft({
    output = 'technic:marble_bricks 4',
    recipe = {
        {'technic:marble','technic:marble'},
        {'technic:marble','technic:marble'}
    }
})
minetest.register_node( "technic:granite", {
    description = "Granite",
    tiles = { "technic_granite.png" },
    is_ground_content = true,
    groups = {cracky=3},
    sounds = default.node_sound_stone_defaults(),
})
-- cross-compatibility with default obsidian
function register_technic_stairs_alias(modname, origname, newmod, newname)
    minetest.register_alias(modname .. ":slab_" .. origname, newmod..":slab_" .. newname)
    minetest.register_alias(modname .. ":slab_" .. origname .. "_inverted", newmod..":slab_" .. newname .. "_inverted")
    minetest.register_alias(modname .. ":slab_" .. origname .. "_wall", newmod..":slab_" .. newname .. "_wall")
    minetest.register_alias(modname .. ":slab_" .. origname .. "_quarter", newmod..":slab_" .. newname .. "_quarter")
    minetest.register_alias(modname .. ":slab_" .. origname .. "_quarter_inverted", newmod..":slab_" .. newname .. "_quarter_inverted")
    minetest.register_alias(modname .. ":slab_" .. origname .. "_quarter_wall", newmod..":slab_" .. newname .. "_quarter_wall")
    minetest.register_alias(modname .. ":slab_" .. origname .. "_three_quarter", newmod..":slab_" .. newname .. "_three_quarter")
    minetest.register_alias(modname .. ":slab_" .. origname .. "_three_quarter_inverted", newmod..":slab_" .. newname .. "_three_quarter_inverted")
    minetest.register_alias(modname .. ":slab_" .. origname .. "_three_quarter_wall", newmod..":slab_" .. newname .. "_three_quarter_wall")
    minetest.register_alias(modname .. ":stair_" .. origname, newmod..":stair_" .. newname)
    minetest.register_alias(modname .. ":stair_" .. origname .. "_inverted", newmod..":stair_" .. newname .. "_inverted")
    minetest.register_alias(modname .. ":stair_" .. origname .. "_wall", newmod..":stair_" .. newname .. "_wall")
    minetest.register_alias(modname .. ":stair_" .. origname .. "_wall_half", newmod..":stair_" .. newname .. "_wall_half")
    minetest.register_alias(modname .. ":stair_" .. origname .. "_wall_half_inverted", newmod..":stair_" .. newname .. "_wall_half_inverted")
    minetest.register_alias(modname .. ":stair_" .. origname .. "_half", newmod..":stair_" .. newname .. "_half")
    minetest.register_alias(modname .. ":stair_" .. origname .. "_half_inverted", newmod..":stair_" .. newname .. "_half_inverted")
    minetest.register_alias(modname .. ":stair_" .. origname .. "_right_half", newmod..":stair_" .. newname .. "_right_half")
    minetest.register_alias(modname .. ":stair_" .. origname .. "_right_half_inverted", newmod..":stair_" .. newname .. "_right_half_inverted")
    minetest.register_alias(modname .. ":stair_" .. origname .. "_wall_half", newmod..":stair_" .. newname .. "_wall_half")
    minetest.register_alias(modname .. ":stair_" .. origname .. "_wall_half_inverted", newmod..":stair_" .. newname .. "_wall_half_inverted")
    minetest.register_alias(modname .. ":stair_" .. origname .. "_inner", newmod..":stair_" .. newname .. "_inner")
    minetest.register_alias(modname .. ":stair_" .. origname .. "_inner_inverted", newmod..":stair_" .. newname .. "_inner_inverted")
    minetest.register_alias(modname .. ":stair_" .. origname .. "_outer", newmod..":stair_" .. newname .. "_outer")
    minetest.register_alias(modname .. ":stair_" .. origname .. "_outer_inverted", newmod..":stair_" .. newname .. "_outer_inverted")
    minetest.register_alias(modname .. ":panel_" .. origname .. "_bottom", newmod..":panel_" .. newname .. "_bottom")
    minetest.register_alias(modname .. ":panel_" .. origname .. "_top", newmod..":panel_" .. newname .. "_top")
    minetest.register_alias(modname .. ":panel_" .. origname .. "_vertical", newmod..":panel_" .. newname .. "_vertical")
    minetest.register_alias(modname .. ":micro_" .. origname .. "_bottom", newmod..":micro_" .. newname .. "_bottom")
    minetest.register_alias(modname .. ":micro_" .. origname .. "_top", newmod..":micro_" .. newname .. "_top")
end
minetest.register_alias("technic:obsidian", "default:obsidian")
minetest.register_alias("moreblocks:obsidian", "default:obsidian")
register_stair_slab_panel_micro(
    "moreblocks",
    "obsidian",
    "moreblocks:obsidian",
    {cracky=3, not_in_creative_inventory=1},
    {"default_obsidian.png"},
    "Obsidian",
    "moreblocks:obsidian",
    "none",
    light
)
register_technic_stairs_alias("default", "obsidian", "moreblocks", "obsidian")
table.insert(circular_saw.known_stairs, "default:obsidian")
-- other stairs/slabs
if type(register_stair_and_slab_and_panel_and_micro) == "function" then
register_stair_and_slab_and_panel_and_micro(":stairsplus", "marble", "technic:marble",
        {cracky=3, not_in_creative_inventory=1},
        {"technic_marble.png"},
        "Marble Stairs",
        "Marble Slab",
        "Marble Panel",
        "Marble Microblock",
        "marble")
register_stair_and_slab_and_panel_and_micro(":stairsplus", "marble_bricks", "technic:marble_bricks",
        {cracky=3, not_in_creative_inventory=1},
        {"technic_marble_bricks.png"},
        "Marble Bricks Stairs",
        "Marble Bricks Slab",
        "Marble Bricks Panel",
        "Marble Bricks Microblock",
        "marble_bricks")
register_stair_and_slab_and_panel_and_micro(":stairsplus", "granite", "technic:granite",
        {cracky=3, not_in_creative_inventory=1},
        {"technic_granite.png"},
        "Granite Stairs",
        "Granite Slab",
        "Granite Panel",
        "Granite Microblock",
        "granite")
register_stair_and_slab_and_panel_and_micro(":stairsplus", "obsidian", "default:obsidian",
        {cracky=3, not_in_creative_inventory=1},
        {"default_obsidian.png"},
        "Obsidian Stairs",
        "Obsidian Slab",
        "Obsidian Panel",
        "Obsidian Microblock",
        "obsidian")
end
if type(register_stair_slab_panel_micro) == "function" then
register_stair_slab_panel_micro(":stairsplus", "marble", "technic:marble",
        {cracky=3, not_in_creative_inventory=1},
        {"technic_marble.png"},
        "Marble Stairs",
        "Marble Slab",
        "Marble Panel",
        "Marble Microblock",
        "marble")
register_stair_slab_panel_micro(":stairsplus", "marble_bricks", "technic:marble_bricks",
        {cracky=3, not_in_creative_inventory=1},
        {"technic_marble_bricks.png"},
        "Marble Bricks Stairs",
        "Marble Bricks Slab",
        "Marble Bricks Panel",
        "Marble Bricks Microblock",
        "marble_bricks")
register_stair_slab_panel_micro(":stairsplus", "granite", "technic:granite",
        {cracky=3, not_in_creative_inventory=1},
        {"technic_granite.png"},
        "Granite Stairs",
        "Granite Slab",
        "Granite Panel",
        "Granite Microblock",
        "granite")
register_stair_slab_panel_micro(":stairsplus", "obsidian", "technic:obsidian",
        {cracky=3, not_in_creative_inventory=1},
        {"technic_obsidian.png"},
        "Obsidian Stairs",
        "Obsidian Slab",
        "Obsidian Panel",
        "Obsidian Microblock",
        "obsidian")
end
minetest.register_node( "technic:mineral_diamond", {
    description = "Diamond Ore",
    tiles = { "default_stone.png^technic_mineral_diamond.png" },
    is_ground_content = true,
    groups = {cracky=3},
    sounds = default.node_sound_stone_defaults(),
    drop = 'craft "technic:diamond" 1',
})
minetest.register_craftitem( "technic:diamond", {
    description = "Diamond",
    inventory_image = "technic_diamond.png",
    on_place_on_ground = minetest.craftitem_place_item,
})
minetest.register_node( "technic:mineral_uranium", {
    description = "Uranium Ore",
    tiles = { "default_stone.png^technic_mineral_uranium.png" },
    is_ground_content = true,
    groups = {cracky=3},
    sounds = default.node_sound_stone_defaults(),
    drop = 'craft "technic:uranium" 1',
})
minetest.register_craftitem( "technic:uranium", {
    description = "Uranium",
    inventory_image = "technic_uranium.png",
    on_place_on_ground = minetest.craftitem_place_item,
})
minetest.register_node( "technic:mineral_chromium", {
    description = "Chromium Ore",
    tiles = { "default_stone.png^technic_mineral_chromium.png" },
    is_ground_content = true,
    groups = {cracky=3},
    sounds = default.node_sound_stone_defaults(),
    drop = 'craft "technic:chromium_lump" 1',
})
minetest.register_craftitem( "technic:chromium_lump", {
    description = "Chromium Lump",
    inventory_image = "technic_chromium_lump.png",
    on_place_on_ground = minetest.craftitem_place_item,
})
minetest.register_craftitem( "technic:chromium_ingot", {
    description = "Chromium Ingot",
    inventory_image = "technic_chromium_ingot.png",
    on_place_on_ground = minetest.craftitem_place_item,
})
minetest.register_craft({
                type = 'cooking',
                output = "technic:chromium_ingot",
                recipe = "technic:chromium_lump"
            })
minetest.register_node( "technic:mineral_zinc", {
    description = "Zinc Ore",
    tile_images = { "default_stone.png^technic_mineral_zinc.png" },
    is_ground_content = true,
    groups = {cracky=3},
    sounds = default.node_sound_stone_defaults(),
    drop = 'craft "technic:zinc_lump" 1',
})
minetest.register_craftitem( "technic:zinc_lump", {
    description = "Zinc Lump",
    inventory_image = "technic_zinc_lump.png",
})
minetest.register_craftitem( "technic:zinc_ingot", {
    description = "Zinc Ingot",
    inventory_image = "technic_zinc_ingot.png",
})
minetest.register_craftitem( "technic:stainless_steel_ingot", {
    description = "Stainless Steel Ingot",
    inventory_image = "technic_stainless_steel_ingot.png",
})
minetest.register_craftitem( "technic:brass_ingot", {
    description = "Brass Ingot",
    inventory_image = "technic_brass_ingot.png",
})
minetest.register_craft({
                type = 'cooking',
                output = "technic:zinc_ingot",
                recipe = "technic:zinc_lump"
            })
minetest.register_on_generated(function(minp, maxp, seed)
default.generate_ore("technic:mineral_diamond", "default:stone", minp, maxp, seed+21,   1/11/11/11,    4, -31000,  -450)
default.generate_ore("technic:mineral_uranium", "default:stone", minp, maxp, seed+22,   1/10/10/10,    3, -300,  -80)
default.generate_ore("technic:mineral_chromium", "default:stone", minp, maxp, seed+23,   1/10/10/10,    2, -31000,  -100)
default.generate_ore("technic:mineral_zinc", "default:stone", minp, maxp, seed+24,   1/9/9/9,    4, -31000,  2)
default.generate_ore("technic:marble", "default:stone", minp, maxp, seed+25,    1/128, 20, -100, -32)
default.generate_ore("technic:granite", "default:stone", minp, maxp, seed+25,    1/128, 15, -190, -90)
end)
function generate_stratus(name, wherein, ceilin, ceil, minp, maxp, seed, stratus_chance, radius, radius_y, deep, height_min, height_max)
  if maxp.y < height_min or minp.y > height_max then
    return
  end
  -- it will be only generate a stratus for every 100 m of area
  local stratus_per_volume=1
  local area=45
  local y_min = math.max(minp.y, height_min)
  local y_max = math.min(maxp.y, height_max)
  local volume = ((maxp.x-minp.x+1)/area)*((y_max-y_min+1)/area)*((maxp.z-minp.z+1)/area)
  local pr = PseudoRandom(seed)
  local blocks = math.floor(stratus_per_volume*volume)
  print(" <<"..dump(name)..">>");
  if blocks == 0 then
    blocks = 1
  end
  print(" blocks: "..dump(blocks).." in vol: "..dump(volume).." ("..dump(maxp.x-minp.x+1)..","..dump(y_max-y_min+1)..","..dump(maxp.z-minp.z+1)..")")
  for i=1,blocks do
    local x = pr:next(1,stratus_chance)
    if x == 1 then
      -- TODO deep
      local y0=y_max-radius_y+1
      if y0 < y_min then
        y0=y_min
      else
        y0=pr:next(y_min, y0)
      end
      local x0 = maxp.x-radius+1
      if x0 < minp.x then
        x0 = minp.x
      else
        x0 = pr:next(minp.x, x0)
      end
      local z0 = maxp.z-radius+1
      if z0 < minp.z then
        x0 = minp.z
      else
        z0 = pr:next(minp.z, z0)
      end
      local p0 = {x=x0, y=y0, z=z0}
      local n = minetest.env:get_node(p0).name
      local i = 0
      --print(" upper node "..n)
      x = 0
      for k, v in ipairs(ceilin) do
        if n == v then
          x = 1
          break
        end
      end
      if x == 1 then
        -- search for the node to replace
        --print(" Searching nodes to replace from "..dump(y0-1).." to "..dump(y_min))
        for y1=y0-1,y_min,-1 do
          p0.y=y1
          n = minetest.env:get_node(p0).name
          x = 0
          for k, v in ipairs(wherein) do
            if n == v then
              x = 1
              break
            end
          end
          if x == 1 then
            y0=y1-deep
            if y0 < y_min then
              y0 = y_min
            end
            break
          end
        end
        local rx=pr:next(radius/2,radius)+1
        local rz=pr:next(radius/2,radius)+1
        local ry=pr:next(radius_y/2,radius_y)+1
        --print(" area of generation ("..dump(rx)..","..dump(rz)..","..dump(ry)..")")
        for x1=0,rx do
          rz = rz + 3 - pr:next(1,6)
          if rz < 1 then
            rz = 1
          end
          for z1=pr:next(1,3),rz do
            local ry0=ry+ pr:next(1,3)
            for y1=pr:next(1,3),ry0 do
              local x2 = x0+x1
              local y2 = y0+y1
              local z2 = z0+z1
              local p2 = {x=x2, y=y2, z=z2}
              n = minetest.env:get_node(p2).name
              x = 0
              for k, v in ipairs(wherein) do
                if n == v then
                  x = 1
                  break
                end
              end
              if x == 1 then
                if ceil == nil then
                  minetest.env:set_node(p2, {name=name})
                  i = i +1
                else
                  local p3 = {p2.x,p2.y+1,p2}
                  if minetest.env:get_node(p3).name == ceil then
                     minetest.env:set_node(p2, {name=name})
                     i = i +1
                  end
                end
              end
            end
          end
        end
        print(" generated "..dump(i).." blocks in ("..dump(x0)..","..dump(y0)..","..dump(z0)..")")
      end
    end
  end
  --print("generate_ore done")
end