zlovespancakes-minetest-mod.../gemstones/init.lua

158 lines
4.4 KiB
Lua

--------------------------------------------------------------------------------
-- Gemstones!
--------------------------------------------------------------------------------
-- This mod adds gems such as rubies, sapphires, emeralds, etc. Tools and
-- 'solid' blocks can be crafted from the gems.
--
-- (c)2012 Fernando Zapata (ZLovesPancakes, Franz.ZPT)
-- Code licensed under GNU GPLv2
-- http://www.gnu.org/licenses/gpl-2.0.html
-- Content licensed under CC BY-SA 3.0
-- http://creativecommons.org/licenses/by-sa/3.0/
--
-- 2011-12-04 13:26:40
--------------------------------------------------------------------------------
-- Name of the mod --
gemsmodn = 'gemstones'
-- List containing the names and quantity of the ores --
minerallist = {}
--local register_multitool = function( modname, basename, craftname, )
--end
---- Big, bad function to declare gems -----------------------------------------
register_gem = function( modname, gemtype, rarity, basetime, durability, toolrules )
-- Ores --
mineralname = modname .. ':mineral_'..gemtype
mineraltex = 'default_stone.png^'..modname..'_mineral_'..gemtype..'.png'
-- Gems/lumps --
gemname = modname..':gem_'..gemtype
gemtex = modname..'_gem_'..gemtype..'.png'
craftname = gemname
-- Solid block --
blockname = modname..':block_'..gemtype
blocktex = modname..'_block_'..gemtype..'.png'
table.insert( minerallist, { mineralname, rarity } )
minetest.register_craftitem( gemname, {
image = gemtex,
on_place_on_ground = minetest.craftitem_place_item,
} )
-- Mineral block --
minetest.register_node( mineralname, {
description = 'Stone with '..gemtype,
tile_images = { mineraltex },
is_ground_content = true,
material = minetest.digprop_stonelike(1.0),
groups = { cracky=3 },
drop = craftname..' 1',
} )
-- Solid block --
minetest.register_node( blockname, {
description = gemtype..' block',
--drawtype = 'glasslike',
tile_images = { blocktex },
--alpha = 200,
is_ground_content = true,
groups = { cracky=2 }
} )
-- Tools, inspired by 'add_tool' by MarkTraceur
--register_multitool( modname, gemtype, craftname, basetime, durability,
-- toolrules )
-- Crafting blocks --
minetest.register_craft( {
output = blockname .. ' 1',
recipe = {
{ craftname,craftname,craftname },
{ craftname,craftname,craftname },
{ craftname,craftname,craftname },
},
} )
minetest.register_craft( {
output = craftname .. ' 9',
recipe = {
{ blockname },
},
} )
end
---- Create gems on chunk generation -------------------------------------------
-- celeron55 said:
-- 'It is somewhat doable, but not very fancily. Off the top of my head
-- without any testing:'
-- + My fixes
local generate_gem = function( minp, maxp )
for c, oreinfo in ipairs( minerallist ) do
--print( oreinfo )
local amount = math.random( 0, oreinfo[2] )
for a = 0, amount do
local pos = {
x = math.random( minp.x, maxp.x ),
y = math.random( minp.y, maxp.y ),
z = math.random( minp.z, maxp.z ),
}
for i = -1, 1 do
for j = -1, 1 do
for k = -1, 1 do
if math.random() > 0.2 then
--continue
else
local p = {
x = pos.x + i,
y = pos.y + j,
z = pos.z + k
}
local n = minetest.env:get_node( p )
if n.name == 'default:stone' then
minetest.env:add_node( p, {
name = oreinfo[1] } )
end
end
end
end
end
end
end
end
minetest.register_on_generated( generate_gem )
---- Register new gemstones ----------------------------------------------------
---- Amethyst ----
-- Less durable but slightly faster than steel.
register_gem( gemsmodn, 'amethyst', 5, 0.9, 250, { sword_time = 1 } )
---- Cubic Zirconia ----
-- Almost wood slow, but almost mese-like durability
register_gem( gemsmodn, 'czirconia', 5, 1.6, 1000, { sword_time = 1 } )
---- Emerald ----
-- Just a bit less durable than steel
register_gem( gemsmodn, 'emerald', 5, 1.0, 300, { sword_time = 1 } )
---- Ruby ----
-- Faster, but much less durable than steel
register_gem( gemsmodn, 'ruby', 5, 0.7, 180, { sword_time = 1 } )
---- Sapphire ----
-- Slow, but more durable than steel
register_gem( gemsmodn, 'sapphire', 5, 1.2, 500, { sword_time = 1 } )
---- Was loaded? ---------------------------------------------------------------
-- Just to be sure, may remove if you like.
print( ' ++ loaded : Gemstones, by ZLovesPancakes' )