X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=mods%2Fmain%2Fnodes.lua;h=28b8b134e220950a21f70504756788e2f57f5c40;hb=48aa89197636250b3e494e9124c7c5c6e2d63dea;hp=b576a564149df253be4923eeb11f90d330ebb3de;hpb=9d3aa6eba0341368080f9a7ad54c45b774b833ca;p=Crafter.git diff --git a/mods/main/nodes.lua b/mods/main/nodes.lua index b576a56..28b8b13 100644 --- a/mods/main/nodes.lua +++ b/mods/main/nodes.lua @@ -1,46 +1,227 @@ -print("Initializing nodes") +local minetest,pairs = minetest,pairs +--ore def with required tool +local tool = {"main:woodpick","main:coalpick","main:stonepick","main:ironpick","main:lapispick","main:goldpick","main:diamondpick","main:emeraldpick","main:sapphirepick","main:rubypick"} +local ores = { +["coal"]={"main:woodpick","main:coalpick","main:stonepick","main:ironpick","main:lapispick","main:goldpick","main:diamondpick","main:emeraldpick","main:sapphirepick","main:rubypick"}, +["iron"]={"main:coalpick","main:stonepick","main:ironpick","main:lapispick","main:goldpick","main:diamondpick","main:emeraldpick","main:sapphirepick","main:rubypick"}, +["lapis"]={"main:ironpick","main:lapispick","main:goldpick","main:diamondpick","main:emeraldpick","main:sapphirepick","main:rubypick"}, +["gold"]={"main:ironpick","main:lapispick","main:goldpick","main:diamondpick","main:emeraldpick","main:sapphirepick","main:rubypick"}, +["diamond"]={"main:ironpick","main:lapispick","main:diamondpick","main:emeraldpick","main:sapphirepick","main:rubypick"}, +["emerald"]={"main:diamondpick","main:emeraldpick","main:sapphirepick","main:rubypick"}, +["sapphire"]={"main:diamondpick","main:emeraldpick","main:sapphirepick","main:rubypick"}, +["ruby"]={"main:diamondpick","main:emeraldpick","main:sapphirepick","main:rubypick"}, +} -minetest.register_node("main:stone", { - description = "Stone", - tiles = {"stone.png"}, - groups = {stone = 1, hard = 1, pickaxe = 1, hand = 4}, - sounds = main.stoneSound(), - drop="main:cobble", -}) +local drops ={ + ["coal"]={"main:coal"}, + ["iron"]={"main:ironore"}, + ["lapis"]={"main:lapis"}, + ["gold"]={"main:goldore"}, + ["diamond"]={"main:diamond"}, + ["emerald"]={"main:emerald"}, + ["sapphire"]={"main:sapphire"}, + ["ruby"]={"main:ruby"}, +} -local ores = {"coal","iron","gold","diamond"} -for id,ore in pairs(ores) do - local drop = "main:"..ore.."ore" - if ore == "diamond" then drop = "main:diamond" elseif ore == "coal" then drop = "main:coal" end +local levels = { + ["coal"]=1, + ["iron"]=2, + ["lapis"]=3, + ["gold"]=3, + ["diamond"]=4, + ["emerald"]=5, + ["sapphire"]=6, + ["ruby"]=7, +} + + +local level = 0 +local experience +for ore,tool_required in pairs(ores) do + level = levels[ore] + + if ore == "iron" or ore == "gold" then + experience = 0 + else + experience = level + end + minetest.register_node("main:"..ore.."block", { + description = ore:gsub("^%l", string.upper).." Block", + tiles = {ore.."block.png"}, + groups = {stone = level, pathable = 1}, + sounds = main.stoneSound(), + --light_source = 14,--debugging ore spawn + drop = { + max_items = 1, + items= { + { + rarity = 0, + tools = tool_required, + items = {"main:"..ore.."block"}, + }, + }, + }, + }) + minetest.register_node("main:"..ore.."ore", { description = ore:gsub("^%l", string.upper).." Ore", tiles = {"stone.png^"..ore.."ore.png"}, - groups = {stone = id, hard = id, pickaxe = 1, hand = 4}, + groups = {stone = level, pathable = 1,experience=experience}, sounds = main.stoneSound(), --light_source = 14,--debugging ore spawn - drop = drop, + drop = { + max_items = 1, + items= { + { + rarity = 0, + tools = tool_required, + items = drops[ore], + }, + }, + }, + }) + minetest.register_node(":nether:"..ore.."ore", { + description = "Nether "..ore:gsub("^%l", string.upper).." Ore", + tiles = {"netherrack.png^"..ore.."ore.png"}, + groups = {netherrack = level, pathable = 1, experience = experience}, + sounds = main.stoneSound(), + light_source = 7, + drop = { + max_items = 1, + items= { + { + rarity = 0, + tools = tool_required, + items = drops[ore], + }, + }, + }, + after_destruct = function(pos, oldnode) + if math.random() > 0.95 then + minetest.sound_play("tnt_ignite",{pos=pos,max_hear_distance=64}) + minetest.after(1.5, function(pos) + tnt(pos,5) + end,pos) + end + end, }) end +minetest.register_node("main:stone", { + description = "Stone", + tiles = {"stone.png"}, + groups = {stone = 1, hand = 1,pathable = 1}, + sounds = main.stoneSound(), + drop = { + max_items = 1, + items= { + { + rarity = 0, + tools = tool, + items = {"main:cobble"}, + }, + }, + }, + }) + minetest.register_node("main:cobble", { description = "Cobblestone", tiles = {"cobble.png"}, - groups = {stone = 2, hard = 1, pickaxe = 2, hand = 4}, + groups = {stone = 1, pathable = 1}, + sounds = main.stoneSound(), + drop = { + max_items = 1, + items= { + { + rarity = 0, + tools = tool, + items = {"main:cobble"}, + }, + }, + }, +}) + +minetest.register_node("main:mossy_cobble", { + description = "Mossy Cobblestone", + tiles = {"mossy_cobble.png"}, + groups = {stone = 1, pathable = 1}, sounds = main.stoneSound(), + drop = { + max_items = 1, + items= { + { + rarity = 0, + tools = tool, + items = {"main:mossy_cobble"}, + }, + }, + }, +}) + +minetest.register_node("main:glass", { + description = "Glass", + tiles = {"glass.png"}, + drawtype = "glasslike", + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + groups = {glass = 1, pathable = 1}, + sounds = main.stoneSound({ + footstep = {name = "glass_footstep", gain = 0.4}, + dug = {name = "break_glass", gain = 0.4}, + }), + drop = "", +}) + +minetest.register_node("main:ice", { + description = "Ice", + tiles = {"ice.png"}, + drawtype = "glasslike", + paramtype = "light", + sunlight_propagates = true, + sunlight_propagates = true, + is_ground_content = false, + groups = {glass = 1, pathable = 1,slippery=3}, + sounds = main.stoneSound({ + footstep = {name = "glass_footstep", gain = 0.4}, + dug = {name = "break_glass", gain = 0.4}, + }), + use_texture_alpha = false, + alpha = 100, + drop = "", + after_destruct = function(pos, oldnode) + minetest.set_node(pos, {name="main:water"}) + end +}) +minetest.register_node("main:ice_mapgen", { + description = "Ice", + tiles = {"ice.png"}, + drawtype = "normal", + sunlight_propagates = true, + sunlight_propagates = true, + is_ground_content = false, + groups = {glass = 1, pathable = 1,slippery=3}, + sounds = main.stoneSound({ + footstep = {name = "glass_footstep", gain = 0.4}, + dug = {name = "break_glass", gain = 0.4}, + }), + use_texture_alpha = false, + drop = "", }) minetest.register_node("main:dirt", { description = "Dirt", tiles = {"dirt.png"}, - groups = {dirt = 1, soft = 1, shovel = 1, hand = 1}, + groups = {dirt = 1, soil=1,pathable = 1, farm_tillable=1}, sounds = main.dirtSound(), + paramtype = "light", }) minetest.register_node("main:grass", { description = "Grass", tiles = {"grass.png"}, - groups = {dirt = 1, soft = 1, shovel = 1, hand = 1}, + groups = {grass = 1, soil=1,pathable = 1, farm_tillable=1}, sounds = main.dirtSound(), drop="main:dirt", }) @@ -48,17 +229,66 @@ minetest.register_node("main:grass", { minetest.register_node("main:sand", { description = "Sand", tiles = {"sand.png"}, - groups = {dirt = 1, sand = 1, soft = 1, shovel = 1, hand = 1, falling_node = 1}, + groups = {sand = 1, falling_node = 1,pathable = 1,soil=1}, sounds = main.sandSound(), }) +minetest.register_node("main:gravel", { + description = "Gravel", + tiles = {"gravel.png"}, + groups = {sand = 1, falling_node = 1,pathable = 1}, + sounds = main.dirtSound(), + drop = { + max_items = 1, + items= { + { + -- Only drop if using a tool whose name is identical to one + -- of these. + rarity = 10, + items = {"main:flint"}, + -- Whether all items in the dropped item list inherit the + -- hardware coloring palette color from the dug node. + -- Default is 'false'. + --inherit_color = true, + }, + { + -- Only drop if using a tool whose name is identical to one + -- of these. + --tools = {"main:shears"}, + rarity = 0, + items = {"main:gravel"}, + -- Whether all items in the dropped item list inherit the + -- hardware coloring palette color from the dug node. + -- Default is 'false'. + --inherit_color = true, + }, + }}, +}) + +local acceptable_soil = { + ["main:dirt"] = true, + ["main:grass"] = true, + ["aether:dirt"] = true, + ["aether:grass"] = true, +} minetest.register_node("main:tree", { description = "Tree", tiles = {"treeCore.png","treeCore.png","treeOut.png","treeOut.png","treeOut.png","treeOut.png"}, - groups = {wood = 2, tree = 1, hard = 1, axe = 1, hand = 3}, + groups = {wood = 1, tree = 1, pathable = 1, flammable=1}, sounds = main.woodSound(), --set metadata so treecapitator doesn't destroy houses on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return + end + + local sneak = placer:get_player_control().sneak + local noddef = minetest.registered_nodes[minetest.get_node(pointed_thing.under).name] + if not sneak and noddef.on_rightclick then + minetest.item_place(itemstack, placer, pointed_thing) + return + end + local pos = pointed_thing.above minetest.item_place_node(itemstack, placer, pointed_thing) local meta = minetest.get_meta(pos) @@ -67,28 +297,62 @@ minetest.register_node("main:tree", { end, --treecapitator - move treecapitator into own file using override on_dig = function(pos, node, digger) - + --bvav_create_vessel(pos,minetest.facedir_to_dir(minetest.dir_to_facedir(minetest.yaw_to_dir(digger:get_look_horizontal()+(math.pi/2))))) --check if wielding axe? - + --turn treecapitator into an enchantment? local meta = minetest.get_meta(pos) - if not meta:contains("placed") then + --local tool_meta = digger:get_wielded_item():get_meta() + --if tool_meta:get_int("treecapitator") > 0 then + if not meta:contains("placed") and string.match(digger:get_wielded_item():get_name(), "axe") then + local tool_capabilities = digger:get_wielded_item():get_tool_capabilities() + + local wear = minetest.get_dig_params({wood=1}, tool_capabilities).wear + + local wield_stack = digger:get_wielded_item() + --remove tree for y = -6,6 do - --print(y) - if minetest.get_node(vector.new(pos.x,pos.y+y,pos.z)).name == "main:tree" then + local name = minetest.get_node(vector.new(pos.x,pos.y+y,pos.z)).name + + if name == "main:tree" or name == "redstone:node_activated_tree" then + wield_stack:add_wear(wear) minetest.node_dig(vector.new(pos.x,pos.y+y,pos.z), node, digger) + minetest.add_particlespawner({ + amount = 30, + time = 0.0001, + minpos = {x=pos.x-0.5, y=pos.y-0.5+y, z=pos.z-0.5}, + maxpos = {x=pos.x+0.5, y=pos.y+0.5+y, z=pos.z+0.5}, + minvel = vector.new(-1,0,-1), + maxvel = vector.new(1,0,1), + minacc = {x=0, y=-9.81, z=0}, + maxacc = {x=0, y=-9.81, z=0}, + minexptime = 0.5, + maxexptime = 1.5, + minsize = 0, + maxsize = 0, + collisiondetection = true, + vertical = false, + node = {name= name}, + }) + + local name2 = minetest.get_node(vector.new(pos.x,pos.y+y-1,pos.z)).name + if acceptable_soil[name2] then + minetest.add_node(vector.new(pos.x,pos.y+y,pos.z),{name="main:sapling"}) + end end end + digger:set_wielded_item(wield_stack) else minetest.node_dig(pos, node, digger) - end + end + end }) minetest.register_node("main:wood", { description = "Wood", tiles = {"wood.png"}, - groups = {wood = 1, hard = 1, axe = 1, hand = 3}, + groups = {wood = 1, pathable = 1,flammable=1}, sounds = main.woodSound(), }) @@ -101,71 +365,78 @@ minetest.register_node("main:leaves", { paramtype = "light", is_ground_content = false, tiles = {"leaves.png"}, - groups = {leaves = 1, plant = 1, axe = 1, hand = 0, leafdecay = 1}, + groups = {leaves = 1, leafdecay = 1,flammable=1}, sounds = main.grassSound(), drop = { max_items = 1, items= { { - -- Only drop if using a tool whose name is identical to one - -- of these. tools = {"main:shears"}, - rarity = 2, - items = {"main:leaves"}, - -- Whether all items in the dropped item list inherit the - -- hardware coloring palette color from the dug node. - -- Default is 'false'. - --inherit_color = true, + items = {"main:dropped_leaves"}, }, { - -- Only drop if using a tool whose name is identical to one - -- of these. - tools = {"main:shears"}, - rarity = 2, - items = {"main:stick"}, - -- Whether all items in the dropped item list inherit the - -- hardware coloring palette color from the dug node. - -- Default is 'false'. - --inherit_color = true, + rarity = 25, + items = {"main:apple"}, }, { - -- Only drop if using a tool whose name is identical to one - -- of these. - tools = {"main:shears"}, - rarity = 6, - items = {"main:apple"}, - -- Whether all items in the dropped item list inherit the - -- hardware coloring palette color from the dug node. - -- Default is 'false'. - --inherit_color = true, + rarity = 20, + items = {"main:sapling"}, }, }, }, }) -minetest.register_node("main:waterSource", { + +minetest.register_node("main:dropped_leaves", { + description = "Leaves", + drawtype = "allfaces_optional", + waving = 0, + walkable = false, + climbable = false, + paramtype = "light", + is_ground_content = false, + tiles = {"leaves.png"}, + groups = {leaves = 1, flammable=1}, + sounds = main.grassSound(), + drop = { + max_items = 1, + items= { + { + tools = {"main:shears"}, + items = {"main:dropped_leaves"}, + }, + }, + }, +}) + + + + + + +minetest.register_node("main:water", { description = "Water Source", drawtype = "liquid", waving = 3, tiles = { { - name = "waterSource.png", + name = "water_source.png", backface_culling = false, animation = { type = "vertical_frames", aspect_w = 16, aspect_h = 16, - length = 2.0, + length = 1, }, }, { - name = "waterSource.png", + name = "water_source.png", backface_culling = true, animation = { type = "vertical_frames", aspect_w = 16, aspect_h = 16, - length = 2.0, + length = 1, }, }, }, @@ -177,43 +448,60 @@ minetest.register_node("main:waterSource", { buildable_to = true, is_ground_content = false, drop = "", - drowning = 1, liquidtype = "source", - liquid_alternative_flowing = "main:waterFlow", - liquid_alternative_source = "main:waterSource", - liquid_viscosity = 1, + liquid_alternative_flowing = "main:waterflow", + liquid_alternative_source = "main:water", + liquid_viscosity = 0, post_effect_color = {a = 103, r = 30, g = 60, b = 90}, - groups = {water = 1, liquid = 1, cools_lava = 1, bucket = 1, source = 1}, + groups = {water = 1, liquid = 1, cools_lava = 1, bucket = 1, source = 1,pathable = 1,drowning=1,disable_fall_damage=1,extinguish=1}, --sounds = default.node_sound_water_defaults(), + + --water explodes in the nether + on_construct = function(pos) + local under = minetest.get_node(vector.new(pos.x,pos.y-1,pos.z)).name + if under == "nether:glowstone" then + minetest.remove_node(pos) + create_aether_portal(pos) + elseif pos.y <= -10033 then + minetest.remove_node(pos) + tnt(pos,10) + end + end, }) -minetest.register_node("main:waterFlow", { +minetest.register_node("main:waterflow", { description = "Water Flow", drawtype = "flowingliquid", waving = 3, - tiles = {"water.png"}, + tiles = {"water_static.png"}, special_tiles = { { - name = "waterFlow.png", + name = "water_flow.png", backface_culling = false, animation = { type = "vertical_frames", aspect_w = 16, aspect_h = 16, - length = 0.8, + length = 0.5, }, }, { - name = "waterFlow.png", + name = "water_flow.png", backface_culling = true, animation = { type = "vertical_frames", aspect_w = 16, aspect_h = 16, - length = 0.8, + length = 0.5, }, }, }, + selection_box = { + type = "fixed", + fixed = { + {0, 0, 0, 0, 0, 0}, + }, + }, alpha = 191, paramtype = "light", paramtype2 = "flowingliquid", @@ -223,45 +511,42 @@ minetest.register_node("main:waterFlow", { buildable_to = true, is_ground_content = false, drop = "", - drowning = 1, liquidtype = "flowing", - liquid_alternative_flowing = "main:waterFlow", - liquid_alternative_source = "main:waterSource", - liquid_viscosity = 1, + liquid_alternative_flowing = "main:waterflow", + liquid_alternative_source = "main:water", + liquid_viscosity = 0, post_effect_color = {a = 103, r = 30, g = 60, b = 90}, - groups = {water = 1, liquid = 1, notInCreative = 1, cools_lava = 1}, + groups = {water = 1, liquid = 1, notInCreative = 1, cools_lava = 1,pathable = 1,drowning=1,disable_fall_damage=1,extinguish=1}, --sounds = default.node_sound_water_defaults(), }) ---[[ - -minetest.register_node("default:lava_source", { - description = S("Lava Source"), +minetest.register_node("main:lava", { + description = "Lava", drawtype = "liquid", tiles = { { - name = "default_lava_source_animated.png", + name = "lava_source.png", backface_culling = false, animation = { type = "vertical_frames", aspect_w = 16, aspect_h = 16, - length = 3.0, + length = 2.0, }, }, { - name = "default_lava_source_animated.png", + name = "lava_source.png", backface_culling = true, animation = { type = "vertical_frames", aspect_w = 16, aspect_h = 16, - length = 3.0, + length = 2.0, }, }, }, paramtype = "light", - light_source = default.LIGHT_MAX - 1, + light_source = 13, walkable = false, pointable = false, diggable = false, @@ -270,22 +555,21 @@ minetest.register_node("default:lava_source", { drop = "", drowning = 1, liquidtype = "source", - liquid_alternative_flowing = "default:lava_flowing", - liquid_alternative_source = "default:lava_source", + liquid_alternative_flowing = "main:lavaflow", + liquid_alternative_source = "main:lava", liquid_viscosity = 7, liquid_renewable = false, - damage_per_second = 4 * 2, post_effect_color = {a = 191, r = 255, g = 64, b = 0}, - groups = {lava = 3, liquid = 2, igniter = 1}, + groups = {lava = 3, liquid = 2, igniter = 1, fire=1,hurt_inside=1}, }) -minetest.register_node("default:lava_flowing", { - description = S("Flowing Lava"), +minetest.register_node("main:lavaflow", { + description = "Flowing Lava", drawtype = "flowingliquid", - tiles = {"default_lava.png"}, + tiles = {"lava_flow.png"}, special_tiles = { { - name = "default_lava_flowing_animated.png", + name = "lava_flow.png", backface_culling = false, animation = { type = "vertical_frames", @@ -295,7 +579,7 @@ minetest.register_node("default:lava_flowing", { }, }, { - name = "default_lava_flowing_animated.png", + name = "lava_flow.png", backface_culling = true, animation = { type = "vertical_frames", @@ -305,9 +589,15 @@ minetest.register_node("default:lava_flowing", { }, }, }, + selection_box = { + type = "fixed", + fixed = { + {0, 0, 0, 0, 0, 0}, + }, + }, paramtype = "light", paramtype2 = "flowingliquid", - light_source = default.LIGHT_MAX - 1, + light_source = 13, walkable = false, pointable = false, diggable = false, @@ -316,14 +606,65 @@ minetest.register_node("default:lava_flowing", { drop = "", drowning = 1, liquidtype = "flowing", - liquid_alternative_flowing = "default:lava_flowing", - liquid_alternative_source = "default:lava_source", + liquid_alternative_flowing = "main:lavaflow", + liquid_alternative_source = "main:lava", liquid_viscosity = 7, liquid_renewable = false, - damage_per_second = 4 * 2, + liquid_range = 3, post_effect_color = {a = 191, r = 255, g = 64, b = 0}, - groups = {lava = 3, liquid = 2, igniter = 1, - not_in_creative_inventory = 1}, + groups = {lava = 3, liquid = 2, igniter = 1, fire=1,hurt_inside=1}, }) -]]-- +minetest.register_node("main:ladder", { + description = "Ladder", + drawtype = "signlike", + tiles = {"ladder.png"}, + inventory_image = "ladder.png", + wield_image = "ladder.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + climbable = true, + is_ground_content = false, + node_placement_prediction = "", + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {wood = 1, flammable = 1, attached_node=1}, + sounds = main.woodSound(), + on_place = function(itemstack, placer, pointed_thing) + --copy from torch + if pointed_thing.type ~= "node" then + return itemstack + end + + local wdir = minetest.dir_to_wallmounted(vector.subtract(pointed_thing.under,pointed_thing.above)) + + local fakestack = itemstack + local retval = false + if wdir > 1 then + retval = fakestack:set_name("main:ladder") + else + return itemstack + end + + if not retval then + return itemstack + end + + itemstack, retval = minetest.item_place(fakestack, placer, pointed_thing, wdir) + + if retval then + minetest.sound_play("wood", {pos=pointed_thing.above, gain = 1.0}) + end + + print(itemstack, retval) + itemstack:set_name("main:ladder") + + return itemstack + end, +})