SHOW:
|
|
- or go back to the newest paste.
| 1 | --Gems by Vsevolod Borislav (wowiamdiamonds) | |
| 2 | -- | |
| 3 | --License: WTFPL | |
| 4 | -- | |
| 5 | --Depends: default, moreores | |
| 6 | -- | |
| 7 | --Adds gems and encrusted tools | |
| 8 | -- | |
| 9 | ||
| 10 | dofile(minetest.get_modpath("gems").."/config.lua")
| |
| 11 | ||
| 12 | minetest.register_node("gems:mineral_ruby", {
| |
| 13 | description = "Ruby Ore", | |
| 14 | tiles = {"default_stone.png^gems_mineral_ore.png"},
| |
| 15 | is_ground_content = true, | |
| 16 | groups = {cracky=3},
| |
| 17 | drop = 'gems:ruby', | |
| 18 | sounds = default.node_sound_stone_defaults(), | |
| 19 | }) | |
| 20 | minetest.register_node("gems:mineral_sapphire", {
| |
| 21 | description = "Sapphire Ore", | |
| 22 | tiles = {"default_stone.png^gems_mineral_sapphire.png"},
| |
| 23 | is_ground_content = true, | |
| 24 | groups = {cracky=3},
| |
| 25 | drop = 'gems:sapphire', | |
| 26 | sounds = default.node_sound_stone_defaults(), | |
| 27 | }) | |
| 28 | minetest.register_node("gems:mineral_emerald", {
| |
| 29 | description = "Emerald Ore", | |
| 30 | tiles = {"default_stone.png^gems_mineral_emerald.png"},
| |
| 31 | is_ground_content = true, | |
| 32 | groups = {cracky=3},
| |
| 33 | drop = 'gems:emerald', | |
| 34 | sounds = default.node_sound_stone_defaults(), | |
| 35 | }) | |
| 36 | minetest.register_node("gems:mineral_diamond", {
| |
| 37 | description = "Amethyst Ore", | |
| 38 | tiles = {"default_stone.png^gems_mineral_diamond.png"},
| |
| 39 | is_ground_content = true, | |
| 40 | groups = {cracky=3},
| |
| 41 | drop = 'gems:diamond', | |
| 42 | sounds = default.node_sound_stone_defaults(), | |
| 43 | }) | |
| 44 | minetest.register_node("gems:mineral_topaz", {
| |
| 45 | description = "Topaz Ore", | |
| 46 | tiles = {"default_stone.png^gems_mineral_topaz.png"},
| |
| 47 | is_ground_content = true, | |
| 48 | groups = {cracky=3},
| |
| 49 | drop = 'gems:topaz', | |
| 50 | sounds = default.node_sound_stone_defaults(), | |
| 51 | }) | |
| 52 | ||
| 53 | minetest.register_craftitem("gems:ruby", {
| |
| 54 | description = "Ruby", | |
| 55 | inventory_image = "gems_ruby.png", | |
| 56 | }) | |
| 57 | minetest.register_craftitem("gems:sapphire", {
| |
| 58 | description = "Sapphire", | |
| 59 | inventory_image = "gems_sapphire.png", | |
| 60 | }) | |
| 61 | minetest.register_craftitem("gems:emerald", {
| |
| 62 | description = "Emerald", | |
| 63 | inventory_image = "gems_emerald.png", | |
| 64 | }) | |
| 65 | minetest.register_craftitem("gems:amethyst", {
| |
| 66 | description = "Amethyst", | |
| 67 | inventory_image = "gems_amethyst.png", | |
| 68 | }) | |
| 69 | minetest.register_craftitem("gems:topaz", {
| |
| 70 | description = "Topaz", | |
| 71 | inventory_image = "gems_topaz.png", | |
| 72 | }) | |
| 73 | ||
| 74 | encrust_a_tool = function(result,crafttool,craftgem) | |
| 75 | minetest.register_craft( {
| |
| 76 | type = "shapeless", | |
| 77 | output = result, | |
| 78 | recipe = {
| |
| 79 | crafttool, | |
| 80 | craftgem, | |
| 81 | }, | |
| 82 | }) | |
| 83 | end | |
| 84 | ||
| 85 | mods = {}
| |
| 86 | metals = {}
| |
| 87 | metalname = {}
| |
| 88 | gems = {"ruby","sapphire","emerald","amethyst","topaz"}
| |
| 89 | gemname = {"Ruby","Sapphire","Emerald","Amethyst","Topaz"}
| |
| 90 | ||
| 91 | gembenefitspeed = {0.75,1.00,0.85,1.15,0.60}
| |
| 92 | gembenefitwear = {1.00,1.35,1.25,1.50,0.80}
| |
| 93 | ||
| 94 | if encrust_steel == true then | |
| 95 | table.insert(mods,"default") | |
| 96 | table.insert(metals,"steel") | |
| 97 | table.insert(metalname,"Steel") | |
| 98 | end | |
| 99 | ||
| 100 | if encrust_bronze == true then | |
| 101 | table.insert(mods,"moreores") | |
| 102 | table.insert(metals,"bronze") | |
| 103 | table.insert(metalname,"Bronze") | |
| 104 | end | |
| 105 | ||
| 106 | if encrust_silver == true then | |
| 107 | table.insert(mods,"moreores") | |
| 108 | table.insert(metals,"silver") | |
| 109 | table.insert(metalname,"Silver") | |
| 110 | end | |
| 111 | ||
| 112 | if encrust_gold == true then | |
| 113 | table.insert(mods,"moreores") | |
| 114 | table.insert(metals,"gold") | |
| 115 | table.insert(metalname,"Gold") | |
| 116 | end | |
| 117 | ||
| 118 | if encrust_mithril == true then | |
| 119 | table.insert(mods,"moreores") | |
| 120 | table.insert(metals,"mithril") | |
| 121 | table.insert(metalname,"Mithril") | |
| 122 | end | |
| 123 | ||
| 124 | if encrust_alatro == true then | |
| 125 | table.insert(mods,"gloopores") | |
| 126 | table.insert(metals,"alatro") | |
| 127 | table.insert(metalname,"Alatro") | |
| 128 | end | |
| 129 | ||
| 130 | - | pickdef = minetest.registered_tools[modis..":pick_"..metals[j]] |
| 130 | + | |
| 131 | - | axedef = minetest.registered_tools[modis..":axe_"..metals[j]] |
| 131 | + | |
| 132 | - | shoveldef = minetest.registered_tools[modis..":shovel_"..metals[j]] |
| 132 | + | |
| 133 | - | sworddef = minetest.registered_tools[modis..":sword_"..metals[j]] |
| 133 | + | |
| 134 | end | |
| 135 | ||
| 136 | for j,k in ipairs(metals) do | |
| 137 | modis = mods[j] | |
| 138 | metalis = metals[j] | |
| 139 | pickdef = minetest.registered_tools[modis..":pick_"..metalis] | |
| 140 | axedef = minetest.registered_tools[modis..":axe_"..metalis] | |
| 141 | shoveldef = minetest.registered_tools[modis..":shovel_"..metalis] | |
| 142 | sworddef = minetest.registered_tools[modis..":sword_"..metalis] | |
| 143 | pickdig = pickdef.tool_capabilities.groupcaps.cracky | |
| 144 | axedigc = axedef.tool_capabilities.groupcaps.choppy | |
| 145 | axedigf = axedef.tool_capabilities.groupcaps.fleshy | |
| 146 | shoveldig = shoveldef.tool_capabilities.groupcaps.crumbly | |
| 147 | sworddigf = sworddef.tool_capabilities.groupcaps.fleshy | |
| 148 | sworddigs = sworddef.tool_capabilities.groupcaps.snappy | |
| 149 | sworddigc = sworddef.tool_capabilities.groupcaps.choppy | |
| 150 | for i,l in gems do | |
| 151 | npickdig = {}
| |
| 152 | naxedigc = {}
| |
| 153 | naxedigf = {}
| |
| 154 | nshoveldig = {}
| |
| 155 | nsworddigf = {}
| |
| 156 | nsworddigs = {}
| |
| 157 | nsworddigc = {}
| |
| 158 | ||
| 159 | npickdig.times[1] = pickdig.times[1]*gembenefitspeed[i] | |
| 160 | npickdig.times[2] = pickdig.times[2]*gembenefitspeed[i] | |
| 161 | npickdig.times[3] = pickdig.times[3]*gembenefitspeed[i] | |
| 162 | npickdig.uses = pickdig.uses*gembenefitwear[i] | |
| 163 | npickdig.level = pickdig.level | |
| 164 | ||
| 165 | naxedigc.times[1] = axedigc.times[1]*gembenefitspeed[i] | |
| 166 | naxedigc.times[2] = axedigc.times[2]*gembenefitspeed[i] | |
| 167 | naxedigc.times[3] = axedigc.times[3]*gembenefitspeed[i] | |
| 168 | naxedigc.uses = axedigc.uses*gembenefitwear[i] | |
| 169 | naxedigc.level = axedigc.level | |
| 170 | ||
| 171 | naxedigf.times[1] = axedigf.times[1]*gembenefitspeed[i] | |
| 172 | naxedigf.times[2] = axedigf.times[2]*gembenefitspeed[i] | |
| 173 | naxedigf.times[3] = axedigf.times[3]*gembenefitspeed[i] | |
| 174 | naxedigf.uses = axedigf.uses*gembenefitwear[i] | |
| 175 | naxedigf.level = axedigf.level | |
| 176 | ||
| 177 | nshoveldig.times[1] = shoveldig.times[1]*gembenefitspeed[i] | |
| 178 | nshoveldig.times[2] = shoveldig.times[2]*gembenefitspeed[i] | |
| 179 | nshoveldig.times[3] = shoveldig.times[3]*gembenefitspeed[i] | |
| 180 | nshoveldig.uses = shoveldig.uses*gembenefitwear[i] | |
| 181 | nshoveldig.level = shoveldig.level | |
| 182 | ||
| 183 | nsworddigf.times[1] = sworddigf.times[1]*gembenefitspeed[i] | |
| 184 | nsworddigf.times[2] = sworddigf.times[2]*gembenefitspeed[i] | |
| 185 | nsworddigf.times[3] = sworddigf.times[3]*gembenefitspeed[i] | |
| 186 | nsworddigf.uses = sworddigf.uses*gembenefitwear[i] | |
| 187 | nsworddigf.level = sworddigf.level | |
| 188 | ||
| 189 | nsworddigs.times[1] = sworddigs.times[1]*gembenefitspeed[i] | |
| 190 | nsworddigs.times[2] = sworddigs.times[2]*gembenefitspeed[i] | |
| 191 | nsworddigs.times[3] = sworddigs.times[3]*gembenefitspeed[i] | |
| 192 | nsworddigs.uses = sworddigs.uses*gembenefitwear[i] | |
| 193 | nsworddigs.level = sworddigs.level | |
| 194 | ||
| 195 | nsworddigc.times[1] = sworddigc.times[1]*gembenefitspeed[i] | |
| 196 | nsworddigc.times[2] = sworddigc.times[2]*gembenefitspeed[i] | |
| 197 | nsworddigc.times[3] = sworddigc.times[3]*gembenefitspeed[i] | |
| 198 | nsworddigc.uses = sworddigc.uses*gembenefitwear[i] | |
| 199 | nsworddigc.level = sworddigc.level | |
| 200 | ||
| 201 | minetest.register_tool("gems:pick_"..k.."_"..l, {
| |
| 202 | description = gemname[i].."Encrusted "..metalname[j].." Pickaxe", | |
| 203 | inventory_image = mods[j].."_tool_"..metals[j].."pick.png^gems_pick_"..gems[i], | |
| 204 | tool_capabilities = {
| |
| 205 | max_drop_level = pickdef.tool_capabilities.max_drop_level, | |
| 206 | groupcaps = {
| |
| 207 | npickdig, | |
| 208 | } | |
| 209 | } | |
| 210 | }) | |
| 211 | minetest.register_tool("gems:axe_"..k.."_"..i, {
| |
| 212 | description = gemname[i].."Encrusted "..metalname[j].." Axe", | |
| 213 | inventory_image = mods[j].."_tool_"..metals[j].."axe.png^gems_axe_"..gems[i], | |
| 214 | tool_capabilities = {
| |
| 215 | max_drop_level = axedef.tool_capabilities.max_drop_level, | |
| 216 | groupcaps = {
| |
| 217 | naxedigc, | |
| 218 | naxedigf, | |
| 219 | } | |
| 220 | } | |
| 221 | }) | |
| 222 | minetest.register_tool("gems:shovel_"..k.."_"..l, {
| |
| 223 | description = gemname[i].."Encrusted "..metalname[j].." Shovel", | |
| 224 | inventory_image = mods[j].."_tool_"..metals[j].."shovel.png^gems_shovel_"..gems[i], | |
| 225 | tool_capabilities = {
| |
| 226 | max_drop_level = shoveldef.tool_capabilities.max_drop_level, | |
| 227 | groupcaps = {
| |
| 228 | nshoveldig, | |
| 229 | } | |
| 230 | } | |
| 231 | }) | |
| 232 | minetest.register_tool("gems:sword_"..k.."_"..l, {
| |
| 233 | description = gemname[i].."Encrusted "..metalname[j].." Sword", | |
| 234 | inventory_image = mods[j].."_tool_"..metals[j].."sword.png^gems_sword_"..gems[i], | |
| 235 | tool_capabilities = {
| |
| 236 | max_drop_level = sworddef.tool_capabilities.max_drop_level, | |
| 237 | groupcaps = {
| |
| 238 | nsworddigf, | |
| 239 | nsworddigs, | |
| 240 | nsworddigc, | |
| 241 | } | |
| 242 | } | |
| 243 | }) | |
| 244 | minetest.register_craft({
| |
| 245 | type = "shapeless", | |
| 246 | output = "gems:pick_"..k.."_"..l, | |
| 247 | recipe = {
| |
| 248 | "gems:"..i, | |
| 249 | mods[j]..":pick_"..k, | |
| 250 | } | |
| 251 | }) | |
| 252 | minetest.register_craft({
| |
| 253 | type = "shapeless", | |
| 254 | output = "gems:axe_"..k.."_"..l, | |
| 255 | recipe = {
| |
| 256 | "gems:"..i, | |
| 257 | mods[j]..":axe_"..k, | |
| 258 | } | |
| 259 | }) | |
| 260 | minetest.register_craft({
| |
| 261 | type = "shapeless", | |
| 262 | output = "gems:shovel_"..k.."_"..l, | |
| 263 | recipe = {
| |
| 264 | "gems:"..i, | |
| 265 | mods[j]..":shovel_"..k, | |
| 266 | } | |
| 267 | }) | |
| 268 | minetest.register_craft({
| |
| 269 | type = "shapeless", | |
| 270 | output = "gems:sword_"..k.."_"..l, | |
| 271 | recipe = {
| |
| 272 | "gems:"..i, | |
| 273 | mods[j]..":sword_"..k, | |
| 274 | } | |
| 275 | }) | |
| 276 | end | |
| 277 | end | |
| 278 | ||
| 279 | local function generate_ore(name, wherein, minp, maxp, seed, chunks_per_volume, ore_per_chunk, height_min, height_max) | |
| 280 | if maxp.y < height_min or minp.y > height_max then | |
| 281 | return | |
| 282 | end | |
| 283 | local y_min = math.max(minp.y, height_min) | |
| 284 | local y_max = math.min(maxp.y, height_max) | |
| 285 | local volume = (maxp.x-minp.x+1)*(y_max-y_min+1)*(maxp.z-minp.z+1) | |
| 286 | local pr = PseudoRandom(seed) | |
| 287 | local num_chunks = math.floor(chunks_per_volume * volume) | |
| 288 | local chunk_size = 3 | |
| 289 | if ore_per_chunk <= 4 then | |
| 290 | chunk_size = 2 | |
| 291 | end | |
| 292 | local inverse_chance = math.floor(chunk_size*chunk_size*chunk_size / ore_per_chunk) | |
| 293 | --print("generate_ore num_chunks: "..dump(num_chunks))
| |
| 294 | for i=1,num_chunks do | |
| 295 | if (y_max-chunk_size+1 <= y_min) then return end | |
| 296 | local y0 = pr:next(y_min, y_max-chunk_size+1) | |
| 297 | if y0 >= height_min and y0 <= height_max then | |
| 298 | local x0 = pr:next(minp.x, maxp.x-chunk_size+1) | |
| 299 | local z0 = pr:next(minp.z, maxp.z-chunk_size+1) | |
| 300 | local p0 = {x=x0, y=y0, z=z0}
| |
| 301 | for x1=0,chunk_size-1 do | |
| 302 | for y1=0,chunk_size-1 do | |
| 303 | for z1=0,chunk_size-1 do | |
| 304 | if pr:next(1,inverse_chance) == 1 then | |
| 305 | local x2 = x0+x1 | |
| 306 | local y2 = y0+y1 | |
| 307 | local z2 = z0+z1 | |
| 308 | local p2 = {x=x2, y=y2, z=z2}
| |
| 309 | if minetest.env:get_node(p2).name == wherein then | |
| 310 | minetest.env:set_node(p2, {name=name})
| |
| 311 | end | |
| 312 | end | |
| 313 | end | |
| 314 | end | |
| 315 | end | |
| 316 | end | |
| 317 | end | |
| 318 | --print("generate_ore done")
| |
| 319 | end | |
| 320 | ||
| 321 | minetest.register_on_generated(function(minp, maxp, seed) | |
| 322 | math.randomseed(os.time()) | |
| 323 | local current_seed = seed + math.random(10,100) | |
| 324 | local function get_next_seed() | |
| 325 | current_seed = current_seed + 1 | |
| 326 | return current_seed | |
| 327 | end | |
| 328 | generate_ore("gems:mineral_ruby", "default:stone", minp, maxp, get_next_seed(), 1/7/7/7, 1, -31000, -50)
| |
| 329 | generate_ore("gems:mineral_sapphire", "default:stone", minp, maxp, get_next_seed(), 1/7/7/7, 1, -31000, -100)
| |
| 330 | generate_ore("gems:mineral_emerald", "default:stone", minp, maxp, get_next_seed(), 1/7/7/7, 1, -31000, -150)
| |
| 331 | generate_ore("gems:mineral_amethyst", "default:stone", minp, maxp, get_next_seed(), 1/7/7/7, 1, -31000, -200)
| |
| 332 | generate_ore("gems:mineral_topaz", "default:stone", minp, maxp, get_next_seed(), 1/7/7/7, 1, -31000, -250)
| |
| 333 | end) | |
| 334 | ||
| 335 | minetest.register_alias("gems:mineral_garnet","default:stone")
| |
| 336 | minetest.register_alias("gems:mineral_aquamarine","default:stone")
| |
| 337 | minetest.register_alias("gems:mineral_diamond","default:stone")
| |
| 338 | minetest.register_alias("gems:mineral_opal","default:stone")
| |
| 339 | ||
| 340 | print("[Gems] Loaded!") |