1 local minetest,pairs = minetest,pairs
2 --ore def with required tool
3 local tool = {"main:woodpick","main:coalpick","main:stonepick","main:ironpick","main:lapispick","main:goldpick","main:diamondpick","main:emeraldpick","main:sapphirepick","main:rubypick"}
5 ["coal"]={"main:woodpick","main:coalpick","main:stonepick","main:ironpick","main:lapispick","main:goldpick","main:diamondpick","main:emeraldpick","main:sapphirepick","main:rubypick"},
6 ["iron"]={"main:coalpick","main:stonepick","main:ironpick","main:lapispick","main:goldpick","main:diamondpick","main:emeraldpick","main:sapphirepick","main:rubypick"},
7 ["lapis"]={"main:ironpick","main:lapispick","main:goldpick","main:diamondpick","main:emeraldpick","main:sapphirepick","main:rubypick"},
8 ["gold"]={"main:ironpick","main:lapispick","main:goldpick","main:diamondpick","main:emeraldpick","main:sapphirepick","main:rubypick"},
9 ["diamond"]={"main:ironpick","main:lapispick","main:diamondpick","main:emeraldpick","main:sapphirepick","main:rubypick"},
10 ["emerald"]={"main:diamondpick","main:emeraldpick","main:sapphirepick","main:rubypick"},
11 ["sapphire"]={"main:diamondpick","main:emeraldpick","main:sapphirepick","main:rubypick"},
12 ["ruby"]={"main:diamondpick","main:emeraldpick","main:sapphirepick","main:rubypick"},
16 ["coal"]={"main:coal"},
17 ["iron"]={"main:ironore"},
18 ["lapis"]={"main:lapis"},
19 ["gold"]={"main:goldore"},
20 ["diamond"]={"main:diamond"},
21 ["emerald"]={"main:emerald"},
22 ["sapphire"]={"main:sapphire"},
23 ["ruby"]={"main:ruby"},
40 for ore,tool_required in pairs(ores) do
43 if ore == "iron" or ore == "gold" then
49 minetest.register_node("main:"..ore.."block", {
50 description = ore:gsub("^%l", string.upper).." Block",
51 tiles = {ore.."block.png"},
52 groups = {stone = level, pathable = 1},
53 sounds = main.stoneSound(),
54 --light_source = 14,--debugging ore spawn
60 tools = tool_required,
61 items = {"main:"..ore.."ore"},
67 minetest.register_node("main:"..ore.."ore", {
68 description = ore:gsub("^%l", string.upper).." Ore",
69 tiles = {"stone.png^"..ore.."ore.png"},
70 groups = {stone = level, pathable = 1,experience=experience},
71 sounds = main.stoneSound(),
72 --light_source = 14,--debugging ore spawn
78 tools = tool_required,
86 minetest.register_node("main:stone", {
87 description = "Stone",
88 tiles = {"stone.png"},
89 groups = {stone = 1, hand = 1,pathable = 1},
90 sounds = main.stoneSound(),
97 items = {"main:cobble"},
103 minetest.register_node("main:cobble", {
104 description = "Cobblestone",
105 tiles = {"cobble.png"},
106 groups = {stone = 1, pathable = 1},
107 sounds = main.stoneSound(),
114 items = {"main:cobble"},
120 minetest.register_node("main:mossy_cobble", {
121 description = "Mossy Cobblestone",
122 tiles = {"mossy_cobble.png"},
123 groups = {stone = 1, pathable = 1},
124 sounds = main.stoneSound(),
131 items = {"main:mossy_cobble"},
137 minetest.register_node("main:glass", {
138 description = "Glass",
139 tiles = {"glass.png"},
140 drawtype = "glasslike",
142 sunlight_propagates = true,
143 is_ground_content = false,
144 groups = {glass = 1, pathable = 1},
145 sounds = main.stoneSound({
146 footstep = {name = "glass_footstep", gain = 0.4},
147 dug = {name = "break_glass", gain = 0.4},
152 minetest.register_node("main:ice", {
155 drawtype = "glasslike",
157 sunlight_propagates = true,
158 sunlight_propagates = true,
159 is_ground_content = false,
160 groups = {glass = 1, pathable = 1,slippery=3},
161 sounds = main.stoneSound({
162 footstep = {name = "glass_footstep", gain = 0.4},
163 dug = {name = "break_glass", gain = 0.4},
165 use_texture_alpha = false,
168 after_destruct = function(pos, oldnode)
169 minetest.set_node(pos, {name="main:water"})
172 minetest.register_node("main:ice_mapgen", {
176 sunlight_propagates = true,
177 sunlight_propagates = true,
178 is_ground_content = false,
179 groups = {glass = 1, pathable = 1,slippery=3},
180 sounds = main.stoneSound({
181 footstep = {name = "glass_footstep", gain = 0.4},
182 dug = {name = "break_glass", gain = 0.4},
184 use_texture_alpha = false,
188 minetest.register_node("main:dirt", {
189 description = "Dirt",
190 tiles = {"dirt.png"},
191 groups = {dirt = 1, soil=1,pathable = 1, farm_tillable=1},
192 sounds = main.dirtSound(),
196 minetest.register_node("main:grass", {
197 description = "Grass",
198 tiles = {"grass.png"},
199 groups = {grass = 1, soil=1,pathable = 1, farm_tillable=1},
200 sounds = main.dirtSound(),
204 minetest.register_node("main:sand", {
205 description = "Sand",
206 tiles = {"sand.png"},
207 groups = {sand = 1, falling_node = 1,pathable = 1,soil=1},
208 sounds = main.sandSound(),
211 minetest.register_node("main:gravel", {
212 description = "Gravel",
213 tiles = {"gravel.png"},
214 groups = {sand = 1, falling_node = 1,pathable = 1},
215 sounds = main.dirtSound(),
220 -- Only drop if using a tool whose name is identical to one
223 items = {"main:flint"},
224 -- Whether all items in the dropped item list inherit the
225 -- hardware coloring palette color from the dug node.
226 -- Default is 'false'.
227 --inherit_color = true,
230 -- Only drop if using a tool whose name is identical to one
232 --tools = {"main:shears"},
234 items = {"main:gravel"},
235 -- Whether all items in the dropped item list inherit the
236 -- hardware coloring palette color from the dug node.
237 -- Default is 'false'.
238 --inherit_color = true,
243 minetest.register_node("main:tree", {
244 description = "Tree",
245 tiles = {"treeCore.png","treeCore.png","treeOut.png","treeOut.png","treeOut.png","treeOut.png"},
246 groups = {wood = 1, tree = 1, pathable = 1, flammable=1},
247 sounds = main.woodSound(),
248 --set metadata so treecapitator doesn't destroy houses
249 on_place = function(itemstack, placer, pointed_thing)
250 if not pointed_thing.type == "node" then
254 local sneak = placer:get_player_control().sneak
255 local noddef = minetest.registered_nodes[minetest.get_node(pointed_thing.under).name]
256 if not sneak and noddef.on_rightclick then
257 minetest.item_place(itemstack, placer, pointed_thing)
261 local pos = pointed_thing.above
262 minetest.item_place_node(itemstack, placer, pointed_thing)
263 local meta = minetest.get_meta(pos)
264 meta:set_string("placed", "true")
267 --treecapitator - move treecapitator into own file using override
268 on_dig = function(pos, node, digger)
269 --bvav_create_vessel(pos,minetest.facedir_to_dir(minetest.dir_to_facedir(minetest.yaw_to_dir(digger:get_look_horizontal()+(math.pi/2)))))
270 --check if wielding axe?
271 --turn treecapitator into an enchantment?
272 local meta = minetest.get_meta(pos)
273 --local tool_meta = digger:get_wielded_item():get_meta()
274 --if tool_meta:get_int("treecapitator") > 0 then
275 if not meta:contains("placed") and string.match(digger:get_wielded_item():get_name(), "axe") then
276 local tool_capabilities = digger:get_wielded_item():get_tool_capabilities()
278 local wear = minetest.get_dig_params({wood=1}, tool_capabilities).wear
280 local wield_stack = digger:get_wielded_item()
284 local name = minetest.get_node(vector.new(pos.x,pos.y+y,pos.z)).name
286 if name == "main:tree" or name == "redstone:node_activated_tree" then
287 wield_stack:add_wear(wear)
288 minetest.node_dig(vector.new(pos.x,pos.y+y,pos.z), node, digger)
289 minetest.add_particlespawner({
292 minpos = {x=pos.x-0.5, y=pos.y-0.5+y, z=pos.z-0.5},
293 maxpos = {x=pos.x+0.5, y=pos.y+0.5+y, z=pos.z+0.5},
294 minvel = vector.new(-1,0,-1),
295 maxvel = vector.new(1,0,1),
296 minacc = {x=0, y=-9.81, z=0},
297 maxacc = {x=0, y=-9.81, z=0},
302 collisiondetection = true,
307 local name2 = minetest.get_node(vector.new(pos.x,pos.y+y-1,pos.z)).name
308 if name2 == "main:dirt" or name2 == "main:grass" then
309 minetest.add_node(vector.new(pos.x,pos.y+y,pos.z),{name="main:sapling"})
313 digger:set_wielded_item(wield_stack)
315 minetest.node_dig(pos, node, digger)
321 minetest.register_node("main:wood", {
322 description = "Wood",
323 tiles = {"wood.png"},
324 groups = {wood = 1, pathable = 1,flammable=1},
325 sounds = main.woodSound(),
328 minetest.register_node("main:leaves", {
329 description = "Leaves",
330 drawtype = "allfaces_optional",
335 is_ground_content = false,
336 tiles = {"leaves.png"},
337 groups = {leaves = 1, leafdecay = 1,flammable=1},
338 sounds = main.grassSound(),
343 tools = {"main:shears"},
344 items = {"main:dropped_leaves"},
348 items = {"main:apple"},
352 items = {"main:sapling"},
359 minetest.register_node("main:dropped_leaves", {
360 description = "Leaves",
361 drawtype = "allfaces_optional",
366 is_ground_content = false,
367 tiles = {"leaves.png"},
368 groups = {leaves = 1, flammable=1},
369 sounds = main.grassSound(),
374 tools = {"main:shears"},
375 items = {"main:dropped_leaves"},
386 minetest.register_node("main:water", {
387 description = "Water Source",
392 name = "water_source.png",
393 backface_culling = false,
395 type = "vertical_frames",
402 name = "water_source.png",
403 backface_culling = true,
405 type = "vertical_frames",
418 is_ground_content = false,
420 liquidtype = "source",
421 liquid_alternative_flowing = "main:waterflow",
422 liquid_alternative_source = "main:water",
423 liquid_viscosity = 1,
424 post_effect_color = {a = 103, r = 30, g = 60, b = 90},
425 groups = {water = 1, liquid = 1, cools_lava = 1, bucket = 1, source = 1,pathable = 1,drowning=1,disable_fall_damage=1,extinguish=1},
426 --sounds = default.node_sound_water_defaults(),
428 --water explodes in the nether
429 on_construct = function(pos)
430 local under = minetest.get_node(vector.new(pos.x,pos.y-1,pos.z)).name
431 if under == "nether:glowstone" then
432 minetest.remove_node(pos)
433 create_aether_portal(pos)
434 elseif pos.y <= -10033 then
435 minetest.remove_node(pos)
441 minetest.register_node("main:waterflow", {
442 description = "Water Flow",
443 drawtype = "flowingliquid",
445 tiles = {"water_static.png"},
448 name = "water_flow.png",
449 backface_culling = false,
451 type = "vertical_frames",
458 name = "water_flow.png",
459 backface_culling = true,
461 type = "vertical_frames",
476 paramtype2 = "flowingliquid",
481 is_ground_content = false,
483 liquidtype = "flowing",
484 liquid_alternative_flowing = "main:waterflow",
485 liquid_alternative_source = "main:water",
486 liquid_viscosity = 1,
487 post_effect_color = {a = 103, r = 30, g = 60, b = 90},
488 groups = {water = 1, liquid = 1, notInCreative = 1, cools_lava = 1,pathable = 1,drowning=1,disable_fall_damage=1,extinguish=1},
489 --sounds = default.node_sound_water_defaults(),
492 minetest.register_node("main:lava", {
493 description = "Lava",
497 name = "lava_source.png",
498 backface_culling = false,
500 type = "vertical_frames",
507 name = "lava_source.png",
508 backface_culling = true,
510 type = "vertical_frames",
523 is_ground_content = false,
526 liquidtype = "source",
527 liquid_alternative_flowing = "main:lavaflow",
528 liquid_alternative_source = "main:lava",
529 liquid_viscosity = 7,
530 liquid_renewable = false,
531 post_effect_color = {a = 191, r = 255, g = 64, b = 0},
532 groups = {lava = 3, liquid = 2, igniter = 1, fire=1,hurt_inside=1},
535 minetest.register_node("main:lavaflow", {
536 description = "Flowing Lava",
537 drawtype = "flowingliquid",
538 tiles = {"lava_flow.png"},
541 name = "lava_flow.png",
542 backface_culling = false,
544 type = "vertical_frames",
551 name = "lava_flow.png",
552 backface_culling = true,
554 type = "vertical_frames",
568 paramtype2 = "flowingliquid",
574 is_ground_content = false,
577 liquidtype = "flowing",
578 liquid_alternative_flowing = "main:lavaflow",
579 liquid_alternative_source = "main:lava",
580 liquid_viscosity = 7,
581 liquid_renewable = false,
583 post_effect_color = {a = 191, r = 255, g = 64, b = 0},
584 groups = {lava = 3, liquid = 2, igniter = 1, fire=1,hurt_inside=1},
587 minetest.register_node("main:ladder", {
588 description = "Ladder",
589 drawtype = "signlike",
590 tiles = {"ladder.png"},
591 inventory_image = "ladder.png",
592 wield_image = "ladder.png",
594 paramtype2 = "wallmounted",
595 sunlight_propagates = true,
598 is_ground_content = false,
599 node_placement_prediction = "",
601 type = "wallmounted",
602 --wall_top = = <default>
603 --wall_bottom = = <default>
604 --wall_side = = <default>
606 groups = {wood = 1, flammable = 1, attached_node=1},
607 sounds = main.woodSound(),
608 on_place = function(itemstack, placer, pointed_thing)
610 if pointed_thing.type ~= "node" then
614 local wdir = minetest.dir_to_wallmounted(vector.subtract(pointed_thing.under,pointed_thing.above))
616 local fakestack = itemstack
619 retval = fakestack:set_name("main:ladder")
628 itemstack, retval = minetest.item_place(fakestack, placer, pointed_thing, wdir)
631 minetest.sound_play("wood", {pos=pointed_thing.above, gain = 1.0})
634 print(itemstack, retval)
635 itemstack:set_name("main:ladder")