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.."block"},
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,
84 minetest.register_node(":nether:"..ore.."ore", {
85 description = "Nether "..ore:gsub("^%l", string.upper).." Ore",
86 tiles = {"netherrack.png^"..ore.."ore.png"},
87 groups = {netherrack = level, pathable = 1, experience = experience},
88 sounds = main.stoneSound(),
95 tools = tool_required,
100 after_destruct = function(pos, oldnode)
101 if math.random() > 0.95 then
102 minetest.sound_play("tnt_ignite",{pos=pos,max_hear_distance=64})
103 minetest.after(1.5, function(pos)
111 minetest.register_node("main:stone", {
112 description = "Stone",
113 tiles = {"stone.png"},
114 groups = {stone = 1, hand = 1,pathable = 1},
115 sounds = main.stoneSound(),
122 items = {"main:cobble"},
128 minetest.register_node("main:cobble", {
129 description = "Cobblestone",
130 tiles = {"cobble.png"},
131 groups = {stone = 1, pathable = 1},
132 sounds = main.stoneSound(),
139 items = {"main:cobble"},
145 minetest.register_node("main:mossy_cobble", {
146 description = "Mossy Cobblestone",
147 tiles = {"mossy_cobble.png"},
148 groups = {stone = 1, pathable = 1},
149 sounds = main.stoneSound(),
156 items = {"main:mossy_cobble"},
162 minetest.register_node("main:glass", {
163 description = "Glass",
164 tiles = {"glass.png"},
165 drawtype = "glasslike",
167 sunlight_propagates = true,
168 is_ground_content = false,
169 groups = {glass = 1, pathable = 1},
170 sounds = main.stoneSound({
171 footstep = {name = "glass_footstep", gain = 0.4},
172 dug = {name = "break_glass", gain = 0.4},
177 minetest.register_node("main:ice", {
182 sunlight_propagates = true,
183 sunlight_propagates = true,
184 is_ground_content = false,
185 groups = {glass = 1, pathable = 1,slippery=3},
186 sounds = main.stoneSound({
187 footstep = {name = "glass_footstep", gain = 0.4},
188 dug = {name = "break_glass", gain = 0.4},
190 --use_texture_alpha = false,
193 after_destruct = function(pos, oldnode)
194 minetest.set_node(pos, {name="main:water"})
197 minetest.register_node("main:ice_mapgen", {
201 sunlight_propagates = true,
202 sunlight_propagates = true,
203 is_ground_content = false,
204 groups = {glass = 1, pathable = 1,slippery=3},
205 sounds = main.stoneSound({
206 footstep = {name = "glass_footstep", gain = 0.4},
207 dug = {name = "break_glass", gain = 0.4},
209 use_texture_alpha = false,
213 minetest.register_node("main:dirt", {
214 description = "Dirt",
215 tiles = {"dirt.png"},
216 groups = {dirt = 1, soil=1,pathable = 1, farm_tillable=1},
217 sounds = main.dirtSound(),
221 minetest.register_node("main:grass", {
222 description = "Grass",
223 tiles = {"grass.png"},
224 groups = {grass = 1, soil=1,pathable = 1, farm_tillable=1},
225 sounds = main.dirtSound(),
229 minetest.register_node("main:sand", {
230 description = "Sand",
231 tiles = {"sand.png"},
232 groups = {sand = 1, falling_node = 1,pathable = 1,soil=1},
233 sounds = main.sandSound(),
236 minetest.register_node("main:gravel", {
237 description = "Gravel",
238 tiles = {"gravel.png"},
239 groups = {sand = 1, falling_node = 1,pathable = 1},
240 sounds = main.dirtSound(),
245 -- Only drop if using a tool whose name is identical to one
248 items = {"main:flint"},
249 -- Whether all items in the dropped item list inherit the
250 -- hardware coloring palette color from the dug node.
251 -- Default is 'false'.
252 --inherit_color = true,
255 -- Only drop if using a tool whose name is identical to one
257 --tools = {"main:shears"},
259 items = {"main:gravel"},
260 -- Whether all items in the dropped item list inherit the
261 -- hardware coloring palette color from the dug node.
262 -- Default is 'false'.
263 --inherit_color = true,
268 local acceptable_soil = {
269 ["main:dirt"] = true,
270 ["main:grass"] = true,
271 ["aether:dirt"] = true,
272 ["aether:grass"] = true,
274 minetest.register_node("main:tree", {
275 description = "Tree",
276 tiles = {"treeCore.png","treeCore.png","treeOut.png","treeOut.png","treeOut.png","treeOut.png"},
277 groups = {wood = 1, tree = 1, pathable = 1, flammable=1},
278 sounds = main.woodSound(),
279 --set metadata so treecapitator doesn't destroy houses
280 on_place = function(itemstack, placer, pointed_thing)
281 if not pointed_thing.type == "node" then
285 local sneak = placer:get_player_control().sneak
286 local noddef = minetest.registered_nodes[minetest.get_node(pointed_thing.under).name]
287 if not sneak and noddef.on_rightclick then
288 minetest.item_place(itemstack, placer, pointed_thing)
292 local pos = pointed_thing.above
293 minetest.item_place_node(itemstack, placer, pointed_thing)
294 local meta = minetest.get_meta(pos)
295 meta:set_string("placed", "true")
298 --treecapitator - move treecapitator into own file using override
299 on_dig = function(pos, node, digger)
300 --bvav_create_vessel(pos,minetest.facedir_to_dir(minetest.dir_to_facedir(minetest.yaw_to_dir(digger:get_look_horizontal()+(math.pi/2)))))
301 --check if wielding axe?
302 --turn treecapitator into an enchantment?
303 local meta = minetest.get_meta(pos)
304 --local tool_meta = digger:get_wielded_item():get_meta()
305 --if tool_meta:get_int("treecapitator") > 0 then
306 if not meta:contains("placed") and string.match(digger:get_wielded_item():get_name(), "axe") then
307 local tool_capabilities = digger:get_wielded_item():get_tool_capabilities()
309 local wear = minetest.get_dig_params({wood=1}, tool_capabilities).wear
311 local wield_stack = digger:get_wielded_item()
315 local name = minetest.get_node(vector.new(pos.x,pos.y+y,pos.z)).name
317 if name == "main:tree" or name == "redstone:node_activated_tree" then
318 wield_stack:add_wear(wear)
319 minetest.node_dig(vector.new(pos.x,pos.y+y,pos.z), node, digger)
320 minetest.add_particlespawner({
323 minpos = {x=pos.x-0.5, y=pos.y-0.5+y, z=pos.z-0.5},
324 maxpos = {x=pos.x+0.5, y=pos.y+0.5+y, z=pos.z+0.5},
325 minvel = vector.new(-1,0,-1),
326 maxvel = vector.new(1,0,1),
327 minacc = {x=0, y=-9.81, z=0},
328 maxacc = {x=0, y=-9.81, z=0},
333 collisiondetection = true,
338 local name2 = minetest.get_node(vector.new(pos.x,pos.y+y-1,pos.z)).name
339 if acceptable_soil[name2] then
340 minetest.add_node(vector.new(pos.x,pos.y+y,pos.z),{name="main:sapling"})
344 digger:set_wielded_item(wield_stack)
346 minetest.node_dig(pos, node, digger)
352 minetest.register_node("main:wood", {
353 description = "Wood",
354 tiles = {"wood.png"},
355 groups = {wood = 1, pathable = 1,flammable=1},
356 sounds = main.woodSound(),
359 minetest.register_node("main:leaves", {
360 description = "Leaves",
361 drawtype = "allfaces_optional",
366 is_ground_content = false,
367 tiles = {"leaves.png"},
368 groups = {leaves = 1, leafdecay = 1,flammable=1},
369 sounds = main.grassSound(),
374 tools = {"main:shears"},
375 items = {"main:dropped_leaves"},
379 items = {"main:apple"},
383 items = {"main:sapling"},
390 minetest.register_node("main:dropped_leaves", {
391 description = "Leaves",
392 drawtype = "allfaces_optional",
397 is_ground_content = false,
398 tiles = {"leaves.png"},
399 groups = {leaves = 1, flammable=1},
400 sounds = main.grassSound(),
405 tools = {"main:shears"},
406 items = {"main:dropped_leaves"},
417 minetest.register_node("main:water", {
418 description = "Water Source",
423 name = "water_source.png",
424 backface_culling = false,
426 type = "vertical_frames",
433 name = "water_source.png",
434 backface_culling = true,
436 type = "vertical_frames",
449 is_ground_content = false,
451 liquidtype = "source",
452 liquid_alternative_flowing = "main:waterflow",
453 liquid_alternative_source = "main:water",
454 liquid_viscosity = 0,
455 post_effect_color = {a = 103, r = 30, g = 60, b = 90},
456 groups = {water = 1, liquid = 1, cools_lava = 1, bucket = 1, source = 1,pathable = 1,drowning=1,disable_fall_damage=1,extinguish=1},
457 --sounds = default.node_sound_water_defaults(),
459 --water explodes in the nether
460 on_construct = function(pos)
461 local under = minetest.get_node(vector.new(pos.x,pos.y-1,pos.z)).name
462 if under == "nether:glowstone" then
463 minetest.remove_node(pos)
464 create_aether_portal(pos)
465 elseif pos.y <= -10033 then
466 minetest.remove_node(pos)
472 minetest.register_node("main:waterflow", {
473 description = "Water Flow",
474 drawtype = "flowingliquid",
476 tiles = {"water_static.png"},
479 name = "water_flow.png",
480 backface_culling = false,
482 type = "vertical_frames",
489 name = "water_flow.png",
490 backface_culling = true,
492 type = "vertical_frames",
507 paramtype2 = "flowingliquid",
512 is_ground_content = false,
514 liquidtype = "flowing",
515 liquid_alternative_flowing = "main:waterflow",
516 liquid_alternative_source = "main:water",
517 liquid_viscosity = 0,
518 post_effect_color = {a = 103, r = 30, g = 60, b = 90},
519 groups = {water = 1, liquid = 1, notInCreative = 1, cools_lava = 1,pathable = 1,drowning=1,disable_fall_damage=1,extinguish=1},
520 --sounds = default.node_sound_water_defaults(),
523 minetest.register_node("main:lava", {
524 description = "Lava",
528 name = "lava_source.png",
529 backface_culling = false,
531 type = "vertical_frames",
538 name = "lava_source.png",
539 backface_culling = true,
541 type = "vertical_frames",
554 is_ground_content = false,
557 liquidtype = "source",
558 liquid_alternative_flowing = "main:lavaflow",
559 liquid_alternative_source = "main:lava",
560 liquid_viscosity = 7,
561 liquid_renewable = false,
562 post_effect_color = {a = 191, r = 255, g = 64, b = 0},
563 groups = {lava = 3, liquid = 2, igniter = 1, fire=1,hurt_inside=1},
566 minetest.register_node("main:lavaflow", {
567 description = "Flowing Lava",
568 drawtype = "flowingliquid",
569 tiles = {"lava_flow.png"},
572 name = "lava_flow.png",
573 backface_culling = false,
575 type = "vertical_frames",
582 name = "lava_flow.png",
583 backface_culling = true,
585 type = "vertical_frames",
599 paramtype2 = "flowingliquid",
605 is_ground_content = false,
608 liquidtype = "flowing",
609 liquid_alternative_flowing = "main:lavaflow",
610 liquid_alternative_source = "main:lava",
611 liquid_viscosity = 7,
612 liquid_renewable = false,
614 post_effect_color = {a = 191, r = 255, g = 64, b = 0},
615 groups = {lava = 3, liquid = 2, igniter = 1, fire=1,hurt_inside=1},
618 minetest.register_node("main:ladder", {
619 description = "Ladder",
620 drawtype = "signlike",
621 tiles = {"ladder.png"},
622 inventory_image = "ladder.png",
623 wield_image = "ladder.png",
625 paramtype2 = "wallmounted",
626 sunlight_propagates = true,
629 is_ground_content = false,
630 node_placement_prediction = "",
632 type = "wallmounted",
633 --wall_top = = <default>
634 --wall_bottom = = <default>
635 --wall_side = = <default>
637 groups = {wood = 1, flammable = 1, attached_node=1},
638 sounds = main.woodSound(),
639 on_place = function(itemstack, placer, pointed_thing)
641 if pointed_thing.type ~= "node" then
645 local wdir = minetest.dir_to_wallmounted(vector.subtract(pointed_thing.under,pointed_thing.above))
647 local fakestack = itemstack
650 retval = fakestack:set_name("main:ladder")
659 itemstack, retval = minetest.item_place(fakestack, placer, pointed_thing, wdir)
662 minetest.sound_play("wood", {pos=pointed_thing.above, gain = 1.0})
665 print(itemstack, retval)
666 itemstack:set_name("main:ladder")