From e1ebbe9b1eb09df70597848fc04af543fc8f6847 Mon Sep 17 00:00:00 2001 From: LeMagnesium Date: Tue, 2 Jun 2015 21:15:15 +0200 Subject: [PATCH] Finished merge of nodes.lua from Minetest Game --- .../mods/default/functions.lua | 40 + minetestforfun_game/mods/default/nodes.lua | 1927 ++++++++--------- 2 files changed, 978 insertions(+), 989 deletions(-) diff --git a/minetestforfun_game/mods/default/functions.lua b/minetestforfun_game/mods/default/functions.lua index 04b12f3c..51ca6bfd 100755 --- a/minetestforfun_game/mods/default/functions.lua +++ b/minetestforfun_game/mods/default/functions.lua @@ -240,6 +240,7 @@ minetest.register_abm({ end, }) + -- -- Papyrus and cactus growing -- @@ -321,6 +322,7 @@ function default.dig_up(pos, node, digger) end end + -- -- Leafdecay -- @@ -433,3 +435,41 @@ minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack minetest.add_item(pos, "default:torch") end) + +minetest.register_abm({ + nodenames = {"default:dirt"}, + interval = 30, + chance = 5, + action = function(pos, node) + local above = {x = pos.x, y = pos.y + 1, z = pos.z} + local name = minetest.get_node(above).name + local nodedef = minetest.registered_nodes[name] + if nodedef and (nodedef.sunlight_propagates or nodedef.paramtype == "light") + and nodedef.liquidtype == "none" + and pos.y >= 0 + and (minetest.get_node_light(above) or 0) >= 12 then + if name == "default:snow" or name == "default:snowblock" then + minetest.set_node(pos, {name = "default:dirt_with_snow"}) + else + minetest.set_node(pos, {name = "default:dirt_with_grass"}) + end + end + end +}) + + +minetest.register_abm({ + nodenames = {"default:dirt_with_grass"}, + interval = 30, + chance = 2, + action = function(pos, node) + local above = {x = pos.x, y = pos.y + 1, z = pos.z} + local name = minetest.get_node(above).name + local nodedef = minetest.registered_nodes[name] + if name ~= "ignore" and nodedef + and not ((nodedef.sunlight_propagates or nodedef.paramtype == "light") + and nodedef.liquidtype == "none") then + minetest.set_node(pos, {name = "default:dirt"}) + end + end +}) \ No newline at end of file diff --git a/minetestforfun_game/mods/default/nodes.lua b/minetestforfun_game/mods/default/nodes.lua index 16ed850b..6e72ddad 100755 --- a/minetestforfun_game/mods/default/nodes.lua +++ b/minetestforfun_game/mods/default/nodes.lua @@ -19,6 +19,7 @@ default:sandstone default:sandstonebrick default:obsidian +default:obsidian_cooled default:obsidianbrick Soft / Non-Stone @@ -36,6 +37,7 @@ default:desert_sand default:gravel default:clay +default:clay_burned default:snow default:snowblock @@ -62,17 +64,25 @@ default:pinewood default:pine_needles default:pine_sapling +default:cherry_tree +default:cherry_log +default:cherry_plank +default:cherry_blossom_leaves +default:cherry_leaves_deco + Ores ---- (1. In stone 2. Block) default:stone_with_coal +default:desert_stone_with_coal default:coalblock default:stone_with_iron default:steelblock default:stone_with_copper +default:desert_stone_with_copper default:copperblock default:bronzeblock @@ -81,6 +91,7 @@ default:goldblock default:stone_with_mese default:mese +default:meze default:stone_with_diamond default:diamondblock @@ -112,6 +123,12 @@ default:river_water_flowing default:lava_source default:lava_flowing +default:acid_source +default:acid_flowing + +default:sand_source +default:sand_flowing + Tools / "Advanced" crafting / Non-"natural" ------------------------------------------- default:torch @@ -123,7 +140,12 @@ default:bookshelf default:sign_wall default:ladder +default:ladder_obsidian default:fence_wood +default:fence_cobble +default:fence_desert_cobble +default:fence_steelblock +default:fence_brick default:glass default:obsidian_glass @@ -168,6 +190,15 @@ minetest.register_node("default:cobble", { sounds = default.node_sound_stone_defaults(), }) +minetest.register_node("default:cobble_cooled", { + description = "Cobblestone (cooled)", + tiles = {"default_cobble.png"}, + is_ground_content = true, + drop = "default:cobble", + groups = {cracky = 3, stone = 2}, + sounds = default.node_sound_stone_defaults(), +}) + minetest.register_node("default:stonebrick", { description = "Stone Brick", tiles = {"default_stone_brick.png"}, @@ -217,7 +248,7 @@ minetest.register_node("default:desert_cobble", { minetest.register_node("default:desert_stonebrick", { description = "Desert Stone Brick", tiles = {"default_desert_stone_brick.png"}, - groups = {cracky = 2, stone = 1}, + groups = {cracky=2, stone=1}, sounds = default.node_sound_stone_defaults(), }) @@ -227,7 +258,7 @@ minetest.register_node("default:sandstone", { description = "Sandstone", tiles = {"default_sandstone.png"}, is_ground_content = true, - groups = {crumbly = 1, cracky = 3}, + groups = {crumbly=1,cracky=3}, sounds = default.node_sound_stone_defaults(), }) @@ -235,7 +266,7 @@ minetest.register_node("default:sandstonebrick", { description = "Sandstone Brick", tiles = {"default_sandstone_brick.png"}, is_ground_content = true, - groups = {cracky = 2}, + groups = {cracky=2}, sounds = default.node_sound_stone_defaults(), }) @@ -246,6 +277,15 @@ minetest.register_node("default:obsidian", { tiles = {"default_obsidian.png"}, is_ground_content = true, sounds = default.node_sound_stone_defaults(), + groups = {cracky=1,level=2}, +}) + +minetest.register_node("default:obsidian_cooled", { + description = "Obsidian (cooled)", + tiles = {"default_obsidian.png"}, + is_ground_content = true, + drop = "default:obsidian", + sounds = default.node_sound_stone_defaults(), groups = {cracky = 1, level = 2}, }) @@ -264,13 +304,13 @@ minetest.register_node("default:dirt", { description = "Dirt", tiles = {"default_dirt.png"}, is_ground_content = true, + groups = {crumbly=3, soil=1}, drop = { items = { {items = {"default:dirt"}}, {items = {"maptools:copper_coin"}, rarity = 32}, }, }, - groups = {crumbly = 3, soil = 1}, sounds = default.node_sound_dirt_defaults(), }) @@ -278,14 +318,14 @@ minetest.register_node("default:dirt_with_grass", { description = "Dirt with Grass", tiles = {"default_grass.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"}, is_ground_content = true, - groups = {crumbly = 3, soil = 1}, + groups = {crumbly=3,soil=1}, drop = { items = { {items = {"default:dirt"}}, }, }, sounds = default.node_sound_dirt_defaults({ - footstep = {name = "default_grass_footstep", gain = 0.8}, + footstep = {name="default_grass_footstep", gain=0.8}, }), }) @@ -293,14 +333,14 @@ minetest.register_node("default:dirt_with_grass_footsteps", { description = "Dirt with Grass and Footsteps", tiles = {"default_grass_footsteps.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"}, is_ground_content = true, - groups = {crumbly = 3, soil = 1, not_in_creative_inventory = 1}, + groups = {crumbly=3,soil=1,not_in_creative_inventory=1}, drop = { items = { {items = {"default:dirt"}}, }, }, sounds = default.node_sound_dirt_defaults({ - footstep = {name = "default_grass_footstep", gain = 0.4}, + footstep = {name="default_grass_footstep", gain=0.4}, }), }) @@ -308,14 +348,16 @@ minetest.register_node("default:dirt_with_snow", { description = "Dirt with Snow", tiles = {"default_snow.png", "default_dirt.png", "default_dirt.png^default_snow_side.png"}, is_ground_content = true, - groups = {crumbly = 3, soil = 1}, + groups = {crumbly=3,soil=1}, drop = { items = { {items = {"default:dirt"}}, {items = {"default:snow"}}, }, }, - sounds = default.node_sound_dirt_defaults({footstep = {name = "default_snow_footstep", gain = 0.625}}), + sounds = default.node_sound_dirt_defaults({ + footstep = {name="default_snow_footstep", gain=0.625}, + }), }) @@ -329,8 +371,8 @@ minetest.register_node("default:sand", { {items = {"default:sand"}}, }, }, - groups = {crumbly = 3, falling_node = 1, sand = 1}, - sounds = default.node_sound_sand_defaults() + groups = {crumbly=3, falling_node=1, sand=1}, + sounds = default.node_sound_sand_defaults(), }) minetest.register_node("default:desert_sand", { @@ -342,8 +384,8 @@ minetest.register_node("default:desert_sand", { {items = {"default:desert_sand"}}, }, }, - groups = {crumbly = 3, falling_node = 1, sand = 1}, - sounds = default.node_sound_sand_defaults() + groups = {crumbly=3, falling_node=1, sand=1}, + sounds = default.node_sound_sand_defaults(), }) @@ -352,7 +394,7 @@ minetest.register_node("default:gravel", { description = "Gravel", tiles = {"default_gravel.png"}, is_ground_content = true, - groups = {crumbly = 2, falling_node = 1}, + groups = {crumbly=2, falling_node=1}, drop = { items = { {items = {"default:gravel"}}, @@ -370,6 +412,19 @@ minetest.register_node("default:clay", { description = "Clay", tiles = {"default_clay.png"}, is_ground_content = true, + groups = {crumbly=3}, + drop = { + items = { + {items = {"default:clay_lump 8"}}, + }, + }, + sounds = default.node_sound_dirt_defaults(), +}) + +minetest.register_node("default:clay_burned", { + description = "Burned Clay", + tiles = {"default_clay_burned.png"}, + is_ground_content = true, groups = {crumbly = 3}, drop = { items = { @@ -400,7 +455,7 @@ minetest.register_node("default:snow", { {-0.5, -0.5, -0.5, 0.5, -0.5+2/16, 0.5}, }, }, - groups = {crumbly = 3, falling_node = 1, melts = 1, float = 1}, + groups = {crumbly=3,falling_node=1, melts = 1, float = 1}, sounds = default.node_sound_dirt_defaults({ footstep = {name="default_snow_footstep", gain=0.25}, dug = {name="default_snow_footstep", gain=0.75}, @@ -409,7 +464,7 @@ minetest.register_node("default:snow", { on_construct = function(pos) pos.y = pos.y - 1 if minetest.get_node(pos).name == "default:dirt_with_grass" then - minetest.set_node(pos, {name = "default:dirt_with_snow"}) + minetest.set_node(pos, {name="default:dirt_with_snow"}) end end, }) @@ -420,7 +475,7 @@ minetest.register_node("default:snowblock", { tiles = {"default_snow.png"}, is_ground_content = true, freezemelt = "default:water_source", - groups = {crumbly = 3, melts = 1}, + groups = {crumbly=3, melts = 1}, sounds = default.node_sound_dirt_defaults({ footstep = {name="default_snow_footstep", gain=0.25}, dug = {name="default_snow_footstep", gain=0.75}, @@ -451,27 +506,22 @@ minetest.register_node("default:tree", { tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"}, paramtype2 = "facedir", is_ground_content = false, - groups = {tree = 1,choppy = 2,oddly_breakable_by_hand = 1, flammable = 2}, + groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2}, sounds = default.node_sound_wood_defaults(), drop = { items = { {items = {"default:tree"}}, }, }, + on_place = minetest.rotate_node }) minetest.register_node("default:wood", { description = "Wooden Planks", tiles = {"default_wood.png"}, - groups = {choppy = 2,oddly_breakable_by_hand = 2, flammable = 3,wood = 1}, + groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1}, sounds = default.node_sound_wood_defaults(), - - - - - - }) minetest.register_node("default:sapling", { @@ -489,7 +539,7 @@ minetest.register_node("default:sapling", { type = "fixed", fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} }, - groups = {snappy = 3, flammable = 2, attached_node = 1, sapling = 1}, + groups = {snappy=3,flammable=2,attached_node=1,sapling=1}, sounds = default.node_sound_leaves_defaults(), }) @@ -502,7 +552,7 @@ minetest.register_node("default:leaves", { paramtype = "light", walkable = false, is_ground_content = false, - groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, + groups = {snappy=3, leafdecay=3, flammable=2, leaves=1}, drop = { max_items = 1, items = { @@ -512,7 +562,8 @@ minetest.register_node("default:leaves", { rarity = 18, }, { - -- Player will get leaves only if he gets no saplings, this is because max_items is 1: + -- Player will get leaves only if he gets no saplings + -- this is because max_items is 1 items = {"default:leaves"}, } } @@ -536,17 +587,19 @@ minetest.register_node("default:apple", { type = "fixed", fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2} }, - groups = {fleshy = 3, dig_immediate = 3, flammable = 2, leafdecay = 3, leafdecay_drop = 1}, + groups = {fleshy=3,dig_immediate=3,flammable=2,leafdecay=3,leafdecay_drop=1}, on_use = minetest.item_eat(2), sounds = default.node_sound_leaves_defaults(), after_place_node = function(pos, placer, itemstack) if placer:is_player() then - minetest.set_node(pos, {name = "default:apple", param2= 1}) + minetest.set_node(pos, {name="default:apple", param2=1}) end end, }) + + minetest.register_node("default:jungletree", { description = "Jungle Tree", tiles = {"default_jungletree_top.png", "default_jungletree_top.png", "default_jungletree.png"}, @@ -557,7 +610,7 @@ minetest.register_node("default:jungletree", { {items = {"default:jungletree"}}, }, }, - groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2}, sounds = default.node_sound_wood_defaults(), on_place = minetest.rotate_node @@ -566,7 +619,7 @@ minetest.register_node("default:jungletree", { minetest.register_node("default:junglewood", { description = "Junglewood Planks", tiles = {"default_junglewood.png"}, - groups = {choppy = 2,oddly_breakable_by_hand = 2, flammable = 3,wood = 1}, + groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1}, sounds = default.node_sound_wood_defaults(), }) @@ -578,7 +631,7 @@ minetest.register_node("default:jungleleaves", { paramtype = "light", is_ground_content = false, walkable = false, - groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, + groups = {snappy=3, leafdecay=3, flammable=2, leaves=1}, drop = { max_items = 1, items = { @@ -616,6 +669,8 @@ minetest.register_node("default:junglesapling", { sounds = default.node_sound_leaves_defaults(), }) + + minetest.register_node("default:pinetree", { description = "Pine Tree", tiles = {"default_pinetree_top.png", "default_pinetree_top.png", "default_pinetree.png"}, @@ -641,8 +696,8 @@ minetest.register_node("default:pine_needles",{ tiles = {"default_pine_needles.png"}, waving = 1, paramtype = "light", - groups = {snappy=3, leafdecay=3, flammable=2, leaves=1}, is_ground_content = false, + groups = {snappy=3, leafdecay=3, flammable=2, leaves=1}, drop = { max_items = 1, items = { @@ -681,17 +736,103 @@ minetest.register_node("default:pine_sapling", { sounds = default.node_sound_leaves_defaults(), }) +-- From BFD, cherry tree +minetest.register_node("default:cherry_tree", { + description = "Cherry Log", + tiles = {"default_cherry_top.png", "default_cherry_top.png", "default_cherry_tree.png"}, + is_ground_content = false, + groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2}, + sounds = default.node_sound_wood_defaults(), + drop = "default:cherry_log" +}) + +minetest.register_node("default:cherry_log", { + description = "Cherry Log", + tiles = {"default_cherry_top.png", "default_cherry_top.png", "default_cherry_tree.png"}, + paramtype2 = "facedir", + is_ground_content = false, + groups = {choppy=2,oddly_breakable_by_hand=1,flammable=2}, + sounds = default.node_sound_wood_defaults(), + on_place = minetest.rotate_node, +}) + +minetest.register_node("default:cherry_plank", { + description = "Cherry Planks", + tiles = {"default_wood_cherry_planks.png"}, + sounds = default.node_sound_wood_defaults(), + groups = {oddly_breakable_by_hand=1, flammable=1, choppy=3, wood=1}, +}) + +minetest.register_node("default:cherry_blossom_leaves", { + description = "Cherry Blossom Leaves", + drawtype = "allfaces_optional", + visual_scale = 1.3, + tiles = {"default_cherry_blossom_leaves.png"}, + paramtype = "light", + waving = 1, + is_ground_content = false, + groups = {snappy=3, leafdecay=3, flammable=2, leaves=1}, + drop = { + max_items = 1, + items = { + { + items = {'default:cherry_sapling'}, + rarity = 32, + }, + { + items = {'default:cherry_blossom_leaves'}, + } + } + }, + sounds = default.node_sound_leaves_defaults(), + on_place = function(itemstack, placer, pointed_thing) + -- place a random grass node + local stack = ItemStack("default:cherry_leaves_deco") + local ret = minetest.item_place(stack, placer, pointed_thing) + return ItemStack("default:cherry_blossom_leaves".." "..itemstack:get_count()-(1-ret:get_count())) + end, +}) + +minetest.register_node("default:cherry_leaves_deco", { + description = "Cherry Leaves", + drawtype = "allfaces_optional", + visual_scale = 1.3, + tiles = {"default_cherry_blossom_leaves.png"}, + paramtype = "light", + waving=1, + is_ground_content = false, + groups = {snappy=3, flammable=2, leaves=1}, + sounds = default.node_sound_leaves_defaults(), + drop = {'default:cherry_blossom_leaves'}, +}) + +minetest.register_node("default:cherry_sapling", { + description = "Cherry Sapling", + waving = 1, + visual_scale = 1.0, + inventory_image = "default_cherry_sapling.png", + wield_image = "default_cherry_sapling.png", + drawtype = "plantlike", + paramtype = "light", + tiles = {"default_cherry_sapling.png"}, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} + }, + groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1}, + sounds = default.node_sound_leaves_defaults(), +}) -- -- Ores -- - minetest.register_node("default:stone_with_coal", { description = "Coal Ore", tiles = {"default_stone.png^default_mineral_coal.png"}, is_ground_content = true, - groups = {cracky = 3}, + groups = {cracky=3}, drop = { items = { {items = {"default:cobble"}}, @@ -702,19 +843,36 @@ minetest.register_node("default:stone_with_coal", { sounds = default.node_sound_stone_defaults(), }) +minetest.register_node("default:desert_stone_with_coal", { + description = "Coal Ore", + tiles = {"default_desert_stone.png^default_mineral_coal.png"}, + is_ground_content = true, + groups = {crumbly = 1, cracky = 3}, + drop = { + items = { + {items = {"default:desert_cobble"}}, + {items = {"default:coal_lump"}}, + {items = {"maptools:copper_coin"}}, + }, + }, + sounds = default.node_sound_stone_defaults(), +}) + minetest.register_node("default:coalblock", { description = "Coal Block", tiles = {"default_coal_block.png"}, is_ground_content = true, - groups = {cracky = 3}, + groups = {cracky=3}, sounds = default.node_sound_stone_defaults(), }) + + minetest.register_node("default:stone_with_iron", { description = "Iron Ore", tiles = {"default_stone.png^default_mineral_iron.png"}, is_ground_content = true, - groups = {cracky = 3}, + groups = {cracky=3}, drop = { items = { {items = {"default:cobble"}}, @@ -729,15 +887,17 @@ minetest.register_node("default:steelblock", { description = "Steel Block", tiles = {"default_steel_block.png"}, is_ground_content = true, - groups = {cracky = 1, level = 2, ingot_block = 1}, + groups = {cracky=1,level=2, ingot_block = 1}, sounds = default.node_sound_metal_defaults(), }) + + minetest.register_node("default:stone_with_copper", { description = "Copper Ore", tiles = {"default_stone.png^default_mineral_copper.png"}, is_ground_content = true, - groups = {cracky = 3}, + groups = {cracky=3}, drop = { items = { {items = {"default:cobble"}}, @@ -748,11 +908,26 @@ minetest.register_node("default:stone_with_copper", { sounds = default.node_sound_stone_defaults(), }) +minetest.register_node("default:desert_stone_with_copper", { + description = "Copper Ore", + tiles = {"default_desert_stone.png^default_mineral_copper.png"}, + is_ground_content = true, + groups = {crumbly = 1, cracky = 3}, + drop = { + items = { + {items = {"default:desert_cobble"}}, + {items = {"default:copper_lump"}}, + {items = {"maptools:copper_coin 3"}}, + }, + }, + sounds = default.node_sound_stone_defaults(), +}) + minetest.register_node("default:copperblock", { description = "Copper Block", tiles = {"default_copper_block.png"}, is_ground_content = true, - groups = {cracky = 1, level = 2, ingot_block = 1}, + groups = {cracky=1,level=2, ingot_block = 1}, sounds = default.node_sound_metal_defaults(), }) @@ -760,10 +935,12 @@ minetest.register_node("default:bronzeblock", { description = "Bronze Block", tiles = {"default_bronze_block.png"}, is_ground_content = true, - groups = {cracky = 1, level = 2, ingot_block = 1}, + groups = {cracky=1,level=2, ingot_block = 1}, sounds = default.node_sound_metal_defaults(), }) + + minetest.register_node("default:stone_with_mese", { description = "Mese Ore", tiles = {"default_stone.png^default_mineral_mese.png"}, @@ -797,12 +974,38 @@ minetest.register_node("default:mese", { light_source = 3, }) +local function die_later(digger) + digger:set_hp(0) +end + +minetest.register_node("default:meze", { + description = "Meze Block", + tiles = {"default_meze_block.png"}, + is_ground_content = true, + drop = "", + groups = {cracky = 1, level = 2, fall_damage_add_percent = -75}, + sounds = default.node_sound_wood_defaults(), -- Intended. + + on_dig = function(pos, node, digger) + if digger and minetest.setting_getbool("enable_damage") and not minetest.setting_getbool("creative_mode") then + minetest.after(3, die_later, digger) + minetest.chat_send_player(digger:get_player_name(), "You feel like you did a mistake.") + minetest.node_dig(pos, node, digger) + elseif digger then + minetest.node_dig(pos, node, digger) + end + end, +}) +minetest.register_alias("default:meze_block", "default:meze") + + + minetest.register_node("default:stone_with_gold", { description = "Gold Ore", tiles = {"default_stone.png^default_mineral_gold.png"}, is_ground_content = true, - groups = {cracky = 3}, + groups = {cracky=3}, drop = { items = { {items = {"default:cobble"}}, @@ -818,7 +1021,7 @@ minetest.register_node("default:goldblock", { description = "Gold Block", tiles = {"default_gold_block.png"}, is_ground_content = true, - groups = {cracky = 1, ingot_block = 1}, + groups = {cracky=1, ingot_block = 1}, sounds = default.node_sound_metal_defaults(), }) @@ -828,7 +1031,7 @@ minetest.register_node("default:stone_with_diamond", { description = "Diamond Ore", tiles = {"default_stone.png^default_mineral_diamond.png"}, is_ground_content = true, - groups = {cracky = 3}, + groups = {cracky=3}, drop = { items = { {items = {"default:cobble"}}, @@ -866,7 +1069,6 @@ minetest.register_node("default:stone_with_coin", { -- Plantlife (non-cubic) -- - minetest.register_node("default:cactus", { description = "Cactus", tiles = {"default_cactus_top.png", "default_cactus_top.png", "default_cactus_side.png"}, @@ -886,7 +1088,6 @@ minetest.register_node("default:cactus", { end, }) - minetest.register_node("default:papyrus", { description = "Papyrus", drawtype = "plantlike", @@ -909,7 +1110,6 @@ minetest.register_node("default:papyrus", { end, }) - minetest.register_node("default:dry_shrub", { description = "Dry Shrub", drawtype = "plantlike", @@ -919,6 +1119,7 @@ minetest.register_node("default:dry_shrub", { inventory_image = "default_dry_shrub.png", wield_image = "default_dry_shrub.png", paramtype = "light", + sunlight_propagates = true, walkable = false, is_ground_content = true, buildable_to = true, @@ -938,6 +1139,7 @@ minetest.register_node("default:junglegrass", { inventory_image = "default_junglegrass.png", wield_image = "default_junglegrass.png", paramtype = "light", + sunlight_propagates = true, walkable = false, buildable_to = true, is_ground_content = true, @@ -958,6 +1160,7 @@ minetest.register_node("default:grass_1", { inventory_image = "default_grass_3.png", wield_image = "default_grass_3.png", paramtype = "light", + sunlight_propagates = true, walkable = false, is_ground_content = true, buildable_to = true, @@ -969,14 +1172,13 @@ minetest.register_node("default:grass_1", { }, on_place = function(itemstack, placer, pointed_thing) - -- Place a random grass node: - local stack = ItemStack("default:grass_" .. math.random(1, 5)) + -- place a random grass node + local stack = ItemStack("default:grass_"..math.random(1,5)) local ret = minetest.item_place(stack, placer, pointed_thing) - return ItemStack("default:grass_1 " .. itemstack:get_count() - (1 - ret:get_count())) + return ItemStack("default:grass_1 "..itemstack:get_count()-(1-ret:get_count())) end, }) - for i=2,5 do minetest.register_node("default:grass_"..i, { description = "Grass", @@ -1004,7 +1206,6 @@ end -- Liquids -- - minetest.register_node("default:water_source", { description = "Water Source", inventory_image = minetest.inventorycube("default_water.png"), @@ -1048,10 +1249,9 @@ minetest.register_node("default:water_source", { liquid_viscosity = 1, freezemelt = "default:ice", post_effect_color = {a = 120, r = 20, g = 60, b = 80}, - groups = {water= 3, liquid = 3, puts_out_fire = 1, freezes = 1}, + groups = {water=3, liquid=3, puts_out_fire=1, freezes = 1}, }) - minetest.register_node("default:water_flowing", { description = "Flowing Water", inventory_image = minetest.inventorycube("default_water.png"), @@ -1069,7 +1269,7 @@ minetest.register_node("default:water_flowing", { }, }, { - image = "default_water_flowing_animated.png", + name = "default_water_flowing_animated.png", backface_culling = true, animation = { type = "vertical_frames", @@ -1094,8 +1294,536 @@ minetest.register_node("default:water_flowing", { liquid_alternative_source = "default:water_source", liquid_viscosity = 1, freezemelt = "default:snow", - post_effect_color = {a = 120, r = 20, g = 60, b = 80}, - groups = {water= 3, liquid = 3, puts_out_fire = 1, not_in_creative_inventory = 1, freezes = 1, melt_around = 1}, + post_effect_color = {a=120, r=20, g=60, b=80}, + groups = {water=3, liquid=3, puts_out_fire=1, not_in_creative_inventory=1, freezes = 1, melt_around = 1}, +}) + +minetest.register_node("default:river_water_source", { + description = "River Water Source", + inventory_image = minetest.inventorycube("default_water.png"), + drawtype = "liquid", + tiles = { + { + name = "default_water_source_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 2.0, + }, + }, + }, + special_tiles = { + { + name = "default_water_source_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 2.0, + }, + backface_culling = false, + }, + }, + alpha = 160, + paramtype = "light", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drop = "", + drowning = 2, + liquidtype = "source", + liquid_alternative_flowing = "default:river_water_flowing", + liquid_alternative_source = "default:river_water_source", + liquid_viscosity = 1, + liquid_renewable = false, + liquid_range = 2, + post_effect_color = {a=64, r=100, g=100, b=200}, + groups = {water=3, liquid=3, puts_out_fire=1}, +}) + +minetest.register_node("default:river_water_flowing", { + description = "Flowing River Water", + inventory_image = minetest.inventorycube("default_water.png"), + drawtype = "flowingliquid", + tiles = {"default_water.png"}, + special_tiles = { + { + name = "default_water_flowing_animated.png", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 0.8, + }, + }, + { + name = "default_water_flowing_animated.png", + backface_culling = true, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 0.8, + }, + }, + }, + alpha = 160, + paramtype = "light", + paramtype2 = "flowingliquid", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drop = "", + drowning = 2, + liquidtype = "flowing", + liquid_alternative_flowing = "default:river_water_flowing", + liquid_alternative_source = "default:river_water_source", + liquid_viscosity = 1, + liquid_renewable = false, + liquid_range = 2, + post_effect_color = {a=64, r=100, g=100, b=200}, + groups = {water=3, liquid=3, puts_out_fire=1, not_in_creative_inventory=1}, +}) + +minetest.register_node("default:lava_source", { + description = "Lava Source", + inventory_image = minetest.inventorycube("default_lava.png"), + drawtype = "liquid", + tiles = { + { + name = "default_lava_source_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 3.0, + }, + }, + }, + special_tiles = { + -- New-style lava source material (mostly unused) + { + name = "default_lava_source_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 3.0, + }, + backface_culling = false, + }, + }, + paramtype = "light", + light_source = default.LIGHT_MAX - 1, + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drop = "", + drowning = 2, + liquidtype = "source", + liquid_alternative_flowing = "default:lava_flowing", + liquid_alternative_source = "default:lava_source", + liquid_viscosity = 7, + liquid_renewable = false, + damage_per_second = 4 * 2, + post_effect_color = {a=220, r=250, g=70, b=20}, + groups = {lava=3, liquid=2, hot=3, igniter=1}, +}) + +minetest.register_node("default:lava_flowing", { + description = "Flowing Lava", + inventory_image = minetest.inventorycube("default_lava.png"), + drawtype = "flowingliquid", + tiles = {"default_lava.png"}, + special_tiles = { + { + name = "default_lava_flowing_animated.png", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1.5, + }, + }, + { + name = "default_lava_flowing_animated.png", + backface_culling = true, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1.5, + }, + }, + }, + paramtype = "light", + paramtype2 = "flowingliquid", + light_source = default.LIGHT_MAX - 1, + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drop = "", + drowning = 2, + liquidtype = "flowing", + liquid_alternative_flowing = "default:lava_flowing", + liquid_alternative_source = "default:lava_source", + liquid_viscosity = 7, + liquid_renewable = false, + damage_per_second = 4 * 2, + post_effect_color = {a=220, r=250, g=70, b=20}, + groups = {lava=3, liquid=2, hot=3, igniter=1, not_in_creative_inventory=1}, +}) + +minetest.register_node("default:acid_source", { + description = "Acid Source", + inventory_image = minetest.inventorycube("default_acid.png"), + drawtype = "liquid", + tiles = { + {name = "default_acid_source_animated.png", animation={type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 1.5}} + }, + special_tiles = { + -- New-style acid source material (mostly unused) + { + name = "default_acid_source_animated.png", + animation = {type = "vertical_frames", aspect_w= 16, aspect_h = 16, length = 1.5}, + backface_culling = false, + } + }, + alpha = 160, + paramtype = "light", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + drop = "", + drowning = 2, + liquidtype = "source", + liquid_alternative_flowing = "default:acid_flowing", + liquid_alternative_source = "default:acid_source", + liquid_viscosity = 1, + damage_per_second = 3, + post_effect_color = {a = 120, r = 50, g = 90, b = 30}, + groups = {water = 3, acid = 3, liquid = 3, puts_out_fire = 1}, +}) + +minetest.register_node("default:acid_flowing", { + description = "Flowing Acid", + inventory_image = minetest.inventorycube("default_acid.png"), + drawtype = "flowingliquid", + tiles = {"default_acid.png"}, + special_tiles = { + { + image = "default_acid_flowing_animated.png", + backface_culling=false, + animation={type = "vertical_frames", aspect_w= 16, aspect_h = 16, length = 0.6} + }, + { + image = "default_acid_flowing_animated.png", + backface_culling=true, + animation={type = "vertical_frames", aspect_w= 16, aspect_h = 16, length = 0.6} + }, + }, + alpha = 160, + paramtype = "light", + paramtype2 = "flowingliquid", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + drop = "", + drowning = 2, + liquidtype = "flowing", + liquid_alternative_flowing = "default:acid_flowing", + liquid_alternative_source = "default:acid_source", + liquid_viscosity = 1, + damage_per_second = 3, + post_effect_color = {a = 120, r = 50, g = 90, b = 30}, + groups = {water = 3, acid = 3, liquid = 3, puts_out_fire = 1, not_in_creative_inventory = 1}, +}) + +minetest.register_node("default:sand_source", { + description = "Sand Source", + inventory_image = minetest.inventorycube("default_sand.png"), + drawtype = "liquid", + tiles = {"default_sand.png"}, + special_tiles = { + -- New-style water source material (mostly unused) + { + name = "default_sand_source_animated.png", + animation = {type = "vertical_frames", aspect_w= 16, aspect_h = 16, length = 1.5}, + backface_culling = false, + } + }, + alpha = 255, + paramtype = "light", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + drop = "", + drowning = 4, + liquidtype = "source", + liquid_alternative_flowing = "default:sand_flowing", + liquid_alternative_source = "default:sand_source", + liquid_viscosity = 20, + liquid_renewable = false, + post_effect_color = {a = 250, r = 0, g = 0, b = 0}, + groups = {liquid = 3}, +}) + +minetest.register_node("default:sand_flowing", { + description = "Flowing Sand", + inventory_image = minetest.inventorycube("default_sand.png"), + drawtype = "flowingliquid", + tiles = {"default_sand.png"}, + special_tiles = { + { + image = "default_sand_flowing_animated.png", + backface_culling=false, + animation={type = "vertical_frames", aspect_w= 16, aspect_h = 16, length = 0.6} + }, + { + image = "default_sand_flowing_animated.png", + backface_culling=true, + animation={type = "vertical_frames", aspect_w= 16, aspect_h = 16, length = 0.6} + }, + }, + alpha = 255, + paramtype = "light", + paramtype2 = "flowingliquid", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + drop = "", + drowning = 4, + liquidtype = "flowing", + liquid_alternative_flowing = "default:sand_flowing", + liquid_alternative_source = "default:sand_source", + liquid_viscosity = 20, + post_effect_color = {a = 250, r = 0, g = 0, b = 0}, + groups = {liquid = 3, not_in_creative_inventory = 1}, +}) + +-- +-- Tools / "Advanced" crafting / Non-"natural" +-- + +minetest.register_node("default:torch", { + description = "Torch", + drawtype = "nodebox", + tiles = { + { + name = "default_torch_new_top.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 3.0 + }, + }, + { + name="default_torch_new_bottom.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 3.0 + }, + }, + { + name="default_torch_new_side.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 3.0 + }, + }, + }, + inventory_image = "default_torch_new_inv.png", + wield_image = "default_torch_new_inv.png", + wield_scale = {x = 1, y = 1, z = 1.25}, + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + is_ground_content = false, + walkable = false, + light_source = default.LIGHT_MAX - 1, + node_box = { + type = "wallmounted", + wall_top = {-0.0625, -0.0625, -0.0625, 0.0625, 0.5 , 0.0625}, + wall_bottom = {-0.0625, -0.5 , -0.0625, 0.0625, 0.0625, 0.0625}, + wall_side = {-0.5 , -0.5 , -0.0625, -0.375, 0.0625, 0.0625}, + }, + selection_box = { + type = "wallmounted", + wall_top = {-0.25, -0.0625, -0.25, 0.25, 0.5 , 0.25}, + wall_bottom = {-0.25, -0.5 , -0.25, 0.25, 0.0625, 0.25}, + wall_side = {-0.25, -0.5 , -0.25, -0.5, 0.0625, 0.25}, + }, + groups = {choppy=2,dig_immediate=3,flammable=1,attached_node=1, hot = 2}, + sounds = default.node_sound_wood_defaults(), +}) + +local chest_formspec = + "size[8,9]".. + default.gui_slots .. + "list[current_name;main;0,0.3;8,4;]" .. + "list[current_player;main;0,4.85;8,4;]" .. + default.get_hotbar_bg(0, 4.85) .. + default.get_hotbar_bg(0, 5.85) + +function default.get_locked_chest_formspec(pos) + local spos = pos.x .. "," .. pos.y .. "," ..pos.z + local formspec = + "size[8,9]".. + default.gui_slots.. + "list[nodemeta:".. spos .. ";main;0,0.3;8,4;]".. + "list[current_player;main;0,4.85;8,4;]".. + default.get_hotbar_bg(0, 4.85) .. + default.get_hotbar_bg(0, 5.85) + return formspec +end + +local function has_locked_chest_privilege(meta, player) + if player:get_player_name() ~= meta:get_string("owner") and player:get_player_name() ~= minetest.setting_get("name") then + return false + end + return true +end + +minetest.register_node("default:chest", { + description = "Chest", + tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png", + "default_chest_side.png", "default_chest_side.png", "default_chest_front.png"}, + paramtype2 = "facedir", + groups = {choppy=2,oddly_breakable_by_hand=2}, + is_ground_content = false, + sounds = default.node_sound_wood_defaults(), + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", default.chest_formspec) + meta:set_string("infotext", "Chest") + local inv = meta:get_inventory() + inv:set_size("main", 8*4) + end, + can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end, + on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + minetest.log("action", player:get_player_name().. + " moves stuff in chest at "..minetest.pos_to_string(pos) .. ".") + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " moves stuff to chest at "..minetest.pos_to_string(pos) .. ".") + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " takes stuff from chest at "..minetest.pos_to_string(pos) .. ".") + end, +}) + + +minetest.register_node("default:chest_locked", { + description = "Locked Chest", + tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png", + "default_chest_side.png", "default_chest_side.png", "default_chest_lock.png"}, + paramtype2 = "facedir", + groups = {choppy=2,oddly_breakable_by_hand=2}, + is_ground_content = false, + sounds = default.node_sound_wood_defaults(), + + after_place_node = function(pos, placer) + local meta = minetest.get_meta(pos) + meta:set_string("owner", placer:get_player_name() or "") + meta:set_string("infotext", "Locked Chest (owned by ".. + meta:get_string("owner")..")") + end, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", default.get_locked_chest_formspec(pos)) + meta:set_string("infotext", "Locked Chest") + meta:set_string("owner", "") + local inv = meta:get_inventory() + inv:set_size("main", 8*4) + end, + can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") and has_locked_chest_privilege(meta, player) + end, + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + local meta = minetest.get_meta(pos) + if not has_locked_chest_privilege(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a locked chest belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos) .. ".") + return 0 + end + return count + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + if not has_locked_chest_privilege(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a locked chest belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos) .. ".") + return 0 + end + return stack:get_count() + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + if not has_locked_chest_privilege(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a locked chest belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos) .. ".") + return 0 + end + return stack:get_count() + end, + on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + minetest.log("action", player:get_player_name().. + " moves stuff in locked chest at "..minetest.pos_to_string(pos) .. ".") + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " moves stuff to locked chest at "..minetest.pos_to_string(pos) .. ".") + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " takes stuff from locked chest at "..minetest.pos_to_string(pos) .. ".") + end, + on_rightclick = function(pos, node, clicker) + local meta = minetest.get_meta(pos) + if has_locked_chest_privilege(meta, clicker) then + minetest.show_formspec( + clicker:get_player_name(), + "default:chest_locked", + get_locked_chest_formspec(pos) + ) + end + end, + on_blast = function() end, }) default.bookshelf_formspec = @@ -1111,13 +1839,14 @@ minetest.register_node("default:bookshelf", { tiles = {"default_wood.png", "default_wood.png", "default_bookshelf.png"}, is_ground_content = false, paramtype2 = "facedir", - groups = {choppy = 3,oddly_breakable_by_hand = 2, flammable = 3}, + groups = {choppy=3,oddly_breakable_by_hand=2,flammable=3}, sounds = default.node_sound_wood_defaults(), + on_construct = function(pos) local meta = minetest.get_meta(pos) meta:set_string("formspec", default.bookshelf_formspec) local inv = meta:get_inventory() - inv:set_size("books", 8 * 2) + inv:set_size("books", 8*2) end, can_dig = function(pos,player) local meta = minetest.get_meta(pos); @@ -1129,11 +1858,13 @@ minetest.register_node("default:bookshelf", { local meta = minetest.get_meta(pos) local inv = meta:get_inventory() local to_stack = inv:get_stack(listname, index) - if listname == "books" and to_stack:is_empty() - and minetest.get_item_group(stack:get_name(), "book") ~= 0 then - return 1 - else - return 0 + if listname == "books" then + if minetest.get_item_group(stack:get_name(), "book") ~= 0 + and to_stack:is_empty() then + return 1 + else + return 0 + end end end, @@ -1165,15 +1896,88 @@ minetest.register_node("default:bookshelf", { end, }) -minetest.register_node("default:glass", { - description = "Glass", - drawtype = "glasslike_framed_optional", - tiles = {"default_glass_frame.png", "default_glass_detail.png"}, +minetest.register_node("default:sign_wall", { + description = "Sign", + drawtype = "nodebox", + tiles = {"default_sign_new.png"}, + inventory_image = "default_sign_new_inv.png", + wield_image = "default_sign_new_inv.png", paramtype = "light", + paramtype2 = "wallmounted", sunlight_propagates = true, is_ground_content = false, - groups = {cracky = 3,oddly_breakable_by_hand = 3}, - sounds = default.node_sound_glass_defaults(), + walkable = false, + node_box = { + type = "wallmounted", + wall_top = {-0.4375, 0.4375, -0.3125, 0.4375, 0.5, 0.3125}, + wall_bottom = {-0.4375, -0.5, -0.3125, 0.4375, -0.4375, 0.3125}, + wall_side = {-0.5, -0.3125, -0.4375, -0.4375, 0.3125, 0.4375}, + }, + selection_box = {type = "wallmounted"}, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + sounds = default.node_sound_wood_defaults(), + + on_construct = function(pos) + --local n = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[text;;${text}]") + meta:set_string("infotext", "\"\"") + end, + on_receive_fields = function(pos, formname, fields, sender) + --print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields)) + if minetest.is_protected(pos, sender:get_player_name()) then + minetest.record_protection_violation(pos, sender:get_player_name()) + return + end + local meta = minetest.get_meta(pos) + if not fields.text then return end + minetest.log("action", (sender:get_player_name() or "").." wrote \""..fields.text.. + "\" to sign at "..minetest.pos_to_string(pos) .. ".") + meta:set_string("text", fields.text) + meta:set_string("infotext", "\"" .. fields.text .. "\"") + end, +}) + +minetest.register_node("default:ladder", { + description = "Ladder", + drawtype = "nodebox", + tiles = {"default_ladder_new.png"}, + inventory_image = "default_ladder_new_inv.png", + wield_image = "default_ladder_new_inv.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + climbable = true, + node_box = { + type = "wallmounted", + wall_top = {-0.375, 0.4375, -0.5, 0.375, 0.5, 0.5}, + wall_bottom = {-0.375, -0.5, -0.5, 0.375, -0.4375, 0.5}, + wall_side = {-0.5, -0.5, -0.375, -0.4375, 0.5, 0.375}, + }, + selection_box = {type = "wallmounted"}, + groups = {choppy=2,oddly_breakable_by_hand=3,flammable=2}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("default:ladder_obsidian", { + description = "Ladder Obsidian", + drawtype = "nodebox", + tiles = {"default_ladder_obsidian.png"}, + inventory_image = "default_ladder_obsidian_inv.png", + wield_image = "default_ladder_obsidian_inv.png", + paramtype = "light", + sunlight_propagates = true, + paramtype2 = "wallmounted", + climbable = true, + node_box = { + type = "wallmounted", + wall_top = {-0.375, 0.4375, -0.5, 0.375, 0.5, 0.5}, + wall_bottom = {-0.375, -0.5, -0.5, 0.375, -0.4375, 0.5}, + wall_side = {-0.5, -0.5, -0.375, -0.4375, 0.5, 0.375}, + }, + selection_box = {type = "wallmounted"}, + groups = {cracky = 1}, + sounds = default.node_sound_stone_defaults(), }) local fence_wood_texture = "default_fence_overlay.png^default_wood.png^default_fence_overlay.png^[makealpha:255,126,126" @@ -1190,7 +1994,7 @@ minetest.register_node("default:fence_wood", { type = "fixed", fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7}, }, - groups = {choppy = 2,oddly_breakable_by_hand = 2, flammable = 2}, + groups = {choppy=2,oddly_breakable_by_hand=2,flammable=2}, sounds = default.node_sound_wood_defaults(), }) @@ -1266,629 +2070,17 @@ minetest.register_node("default:fence_brick", { sounds = default.node_sound_stone_defaults(), }) -minetest.register_node("default:ladder", { - description = "Ladder", - drawtype = "nodebox", - tiles = {"default_ladder_new.png"}, - inventory_image = "default_ladder_new_inv.png", - wield_image = "default_ladder_new_inv.png", +minetest.register_node("default:glass", { + description = "Glass", + drawtype = "glasslike_framed_optional", + tiles = {"default_glass_frame.png", "default_glass_detail.png"}, paramtype = "light", sunlight_propagates = true, - paramtype2 = "wallmounted", - climbable = true, - node_box = { - type = "wallmounted", - wall_top = {-0.375, 0.4375, -0.5, 0.375, 0.5, 0.5}, - wall_bottom = {-0.375, -0.5, -0.5, 0.375, -0.4375, 0.5}, - wall_side = {-0.5, -0.5, -0.375, -0.4375, 0.5, 0.375}, - }, - selection_box = {type = "wallmounted"}, - groups = {choppy = 2,oddly_breakable_by_hand = 3, flammable = 2}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("default:ladder_obsidian", { - description = "Ladder Obsidian", - drawtype = "nodebox", - tiles = {"default_ladder_obsidian.png"}, - inventory_image = "default_ladder_obsidian_inv.png", - wield_image = "default_ladder_obsidian_inv.png", - paramtype = "light", - sunlight_propagates = true, - paramtype2 = "wallmounted", - climbable = true, - node_box = { - type = "wallmounted", - wall_top = {-0.375, 0.4375, -0.5, 0.375, 0.5, 0.5}, - wall_bottom = {-0.375, -0.5, -0.5, 0.375, -0.4375, 0.5}, - wall_side = {-0.5, -0.5, -0.375, -0.4375, 0.5, 0.375}, - }, - selection_box = {type = "wallmounted"}, - groups = {cracky = 1}, - sounds = default.node_sound_stone_defaults(), -}) - - -minetest.register_node("default:cloud", { - description = "Cloud", - sunlight_propagates = true, - tiles = {"default_cloud.png"}, - sounds = default.node_sound_defaults(), - groups = {not_in_creative_inventory = 1}, -}) - - - -minetest.register_node("default:sand_flowing", { - description = "Flowing Sand", - inventory_image = minetest.inventorycube("default_sand.png"), - drawtype = "flowingliquid", - tiles = {"default_sand.png"}, - special_tiles = { - { - image = "default_sand_flowing_animated.png", - backface_culling=false, - animation={type = "vertical_frames", aspect_w= 16, aspect_h = 16, length = 0.6} - }, - { - image = "default_sand_flowing_animated.png", - backface_culling=true, - animation={type = "vertical_frames", aspect_w= 16, aspect_h = 16, length = 0.6} - }, - }, - alpha = 255, - paramtype = "light", - paramtype2 = "flowingliquid", - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - drop = "", - drowning = 4, - liquidtype = "flowing", - liquid_alternative_flowing = "default:sand_flowing", - liquid_alternative_source = "default:sand_source", - liquid_viscosity = 20, - post_effect_color = {a = 250, r = 0, g = 0, b = 0}, - groups = {liquid = 3, not_in_creative_inventory = 1}, -}) - -minetest.register_node("default:sand_source", { - description = "Sand Source", - inventory_image = minetest.inventorycube("default_sand.png"), - drawtype = "liquid", - tiles = {"default_sand.png"}, - special_tiles = { - -- New-style water source material (mostly unused) - { - name = "default_sand_source_animated.png", - animation = {type = "vertical_frames", aspect_w= 16, aspect_h = 16, length = 1.5}, - backface_culling = false, - } - }, - alpha = 255, - paramtype = "light", - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - drop = "", - drowning = 4, - liquidtype = "source", - liquid_alternative_flowing = "default:sand_flowing", - liquid_alternative_source = "default:sand_source", - liquid_viscosity = 20, - liquid_renewable = false, - post_effect_color = {a = 250, r = 0, g = 0, b = 0}, - groups = {liquid = 3}, -}) - ---[[ -function default.get_water_area_p0p1(pos) - local p0 = { - x = math.floor(pos.x / water.D) * water.D, - y = math.floor(pos.y / water.D) * water.D, - z = math.floor(pos.z / water.D) * water.D, - } - local p1 = { - x = p0.x + water.D - 1, - y = p0.y + water.D - 1, - z = p0.z + water.D - 1 - } - return p0, p1 -end - -water = {} -water.D = 4 -water.sounds = {} - -function default.update_water_sounds_around(pos) - local p0, p1 = default.get_water_area_p0p1(pos) - local cp = {x = (p0.x + p1.x) / 2, y = (p0.y + p1.y) / 2, z = (p0.z + p1.z) / 2} - local water_p = minetest.find_nodes_in_area(p0, p1, {"default:water_flowing"}) - -- print("number of flames at "..minetest.pos_to_string(p0).."/" - -- ..minetest.pos_to_string(p1)..": "..#flames_p) - local should_have_sound = (#water_p >= 20) - local wanted_sound = nil - if #water_p >= 20 then - wanted_sound = {name = "waterfall"} - end - local p0_hash = minetest.hash_node_position(p0) - local sound = water.sounds[p0_hash] - if not sound then - if should_have_sound then - water.sounds[p0_hash] = { - handle = minetest.sound_play(wanted_sound, {pos = cp, loop = true, max_hear_distance = 16}), - name = wanted_sound.name, - } - end - else - if not wanted_sound then - minetest.sound_stop(sound.handle) - water.sounds[p0_hash] = nil - elseif sound.name ~= wanted_sound.name then - minetest.sound_stop(sound.handle) - water.sounds[p0_hash] = { - handle = minetest.sound_play(wanted_sound, {pos = cp, loop = true, max_hear_distance = 16}), - name = wanted_sound.name, - } - end - end -end - -minetest.register_abm({ - nodenames = {"default:water_flowing"}, - interval = 2, - chance = 1, - action = function(pos, node) - default.update_water_sounds_around(pos) - end -}) ---]] - -minetest.register_node("default:lava_flowing", { - description = "Flowing Lava", - inventory_image = minetest.inventorycube("default_lava.png"), - drawtype = "flowingliquid", - tiles = {"default_lava.png"}, - special_tiles = { - { - name = "default_lava_flowing_animated.png", - backface_culling = false, - animation={type = "vertical_frames", aspect_w= 16, aspect_h = 16, length = 1.5} - }, - { - name = "default_lava_flowing_animated.png", - backface_culling = true, - animation={type = "vertical_frames", aspect_w= 16, aspect_h = 16, length = 1.5} - }, - }, - paramtype = "light", - paramtype2 = "flowingliquid", - light_source = default.LIGHT_MAX - 1, - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - drop = "", - drowning = 2, - liquidtype = "flowing", - liquid_alternative_flowing = "default:lava_flowing", - liquid_alternative_source = "default:lava_source", - liquid_viscosity = 7, - liquid_renewable = false, - damage_per_second = 8, - post_effect_color = {a = 220, r = 250, g = 70, b = 20}, - groups = {lava = 3, liquid = 2, hot = 3, igniter = 1, not_in_creative_inventory = 1}, -}) - -minetest.register_node("default:lava_source", { - description = "Lava Source", - inventory_image = minetest.inventorycube("default_lava.png"), - drawtype = "liquid", - tiles = { - {name = "default_lava_source_animated.png", animation={type = "vertical_frames", aspect_w= 16, aspect_h = 16, length = 3.0}} - }, - special_tiles = { - -- New-style lava source material (mostly unused) - { - name = "default_lava_source_animated.png", - animation={type = "vertical_frames", aspect_w= 16, aspect_h = 16, length = 3.0}, - backface_culling = false, - } - }, - paramtype = "light", - light_source = default.LIGHT_MAX - 1, - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - drop = "", - drowning = 2, - liquidtype = "source", - liquid_alternative_flowing = "default:lava_flowing", - liquid_alternative_source = "default:lava_source", - liquid_viscosity = 7, - liquid_renewable = false, - damage_per_second = 8, - post_effect_color = {a = 220, r = 250, g = 70, b = 20}, - groups = {lava = 3, liquid = 2, hot = 3, igniter = 1}, -}) - ---[[ -function default.get_lava_area_p0p1(pos) - local p0 = { - x = math.floor(pos.x / lava.D) * lava.D, - y = math.floor(pos.y / lava.D) * lava.D, - z = math.floor(pos.z / lava.D) * lava.D, - } - local p1 = { - x = p0.x + lava.D - 1, - y = p0.y + lava.D - 1, - z = p0.z + lava.D - 1 - } - return p0, p1 -end - -lava = {} -lava.D = 4 -lava.sounds = {} - -function default.update_lava_sounds_around(pos) - local p0, p1 = default.get_lava_area_p0p1(pos) - local cp = {x = (p0.x + p1.x) / 2, y = (p0.y + p1.y) / 2, z = (p0.z + p1.z) / 2} - local lava_p = minetest.find_nodes_in_area(p0, p1, {"default:lava_flowing"}) - -- print("number of flames at "..minetest.pos_to_string(p0).."/" - -- ..minetest.pos_to_string(p1)..": "..#flames_p) - local should_have_sound = (#lava_p >= 40) - local wanted_sound = nil - if #lava_p >= 40 then - wanted_sound = {name = "lava"} - end - local p0_hash = minetest.hash_node_position(p0) - local sound = lava.sounds[p0_hash] - if not sound then - if should_have_sound then - lava.sounds[p0_hash] = { - handle = minetest.sound_play(wanted_sound, {pos = cp, loop = true}), - name = wanted_sound.name, - } - end - else - if not wanted_sound then - minetest.sound_stop(sound.handle) - lava.sounds[p0_hash] = nil - elseif sound.name ~= wanted_sound.name then - minetest.sound_stop(sound.handle) - lava.sounds[p0_hash] = { - handle = minetest.sound_play(wanted_sound, {pos = cp, loop = true}), - name = wanted_sound.name, - } - end - end -end - -minetest.register_abm({ - nodenames = {"default:lava_flowing"}, - interval = 2, - chance = 1, - action = function(pos, node) - default.update_lava_sounds_around(pos) - end -}) ---]] - -minetest.register_node("default:acid_flowing", { - description = "Flowing Acid", - inventory_image = minetest.inventorycube("default_acid.png"), - drawtype = "flowingliquid", - tiles = {"default_acid.png"}, - special_tiles = { - { - image = "default_acid_flowing_animated.png", - backface_culling=false, - animation={type = "vertical_frames", aspect_w= 16, aspect_h = 16, length = 0.6} - }, - { - image = "default_acid_flowing_animated.png", - backface_culling=true, - animation={type = "vertical_frames", aspect_w= 16, aspect_h = 16, length = 0.6} - }, - }, - alpha = 160, - paramtype = "light", - paramtype2 = "flowingliquid", - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - drop = "", - drowning = 2, - liquidtype = "flowing", - liquid_alternative_flowing = "default:acid_flowing", - liquid_alternative_source = "default:acid_source", - liquid_viscosity = 1, - damage_per_second = 3, - post_effect_color = {a = 120, r = 50, g = 90, b = 30}, - groups = {water = 3, acid = 3, liquid = 3, puts_out_fire = 1, not_in_creative_inventory = 1}, -}) - -minetest.register_node("default:acid_source", { - description = "Acid Source", - inventory_image = minetest.inventorycube("default_acid.png"), - drawtype = "liquid", - tiles = { - {name = "default_acid_source_animated.png", animation={type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 1.5}} - }, - special_tiles = { - -- New-style acid source material (mostly unused) - { - name = "default_acid_source_animated.png", - animation = {type = "vertical_frames", aspect_w= 16, aspect_h = 16, length = 1.5}, - backface_culling = false, - } - }, - alpha = 160, - paramtype = "light", - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - drop = "", - drowning = 2, - liquidtype = "source", - liquid_alternative_flowing = "default:acid_flowing", - liquid_alternative_source = "default:acid_source", - liquid_viscosity = 1, - damage_per_second = 3, - post_effect_color = {a = 120, r = 50, g = 90, b = 30}, - groups = {water = 3, acid = 3, liquid = 3, puts_out_fire = 1}, -}) - -minetest.register_node("default:torch", { - description = "Torch", - drawtype = "nodebox", - tiles = { - {name = "default_torch_new_top.png", animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.0}}, - {name = "default_torch_new_bottom.png", animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.0}}, - {name = "default_torch_new_side.png", animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.0}}, - }, - inventory_image = "default_torch_new_inv.png", - wield_image = "default_torch_new_inv.png", - wield_scale = {x = 1, y = 1, z = 1.25}, - paramtype = "light", - paramtype2 = "wallmounted", - sunlight_propagates = true, is_ground_content = false, - walkable = false, - light_source = default.LIGHT_MAX - 1, - node_box = { - type = "wallmounted", - wall_top = {-0.0625, -0.0625, -0.0625, 0.0625, 0.5 , 0.0625}, - wall_bottom = {-0.0625, -0.5 , -0.0625, 0.0625, 0.0625, 0.0625}, - wall_side = {-0.5 , -0.5 , -0.0625, -0.375, 0.0625, 0.0625}, - }, - selection_box = { - type = "wallmounted", - wall_top = {-0.25, -0.0625, -0.25, 0.25, 0.5 , 0.25}, - wall_bottom = {-0.25, -0.5 , -0.25, 0.25, 0.0625, 0.25}, - wall_side = {-0.25, -0.5 , -0.25, -0.5, 0.0625, 0.25}, - }, - groups = {choppy = 2, dig_immediate = 3, flammable = 1, attached_node = 1, hot = 2}, - sounds = default.node_sound_wood_defaults(), + groups = {cracky=3,oddly_breakable_by_hand=3}, + sounds = default.node_sound_glass_defaults(), }) -minetest.register_node("default:sign_wall", { - description = "Sign", - drawtype = "nodebox", - tiles = {"default_sign_new.png"}, - inventory_image = "default_sign_new_inv.png", - wield_image = "default_sign_new_inv.png", - paramtype = "light", - paramtype2 = "wallmounted", - sunlight_propagates = true, - is_ground_content = false, - walkable = false, - node_box = { - type = "wallmounted", - wall_top = {-0.4375, 0.4375, -0.3125, 0.4375, 0.5, 0.3125}, - wall_bottom = {-0.4375, -0.5, -0.3125, 0.4375, -0.4375, 0.3125}, - wall_side = {-0.5, -0.3125, -0.4375, -0.4375, 0.3125, 0.4375}, - }, - selection_box = {type = "wallmounted"}, - groups = {choppy = 2, dig_immediate = 2, attached_node = 1}, - sounds = default.node_sound_wood_defaults(), - on_construct = function(pos) - -- local n = minetest.get_node(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", "field[text;;${text}]") - meta:set_string("infotext", "\"\"") - end, - on_receive_fields = function(pos, formname, fields, sender) - -- print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields)) - if minetest.is_protected(pos, sender:get_player_name()) then - minetest.record_protection_violation(pos, sender:get_player_name()) - return - end - local meta = minetest.get_meta(pos) - fields.text = fields.text or "" - minetest.log("action", (sender:get_player_name() or "").." wrote \""..fields.text.. - "\" to sign at "..minetest.pos_to_string(pos) .. ".") - meta:set_string("text", fields.text) - meta:set_string("infotext", "\"" .. fields.text .. "\"") - end, -}) - -default.chest_formspec = - "size[8,9]" .. - default.gui_slots .. - "list[current_name;main;0,0.3;8,4;]" .. - "list[current_player;main;0,4.85;8,4;]" .. - default.get_hotbar_bg(0, 4.85) .. - default.get_hotbar_bg(0, 5.85) - -function default.get_locked_chest_formspec(pos) - local spos = pos.x .. "," .. pos.y .. "," .. pos.z - local formspec = - "size[8,9]" .. - default.gui_slots .. - "list[nodemeta:".. spos .. ";main;0,0.3;8,4;]" .. - "list[current_player;main;0,4.85;8,4;]" .. - default.get_hotbar_bg(0, 4.85) .. - default.get_hotbar_bg(0, 5.85) - return formspec -end - - -minetest.register_node("default:chest", { - description = "Chest", - tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png", - "default_chest_side.png", "default_chest_side.png", "default_chest_front.png"}, - paramtype2 = "facedir", - groups = {choppy = 2,oddly_breakable_by_hand = 2}, - is_ground_content = false, - sounds = default.node_sound_wood_defaults(), - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", default.chest_formspec) - meta:set_string("infotext", "Chest") - local inv = meta:get_inventory() - inv:set_size("main", 8 * 4) - end, - can_dig = function(pos,player) - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("main") - end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in chest at "..minetest.pos_to_string(pos) .. ".") - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to chest at "..minetest.pos_to_string(pos) .. ".") - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from chest at "..minetest.pos_to_string(pos) .. ".") - end, -}) - -local function has_locked_chest_privilege(meta, player) - if player:get_player_name() ~= meta:get_string("owner") and player:get_player_name() ~= minetest.setting_get("name") then - return false - end - return true -end - -minetest.register_node("default:chest_locked", { - description = "Locked Chest", - tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png", - "default_chest_side.png", "default_chest_side.png", "default_chest_lock.png"}, - paramtype2 = "facedir", - groups = {choppy = 2,oddly_breakable_by_hand = 2}, - is_ground_content = false, - sounds = default.node_sound_wood_defaults(), - after_place_node = function(pos, placer) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", default.get_locked_chest_formspec(pos)) - meta:set_string("owner", placer:get_player_name() or "") - meta:set_string("infotext", "Locked Chest (owned by ".. - meta:get_string("owner")..")") - end, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", default.get_locked_chest_formspec(pos)) - meta:set_string("owner", "") - meta:set_string("infotext", "Locked Chest") - local inv = meta:get_inventory() - inv:set_size("main", 8 * 4) - end, - can_dig = function(pos,player) - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("main") and has_locked_chest_privilege(meta, player) - end, - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - local meta = minetest.get_meta(pos) - if not has_locked_chest_privilege(meta, player) then - minetest.log("action", player:get_player_name().. - " tried to access a locked chest belonging to ".. - meta:get_string("owner").." at ".. - minetest.pos_to_string(pos) .. ".") - return 0 - end - return count - end, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local meta = minetest.get_meta(pos) - if not has_locked_chest_privilege(meta, player) then - minetest.log("action", player:get_player_name().. - " tried to access a locked chest belonging to ".. - meta:get_string("owner").." at ".. - minetest.pos_to_string(pos) .. ".") - return 0 - end - return stack:get_count() - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - local meta = minetest.get_meta(pos) - if not has_locked_chest_privilege(meta, player) then - minetest.log("action", player:get_player_name().. - " tried to access a locked chest belonging to ".. - meta:get_string("owner").." at ".. - minetest.pos_to_string(pos) .. ".") - return 0 - end - return stack:get_count() - end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in locked chest at "..minetest.pos_to_string(pos) .. ".") - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to locked chest at "..minetest.pos_to_string(pos) .. ".") - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from locked chest at "..minetest.pos_to_string(pos) .. ".") - end, -}) - -minetest.register_node("default:cobble_cooled", { - description = "Cobblestone (cooled)", - tiles = {"default_cobble.png"}, - is_ground_content = true, - drop = "default:cobble", - groups = {cracky = 3, stone = 2}, - sounds = default.node_sound_stone_defaults(), -}) - -local function die_later(digger) - digger:set_hp(0) -end - -minetest.register_node("default:meze", { - description = "Meze Block", - tiles = {"default_meze_block.png"}, - is_ground_content = true, - drop = "", - groups = {cracky = 1, level = 2, fall_damage_add_percent = -75}, - sounds = default.node_sound_wood_defaults(), -- Intended. - - on_dig = function(pos, node, digger) - if digger and minetest.setting_getbool("enable_damage") and not minetest.setting_getbool("creative_mode") then - minetest.after(3, die_later, digger) - minetest.chat_send_player(digger:get_player_name(), "You feel like you did a mistake.") - minetest.node_dig(pos, node, digger) - elseif digger then - minetest.node_dig(pos, node, digger) - end - end, -}) -minetest.register_alias("default:meze_block", "default:meze") - minetest.register_node("default:obsidian_glass", { description = "Obsidian Glass", drawtype = "glasslike_framed_optional", @@ -1897,18 +2089,60 @@ minetest.register_node("default:obsidian_glass", { is_ground_content = false, sunlight_propagates = true, sounds = default.node_sound_glass_defaults(), - groups = {cracky = 3,oddly_breakable_by_hand = 3}, + groups = {cracky=3,oddly_breakable_by_hand=3}, }) +minetest.register_node("default:rail", { + description = "Rail", + drawtype = "raillike", + tiles = {"default_rail.png", "default_rail_curved.png", "default_rail_t_junction.png", "default_rail_crossing.png"}, + inventory_image = "default_rail.png", + wield_image = "default_rail.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + is_ground_content = false, + selection_box = { + type = "fixed", + -- but how to specify the dimensions for curved and sideways rails? + fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, + }, + groups = {bendy=2,dig_immediate=2,attached_node=1,connect_to_raillike=minetest.raillike_group("rail")}, +}) -minetest.register_node("default:obsidian_cooled", { - description = "Obsidian (cooled)", - tiles = {"default_obsidian.png"}, - is_ground_content = true, - drop = "default:obsidian", +minetest.register_node("default:brick", { + description = "Brick Block", + tiles = {"default_brick.png"}, + is_ground_content = false, + groups = {cracky=3}, + drop = "default:clay_brick 9", sounds = default.node_sound_stone_defaults(), - groups = {cracky = 1, level = 2}, +}) + + +minetest.register_node("default:meselamp", { + description = "Mese Lamp", + drawtype = "glasslike", + tiles = {"default_meselamp.png"}, + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + groups = {cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_glass_defaults(), + light_source = default.LIGHT_MAX, +}) + +-- +-- Misc +-- + +minetest.register_node("default:cloud", { + description = "Cloud", + sunlight_propagates = true, + tiles = {"default_cloud.png"}, + sounds = default.node_sound_defaults(), + groups = {not_in_creative_inventory=1}, }) minetest.register_node("default:nyancat", { @@ -1918,7 +2152,7 @@ minetest.register_node("default:nyancat", { paramtype = "light", paramtype2 = "facedir", light_source = default.LIGHT_MAX - 1, - groups = {cracky = 2}, + groups = {cracky=2}, is_ground_content = false, post_effect_color = {a = 128, r= 255, g= 128, b= 255}, sounds = default.node_sound_stone_defaults(), @@ -1927,203 +2161,23 @@ minetest.register_node("default:nyancat", { minetest.register_node("default:nyancat_rainbow", { description = "Nyan Cat Rainbow", drawtype = "glasslike", - tiles = {"default_nc_rb.png^[transformR90", "default_nc_rb.png^[transformR90", - "default_nc_rb.png", "default_nc_rb.png"}, + tiles = { + "default_nc_rb.png^[transformR90", "default_nc_rb.png^[transformR90", + "default_nc_rb.png", "default_nc_rb.png" + }, paramtype = "light", paramtype2 = "facedir", + groups = {cracky=2}, light_source = default.LIGHT_MAX - 1, sunlight_propagates = true, walkable = false, use_texture_alpha = true, climbable = true, - groups = {cracky = 2}, is_ground_content = false, post_effect_color = {a = 128, r= 255, g= 128, b= 255}, sounds = default.node_sound_stone_defaults(), }) --- From BFD: Cherry tree - -minetest.register_node("default:cherry_tree", { - description = "Cherry Log", - tiles = {"default_cherry_top.png", "default_cherry_top.png", "default_cherry_tree.png"}, - is_ground_content = false, - groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2}, - sounds = default.node_sound_wood_defaults(), - drop = "default:cherry_log" -}) - -minetest.register_node("default:cherry_log", { - description = "Cherry Log", - tiles = {"default_cherry_top.png", "default_cherry_top.png", "default_cherry_tree.png"}, - paramtype2 = "facedir", - is_ground_content = false, - groups = {choppy=2,oddly_breakable_by_hand=1,flammable=2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node, -}) - -minetest.register_node("default:cherry_sapling", { - description = "Cherry Sapling", - waving = 1, - visual_scale = 1.0, - inventory_image = "default_cherry_sapling.png", - wield_image = "default_cherry_sapling.png", - drawtype = "plantlike", - paramtype = "light", - tiles = {"default_cherry_sapling.png"}, - walkable = false, - selection_box = { - type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} - }, - groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1}, - sounds = default.node_sound_leaves_defaults(), -}) - -minetest.register_node("default:cherry_blossom_leaves", { - description = "Cherry Blossom Leaves", - drawtype = "allfaces_optional", - visual_scale = 1.3, - tiles = {"default_cherry_blossom_leaves.png"}, - paramtype = "light", - waving = 1, - is_ground_content = false, - groups = {snappy=3, leafdecay=3, flammable=2, leaves=1}, - drop = { - max_items = 1, - items = { - { - items = {'default:cherry_sapling'}, - rarity = 32, - }, - { - items = {'default:cherry_blossom_leaves'}, - } - } - }, - sounds = default.node_sound_leaves_defaults(), - on_place = function(itemstack, placer, pointed_thing) - -- place a random grass node - local stack = ItemStack("default:cherry_leaves_deco") - local ret = minetest.item_place(stack, placer, pointed_thing) - return ItemStack("default:cherry_blossom_leaves".." "..itemstack:get_count()-(1-ret:get_count())) - end, -}) -minetest.register_node("default:river_water_source", { - description = "River Water Source", - inventory_image = minetest.inventorycube("default_water.png"), - drawtype = "liquid", - tiles = { - { - name = "default_water_source_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 2.0, - }, - }, - }, - special_tiles = { - { - name = "default_water_source_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 2.0, - }, - backface_culling = false, - }, - }, - alpha = 160, - paramtype = "light", - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - is_ground_content = false, - drop = "", - drowning = 1, - liquidtype = "source", - liquid_alternative_flowing = "default:river_water_flowing", - liquid_alternative_source = "default:river_water_source", - liquid_viscosity = 1, - liquid_renewable = false, - liquid_range = 2, - post_effect_color = {a=64, r=100, g=100, b=200}, - groups = {water=3, liquid=3, puts_out_fire=1}, -}) - -minetest.register_node("default:river_water_flowing", { - description = "Flowing River Water", - inventory_image = minetest.inventorycube("default_water.png"), - drawtype = "flowingliquid", - tiles = {"default_water.png"}, - special_tiles = { - { - name = "default_water_flowing_animated.png", - backface_culling = false, - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 0.8, - }, - }, - { - name = "default_water_flowing_animated.png", - backface_culling = true, - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 0.8, - }, - }, - }, - alpha = 160, - paramtype = "light", - paramtype2 = "flowingliquid", - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - is_ground_content = false, - drop = "", - drowning = 1, - liquidtype = "flowing", - liquid_alternative_flowing = "default:river_water_flowing", - liquid_alternative_source = "default:river_water_source", - liquid_viscosity = 1, - liquid_renewable = false, - liquid_range = 2, - post_effect_color = {a=64, r=100, g=100, b=200}, - groups = {water=3, liquid=3, puts_out_fire=1, not_in_creative_inventory=1}, -}) - - -minetest.register_node("default:cherry_leaves_deco", { - description = "Cherry Leaves", - drawtype = "allfaces_optional", - visual_scale = 1.3, - tiles = {"default_cherry_blossom_leaves.png"}, - paramtype = "light", - waving=1, - is_ground_content = false, - groups = {snappy=3, flammable=2, leaves=1}, - sounds = default.node_sound_leaves_defaults(), - drop = {'default:cherry_blossom_leaves'}, -}) - -minetest.register_node("default:cherry_plank", { - description = "Cherry Planks", - tiles = {"default_wood_cherry_planks.png"}, - sounds = default.node_sound_wood_defaults(), - groups = {oddly_breakable_by_hand=1, flammable=1, choppy=3, wood=1}, -}) - if minetest.setting_getbool("xray") then -- Nodes to make partially see-through: minetest.override_item("default:stone_with_coal", {tiles = {"default_mineral_coal.png"}}) @@ -2151,108 +2205,3 @@ if minetest.setting_getbool("xray") then minetest.override_item("default:cobble", {drawtype = "airlike", pointable = false,}) minetest.override_item("default:desert_cobble", {drawtype = "airlike", pointable = false,}) end - -minetest.register_node("default:desert_stone_with_copper", { - description = "Copper Ore", - tiles = {"default_desert_stone.png^default_mineral_copper.png"}, - is_ground_content = true, - groups = {crumbly = 1, cracky = 3}, - drop = { - items = { - {items = {"default:desert_cobble"}}, - {items = {"default:copper_lump"}}, - {items = {"maptools:copper_coin 3"}}, - }, - }, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:clay_burned", { - description = "Burned Clay", - tiles = {"default_clay_burned.png"}, - is_ground_content = true, - groups = {crumbly = 3}, - drop = { - items = { - {items = {"default:clay_lump 8"}}, - }, - }, - sounds = default.node_sound_dirt_defaults(), -}) - -minetest.register_node("default:brick", { - description = "Brick Block", - tiles = {"default_brick.png"}, - is_ground_content = false, - groups = {cracky = 3}, - drop = "default:clay_brick 9", - sounds = default.node_sound_stone_defaults(), -}) - - -minetest.register_node("default:meselamp", { - description = "Mese Lamp", - drawtype = "glasslike", - tiles = {"default_meselamp.png"}, - paramtype = "light", - sunlight_propagates = true, - is_ground_content = false, - groups = {cracky = 3, oddly_breakable_by_hand = 3}, - sounds = default.node_sound_glass_defaults(), - light_source = 12, -}) - - -minetest.register_node("default:desert_stone_with_coal", { - description = "Coal Ore", - tiles = {"default_desert_stone.png^default_mineral_coal.png"}, - is_ground_content = true, - groups = {crumbly = 1, cracky = 3}, - drop = { - items = { - {items = {"default:desert_cobble"}}, - {items = {"default:coal_lump"}}, - {items = {"maptools:copper_coin"}}, - }, - }, - sounds = default.node_sound_stone_defaults(), -}) - - -minetest.register_abm({ - nodenames = {"default:dirt"}, - interval = 30, - chance = 5, - action = function(pos, node) - local above = {x = pos.x, y = pos.y + 1, z = pos.z} - local name = minetest.get_node(above).name - local nodedef = minetest.registered_nodes[name] - if nodedef and (nodedef.sunlight_propagates or nodedef.paramtype == "light") - and nodedef.liquidtype == "none" - and pos.y >= 0 - and (minetest.get_node_light(above) or 0) >= 12 then - if name == "default:snow" or name == "default:snowblock" then - minetest.set_node(pos, {name = "default:dirt_with_snow"}) - else - minetest.set_node(pos, {name = "default:dirt_with_grass"}) - end - end - end -}) - - -minetest.register_abm({ - nodenames = {"default:dirt_with_grass"}, - interval = 30, - chance = 2, - action = function(pos, node) - local above = {x = pos.x, y = pos.y + 1, z = pos.z} - local name = minetest.get_node(above).name - local nodedef = minetest.registered_nodes[name] - if name ~= "ignore" and nodedef - and not ((nodedef.sunlight_propagates or nodedef.paramtype == "light") - and nodedef.liquidtype == "none") then - minetest.set_node(pos, {name = "default:dirt"}) - end - end -})