birthstones-mod/init.lua

399 lines
14 KiB
Lua

minetest.register_node( "birthstones:diamondore", {
description = "Diamond Ore",
tile_images = { "default_stone.png^Diamond_overlay.png" },
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
drop = 'craft "birthstones:diamond" 1',
})
minetest.register_node( "birthstones:alexandriteore", {
description = "Alexandrite Ore",
tile_images = { "default_stone.png^Alexandrite_overlay.png" },
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
drop = 'craft "birthstones:alexandrite" 1',
})
minetest.register_node( "birthstones:amethystore", {
description = "Amethyst Ore",
tile_images = { "default_stone.png^Amethyst_overlay.png" },
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
drop = 'craft "birthstones:amethyst" 1',
})
minetest.register_node( "birthstones:aquamarineore", {
description = "Aquamarine Ore",
tile_images = { "default_stone.png^Aquamarine_overlay.png" },
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
drop = 'craft "birthstones:aquamarine" 1',
})
minetest.register_node( "birthstones:emeraldore", {
description = "Emerald Ore",
tile_images = { "default_stone.png^Emerald_overlay.png" },
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
drop = 'craft "birthstones:emerald" 1',
})
minetest.register_node( "birthstones:garnetore", {
description = "Garnet Ore",
tile_images = { "default_stone.png^Garnet_overlay.png" },
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
drop = 'craft "birthstones:garnet" 1',
})
minetest.register_node( "birthstones:opalore", {
description = "Opal Ore",
tile_images = { "default_stone.png^Opal_overlay.png" },
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
drop = 'craft "birthstones:opal" 1',
})
minetest.register_node( "birthstones:peridotore", {
description = "Peridot Ore",
tile_images = { "default_stone.png^Peridot_overlay.png" },
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
drop = 'craft "birthstones:peridot" 1',
})
minetest.register_node( "birthstones:rubyore", {
description = "Ruby Ore",
tile_images = { "default_stone.png^Ruby_overlay.png" },
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
drop = 'craft "birthstones:ruby" 1',
})
minetest.register_node( "birthstones:sapphireore", {
description = "Sapphire Ore",
tile_images = { "default_stone.png^Sapphire_overlay.png" },
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
drop = 'craft "birthstones:sapphire" 1',
})
minetest.register_node( "birthstones:topazore", {
description = "Topaz Ore",
tile_images = { "default_stone.png^Topaz_overlay.png" },
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
drop = 'craft "birthstones:topazore" 1',
})
minetest.register_node( "birthstones:topazore", {
description = "Topaz Ore",
tile_images = { "default_stone.png^Topaz_overlay.png" },
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
drop = 'craft "birthstones:topaz" 1',
})
minetest.register_node( "birthstones:zirconore", {
description = "Zircon Ore",
tile_images = { "default_stone.png^Zircon_overlay.png" },
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
drop = 'craft "birthstones:zircon" 1',
})
minetest.register_craftitem( "birthstones:alexandrite", {
description = "Alexandrite (January)",
inventory_image = "Alexandrite.png",
on_place_on_ground = minetest.craftitem_place_item,
})
minetest.register_craftitem( "birthstones:amethyst", {
description = "Amethyst (February)",
inventory_image = "Amethyst.png",
on_place_on_ground = minetest.craftitem_place_item,
})
minetest.register_craftitem( "birthstones:aquamarine", {
description = "Aquamarine (March)",
inventory_image = "Aquamarine.png",
on_place_on_ground = minetest.craftitem_place_item,
})
minetest.register_craftitem( "birthstones:diamond", {
description = "Diamond (April)",
inventory_image = "Diamond.png",
on_place_on_ground = minetest.craftitem_place_item,
})
minetest.register_craftitem( "birthstones:emerald", {
description = "Emerald (May)",
inventory_image = "Emerald.png",
on_place_on_ground = minetest.craftitem_place_item,
})
minetest.register_craftitem( "birthstones:garnet", {
description = "Garnet (June)",
inventory_image = "Garnet.png",
on_place_on_ground = minetest.craftitem_place_item,
})
minetest.register_craftitem( "birthstones:opal", {
description = "Opal (July)",
inventory_image = "Opal.png",
on_place_on_ground = minetest.craftitem_place_item,
})
minetest.register_craftitem( "birthstones:peridot", {
description = "Peridot (August)",
inventory_image = "Peridot.png",
on_place_on_ground = minetest.craftitem_place_item,
})
minetest.register_craftitem( "birthstones:ruby", {
description = "Ruby (September)",
inventory_image = "Ruby.png",
on_place_on_ground = minetest.craftitem_place_item,
})
minetest.register_craftitem( "birthstones:sapphire", {
description = "Sapphire (October)",
inventory_image = "Sapphire.png",
on_place_on_ground = minetest.craftitem_place_item,
})
minetest.register_craftitem( "birthstones:topaz", {
description = "Topaz (November)",
inventory_image = "Topaz.png",
on_place_on_ground = minetest.craftitem_place_item,
})
minetest.register_craftitem( "birthstones:zircon", {
description = "Zircon (December)",
inventory_image = "Zircon.png",
on_place_on_ground = minetest.craftitem_place_item,
})
minetest.register_node( "birthstones:alexandriteblock", {
description = "Alexandrite Block",
tile_images = { "Alexandrite_block.png" },
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node( "birthstones:amethystblock", {
description = "Amethyst Block",
tile_images = { "Amethyst_block.png" },
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node( "birthstones:aquamarineblock", {
description = "Aquamarine Block",
tile_images = { "Aquamarine_block.png" },
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node( "birthstones:diamondblock", {
description = "Diamond Block",
tile_images = { "Diamond_block.png" },
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node( "birthstones:emeraldblock", {
description = "Emerald Block",
tile_images = { "Emerald_block.png" },
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node( "birthstones:garnetblock", {
description = "Garnet Block",
tile_images = { "Garnet_block.png" },
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node( "birthstones:opalblock", {
description = "Opal Block",
tile_images = { "Opal_block.png" },
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node( "birthstones:peridotblock", {
description = "Peridot Block",
tile_images = { "Peridot_block.png" },
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node( "birthstones:rubyblock", {
description = "Ruby Block",
tile_images = { "Ruby_block.png" },
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node( "birthstones:sapphireblock", {
description = "Sapphire Block",
tile_images = { "Sapphire_block.png" },
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node( "birthstones:topazblock", {
description = "Topaz Block",
tile_images = { "Topaz_block.png" },
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node( "birthstones:zirconblock", {
description = "Zircon Block",
tile_images = { "Zircon_block.png" },
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
})
local function registerpickrecipe(name, durability, time1, time2, time3, maxlev)
minetest.register_tool("birthstones:".. name .. "_pick", {
description = name .. " Pickaxe",
inventory_image = name .. "_pick.png",
tool_capabilities = {
max_drop_level=0,
groupcaps={
cracky={times={[1]=time1, [2]=time2, [3]=time3}, uses=durability, maxlevel=maxlev}
}
},
})
minetest.register_tool("birthstones:"..name.."_axe", {
description = name.." Axe",
inventory_image = name.."_axe.png",
tool_capabilities = {
max_drop_level=1,
groupcaps={
choppy={times={[1]=time1-2.0, [2]=2.0-time2, [3]=2.0-time3}, uses=30, maxlevel=maxlev},
fleshy={times={[2]=time2, [3]=time3}, uses=40, maxlevel=maxlev}
}
},
})
minetest.register_craft({
output = "birthstones:"..name.."_pick",
recipe = {{'birthstones:'..name, 'birthstones:'..name, 'birthstones:'..name}, {'', 'default:stick', ''}, {'', 'default:stick', ''}}
})
minetest.register_craft({
output = "birthstones:"..name.."_axe",
recipe = {{'birthstones:'..name, 'birthstones:'..name}, {'birthstones:'..name, 'default:stick'}, {'', 'default:stick'}}
})
end
registerpickrecipe("zircon", 50, 4.1, 1.6, 1.05, 1)
registerpickrecipe("topaz", 38, 4.1, 1.6, 1.05, 1)
registerpickrecipe("sapphire", 40, 4.2, 1.6, 1.2, 1)
registerpickrecipe("ruby", 40, 4.2, 1.6, 1.2, 2)
registerpickrecipe("peridot", 34, 4.0, 1.5, 1.0, 1)
registerpickrecipe("opal", 32, 3.5, 1.6, 1.5, 2)
registerpickrecipe("garnet", 35, 4.0, 1.5, 1.0, 1)
registerpickrecipe("emerald", 40, 4.2, 1.6, 1.2, 2)
registerpickrecipe("diamond", 50, 4.5, 1.8, 1.3, 3)
registerpickrecipe("aquamarine", 25, 3.2, 1.40, 0.90, 1)
registerpickrecipe("amethyst", 30, 3.2, 1.40, 0.90, 1)
registerpickrecipe("alexandrite", 30, 3.2, 1.40, 0.90, 1)
local function registerblockrecipe(name, blockname)
minetest.register_craft({
output = blockname,
recipe = {{name, name, name},
{name, name, name},
{name, name, name}
}
})
end
registerblockrecipe('birthstones:alexandrite', 'birthstones:alexandriteblock')
registerblockrecipe('birthstones:amethyst', 'birthstones:amethystblock')
registerblockrecipe('birthstones:aquamarine', 'birthstones:aquamarineblock')
registerblockrecipe('birthstones:diamond', 'birthstones:diamondblock')
registerblockrecipe('birthstones:emerald', 'birthstones:emeraldblock')
registerblockrecipe('birthstones:garnet', 'birthstones:garnetblock')
registerblockrecipe('birthstones:opal', 'birthstones:opalblock')
registerblockrecipe('birthstones:peridot', 'birthstones:peridotblock')
registerblockrecipe('birthstones:ruby', 'birthstones:rubyblock')
registerblockrecipe('birthstones:sapphire', 'birthstones:sapphireblock')
registerblockrecipe('birthstones:topaz', 'birthstones:topazblock')
registerblockrecipe('birthstones:zircon', 'birthstones:zirconblock')
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
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
end
minetest.register_on_generated(function(minp, maxp, seed)
generate_ore("birthstones:alexandriteore", "default:stone", minp, maxp, seed+21, 1/10/10/10, 4, -31000, -40)
end)
minetest.register_on_generated(function(minp, maxp, seed)
generate_ore("birthstones:amethystore", "default:stone", minp, maxp, seed+21, 1/10/10/10, 4, -31000, -50)
end)
minetest.register_on_generated(function(minp, maxp, seed)
generate_ore("birthstones:aquamarineore", "default:stone", minp, maxp, seed+21, 1/10/10/10, 4, -31000, -10)
end)
minetest.register_on_generated(function(minp, maxp, seed)
generate_ore("birthstones:diamondore", "default:stone", minp, maxp, seed+21, 1/10/10/10, 1, -31000, -300)
end)
minetest.register_on_generated(function(minp, maxp, seed)
generate_ore("birthstones:emeraldore", "default:stone", minp, maxp, seed+21, 1/10/10/10, 3, -31000, -100)
end)
minetest.register_on_generated(function(minp, maxp, seed)
generate_ore("birthstones:garnetore", "default:stone", minp, maxp, seed+21, 1/10/10/10, 4, -31000, -70)
end)
minetest.register_on_generated(function(minp, maxp, seed)
generate_ore("birthstones:peridotore", "default:stone", minp, maxp, seed+21, 1/10/10/10, 4, -31000, -60)
end)
minetest.register_on_generated(function(minp, maxp, seed)
generate_ore("birthstones:rubyore", "default:stone", minp, maxp, seed+21, 1/10/10/10, 3, -31000, -120)
end)
minetest.register_on_generated(function(minp, maxp, seed)
generate_ore("birthstones:sapphireore", "default:stone", minp, maxp, seed+21, 1/10/10/10, 3, -31000, -120)
end)
minetest.register_on_generated(function(minp, maxp, seed)
generate_ore("birthstones:topazore", "default:stone", minp, maxp, seed+21, 1/10/10/10, 4, -31000, -80)
end)
minetest.register_on_generated(function(minp, maxp, seed)
generate_ore("birthstones:zirconore", "default:stone", minp, maxp, seed+21, 1/10/10/10, 4, -31000, -70)
end)