View difference between Paste ID: BwqbkeXg and S7ZvxfLU
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!")