From 0a3bf5b220fa1c700f20baec40c85f88d197bfe9 Mon Sep 17 00:00:00 2001 From: paramat Date: Fri, 7 Aug 2015 16:03:53 +0100 Subject: [PATCH 01/73] Biomes: Tune v5/v7 biomes and v5/v6/v7 mushroom distribution More complex distribution of dry grasses Remove water below glacier rivers Gravel as glacier seabed Do not force-place acacia root Tune acacia tree density Match mgv5/v7 mushrooms to tree density Spawn mgv6 mushrooms by trees --- mods/default/mapgen.lua | 32 ++++++++++++------------ mods/default/schematics/acacia_tree.mts | Bin 204 -> 204 bytes mods/flowers/mapgen.lua | 18 ++++++++++--- 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua index 660e0a12..661c8a0c 100644 --- a/mods/default/mapgen.lua +++ b/mods/default/mapgen.lua @@ -330,9 +330,9 @@ function default.register_biomes() depth_filler = 3, node_stone = "default:ice", node_water_top = "default:ice", - depth_water_top = 8, + depth_water_top = 10, --node_water = "", - y_min = -6, + y_min = -8, y_max = 31000, heat_point = -5, humidity_point = 50, @@ -341,16 +341,16 @@ function default.register_biomes() minetest.register_biome({ name = "glacier_ocean", node_dust = "default:snowblock", - node_top = "default:sand", + node_top = "default:gravel", depth_top = 1, - node_filler = "default:sand", + node_filler = "default:gravel", depth_filler = 2, --node_stone = "", --node_water_top = "", --depth_water_top = , --node_water = "", y_min = -112, - y_max = -7, + y_max = -9, heat_point = -5, humidity_point = 50, }) @@ -734,7 +734,7 @@ function default.register_mgv6_decorations() y_max = 1, decoration = "default:papyrus", height = 2, - height_max = 4, + height_max = 4, spawn_by = "default:water_source", num_spawn_by = 1, }) @@ -828,14 +828,14 @@ local function register_grass_decoration(offset, scale, length) }) end -local function register_dry_grass_decoration(length) +local function register_dry_grass_decoration(offset, scale, length) minetest.register_decoration({ deco_type = "simple", place_on = {"default:dirt_with_dry_grass"}, sidelen = 16, noise_params = { - offset = 0.04, - scale = 0.02, + offset = offset, + scale = scale, spread = {x=200, y=200, z=200}, seed = 329, octaves = 3, @@ -914,8 +914,8 @@ function default.register_decorations() place_on = {"default:dirt_with_dry_grass"}, sidelen = 80, noise_params = { - offset = 0.001, - scale = 0.0015, + offset = 0, + scale = 0.003, spread = {x=250, y=250, z=250}, seed = 2, octaves = 3, @@ -1003,11 +1003,11 @@ function default.register_decorations() -- Dry grasses - register_dry_grass_decoration(5) - register_dry_grass_decoration(4) - register_dry_grass_decoration(3) - register_dry_grass_decoration(2) - register_dry_grass_decoration(1) + register_dry_grass_decoration(0.01, 0.05, 5) + register_dry_grass_decoration(0.03, 0.03, 4) + register_dry_grass_decoration(0.05, 0.01, 3) + register_dry_grass_decoration(0.07, -0.01, 2) + register_dry_grass_decoration(0.09, -0.03, 1) -- Junglegrass diff --git a/mods/default/schematics/acacia_tree.mts b/mods/default/schematics/acacia_tree.mts index 986c022d62329b17994681cb1c9e18584b4002cf..43e7867a4f1262815fad4e05f1ccd3868ee5ed6f 100644 GIT binary patch delta 68 zcmV-K0K5Op0n7oARRef*Ymrz!HX*{ep Date: Fri, 7 Aug 2015 17:41:44 +0100 Subject: [PATCH 02/73] Mushrooms: Rename spore nodes. Single ABM for mushroom growing Code re-arranged and clarified --- mods/flowers/init.lua | 184 ++++++++++-------- ....png => flowers_mushroom_spores_brown.png} | Bin ...ed.png => flowers_mushroom_spores_red.png} | Bin 3 files changed, 99 insertions(+), 85 deletions(-) rename mods/flowers/textures/{flowers_spores_brown.png => flowers_mushroom_spores_brown.png} (100%) rename mods/flowers/textures/{flowers_spores_red.png => flowers_mushroom_spores_red.png} (100%) diff --git a/mods/flowers/init.lua b/mods/flowers/init.lua index 07507332..7209fad3 100644 --- a/mods/flowers/init.lua +++ b/mods/flowers/init.lua @@ -1,21 +1,29 @@ -- Minetest 0.4 mod: default -- See README.txt for licensing and other information. + -- Namespace for functions + flowers = {} -- Map Generation + dofile(minetest.get_modpath("flowers") .. "/mapgen.lua") +-- +-- Flowers +-- + -- Aliases for original flowers mod -minetest.register_alias("flowers:flower_dandelion_white", "flowers:dandelion_white") -minetest.register_alias("flowers:flower_dandelion_yellow", "flowers:dandelion_yellow") -minetest.register_alias("flowers:flower_geranium", "flowers:geranium") + minetest.register_alias("flowers:flower_rose", "flowers:rose") minetest.register_alias("flowers:flower_tulip", "flowers:tulip") +minetest.register_alias("flowers:flower_dandelion_yellow", "flowers:dandelion_yellow") +minetest.register_alias("flowers:flower_geranium", "flowers:geranium") minetest.register_alias("flowers:flower_viola", "flowers:viola") +minetest.register_alias("flowers:flower_dandelion_white", "flowers:dandelion_white") -- Flower registration @@ -61,88 +69,6 @@ for _,item in pairs(flowers.datas) do end --- Mushrooms - -local mushrooms_datas = { - {"brown", 2}, - {"red", -6} -} - -for _, m in pairs(mushrooms_datas) do - local name, nut = m[1], m[2] - - -- Register mushrooms - - minetest.register_node("flowers:mushroom_" .. name, { - description = string.sub(string.upper(name), 0, 1) .. - string.sub(name, 2) .. " Mushroom", - tiles = {"flowers_mushroom_" .. name .. ".png"}, - inventory_image = "flowers_mushroom_" .. name .. ".png", - wield_image = "flowers_mushroom_" .. name .. ".png", - drawtype = "plantlike", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - buildable_to = true, - groups = {snappy = 3, flammable = 3, attached_node = 1}, - drop = { - items = { - {items = {"flowers:spores_" .. name}, rarity = 2,}, - {items = {"flowers:spores_" .. name}, rarity = 2,}, - {items = {"flowers:spores_" .. name}, rarity = 2,}, - {items = {"flowers:mushroom_" .. name},}, - }, - }, - sounds = default.node_sound_leaves_defaults(), - on_use = minetest.item_eat(nut), - selection_box = { - type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3} - } - }) - - -- Register spores - - minetest.register_node("flowers:spores_" .. name, { - description = string.sub(string.upper(name), 0, 1) .. - string.sub(name, 2) .. " Mushroom Spores", - drawtype = "signlike", - tiles = {"flowers_spores_" .. name .. ".png"}, - inventory_image = "flowers_spores_" .. name .. ".png", - wield_image = "flowers_spores_" .. name .. ".png", - paramtype = "light", - paramtype2 = "wallmounted", - sunlight_propagates = true, - walkable = false, - buildable_to = true, - selection_box = { - type = "wallmounted", - }, - groups = {dig_immediate = 3, attached_node = 1}, - }) - - -- Register growth ABMs - - minetest.register_abm({ - nodenames = {"flowers:spores_" .. name}, - interval = 14, - chance = 25, - action = function(pos, node) - local node_under = minetest.get_node_or_nil({x = pos.x, - y = pos.y - 1, z = pos.z}) - if not node_under then - return - end - if minetest.get_item_group(node_under.name, "soil") ~= 0 and - minetest.get_node_light(pos, nil) <= 13 then - minetest.set_node({x = pos.x, y = pos.y, z = pos.z}, - {name = "flowers:mushroom_" .. name}) - end - end - }) -end - - -- Flower spread minetest.register_abm({ @@ -190,3 +116,91 @@ minetest.register_abm({ end end, }) + + +-- +-- Mushrooms +-- + +local mushrooms_datas = { + {"brown", 2}, + {"red", -6} +} + +for _, m in pairs(mushrooms_datas) do + local name, nut = m[1], m[2] + + -- Register mushrooms + + minetest.register_node("flowers:mushroom_" .. name, { + description = string.sub(string.upper(name), 0, 1) .. + string.sub(name, 2) .. " Mushroom", + tiles = {"flowers_mushroom_" .. name .. ".png"}, + inventory_image = "flowers_mushroom_" .. name .. ".png", + wield_image = "flowers_mushroom_" .. name .. ".png", + drawtype = "plantlike", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flammable = 3, attached_node = 1}, + drop = { + items = { + {items = {"flowers:mushroom_spores_" .. name}, rarity = 2,}, + {items = {"flowers:mushroom_spores_" .. name}, rarity = 2,}, + {items = {"flowers:mushroom_spores_" .. name}, rarity = 2,}, + {items = {"flowers:mushroom_" .. name},}, + }, + }, + sounds = default.node_sound_leaves_defaults(), + on_use = minetest.item_eat(nut), + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3} + } + }) + + -- Register mushroom spores + + minetest.register_node("flowers:mushroom_spores_" .. name, { + description = string.sub(string.upper(name), 0, 1) .. + string.sub(name, 2) .. " Mushroom Spores", + drawtype = "signlike", + tiles = {"flowers_mushroom_spores_" .. name .. ".png"}, + inventory_image = "flowers_mushroom_spores_" .. name .. ".png", + wield_image = "flowers_mushroom_spores_" .. name .. ".png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + selection_box = { + type = "wallmounted", + }, + groups = {dig_immediate = 3, attached_node = 1}, + }) +end + + +-- Register growing ABM + +minetest.register_abm({ + nodenames = {"flowers:mushroom_spores_brown", "flowers:mushroom_spores_red"}, + interval = 11, + chance = 50, + action = function(pos, node) + local node_under = minetest.get_node_or_nil({x = pos.x, + y = pos.y - 1, z = pos.z}) + if not node_under then + return + end + if minetest.get_item_group(node_under.name, "soil") ~= 0 and + minetest.get_node_light(pos, nil) <= 13 then + if node.name == "flowers:mushroom_spores_brown" then + minetest.set_node(pos, {name = "flowers:mushroom_brown"}) + else + minetest.set_node(pos, {name = "flowers:mushroom_red"}) + end + end + end +}) diff --git a/mods/flowers/textures/flowers_spores_brown.png b/mods/flowers/textures/flowers_mushroom_spores_brown.png similarity index 100% rename from mods/flowers/textures/flowers_spores_brown.png rename to mods/flowers/textures/flowers_mushroom_spores_brown.png diff --git a/mods/flowers/textures/flowers_spores_red.png b/mods/flowers/textures/flowers_mushroom_spores_red.png similarity index 100% rename from mods/flowers/textures/flowers_spores_red.png rename to mods/flowers/textures/flowers_mushroom_spores_red.png From 6194f9ffeaf0dd9a757979af0f8936e8625552b5 Mon Sep 17 00:00:00 2001 From: paramat Date: Fri, 7 Aug 2015 20:24:12 +0100 Subject: [PATCH 03/73] Default/trees: Combine sapling ABMs into one ABM --- mods/default/trees.lua | 116 ++++++++++++++++++----------------------- 1 file changed, 51 insertions(+), 65 deletions(-) diff --git a/mods/default/trees.lua b/mods/default/trees.lua index b5b20ec5..4f2b2290 100644 --- a/mods/default/trees.lua +++ b/mods/default/trees.lua @@ -1,7 +1,9 @@ -- --- Grow trees +-- Grow trees from saplings -- +-- 'Can grow' function + local random = math.random local function can_grow(pos) @@ -17,10 +19,12 @@ local function can_grow(pos) return true end --- Sapling ABMs + +-- Sapling ABM minetest.register_abm({ - nodenames = {"default:sapling"}, + nodenames = {"default:sapling", "default:junglesapling", + "default:pine_sapling", "default:acacia_sapling"}, interval = 10, chance = 50, action = function(pos, node) @@ -28,70 +32,45 @@ minetest.register_abm({ return end - minetest.log("action", "A sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - if minetest.get_mapgen_params().mgname == "v6" then - default.grow_tree(pos, random(1, 4) == 1) - else - default.grow_new_apple_tree(pos) + local mapgen = minetest.get_mapgen_params().mgname + if node.name == "default:sapling" then + minetest.log("action", "A sapling grows into a tree at ".. + minetest.pos_to_string(pos)) + if mapgen == "v6" then + default.grow_tree(pos, random(1, 4) == 1) + else + default.grow_new_apple_tree(pos) + end + elseif node.name == "default:junglesapling" then + minetest.log("action", "A jungle sapling grows into a tree at ".. + minetest.pos_to_string(pos)) + if mapgen == "v6" then + default.grow_jungle_tree(pos) + else + default.grow_new_jungle_tree(pos) + end + elseif node.name == "default:pine_sapling" then + minetest.log("action", "A pine sapling grows into a tree at ".. + minetest.pos_to_string(pos)) + if mapgen == "v6" then + default.grow_pine_tree(pos) + else + default.grow_new_pine_tree(pos) + end + elseif node.name == "default:acacia_sapling" then + minetest.log("action", "An acacia sapling grows into a tree at ".. + minetest.pos_to_string(pos)) + default.grow_new_acacia_tree(pos) end end }) -minetest.register_abm({ - nodenames = {"default:junglesapling"}, - interval = 11, - chance = 50, - action = function(pos, node) - if not can_grow(pos) then - return - end - minetest.log("action", "A jungle sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - if minetest.get_mapgen_params().mgname == "v6" then - default.grow_jungle_tree(pos) - else - default.grow_new_jungle_tree(pos) - end - end -}) +-- +-- Tree generation +-- -minetest.register_abm({ - nodenames = {"default:pine_sapling"}, - interval = 12, - chance = 50, - action = function(pos, node) - if not can_grow(pos) then - return - end - - minetest.log("action", "A pine sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - if minetest.get_mapgen_params().mgname == "v6" then - default.grow_pine_tree(pos) - else - default.grow_new_pine_tree(pos) - end - end -}) - -minetest.register_abm({ - nodenames = {"default:acacia_sapling"}, - interval = 13, - chance = 50, - action = function(pos, node) - if not can_grow(pos) then - return - end - - minetest.log("action", "An acacia sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - default.grow_new_acacia_tree(pos) - end -}) - --- Appletree, jungletree function +-- Apple tree and jungle tree trunk and leaves function local function add_trunk_and_leaves(data, a, pos, tree_cid, leaves_cid, height, size, iters, is_apple_tree) @@ -150,7 +129,8 @@ local function add_trunk_and_leaves(data, a, pos, tree_cid, leaves_cid, end end --- Appletree + +-- Apple tree function default.grow_tree(pos, is_apple_tree, bad) --[[ @@ -182,7 +162,8 @@ function default.grow_tree(pos, is_apple_tree, bad) vm:update_map() end --- Jungletree + +-- Jungle tree function default.grow_jungle_tree(pos, bad) --[[ @@ -233,7 +214,8 @@ function default.grow_jungle_tree(pos, bad) vm:update_map() end --- Pinetree from mg mapgen mod, design by sfan5, pointy top added by paramat + +-- Pine tree from mg mapgen mod, design by sfan5, pointy top added by paramat local function add_pine_needles(data, vi, c_air, c_ignore, c_snow, c_pine_needles) local node_id = data[vi] @@ -373,7 +355,8 @@ function default.grow_pine_tree(pos) vm:update_map() end --- New tree + +-- New apple tree function default.grow_new_apple_tree(pos) local path = minetest.get_modpath("default") .. "/schematics/apple_tree.mts" @@ -381,6 +364,7 @@ function default.grow_new_apple_tree(pos) path, 0, nil, false) end + -- New jungle tree function default.grow_new_jungle_tree(pos) @@ -389,6 +373,7 @@ function default.grow_new_jungle_tree(pos) path, 0, nil, false) end + -- New pine tree function default.grow_new_pine_tree(pos) @@ -397,6 +382,7 @@ function default.grow_new_pine_tree(pos) path, 0, nil, false) end + -- New acacia tree function default.grow_new_acacia_tree(pos) From 7066a6a0ddbfca300debb2ef5978f142dd2aae20 Mon Sep 17 00:00:00 2001 From: est31 Date: Mon, 10 Aug 2015 01:03:15 +0200 Subject: [PATCH 04/73] Tweak mushroom drops -> Don't always drop the main mushroom (allowed endless spore generation loop before) -> Drop less spores, before you got lots of spores --- mods/flowers/init.lua | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/mods/flowers/init.lua b/mods/flowers/init.lua index 7209fad3..e705783a 100644 --- a/mods/flowers/init.lua +++ b/mods/flowers/init.lua @@ -85,23 +85,23 @@ minetest.register_abm({ elseif under.name ~= "default:dirt_with_grass" then return end - + local light = minetest.get_node_light(pos) if not light or light < 13 then return end - + local pos0 = {x = pos.x - 4, y = pos.y - 4, z = pos.z - 4} local pos1 = {x = pos.x + 4, y = pos.y + 4, z = pos.z + 4} if #minetest.find_nodes_in_area(pos0, pos1, "group:flora_block") > 0 then return end - + local flowers = minetest.find_nodes_in_area(pos0, pos1, "group:flora") if #flowers > 3 then return end - + local seedling = minetest.find_nodes_in_area(pos0, pos1, "default:dirt_with_grass") if #seedling > 0 then seedling = seedling[math.random(#seedling)] @@ -145,11 +145,12 @@ for _, m in pairs(mushrooms_datas) do buildable_to = true, groups = {snappy = 3, flammable = 3, attached_node = 1}, drop = { + max_items = 1, items = { - {items = {"flowers:mushroom_spores_" .. name}, rarity = 2,}, - {items = {"flowers:mushroom_spores_" .. name}, rarity = 2,}, - {items = {"flowers:mushroom_spores_" .. name}, rarity = 2,}, - {items = {"flowers:mushroom_" .. name},}, + {items = {"flowers:mushroom_" .. name}, rarity = 2,}, + {items = {"flowers:mushroom_spores_" .. name}, rarity = 3,}, + {items = {"flowers:mushroom_spores_" .. name .. " 2"}, rarity = 2,}, + {items = {"flowers:mushroom_spores_" .. name .. " 3"}, rarity = 2,}, }, }, sounds = default.node_sound_leaves_defaults(), From be4dd6479d86a4dbaaab48f8b67bd16de7084abe Mon Sep 17 00:00:00 2001 From: paramat Date: Sun, 9 Aug 2015 08:50:57 +0100 Subject: [PATCH 05/73] Default: Rename pine tree nodes, textures and mapgen aliases --- mods/default/aliases.lua | 6 +- mods/default/crafting.lua | 4 +- mods/default/mapgen.lua | 2 +- mods/default/nodes.lua | 54 ++++++++---------- mods/default/schematics/pine_tree.mts | Bin 174 -> 175 bytes ...ult_pinetree.png => default_pine_tree.png} | Bin ...tree_top.png => default_pine_tree_top.png} | Bin ...ult_pinewood.png => default_pine_wood.png} | Bin mods/default/trees.lua | 9 +-- mods/stairs/init.lua | 8 +-- 10 files changed, 41 insertions(+), 42 deletions(-) rename mods/default/textures/{default_pinetree.png => default_pine_tree.png} (100%) rename mods/default/textures/{default_pinetree_top.png => default_pine_tree_top.png} (100%) rename mods/default/textures/{default_pinewood.png => default_pine_wood.png} (100%) diff --git a/mods/default/aliases.lua b/mods/default/aliases.lua index 203cd616..64e6ebba 100644 --- a/mods/default/aliases.lua +++ b/mods/default/aliases.lua @@ -68,5 +68,9 @@ minetest.register_alias("steel_ingot", "default:steel_ingot") minetest.register_alias("clay_brick", "default:clay_brick") minetest.register_alias("snow", "default:snow") --- Mese now comes in the form of blocks, ore, crystal and fragments +-- 'mese_block' was used for a while for the block form of mese minetest.register_alias("default:mese_block", "default:mese") + +-- Aliases for corrected pine node names +minetest.register_alias("default:pinetree", "default:pine_tree") +minetest.register_alias("default:pinewood", "default:pine_wood") diff --git a/mods/default/crafting.lua b/mods/default/crafting.lua index 304b2032..fa8df2d6 100644 --- a/mods/default/crafting.lua +++ b/mods/default/crafting.lua @@ -15,9 +15,9 @@ minetest.register_craft({ }) minetest.register_craft({ - output = 'default:pinewood 4', + output = 'default:pine_wood 4', recipe = { - {'default:pinetree'}, + {'default:pine_tree'}, } }) diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua index 661c8a0c..c40f2204 100644 --- a/mods/default/mapgen.lua +++ b/mods/default/mapgen.lua @@ -26,7 +26,7 @@ minetest.register_alias("mapgen_apple", "default:apple") minetest.register_alias("mapgen_jungletree", "default:jungletree") minetest.register_alias("mapgen_jungleleaves", "default:jungleleaves") minetest.register_alias("mapgen_junglegrass", "default:junglegrass") -minetest.register_alias("mapgen_pinetree", "default:pinetree") +minetest.register_alias("mapgen_pine_tree", "default:pine_tree") minetest.register_alias("mapgen_pine_needles", "default:pine_needles") -- Dungeons diff --git a/mods/default/nodes.lua b/mods/default/nodes.lua index 2b70fff1..f70e6b64 100644 --- a/mods/default/nodes.lua +++ b/mods/default/nodes.lua @@ -1,5 +1,15 @@ -- mods/default/nodes.lua + +--[[ Node name convention: + +Although many node names are in combined-word form, the required form for new +node names is words separated by underscores. If both forms are used in written +language (for example pinewood and pine wood) the underscore form should be used. + +--]] + + --[[ Index: Stone @@ -58,8 +68,8 @@ default:junglewood default:jungleleaves default:junglesapling -default:pinetree -default:pinewood +default:pine_tree +default:pine_wood default:pine_needles default:pine_sapling @@ -562,13 +572,10 @@ minetest.register_node("default:junglesapling", { -minetest.register_node("default:pinetree", { +minetest.register_node("default:pine_tree", { description = "Pine Tree", - tiles = { - "default_pinetree_top.png", - "default_pinetree_top.png", - "default_pinetree.png" - }, + tiles = {"default_pine_tree_top.png", "default_pine_tree_top.png", + "default_pine_tree.png"}, paramtype2 = "facedir", is_ground_content = false, groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, @@ -577,9 +584,9 @@ minetest.register_node("default:pinetree", { on_place = minetest.rotate_node }) -minetest.register_node("default:pinewood", { - description = "Pinewood Planks", - tiles = {"default_pinewood.png"}, +minetest.register_node("default:pine_wood", { + description = "Pine Wood Planks", + tiles = {"default_pine_wood.png"}, is_ground_content = false, groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, wood = 1}, sounds = default.node_sound_wood_defaults(), @@ -620,23 +627,15 @@ minetest.register_node("default:pine_sapling", { 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, - sapling = 1 - }, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, sounds = default.node_sound_leaves_defaults(), }) minetest.register_node("default:acacia_tree", { description = "Acacia Tree", - tiles = { - "default_acacia_tree_top.png", - "default_acacia_tree_top.png", - "default_acacia_tree.png" - }, + tiles = {"default_acacia_tree_top.png", "default_acacia_tree_top.png", + "default_acacia_tree.png"}, paramtype2 = "facedir", is_ground_content = false, groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, @@ -687,13 +686,8 @@ minetest.register_node("default:acacia_sapling", { 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, - sapling = 1 - }, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, sounds = default.node_sound_leaves_defaults(), }) diff --git a/mods/default/schematics/pine_tree.mts b/mods/default/schematics/pine_tree.mts index 3f4eeb09bbcbf27fbd7be5d60d03fd2cd6d8fa66..9eb6302762d0c766a423ae46d3df5b7662b80629 100644 GIT binary patch delta 24 fcmZ3-xSnx>1)pF_YFc7xPKi}PW?pLiMAu9JXO9T5 delta 23 ecmZ3_xQ=mx1+PF#YFc7xPKi}PW?t$ Date: Wed, 5 Aug 2015 22:20:41 +0200 Subject: [PATCH 06/73] Fixed invalid check. This fixes minetest/minetest_game#609 --- mods/doors/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/doors/init.lua b/mods/doors/init.lua index a5535654..6a5ee24f 100644 --- a/mods/doors/init.lua +++ b/mods/doors/init.lua @@ -129,7 +129,7 @@ function doors.register_door(name, def) local function on_rightclick(pos, dir, check_name, replace, replace_dir, params) pos.y = pos.y+dir - if not minetest.get_node(pos).name == check_name then + if minetest.get_node(pos).name ~= check_name then return end local p2 = minetest.get_node(pos).param2 From 408ee69fb8d715ed10870ff3e9ef7262a1f4deb2 Mon Sep 17 00:00:00 2001 From: paramat Date: Mon, 10 Aug 2015 11:57:27 +0100 Subject: [PATCH 07/73] Flowers: Add sporeless mushrooms and edit drops --- mods/flowers/init.lua | 56 +++++++++++++++++++++++++++++++---------- mods/flowers/mapgen.lua | 8 +++--- 2 files changed, 47 insertions(+), 17 deletions(-) diff --git a/mods/flowers/init.lua b/mods/flowers/init.lua index e705783a..bb2f3011 100644 --- a/mods/flowers/init.lua +++ b/mods/flowers/init.lua @@ -130,7 +130,46 @@ local mushrooms_datas = { for _, m in pairs(mushrooms_datas) do local name, nut = m[1], m[2] - -- Register mushrooms + -- Register fertile mushrooms + + -- These are placed by mapgen and the growing ABM. + -- These drop an infertile mushroom, and 0 to 3 spore + -- nodes with an average of 1.25 per mushroom, for + -- a slow multiplication of mushrooms when farming. + + minetest.register_node("flowers:mushroom_fertile_" .. name, { + description = string.sub(string.upper(name), 0, 1) .. + string.sub(name, 2) .. " Fertile Mushroom", + tiles = {"flowers_mushroom_" .. name .. ".png"}, + inventory_image = "flowers_mushroom_" .. name .. ".png", + wield_image = "flowers_mushroom_" .. name .. ".png", + drawtype = "plantlike", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flammable = 3, attached_node = 1, + not_in_creative_inventory = 1}, + drop = { + items = { + {items = {"flowers:mushroom_" .. name}}, + {items = {"flowers:mushroom_spores_" .. name}, rarity = 4}, + {items = {"flowers:mushroom_spores_" .. name}, rarity = 2}, + {items = {"flowers:mushroom_spores_" .. name}, rarity = 2} + } + }, + sounds = default.node_sound_leaves_defaults(), + on_use = minetest.item_eat(nut), + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3} + } + }) + + -- Register infertile mushrooms + + -- These do not drop spores, to avoid the use of repeated digging + -- and placing of a single mushroom to generate unlimited spores. minetest.register_node("flowers:mushroom_" .. name, { description = string.sub(string.upper(name), 0, 1) .. @@ -144,15 +183,6 @@ for _, m in pairs(mushrooms_datas) do walkable = false, buildable_to = true, groups = {snappy = 3, flammable = 3, attached_node = 1}, - drop = { - max_items = 1, - items = { - {items = {"flowers:mushroom_" .. name}, rarity = 2,}, - {items = {"flowers:mushroom_spores_" .. name}, rarity = 3,}, - {items = {"flowers:mushroom_spores_" .. name .. " 2"}, rarity = 2,}, - {items = {"flowers:mushroom_spores_" .. name .. " 3"}, rarity = 2,}, - }, - }, sounds = default.node_sound_leaves_defaults(), on_use = minetest.item_eat(nut), selection_box = { @@ -198,9 +228,9 @@ minetest.register_abm({ if minetest.get_item_group(node_under.name, "soil") ~= 0 and minetest.get_node_light(pos, nil) <= 13 then if node.name == "flowers:mushroom_spores_brown" then - minetest.set_node(pos, {name = "flowers:mushroom_brown"}) - else - minetest.set_node(pos, {name = "flowers:mushroom_red"}) + minetest.set_node(pos, {name = "flowers:mushroom_fertile_brown"}) + elseif node.name == "flowers:mushroom_spores_red" then + minetest.set_node(pos, {name = "flowers:mushroom_fertile_red"}) end end end diff --git a/mods/flowers/mapgen.lua b/mods/flowers/mapgen.lua index e2260a92..5c386e58 100644 --- a/mods/flowers/mapgen.lua +++ b/mods/flowers/mapgen.lua @@ -50,8 +50,8 @@ function flowers.register_mgv6_decorations() register_mgv6_flower("viola") register_mgv6_flower("dandelion_white") - register_mgv6_mushroom("mushroom_brown") - register_mgv6_mushroom("mushroom_red") + register_mgv6_mushroom("mushroom_fertile_brown") + register_mgv6_mushroom("mushroom_fertile_red") end @@ -112,8 +112,8 @@ function flowers.register_decorations() register_flower(1133, "viola") register_flower(73133, "dandelion_white") - register_mushroom("mushroom_brown") - register_mushroom("mushroom_red") + register_mushroom("mushroom_fertile_brown") + register_mushroom("mushroom_fertile_red") end From b7a1426b42de743d07d845086f9f86f4ac845786 Mon Sep 17 00:00:00 2001 From: paramat Date: Thu, 13 Aug 2015 22:40:30 +0100 Subject: [PATCH 08/73] Default: New darker jungletree_top and junglewood textures --- mods/default/README.txt | 4 ++-- .../default/textures/default_jungletree_top.png | Bin 811 -> 834 bytes mods/default/textures/default_junglewood.png | Bin 230 -> 260 bytes 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/default/README.txt b/mods/default/README.txt index ec8c17c0..4150203e 100644 --- a/mods/default/README.txt +++ b/mods/default/README.txt @@ -24,7 +24,6 @@ Copyright (C) 2010-2012 celeron55, Perttu Ahola Cisoun's WTFPL texture pack: default_jungletree.png - default_jungletree_top.png default_lava.png default_leaves.png default_sapling.png @@ -61,6 +60,7 @@ VanessaE (WTFPL): default_desert_stone.png default_desert_stone_brick.png default_sand.png + default_jungletree_top.png Calinou (CC BY-SA): default_brick.png @@ -77,7 +77,6 @@ Jordach (CC BY-SA 3.0): PilzAdam (WTFPL): default_jungleleaves.png default_junglesapling.png - default_junglewood.png default_obsidian_glass.png default_obsidian_shard.png default_mineral_gold.png @@ -119,6 +118,7 @@ paramat (CC BY-SA 3.0): default_dry_grass.png default_dry_grass_side.png default_dry_grass_*.png + default_junglewood.png, derived from a texture by BlockMen (CC BY-SA 3.0) brunob.santos (CC BY-SA 4.0): default_desert_cobble.png diff --git a/mods/default/textures/default_jungletree_top.png b/mods/default/textures/default_jungletree_top.png index e3a3ccc5bf82bd10a34a674afea28984ecbb2c93..62cd78141ab8195c71d497c2a8468726251db3df 100644 GIT binary patch delta 822 zcmV-61IhfW2EqoA8Gi-<001BJ|6u?C0|`k)K~y*q9h1v$<5U>Of5$m-;#``fNt-h1 zj3UHDh0(wQX2F6=Y*`>AR_wS)?AWnkHxjSFO8_sxhRYMcR045P)sBW1nx+#w4Zg&7 zZ2pNQ+s8iV`_BJ%%;z6JDxEB&;??->``>wTc1yi(vDV?GzJKMtcVEZYl4z9?#S!r` zCAdxa>E~-c``}FsP=5K*J3RR(;9<8;d&lKs5z*>;?6rDWug=ADpPR*VH8muw71PTb z_FI;nohnuhSjIUoS56oVM})UaR{nxu3dwGTyetT!l63)9t!_5!^leO-O}IL{!hZ7p zL%bwq|NbHK`G0@-(*-Ln-rT28*Qg#_10$?)30acR>sZ3tfNy>{!5&S9WTypA#SqQ{ z1_vFSD5a6E$lLnw7}C^Gln&LZL%2xM2X}^p4S1YR+hrE6SZ4*LDYxP|>6&hP7uTtg zXAV(Vuw3Lqv8Li|s5qDnCtVtiffPc|plf%)TL`(SV^eNM6NwHRg zs*0+Hl^oeNn9aqh*JC!DQ*VLmiT~Pgy9~H|Hl@~XQKl*uax0ppqYVXPG-&YlYXd6t zf3F_jJ-EyK<_tdouZcW|P>;)-oY{56!Ja`<;596TsP6S!H2X&kx+(UT^MuJHU?kX$ zp`hREaesZ`)9BSDY(gQbt%gS&3bHJbeiE^uR%>x*JjA-;fCuSh+wi;MjGc3pEU>RW7*S0l#z)8E>8dC~ z!6T60nbMfmGO}__qMc)%N-MOvP2@_(*FTxh#V~IY^l$ zF)t^7PWkQGEfr~=i9`1F|n0YWuts~n6|t^fc407*qoM6N<$f{2=# AXaE2J delta 799 zcmV+)1K|9^2CD{;8Gix*005AYXf^-<010qNS#tmY3labT3lag+-G2N400Os3L_t(| zoCU$la@$lG0O0>W`j0M_Y+1g>4k>9#n?gutfa#*lzyq*gI>U+`&>42@x?#;L@DeRA zz^0Vp0osJNw9KSVL+x6=)ski1&XIKZKD_tCEheRA8NWY#aeq46m?jaigErmy`ZFYz zb0esgSPqIL42 z3|GXm=j`aYi?9^yPU4h}-eh8Sa~_P0nJ|@)R>f ziinJKs-h|BeAw>*0CVg5BFPQ;0@tN?%*D6*|Q z%TAxZ79;;)*u8qiYxdsXY&S2T{T<9AR8rG5Zfbd&0DpjX`;$GBHNB>`%~R8@Ls>DM zr;|%yIG_5-c5Az?!DPdA)Fw&dx%O`A@9pdvHmp~H>F`7pv&Hh#Urfj2;ZED;Q0le; zdB5ME&*M&0Xns)a4!b8uohz-z;myOkko`d~s}whDgH8(yl`5r`x$8E9cU8@kq;m}8 zGQ+p*=RbReWc2HS>Xp)hdV7#6jBtGU=*Zcv40M7nMV_Oe(@S#g>-VX%S93{u_$Xr zk-YI|oX@1lWg(?1vjWmg5t0yD(}MetE~q!?{rcOp@2;QU*uTaNJqm(NBoQ+acA dWf*O9EFej4V=l=ZK6U^A002ovPDHLkV1l49irWAH diff --git a/mods/default/textures/default_junglewood.png b/mods/default/textures/default_junglewood.png index 6198d26b26381ea4d4f1e5228587c52757451049..8d17917b8bc99006561c79789c3710952533e7d4 100644 GIT binary patch delta 232 zcmaFH*upeHrCu?>C&X1+fI&`(QB|D9RGHmOmD5s#&q|BmT8rP^NW{}r)W=LL)TZnX z0|NtRfk$L90|U1(2s1Lwnj--eWH0gbb!ETL!6hyuFzH6PF;J+?)5S4_ z0xlOn@;*{3Ul1QNK}^w6+V~S^QOA~-D;yQ>C{IkZRGl60BwYDz^oOXW>YW0~E*T8j zp3hQF*vQuku`9cK&c1l-?u3lEqQx(_{9)|KHkh_c!~SLHt2rMPPw(DeT7Qwn{P(ZB gwr3VpChYUD|7xY_$jVg_19Sp|r>mdKI;Vst0J;iJvH$=8 delta 202 zcmV;*05$)F0_FjbB!4GROjJdplxt&EEsA_ofpbb;P${30Xo-7Lgmz7gepQ-`V~TrI zZeKTna!I{YlTQEu0D4J8K~xCWV^B&DU|@()Qetov6cluE6mem&5mQo9N;WfQP)@5X zP6DzSOl`7OwK4z!Tnz+-8#9=x83TbCPz}TEB9J}?7Z*V=U_&rY(g*-6GX+|p5x}a< zz@((45tBRX+}N0bfwf5~xs-tc0JBRMh?c)#n*aa+07*qoM6N<$ Eg6oM$^Z)<= From 450543f7820f63bb0d5ecbddd1a7e88b46f9e6a1 Mon Sep 17 00:00:00 2001 From: paramat Date: Fri, 14 Aug 2015 03:00:32 +0100 Subject: [PATCH 09/73] Stairs: Add straw and metal blocks Make replace ABM optional, disabled by default --- minetest.conf.example | 4 ++ mods/stairs/depends.txt | 1 + mods/stairs/init.lua | 144 +++++++++++++++++++++++++++++----------- 3 files changed, 111 insertions(+), 38 deletions(-) diff --git a/minetest.conf.example b/minetest.conf.example index b908ad24..47d03b00 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -22,3 +22,7 @@ # The radius of a TNT explosion #tnt_radius = 3 + +# Enable the stairs mod ABM that replaces the old 'upside down' +# stair and slab nodes in old maps with the new param2 versions. +#enable_stairs_replace_abm = false diff --git a/mods/stairs/depends.txt b/mods/stairs/depends.txt index 4ad96d51..d77ba253 100644 --- a/mods/stairs/depends.txt +++ b/mods/stairs/depends.txt @@ -1 +1,2 @@ default +farming diff --git a/mods/stairs/init.lua b/mods/stairs/init.lua index 7e752d13..c2547935 100644 --- a/mods/stairs/init.lua +++ b/mods/stairs/init.lua @@ -1,9 +1,20 @@ -- Minetest 0.4 mod: stairs -- See README.txt for licensing and other information. + +-- Global namespace for functions + stairs = {} + +-- Get setting for replace ABM + +local replace = minetest.setting_getbool("enable_stairs_replace_abm") + + +-- Register stairs. -- Node will be called stairs:stair_ + function stairs.register_stair(subname, recipeitem, groups, images, description, sounds) minetest.register_node(":stairs:stair_" .. subname, { description = description, @@ -48,7 +59,7 @@ function stairs.register_stair(subname, recipeitem, groups, images, description, param2 = minetest.dir_to_facedir(dir) end - if p0.y-1 == p1.y then + if p0.y - 1 == p1.y then param2 = param2 + 20 if param2 == 21 then param2 = 23 @@ -62,10 +73,12 @@ function stairs.register_stair(subname, recipeitem, groups, images, description, }) -- for replace ABM - minetest.register_node(":stairs:stair_" .. subname.."upside_down", { - replace_name = "stairs:stair_" .. subname, - groups = {slabs_replace=1}, - }) + if replace then + minetest.register_node(":stairs:stair_" .. subname .. "upside_down", { + replace_name = "stairs:stair_" .. subname, + groups = {slabs_replace = 1}, + }) + end minetest.register_craft({ output = 'stairs:stair_' .. subname .. ' 6', @@ -87,7 +100,10 @@ function stairs.register_stair(subname, recipeitem, groups, images, description, }) end + +-- Register slabs. -- Node will be called stairs:slab_ + function stairs.register_slab(subname, recipeitem, groups, images, description, sounds) minetest.register_node(":stairs:slab_" .. subname, { description = description, @@ -120,7 +136,8 @@ function stairs.register_slab(subname, recipeitem, groups, images, description, local n0_is_upside_down = (n0.name == "stairs:slab_" .. subname and n0.param2 >= 20) - if n0.name == "stairs:slab_" .. subname and not n0_is_upside_down and p0.y+1 == p1.y then + if n0.name == "stairs:slab_" .. subname and not n0_is_upside_down and + p0.y + 1 == p1.y then slabpos = p0 slabnode = n0 elseif n1.name == "stairs:slab_" .. subname then @@ -136,7 +153,8 @@ function stairs.register_slab(subname, recipeitem, groups, images, description, pointed_thing.above = slabpos local success - fakestack, success = minetest.item_place(fakestack, placer, pointed_thing) + fakestack, success = minetest.item_place(fakestack, placer, + pointed_thing) -- If the item was taken from the fake stack, decrement original if success then itemstack:set_count(fakestack:get_count()) @@ -148,7 +166,7 @@ function stairs.register_slab(subname, recipeitem, groups, images, description, end -- Upside down slabs - if p0.y-1 == p1.y then + if p0.y - 1 == p1.y then -- Turn into full block if pointing at a existing slab if n0_is_upside_down then -- Remove the slab at the position of the slab @@ -159,7 +177,8 @@ function stairs.register_slab(subname, recipeitem, groups, images, description, pointed_thing.above = p0 local success - fakestack, success = minetest.item_place(fakestack, placer, pointed_thing) + fakestack, success = minetest.item_place(fakestack, placer, + pointed_thing) -- If the item was taken from the fake stack, decrement original if success then itemstack:set_count(fakestack:get_count()) @@ -175,7 +194,7 @@ function stairs.register_slab(subname, recipeitem, groups, images, description, end -- If pointing at the side of a upside down slab - if n0_is_upside_down and p0.y+1 ~= p1.y then + if n0_is_upside_down and p0.y + 1 ~= p1.y then param2 = 20 end @@ -184,10 +203,12 @@ function stairs.register_slab(subname, recipeitem, groups, images, description, }) -- for replace ABM - minetest.register_node(":stairs:slab_" .. subname.."upside_down", { - replace_name = "stairs:slab_"..subname, - groups = {slabs_replace=1}, - }) + if replace then + minetest.register_node(":stairs:slab_" .. subname .. "upside_down", { + replace_name = "stairs:slab_".. subname, + groups = {slabs_replace = 1}, + }) + end minetest.register_craft({ output = 'stairs:slab_' .. subname .. ' 6', @@ -197,29 +218,41 @@ function stairs.register_slab(subname, recipeitem, groups, images, description, }) end --- Replace old "upside_down" nodes with new param2 versions -minetest.register_abm({ - nodenames = {"group:slabs_replace"}, - interval = 8, - chance = 1, - action = function(pos, node) - node.name = minetest.registered_nodes[node.name].replace_name - node.param2 = node.param2 + 20 - if node.param2 == 21 then - node.param2 = 23 - elseif node.param2 == 23 then - node.param2 = 21 - end - minetest.set_node(pos, node) - end, -}) +-- Optionally replace old "upside_down" nodes with new param2 versions. +-- Disabled by default. + +if replace then + minetest.register_abm({ + nodenames = {"group:slabs_replace"}, + interval = 8, + chance = 1, + action = function(pos, node) + node.name = minetest.registered_nodes[node.name].replace_name + node.param2 = node.param2 + 20 + if node.param2 == 21 then + node.param2 = 23 + elseif node.param2 == 23 then + node.param2 = 21 + end + minetest.set_node(pos, node) + end, + }) +end + + +-- Stair/slab registration function. -- Nodes will be called stairs:{stair,slab}_ -function stairs.register_stair_and_slab(subname, recipeitem, groups, images, desc_stair, desc_slab, sounds) + +function stairs.register_stair_and_slab(subname, recipeitem, groups, images, + desc_stair, desc_slab, sounds) stairs.register_stair(subname, recipeitem, groups, images, desc_stair, sounds) stairs.register_slab(subname, recipeitem, groups, images, desc_slab, sounds) end + +-- Register default stairs and slabs + stairs.register_stair_and_slab("wood", "default:wood", {snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3}, {"default_wood.png"}, @@ -290,13 +323,6 @@ stairs.register_stair_and_slab("desert_stonebrick", "default:desert_stonebrick", "Desert Stone Brick Slab", default.node_sound_stone_defaults()) -stairs.register_stair_and_slab("brick", "default:brick", - {cracky = 3}, - {"default_brick.png"}, - "Brick Stair", - "Brick Slab", - default.node_sound_stone_defaults()) - stairs.register_stair_and_slab("sandstone", "default:sandstone", {crumbly = 2, cracky = 2}, {"default_sandstone.png"}, @@ -324,3 +350,45 @@ stairs.register_stair_and_slab("obsidianbrick", "default:obsidianbrick", "Obsidian Brick Stair", "Obsidian Brick Slab", default.node_sound_stone_defaults()) + +stairs.register_stair_and_slab("brick", "default:brick", + {cracky = 3}, + {"default_brick.png"}, + "Brick Stair", + "Brick Slab", + default.node_sound_stone_defaults()) + +stairs.register_stair_and_slab("straw", "farming:straw", + {snappy = 3, flammable = 4}, + {"farming_straw.png"}, + "Straw Stair", + "Straw Slab", + default.node_sound_leaves_defaults()) + +stairs.register_stair_and_slab("steelblock", "default:steelblock", + {cracky = 1, level = 2}, + {"default_steel_block.png"}, + "Steel Block Stair", + "Steel Block Slab", + default.node_sound_stone_defaults()) + +stairs.register_stair_and_slab("copperblock", "default:copperblock", + {cracky = 1, level = 2}, + {"default_copper_block.png"}, + "Copper Block Stair", + "Copper Block Slab", + default.node_sound_stone_defaults()) + +stairs.register_stair_and_slab("bronzeblock", "default:bronzeblock", + {cracky = 1, level = 2}, + {"default_bronze_block.png"}, + "Bronze Block Stair", + "Bronze Block Slab", + default.node_sound_stone_defaults()) + +stairs.register_stair_and_slab("goldblock", "default:goldblock", + {cracky = 1}, + {"default_gold_block.png"}, + "Gold Block Stair", + "Gold Block Slab", + default.node_sound_stone_defaults()) From c7b9e734ffd815e9b86b1fcceba2293e3067785e Mon Sep 17 00:00:00 2001 From: paramat Date: Tue, 11 Aug 2015 21:28:28 +0100 Subject: [PATCH 10/73] Default: New grass textures, new footprint overlay texture --- mods/default/README.txt | 6 ++--- mods/default/nodes.lua | 23 +++++++++--------- mods/default/textures/default_footprint.png | Bin 0 -> 466 bytes mods/default/textures/default_grass.png | Bin 263 -> 777 bytes .../textures/default_grass_footsteps.png | Bin 722 -> 0 bytes mods/default/textures/default_grass_side.png | Bin 347 -> 490 bytes 6 files changed, 14 insertions(+), 15 deletions(-) create mode 100644 mods/default/textures/default_footprint.png delete mode 100644 mods/default/textures/default_grass_footsteps.png diff --git a/mods/default/README.txt b/mods/default/README.txt index 4150203e..9ca52fde 100644 --- a/mods/default/README.txt +++ b/mods/default/README.txt @@ -119,6 +119,8 @@ paramat (CC BY-SA 3.0): default_dry_grass_side.png default_dry_grass_*.png default_junglewood.png, derived from a texture by BlockMen (CC BY-SA 3.0) + default_grass.png, derived from a texture by Philipbenr (CC BY-SA 3.0) + default_grass_side.png, derived from a texture by Philipbenr (CC BY-SA 3.0) brunob.santos (CC BY-SA 4.0): default_desert_cobble.png @@ -153,10 +155,6 @@ Neuromancer (CC BY-SA 3.0): default_dirt.png default_furnace_*.png -Philipbenr (CC BY-SA 3.0): - default_grass.png - default_grass_side.png - Gambit (WTFPL): default_bronze_ingot.png default_copper_ingot.png diff --git a/mods/default/nodes.lua b/mods/default/nodes.lua index f70e6b64..8c24d7c3 100644 --- a/mods/default/nodes.lua +++ b/mods/default/nodes.lua @@ -37,8 +37,8 @@ Soft / Non-Stone default:dirt default:dirt_with_grass -default:dirt_with_dry_grass default:dirt_with_grass_footsteps +default:dirt_with_dry_grass default:dirt_with_snow default:sand @@ -282,6 +282,17 @@ minetest.register_node("default:dirt_with_grass", { }), }) +minetest.register_node("default:dirt_with_grass_footsteps", { + description = "Dirt with Grass and Footsteps", + tiles = {"default_grass.png^default_footprint.png", "default_dirt.png", + "default_dirt.png^default_grass_side.png"}, + groups = {crumbly=3,soil=1,not_in_creative_inventory=1}, + drop = 'default:dirt', + sounds = default.node_sound_dirt_defaults({ + footstep = {name="default_grass_footstep", gain=0.25}, + }), +}) + minetest.register_node("default:dirt_with_dry_grass", { description = "Dirt with Dry Grass", tiles = {"default_dry_grass.png", @@ -295,16 +306,6 @@ minetest.register_node("default:dirt_with_dry_grass", { }), }) -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"}, - groups = {crumbly=3,soil=1,not_in_creative_inventory=1}, - drop = 'default:dirt', - sounds = default.node_sound_dirt_defaults({ - footstep = {name="default_grass_footstep", gain=0.25}, - }), -}) - 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"}, diff --git a/mods/default/textures/default_footprint.png b/mods/default/textures/default_footprint.png new file mode 100644 index 0000000000000000000000000000000000000000..41d954630b1c16679fcc5e83645ea10c0c739d6a GIT binary patch literal 466 zcmV;@0WJQCP)|jj+W38K+H|Mgu`Ddf{;XIOn|Q70c@>q)<_eA$C*;pkD4^$22rkP_MKJ z#RC|Iq}z3Hdmio(tbnA|=p$7HjNPO`UzrVZSl$HV0dx+ze?0~LUyy($3Ws>W0z06;LNbFfvyE%uq!B>=Uv zXCk))PIvFoi*2OUb|$WhM4Wu)CY{fSQSD^E`Vn5tnHITR5rAkU{5j}(-pGLTyC3f- zzY|)HE(rUo6F>a;e$h%GtR&eQmI=-;J?SPQj(-K8KXv45gSDDr@XT(( zyM;7U^p_cphV&t$dhXC_0q@yvEw_4P9weEy)Sr7efYjheFj}H=&EcyUx&1b!dhXaf z7@|zzkc`1IwvMTtnRQ_OE~C7+j6)G`C^rgM4di>nl zS4X*c3365= zcqrc`)PMCz+e{>zh|{kf<2f+S4(S%m3WjUX>X4BDG!s!Nkj2Up0IdW@OOTS_7IdL# zP7}$bQHi4aXXfp7pshOU)5PvWLEk&{`L$#Fm@}O`HWtiCbflQ{j17TV2`(=^>E5tC zM2wwBmx}5%;lqNIT66hx;8soC&J)#ZhwB|SQ+70Gk0RjROnn-7{rSc`E<_T#w~_VM zB8PfJYp_K`TtsNA>DrmM-y80q3a*XEZVft8C?iSMnxXNSTv8uLWVy?*g+S^+dv)}U vhyVM8mZWA diff --git a/mods/default/textures/default_grass_footsteps.png b/mods/default/textures/default_grass_footsteps.png deleted file mode 100644 index 3741a0bc4a3a567612d37b0d63aa060fffa63618..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 722 zcmV;@0xkWCP)mkWClTH1Ym0eLQ?}gU;;K- z06|ayH$(t3LI5#801_|&4I}`ImQ;|cONN?7ca%PTkUU;` z0zp>+JyZZUQvfAS05L-V976ywJOCLr0AR2{HUIzt1W80eR2b7^s9`i=U}3C{)K`sX z7WdDsW{_af3s#7>c2cv^bxmSo$zh0*vIq>wE*IcY7Huk2iA`aMlaN)^(dGau5HJ)G z5tCymbCdOOwp5T;7G=wDQ>o-4s%i$YN-o`i0ce(CC`%Q@Dxfh8AhRSTWQ0Lh$pDREs0R`n(xw)E-1gpLTIT8u z;#%g$8kz?A3}F%SZ0vTz3|v6M*o84Mk4q+@LL}J<03Gr#F(G##t^fc407*qoM6N<$ Eg8HHJi~s-t diff --git a/mods/default/textures/default_grass_side.png b/mods/default/textures/default_grass_side.png index 87ae3ca0bc18abbec5a7925f290664f8d60489cb..d6c57c7a0f7fe5d0ce27bc1b55633aaf43b14299 100644 GIT binary patch delta 475 zcmV<10VMw00_p>h8Gi-<001BJ|6u?C00v@9M??Vs0RI60puMM)00009a7bBm000XU z000XU0RWnu7ytkO2XskIMF-yq3>Og#h1gh0EEBYtk-)# zzQl*+01Bz8sge8ueg^uKd4trv0I8{HEFmEzDkO-YKr{#}B!7ew;2a>49NYP^&)(bH zqd6LQg?!RzG^1%o+~3)*ln_V*;f4la{C!EBDwL5-vITKR)6|NUb+}c9_h5`9pB6|d zp|xeOc}2PK6f;M=t69!V7Sn<-)?AG(E9;O_;yoxKP|+HjcVlGdPQY}OvvI4*S|}+c z6wYJk1vannqJJXk8lsND<|Xls20@~TQq3e=B9A{`poHM^!xhi>zV1?!ZimFFB5F18 z-gEx$l7mOtZj@@g^_+aXplKwsfAn8J{oMnO`E*9o(G*9PAl1Bhc-VJ`1zoKG zmg6@wTBDM;kAL>fw;UPg1;7dL9vI2ZHo?&G^2unY{Zyp_7#=+P)f)`52f%zQ3>gfv z9xz-_5(ID$IIVRXxLLn&zzmoG39t?{00o@YS^)%gN$r2LBV Rs4V~h002ovPDHLkV1oEM(K!GB literal 347 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}V}MVHE087w_+=}(B`O5vDSIU; z`eZ72CM$%OsRkD*J4DDtRH?_*s0Cyy#WiR|2B?Smsswr}ILF9)hse7{$+>yUdicxu zy2|*cEBQqzy4eZO6`N$zKjm!D=U-q11Cu;eoY`k|~V$s!WE6;Q3X~u3TQi}>vOF40> z`iOC;1UgE#wMWn^Fe#@eiTLaw!!Aw#|3L5cdZ oN9S%XUhKdr;B~LSs{Qm2<^v|20zxw$9R>xFr>mdKI;Vst0LiXj^8f$< From ffcb3d6356686406374a388de5c6ba0050896af2 Mon Sep 17 00:00:00 2001 From: paramat Date: Sat, 15 Aug 2015 23:30:34 +0100 Subject: [PATCH 11/73] Stairs: Add aliases needed due to new pine wood name --- mods/stairs/init.lua | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mods/stairs/init.lua b/mods/stairs/init.lua index c2547935..b3e09937 100644 --- a/mods/stairs/init.lua +++ b/mods/stairs/init.lua @@ -7,6 +7,12 @@ stairs = {} +-- Register aliases for new pine node names + +minetest.register_alias("stairs:stair_pinewood", "stairs:stair_pine_wood") +minetest.register_alias("stairs:slab_pinewood", "stairs:slab_pine_wood") + + -- Get setting for replace ABM local replace = minetest.setting_getbool("enable_stairs_replace_abm") From 86dab909eda0517e3d628872d96956cb3c998158 Mon Sep 17 00:00:00 2001 From: paramat Date: Sun, 16 Aug 2015 03:15:22 +0100 Subject: [PATCH 12/73] Default: Change to 'pixelbox2' long grass textures by Gambit --- mods/default/textures/default_grass_1.png | Bin 140 -> 2944 bytes mods/default/textures/default_grass_2.png | Bin 153 -> 2980 bytes mods/default/textures/default_grass_3.png | Bin 179 -> 3065 bytes mods/default/textures/default_grass_4.png | Bin 211 -> 3134 bytes mods/default/textures/default_grass_5.png | Bin 260 -> 3269 bytes 5 files changed, 0 insertions(+), 0 deletions(-) diff --git a/mods/default/textures/default_grass_1.png b/mods/default/textures/default_grass_1.png index 505293026443b540308c245996a0d96d619467b0..5ed8388bb5d5730f220f1987898a2e6f48b0fe98 100644 GIT binary patch literal 2944 zcmbW3_dnH->Y3qVgiRl?ga&SV*ES+AS^FG6K8EbB0}hI#62kLRS}Yd zuQ&2S8a2yl2-obhF0#z0pz7oc#Y_T*2o_=e7)iF|$C6~pq0OdhzMxhK|Jw3Uy= z@Q|a7+6MQ9R9j_Lw+-2a$dv5UqGKD?{gT(7yvT1yKe3Hm;JFWW=z&R21RJhV%^g4q;6VC?%256(p286^;10;p*HtYl>@&9hX?j-#4PTX*?ip_Mve{* zZ#suP>xPGo7TP_Xg_oPL$2SurJ|jQG=rVYUccaKh8O{%2K(Zam|9&Kyy3SgNh5}oR z=23M%CWzd!!(odJqbPAv$^_C`303Xt>(f{WvTdJ@IW9V(Z)oleF_NkDV_Ck*d}51G z8Q0Qm1DR$u5Fh!#lZ{9%I(HPFa1!{-`DLq09I<64IIK9~-jDRa@WkT#+oO&k&3xm< ztz)axC$6I}YqUlrQD7aAPlf7pa3Ry&hz`D(A0!y8SHpbtL-S#z7JoB^VX8>9=jIrWqkK9?RpS4mfeLVId;*7jRM-{ zXK}rthIk|dxsBvj!}nZZo8t)AJGS5uVx{UQ^79EA9DJ94!y-?3TcrJl^N+YTs}r7N z5c?hGEtC@zO_*xsFpDX#RIA|4ZQ&VZ-HUDgm2pp!0`80Do>{vm?8qk(J2At(5xTE& zok^GAC4lD_02e<#bAhLgmlIK($`bdi0-ls=`br$5-|+nIoU~eu*~N8>GeWF}#%GIG zQB!Z`Wkr0h_?&+$bUQ^m#>aTK5L;}7g1#~LRjCou4$^iDy7*+*>`%vdmx@X&?i(k;Yv1Jc0WjFqOi-8$_R2t z^n^0b5 zzIrkz-*vsqw2PR=oHk$?Cg(4wDOWbAT@Eg{vTU`irU_x7bUnH{-I88HvniGFs8kzQ z6Ib(lVekU3ChE~H%V8KhYvhX3K!IhmWPe-p+$Jo;ZvOUN`;D9JCJENaZM$_!5Z-RV#CO+A;EOLUf8SL{z!&J4(CRyw)+i1e%I zd2yvx5qu_9(iG*aYOCt7iJz6C(xnEa_HNkTNXp8y4RYqZL$l#R*_VVM%gr%&>U^j0W+MqZYUts#7nDO0fFny3R6z3D_ zbL6wVti9Yl#69RRB!S^qKLh3j3xg-Y(44n9pqzu8-W*2lhCR>wOYdR!jrPIg+T#M_ z4mHrf988symiDdn=RQ3A^uih&#SJ>^v^azRaXA z(XsmQnxgj?`YWgIjV8Fyxutsy`lty)}B|8Q}iX?crc_Po8-eF)neVJsfvSX)3%pwCR=mj~?I9fk!sn4*|)tU6pYPW$saXccKK*?Q@H zOoAOU8W|ufrLM8#y_BmmQdw2W-W{67orNRZc-#@E8Q*VMZ=7zNjL1QdQYhl3XQ(O5 z$?Zl2V@;!e(uOTLf*O{5+YHr{pP{V~eCMuHX}x^t&U@N*wao2l zQs8^cfG9shawxl$0@SA0#FwD*kXU z>L&wtYd?QUr%P*WD|VRga9q}(x@Hl9Jv1}6>_B>1FaDC7wwiR>bMn^(pM>q#jMH@5Q&U~Z4 zyKiIegmzr1$3`_a_P_nGCiCv)_@DQO6YPF$+5w|eOJGOsu=|~urLQ*`xmf`RKO3SW z#@4=E>t6qP{^?oqPu)$|!j*TYx)1FbixPfe3DLHHk;|xgbZN(~?#j_mZ8unu=U`OL zy2%oe9bG|QY<551a;0p@9bo3;mJtK54(8}`{pIKS?_59kuwXMXx?#zN?#yWX9<|vT z(AT`%i|9*ko@;j8Z`{fF`mXhZk~6NKtyd?SxaS#7+JFCb;^O+5^#{|&l$Y84$M_?Q zUDP^yM5fuCPn0Gia?Hw{z5Q21jF0y3OtN_C-_!>H^3%ve6!Bk%pplk00pNiY0N`T* z;Naw+(*Yn<1pt;^06;q%07L`QoT*0tx>OT{zI9lh+uxHDU1li&g3p$v@v;CQ1R3=I zL0g&zHBa9yoDecxWxPq>1C9c delta 123 zcmZn=?_r!EQNqH^z`*eK?xP?eB@y5g;tHg*I~;wp&0=b8++y^+imbx(EP|5_+2`@j z1IjU$1o;IsI6S+N2IMGtx;Tb#Tu+t|IB-INL4{R9QbK6PjF}OQHmyl%VuEUHf(-lx WjLGXbK2HUzX7F_Nb6Mw<&;$T1Jt7PM diff --git a/mods/default/textures/default_grass_2.png b/mods/default/textures/default_grass_2.png index 9d99a6a491edf0aa2e8429bf2c4481c4f89fcdcd..0ffa8fc2c6377b9501954f70305ec6ee0f3f6fde 100644 GIT binary patch literal 2980 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 diff --git a/mods/default/textures/default_grass_3.png b/mods/default/textures/default_grass_3.png index 4833df44b14caa15a9702dc435f5665524e3b554..101fefaa81e2fa241acca126aa3526da5d615614 100644 GIT binary patch literal 3065 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 M>FVdQ&MBb@06a=IFaQ7m diff --git a/mods/default/textures/default_grass_4.png b/mods/default/textures/default_grass_4.png index 1496fb15590b6dd2ee9488a30eabd0b453f7d5d2..72c721afb35c7119cd8a758c2c1747d6edb375c8 100644 GIT binary patch literal 3134 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 Y0JQ?YKfQTx5&!@I07*qoM6N<$f=-O_WB>pF delta 195 zcmdldahY*~L_G^L0|Ud`yN`l^lzM&Xh@76u|48YFcbPBFR^ zZ`iQeASXd1BjHif!^DKd0*=Jgl*E*X0|E=q964sAcueHLf(0keoX9w_@_@pEGaM-f tQU)_LwYiJCHMI>Stkfj^c*5qfFeKdLJbitu^J<_q44$rjF6*2UngBp1MDYLs diff --git a/mods/default/textures/default_grass_5.png b/mods/default/textures/default_grass_5.png index a21253589130a6557f7f6f215a036749e112a3e4..7fd6838805d5e6ef99eec788e061793e3eaa7665 100644 GIT binary patch literal 3269 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 Dt1U4% delta 243 zcmX>q*}^nIvYwfNfk8u;KNv`v1^9%x0%^Axy_g!ytWIa&Y%}XXo#<*i%Wxg9A}hBv z?dT@w+%`LpEYsj*!|*%{6F;r0iSEI{x|2zKmTpo-6@fObhqA*-@b6o+N+`p zY;jqxe^{($9C+g0Y?;N^?%@2cZ6P49*<3Ty3UgV6tq&aLnU^}RoFn2!4i6)% rz|?!nrOAtp8*3weZ#nqVhJF9*Q%ns_o;@5uhcI}$`njxgN@xNAYZO?) From b24049950ed0223054dca76ab3a2c00acf2540c0 Mon Sep 17 00:00:00 2001 From: paramat Date: Sun, 16 Aug 2015 21:33:11 +0100 Subject: [PATCH 13/73] Default: New stone brick and desert stone brick textures --- mods/default/README.txt | 4 ++-- .../textures/default_desert_stone_brick.png | Bin 249 -> 611 bytes mods/default/textures/default_stone_brick.png | Bin 258 -> 583 bytes 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/default/README.txt b/mods/default/README.txt index 9ca52fde..13fdef5f 100644 --- a/mods/default/README.txt +++ b/mods/default/README.txt @@ -58,7 +58,6 @@ VanessaE (WTFPL): default_nc_side.png default_desert_sand.png default_desert_stone.png - default_desert_stone_brick.png default_sand.png default_jungletree_top.png @@ -121,12 +120,13 @@ paramat (CC BY-SA 3.0): default_junglewood.png, derived from a texture by BlockMen (CC BY-SA 3.0) default_grass.png, derived from a texture by Philipbenr (CC BY-SA 3.0) default_grass_side.png, derived from a texture by Philipbenr (CC BY-SA 3.0) + default_stone_brick.png, derived from a texture by Cisoun (WTFPL) + default_desert_stone_brick.png, derived from a texture by VanessaE (WTFPL) brunob.santos (CC BY-SA 4.0): default_desert_cobble.png BlockMen (CC BY-SA 3.0): - default_stone_brick.png default_wood.png default_clay_brick.png default_iron_ingot.png diff --git a/mods/default/textures/default_desert_stone_brick.png b/mods/default/textures/default_desert_stone_brick.png index cc0f04a36cf5a3385ca78bcde3c4825659d6a8a2..42d9f2773dd0c41bf16a81105810dce86084a3ac 100644 GIT binary patch delta 597 zcmV-b0;>J_0pkRa8Gix*005AYXf^-<010qNS#tmY3ljhU3ljkVnw%H_000McNliru z-v|&C6$|v8EHnTB0s=`yK~yNuJyOeV+b|HEmH5!haT2E~kmis+fTEY21N79d=)GUi z&+C8mP~_C6K;am+Wm^(Oij>G6=y*?yU1DZuhV5GVwXSe>y|Ch$_L zrhD2PSZ{4>hFY1+GBa)zjBS+$a9L&m8Z!`R*Xu=@FAs{RY5MT?=JB}(;h=|haHBus zYd02x6KLNX0oouZ0e?7qkx>fH)0E|$pWt5@^rFlG%yU^tvD~*&Rh0>Zz*dd=wcJET0EJ)x zo;HoL4#40>0FpBR>$d;+`hxvl?=FgrC5f9Ro~CY^h$w`R@eBY|a z5ASaQ1PZ-5LT)-;EB)ou-MZ~d!2<;VGbuY`XBlTt+kZnmJ!&A(@}Mfo`@wD6eggoA zM#XSheA;NMtpiXE5 zTatM$Yh`L>PGH?&d78Gy-7U_}GI7eGlA@A=MY?XV-C*Oi)mE}ZJNLJ40NmeR1K9Tl zz*cGc_D=bJmJ0x_K7N753^()Y&H3zcRmX|4t`t1>OtK{SFnTXp5_5P}<)in1w);x* j(R-F88Bb#-ZkqlBDb5(u`oQEe00000NkvXXu0mjf5YZ4G delta 232 zcmVA7Kf_rOYjCK&n3+(V~PMN#MD(f*TnPs*gcg7VZP_FrbtgMn3pc1^mL8%%&SddMq ijtG{BV+!(p_4oniQv-hee4KUw0000%A;0>=c97=H)?0001xk!Usm000SaNLh0L01FcU01FcV0GgZ_00007bV*G` z2j2(~6EGyQ@YfFj00HJnL_t(2&rMNHZ`3dpoMfHYiJk10TlZX{a;XHU;)am;1t5MO z5(oYc>Ji$CerVfn)i&G2iDM^<&EY|WPxGGV`Hg3y@87;|Hh(wxclr_DC!mD@z<)9!l#~GG4Wt-Ap%eh!woTIn@AEvLrioS6?&9)tUdmGr;QrykS_@!s z1Art=06f?AtHZb>x_PLc zK7M$=xxJ$tg7;Dt#&l9j_Vd>%wPstk_xG#S>hY<%x_`PRo&Oufh}s$BoFj{^wIr`B zOCptJNy%!hS!c|8y(U{ICZ2LPI4R}bc1umNk;=up<74OCFbte?0G#ux+OdSa*xLgl zgpj5wjiqUtBnhK+ZP!tDN=nn4WxBM^(UUI^4k!%(P1CTm^Yc8*0hr!|5VY3D^h&AT z^ljS$_%m^G()Ya(;_s)GQe^N9ilXq|UvD-_DFEL4`6@}0Ki(lLXQqJp-KUhlmrDCLf1VMnBwA`%&^2QIpL$Au^@wzS=xbV#>Per s$%4WG8^udp8O)NE4m2AJDZz~a0OiRk9koNw0{{R307*qoM6N<$f*Rmt6#xJL From 99d0442cc9858abd03e24e5ec1c303ef66bc4d65 Mon Sep 17 00:00:00 2001 From: paramat Date: Sun, 16 Aug 2015 23:24:41 +0100 Subject: [PATCH 14/73] Boats: Fix sinking through boat when detaching By CProgrammerRU Also, by paramat: Slightly raise base of collision box Improve code style --- mods/boats/init.lua | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/mods/boats/init.lua b/mods/boats/init.lua index 8d61dc57..0fb54f1a 100644 --- a/mods/boats/init.lua +++ b/mods/boats/init.lua @@ -1,4 +1,3 @@ - -- -- Helper functions -- @@ -8,6 +7,7 @@ local function is_water(pos) return minetest.get_item_group(nn, "water") ~= 0 end + local function get_sign(i) if i == 0 then return 0 @@ -16,12 +16,14 @@ local function get_sign(i) end end + local function get_velocity(v, yaw, y) local x = -math.sin(yaw) * v local z = math.cos(yaw) * v return {x = x, y = y, z = z} end + local function get_v(v) return math.sqrt(v.x ^ 2 + v.z ^ 2) end @@ -32,7 +34,7 @@ end local boat = { physical = true, - collisionbox = {-0.5, -0.4, -0.5, 0.5, 0.3, 0.5}, + collisionbox = {-0.5, -0.35, -0.5, 0.5, 0.3, 0.5}, visual = "mesh", mesh = "boat.obj", textures = {"default_wood.png"}, @@ -43,6 +45,7 @@ local boat = { removed = false } + function boat.on_rightclick(self, clicker) if not clicker or not clicker:is_player() then return @@ -53,9 +56,15 @@ function boat.on_rightclick(self, clicker) clicker:set_detach() default.player_attached[name] = false default.player_set_animation(clicker, "stand" , 30) + local pos = clicker:getpos() + pos = {x = pos.x, y = pos.y + 0.2, z = pos.z} + minetest.after(0.1, function() + clicker:setpos(pos) + end) elseif not self.driver then self.driver = clicker - clicker:set_attach(self.object, "", {x = 0, y = 11, z = -3}, {x = 0, y = 0, z = 0}) + clicker:set_attach(self.object, "", + {x = 0, y = 11, z = -3}, {x = 0, y = 0, z = 0}) default.player_attached[name] = true minetest.after(0.2, function() default.player_set_animation(clicker, "sit" , 30) @@ -64,6 +73,7 @@ function boat.on_rightclick(self, clicker) end end + function boat.on_activate(self, staticdata, dtime_s) self.object:set_armor_groups({immortal = 1}) if staticdata then @@ -72,11 +82,14 @@ function boat.on_activate(self, staticdata, dtime_s) self.last_v = self.v end + function boat.get_staticdata(self) return tostring(self.v) end -function boat.on_punch(self, puncher, time_from_last_punch, tool_capabilities, direction) + +function boat.on_punch(self, puncher, time_from_last_punch, + tool_capabilities, direction) if not puncher or not puncher:is_player() or self.removed then return end @@ -97,6 +110,7 @@ function boat.on_punch(self, puncher, time_from_last_punch, tool_capabilities, d end end + function boat.on_step(self, dtime) self.v = get_v(self.object:getvelocity()) * get_sign(self.v) if self.driver then @@ -149,7 +163,8 @@ function boat.on_step(self, dtime) else new_acce = {x = 0, y = -9.8, z = 0} end - new_velo = get_velocity(self.v, self.object:getyaw(), self.object:getvelocity().y) + new_velo = get_velocity(self.v, self.object:getyaw(), + self.object:getvelocity().y) self.object:setpos(self.object:getpos()) else p.y = p.y + 1 @@ -172,7 +187,8 @@ function boat.on_step(self, dtime) self.object:setpos(pos) new_velo = get_velocity(self.v, self.object:getyaw(), 0) else - new_velo = get_velocity(self.v, self.object:getyaw(), self.object:getvelocity().y) + new_velo = get_velocity(self.v, self.object:getyaw(), + self.object:getvelocity().y) self.object:setpos(self.object:getpos()) end end @@ -181,8 +197,10 @@ function boat.on_step(self, dtime) self.object:setacceleration(new_acce) end + minetest.register_entity("boats:boat", boat) + minetest.register_craftitem("boats:boat", { description = "Boat", inventory_image = "boat_inventory.png", @@ -206,6 +224,7 @@ minetest.register_craftitem("boats:boat", { end, }) + minetest.register_craft({ output = "boats:boat", recipe = { @@ -214,4 +233,3 @@ minetest.register_craft({ {"group:wood", "group:wood", "group:wood"}, }, }) - From 835ca02be5f0c37b4aedea13a7480beb5e9bb69e Mon Sep 17 00:00:00 2001 From: RealBadAngel Date: Wed, 19 Aug 2015 00:26:32 +0200 Subject: [PATCH 15/73] Add tiling info for grass nodes --- mods/default/nodes.lua | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/mods/default/nodes.lua b/mods/default/nodes.lua index 8c24d7c3..608f6c29 100644 --- a/mods/default/nodes.lua +++ b/mods/default/nodes.lua @@ -274,7 +274,9 @@ minetest.register_node("default:dirt", { 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"}, + tiles = {"default_grass.png", "default_dirt.png", + {name = "default_dirt.png^default_grass_side.png", + tileable_vertical = false}}, groups = {crumbly=3,soil=1}, drop = 'default:dirt', sounds = default.node_sound_dirt_defaults({ @@ -285,7 +287,8 @@ minetest.register_node("default:dirt_with_grass", { minetest.register_node("default:dirt_with_grass_footsteps", { description = "Dirt with Grass and Footsteps", tiles = {"default_grass.png^default_footprint.png", "default_dirt.png", - "default_dirt.png^default_grass_side.png"}, + {name = "default_dirt.png^default_grass_side.png", + tileable_vertical = false}}, groups = {crumbly=3,soil=1,not_in_creative_inventory=1}, drop = 'default:dirt', sounds = default.node_sound_dirt_defaults({ @@ -297,8 +300,8 @@ minetest.register_node("default:dirt_with_dry_grass", { description = "Dirt with Dry Grass", tiles = {"default_dry_grass.png", "default_dirt.png", - "default_dirt.png^default_dry_grass_side.png" - }, + {name = "default_dirt.png^default_dry_grass_side.png", + tileable_vertical = false}}, groups = {crumbly = 3, soil = 1}, drop = 'default:dirt', sounds = default.node_sound_dirt_defaults({ @@ -308,7 +311,9 @@ minetest.register_node("default:dirt_with_dry_grass", { 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"}, + tiles = {"default_snow.png", "default_dirt.png", + {name = "default_dirt.png^default_snow_side.png", + tileable_vertical = false}}, groups = {crumbly=3,soil=1}, drop = 'default:dirt', sounds = default.node_sound_dirt_defaults({ @@ -317,7 +322,6 @@ minetest.register_node("default:dirt_with_snow", { }) - minetest.register_node("default:sand", { description = "Sand", tiles = {"default_sand.png"}, From 3740efb393b0c1bba458d44ed80ce3e04ff499ce Mon Sep 17 00:00:00 2001 From: RealBadAngel Date: Wed, 19 Aug 2015 00:30:19 +0200 Subject: [PATCH 16/73] New normalmaps for some nodes --- .../textures/default_cactus_side_normal.png | Bin 0 -> 16278 bytes .../textures/default_cactus_top_normal.png | Bin 0 -> 13506 bytes .../default_desert_stone_brick_normal.png | Bin 0 -> 13630 bytes mods/default/textures/default_dirt_normal.png | Bin 0 -> 16606 bytes .../textures/default_dry_grass_normal.png | Bin 0 -> 19958 bytes .../textures/default_dry_grass_side_normal.png | Bin 0 -> 9118 bytes mods/default/textures/default_grass_normal.png | Bin 0 -> 19958 bytes .../textures/default_grass_side_normal.png | Bin 0 -> 9118 bytes .../textures/default_jungletree_normal.png | Bin 0 -> 16239 bytes .../textures/default_jungletree_top_normal.png | Bin 0 -> 8706 bytes .../textures/default_junglewood_normal.png | Bin 0 -> 5957 bytes mods/default/textures/default_tree_normal.png | Bin 0 -> 9382 bytes .../textures/default_tree_top_normal.png | Bin 0 -> 8706 bytes mods/default/textures/default_wood_normal.png | Bin 0 -> 5957 bytes 14 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 mods/default/textures/default_cactus_side_normal.png create mode 100644 mods/default/textures/default_cactus_top_normal.png create mode 100644 mods/default/textures/default_desert_stone_brick_normal.png create mode 100644 mods/default/textures/default_dirt_normal.png create mode 100644 mods/default/textures/default_dry_grass_normal.png create mode 100644 mods/default/textures/default_dry_grass_side_normal.png create mode 100644 mods/default/textures/default_grass_normal.png create mode 100644 mods/default/textures/default_grass_side_normal.png create mode 100644 mods/default/textures/default_jungletree_normal.png create mode 100644 mods/default/textures/default_jungletree_top_normal.png create mode 100644 mods/default/textures/default_junglewood_normal.png create mode 100644 mods/default/textures/default_tree_normal.png create mode 100644 mods/default/textures/default_tree_top_normal.png create mode 100644 mods/default/textures/default_wood_normal.png diff --git a/mods/default/textures/default_cactus_side_normal.png b/mods/default/textures/default_cactus_side_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..278f723413c14ddeadc4ed306547bc9005248de9 GIT binary patch literal 16278 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 literal 0 HcmV?d00001 diff --git a/mods/default/textures/default_cactus_top_normal.png b/mods/default/textures/default_cactus_top_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..ba361ba0beb68eed99a4873ac33101e8a39de007 GIT binary patch literal 13506 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 literal 0 HcmV?d00001 diff --git a/mods/default/textures/default_desert_stone_brick_normal.png b/mods/default/textures/default_desert_stone_brick_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..9ef5865ba8e28194b85d7e574c700fe86a32f41a GIT binary patch literal 13630 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 IXA=7V02kaMod5s; literal 0 HcmV?d00001 diff --git a/mods/default/textures/default_dirt_normal.png b/mods/default/textures/default_dirt_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..e12e9416cb0bfb9ce70baa9ed6c17712af2dc66f GIT binary patch literal 16606 zcmbvS)=C~Ed+qnNuOvoIMF9()9321vV14>1rvU)K{X2vMpd$a<8M&9({M(_q ze$@8>0I>W1v%&pj$EE-PXaS$(q_uprPuoutcRxZ3@6Vh*{FR{RHuic#wf#VX3AOU) zmB^w+Lx7GQRaK3}qxyWe2^hy|QLqt!_WD@mDf(rb(y^6?yk}nHiu-`PuzUx4qd9f%Hx#F?co|jTP6D=WtiGAjKg0}7KOOv-gWbi=O?EDxohfv`51~tggXMJFU{NAU&$?kSfHTtA21hxN?4(CFRoByE@sgW z&EQhiv+BFXM~q3unej7NZwO(SWX3 zRyt+dT)MYrfeUU^Y4~p#F>q?6-w&sH0(;_q-~xsLaM@PD10(Tk!7p6Gy1fbv=*Nvh zuQ;KWS|~&()*Q?@XYkr?IoLB#*O((k8;U9i$8LoPSi0-y1=F&Zy5NRT`U{Xk zU>(euuHk&7dvJl!N=@hAtim|IG|yZkKdeb!euzcVJfS?0vdR7sNm()a~22TfoXXS*xT9%_ie&A8UUUM`vI`8$_E?wvHMdl&UkQjP)&F)=aN^dgd( z?Lp$wf0?Bfj(5NN3?r~-ooDARi7HrcRh$(n=2(&@p6sBXSXueNo;5@k0{P+igE+L9 zTHVMsY@hcZ;7`oP)esnyVC|%vwHbfJyTY_!t>8#r&jLg}7J;`|TBCaV`r+u2JJHw5 zL6k`6`Z-pYbl}4ML+@9Yi7-NA3#zW9jj_(YN6R$+rnl17$KJwLZl}MRgO*t!=H47E zF?MS%9yInIHZ9R)s0@!8WzW@5om{`tgB-qsY=rH@*-~im?BJtp+i25LnVAtL@Nw1D z*Pv(rBh&&xha{-$RoW|km(lHoo>ZrIlK9oCGD5xw>v>IB&D!^42fa(I5==M762;Vs zj5w&Yo!LP4WZOs{xIE(ssZz0rGd@VFtmx&Ryj|5K@by55wJA$a2=^P$hUtUD)d%yv zr_A4Qb230%`G!+!7~8nlsl5C_mcZ|F7q}9Z3U_AN(rbfPx|)9TJ>S)*x*|gg478`} zbgSWfyV83|T&_-dPGb7debH-$-# zYPIG>2d=ijZl9Glr~Ays-u`d}i)L_gy1iWVFAdQ4T&mqCCaZNxUrxo>E-C8IMF|9t z*PF_U<0RsAKra21Gc}Mmr3V&+xEx-b(r+_vy|Iq*F}m$Dci)`<@L8|MPtr;1=b_B8 z(?rUqn14hKiLnXIu;`!vM$Z5U@BYeS=k&)fwIRpO)R=OY@ZRm4yzx$i2s7ZL-IS5( zxDpz=E01i%z~MLoAN(c$_6%Wmpr3ff+m9~BXBE5ov_1N6Vm;8{>~iZAN7mwPgx0l%75?OV zp|{#x-*gyUs=PP)PivJk+CE{i!e(s+Ybav?P8nNCg+S};hRWt&oBDASiDinH!vxKv z#bGp0`2$LYqDuN=_VRHxTyAfo=P2qd{3^X=TV}4 zgOHPlHE|JsO~Vhf4vQlSL2Q}XQ|uQR43%ca4_t;KBEfuZ)7pXU$z*h52$aQ}T5=*3 z!4rFEj?~TykK?0_G+~^P+%C5Trc`GzCFTbq;m+O**S9W~!i#jEw;!~TQ$jT<%-F#A z23I^I>T=~>Y~whf9edsDywjTFD>5V?R*2GcBfEcMVuI=qM%TZr`!7@T$cjC{sUIt0 z)FHZuofX*LTEad{QXokdtaEJaN*_(XZ3p#<#1;WI))PUF5!dMOB@q`_&0enwP+9%n zNY)LO#}@ej9908V*~}&jG%MnAHjgCcoFO(-CgavHtzBI0K2o{ygxqEpx?_u3>(Tn5 zcvBP|Aq%tT(q?gt3=>e(M6OZ}f*OUL;OUt6Td74jJc$k%Ujx##Kc~9!f$By5VlccY zJ~xmgvZ2ADBpRej*|f&qJ0n5be`+E_PDvrLH0}R=`pUWae&4gxg(m|dSKRN9b4wJLD*TFc6`#)FXoq=WLxF=PcIACvk0v!3 z$&-Q)z*y(BI99f0C+?^J!3^+T3d=k;q(<tOv#9CBYBU4$ z%1?=<)XZKrvH+&XdBQ)Q25)|kq9x6Y<`Nfp3}%LR6jVYQod6POZiwGjIvFqEi!Dwt z!Fyl`iv*4DeKN}Jbj*PNUES3mU+abKfa^S4%EZ|nxeAWXM3;TJV}KuVOz|t%$*JU~ zS$H}{k&U{zl=ayZIbrU!!H<@Cdl6bcKUg+O+^0cO0x=r;>u?+uTJ+H zETTH^E`djh!vvgY`tU?*U!G(mSOJjV->mQdS=849hYZ! z5B5elCI5WsFWJcOHFJtgI9#W&?VZg^6A2oU@9r`N9fp+~SwP{y##wo87(jL2<`ln@ z{3LvuIw5DQ*A-rOla4KkSI=kiooGDMI`@S6U11J%;Yjg!8A5LBgE)DyMkfbQf9%53 ztjSm!x!cp*v7t(yGiUba5J3qZWy|H}m*}^PIX#GaQ!=U`fsE27j-JxP8M|-d*|V;n zDNe^25rcXT`64`(y%t4AiT4o4CO}kL7O9SROv9yz8xmnZR&@Bs2P1Y230#wq7uOIq zu3VpbC8G!S02k#WXV1p0sCHqMh4ET6{Pc5%>?6{mp2$tpp=&#{3KfdQBU;*B{Y-19 zwc;{6z@^MS$b$%~Ptt5t^`4z2bQM@~YB|j&7ikuWL#HIBuXbBv{}Z3l z1CE9115(s_PGAE}vieSh0We7yjO5RaV?CwXD-9yYCsE_5S+CVDT(&@1`#hi`N?(Lb zR2j5ceKT#T@{niRa%Ihzy1cHs277Ua4Bn%Oo!V`$kyFyo*9G(qxvOAG$@_+A5o1VL zj|Q+~A|bxAjMTMJ@)K+_hH*1g$ijR>dRv`wF8CS&@T=eSlb1?Z24}Im7Ggj+ozqUR@zRGy&V_7RYpt z2_Aco+l;D8A?WeSm{MX=_cBb$R@$y*zh)MX*p*Zx>cgr?fG<{rpO2}}$%k*VvL?Tx zesmk&S{X^PY`!sN5dJygcZ|r>U_=ccG8R1-vy_~+D)G`Ex858aC1Zn9LqB1|fk;)n z-7JoXflTm&b~nW;2cC4j%U}@QwMHwaCl$%uSC|;Pta-;FV4vY+C@3H}I)JOynJ zKBe^b^Bkafeer&LGXh$V=k|I-D@m%~&R3E;3jvPOQZBc3E;A1f)Y4p&n+CaWoM+Vs zE~J8be3&~9_)=z`*&k^@6hP3;{Q*s4ZZ1$oZSfk{arho4kYouH*!&+Fp8so*G@anH z+=ByK+mw#}-jRR#)A2ADw~p3Awk5rfIJSMwX4Td)mMMZlpttc^tkh{@-7zQt10s6l zbW>!@f?p7i+PP@q5$rBc8>2?czuSDrf}De*P20g;q@V-QHK~7$P|2orZVCQ z14j0yC?hW_1ZZNSOoyT4c?3#=c{~}gfd$>(?p)o(h(knZg$Zu!%H$_VyB4I}TpD=uM>=4UxHBn3JiNQF z*COR|rX^*PxzS^vKDga1Q)zzAaqfEt00;k~^|DAnC+HZD74F~iNHIIlXW@_Ud;FYz z>1~$uudTb`@@!Kwc%Gtb+q@Mo90zm^Qbmf!MseIWuVgoAtJu2+xPhVEaCkLGIVesjPiKpi1a_unTrtJz%a zTMYA99L=nk?d_j98WMDIn5+k)Qp+f5kBYkbpLa+Wo;Dd$M;faH%&f=%dj8|KpsQ+% z9O1NLR}k^|&Sw&}3!?AAGoC+|&g=t7yR+j7{7`7KKdE1%^nsnN(D0WHchpJ}Hd94t zC3%Hm^D5p(@Y4!%*nFU!?K%=Ae=cz z9m5Fk-pgi|8M@Gx&LVy(KEcqo#?}&-$=!E<`?89zbcjdcc_G|VyL5;zxMWZdyX_k7vxgjr628pQ*=+wi>6pjDAMR=(66{O6~b zMjYOb(wZE55SAQ^Fp}zm4{Uz&g?uFWuE5lI$)&Fg*{tdO?K;@i*l155_(YRnJaBqE zI=N5h=!d=H13RM}$qDCLe{l@h(UzgOOu2Y=Ny-QeZo>m3^LCy+yBvVy$p6D)TqY3~ zmzo{C;r^xNf1716iJISdA6lLs^TfU$Tq92H7pH!uN2R~zYNkI#njh9r`atuE3T6+E zfoJRaGbhb08R@{(v)BKy!s~SV=y)?{yF#(COIG1B%Kt!3c^On*iis9tP6utpW<~l-)VBLNuh*aevbQ_D z^nZO%&t+a42a4%IEbr<%LZ}`_O6c-{@CQcg53Eec7~hU*2k^_t__c&;4a}Hd-5(INzw067Kajxu59`!Iy=R~IWGVUg=5XX)y$!g% z9;_rK92lqJ%=2l?sJayruIyx)a0=2%b?DkKZ3`+8W3Hh#D-pf2YhvU6&{HHZ{YdKY z-={rM_ke&cPa|GkU_)odh)4r~QKu_5g6){j8nLVX=RsA1YR3S~VeKt7x#obY!!xQN zV|dl5pJ4E!OQXAtYF-^mN6n`jVs8P@c1^Bcw#u&ycCKkc)x5Zzsw_V3L)gwEEqwIj z+~c>AP|tpBWhEtujHoO;^2qR_PcFG8wBS9w9^^YT9h3zLF(JOxMkj?VxW`TuLylJo zLP^b6kj(JT`|aaJcM${lx|>lyg*Pr|Ch_dS2Gebr-)`hI2Sk#s7}#gmL?-#Y1;v@v<1AZoP$hymLJ2%XeE3&{ zi;80NMQ@0sYaFN3deIJfSTi^fp$%bF5avWnRb#f&Zz<+teFp7mSUPIuXb-N6^hC3N z$*xv?TS?kdb`ny!H9VPlKA8?5*ZtKD9~6LnXjn{Q~IeQSg zJsVxRyfM6{w8#obQ;H0v?q{6)0v8}lJ#edJ)dfvWg`iDS+~8JaO*GbTT$2X=zv|)h z-`0))JO9|hd``(r52BkMfW#&@{#c5^^FEwED>ooCK5L}$?`~E>Y+%qMz#x>A4w-?i z^acmw^H_jhZTO|_`xQRwG5Q|n9lZse?uLZigU(JzlHsq%3--G-%NrnR?D$;9ZNWc` ztKOvrc+Ko-Tvo*Jq+wT)X8cob-7W{kEAe|A_AHhpl7?vgE*zAEhr z+jv6~HT2qgv)fU7sU^3Zz{a8O$=bCQ5UaBqQ=+TQRLg6$Zzqvg38|l(p;DU@P@?rh zB8rP?mLo$harXzV;Du0IkkKL=ra5zdk5Sne^{Q(A z77<~K1n@l^SbP~yd#LWs2NiF;!6`=D_BmEm@>I*S@7>)MAW~tQ*F~8i=iBUqeh5d^ zV!v&<*2AD<~4Or-DzAYevV5E580-1 z7P5F@EH>%YHY%ZeG5$HuK)4~{(j?WdhR<$q~)O0QREHi zvY*0;wLk8^w&{Vt{(T)3051UvSirTrf&!E(Jq~-24_+pQQHM?t+dTaRzgM%SD;|g= z5+1N<+;76wGm+swEdE=zU~otiniIX(D>}Leb0a%ns05VW_&@^8 zup*UvL`&h~U0^MR*jR0%8J)o&H2^Zw_bL=(m3A26pT}}_Z=3~$Maji)8Mm+Lt`)OG z4v?g5)Z(A^qZHr`yXV_-VaJx(Uzw($fZIsVZ;k4w%w>nSK^u*(C(B@k9q zoyXuQe9ixmvy!GSmod7cR3&SN<1Flp6eqna)A}^==_vt)S}*&1!_X5j(>rrIj*p#j z&aPKq!)&@UpWo1(g0I8#6lfn`vDD$)T)d7sKX&4}7zVL4rCabpN4Gq$dIOaA>ALn0 z^_^~PeEwEj^cIeSs(ma7j1FKmPdWx1`dP2``vx@GcXoYrX||hTf5LJTgq=Ki@J$fE zjH=ra9s4!dF)joU?a=n>CT;yL%we#OOb-<%wdR<{Q96mrDW42>1B%KG<(rNmtj8l2 zB?=@!{2Q25k=)a3kQ}=m^F01$y4OXdD};9kQJvL-q6d5fp5bSijxFkJK(#iC19(Si zJt+{cY%8m>EEk6bc?yBY@bv@*s?X!QB2vbf0aqe9ucco5a`&$Ts9&#bz!!xUl)YCG z4U#7wBKNZ|z^Kj5w%NZclQswUZdOgka1LFbe8(0JSt3{Rii(TFhS45)uV#u85!TD_ zSyUusmU{OBD!uspXhea;73WYhws7hw)*_{#2MY`MvP0#Hx{Agzj>|5YrV}$e#GhkC zeYhr&?eFtnAojzA%ue{+&J}Fy7{F>v(BRb_nHH`kLHH6$>07I%#7@zBaHMMWCQNF-;h-SFrUwNBBIl7YlB9gfTdvgo8+~MkF@)9KUC(PB3 zjAhz{f(ClR8B$>c+oLQK>ycj?j(Sfo2EK;r5D;{SEVJddR*c7FnAxn%gI3@OTl~D? z^huC<<07!;`3#$w!l&(=sS^gh?*>;4!wq?$W(I}p4-L?`=BxR;nl%}t?Y1x@dVSe! z!Zv6y>Hm@6iFbSn#Nt&Jj=z4KaoOc=f4#I^O zw4=^}AmNqXLAeS|M&XL>67N6Tui{T49vDlA?c{>w4LE+>wH`5Qt*O@3?lC-AZdD1I zXu>3!BZZqUm4hTimQ5+TcS5rY8|R@7WM!rf^&5#^E8g%w%+E_NXdDr6t;8u+*c*z3orS$Ft0bj=IVJhkWTg2n@wZ{dZ~*+rP9v z2b@^EA;^J^lEg^G9W8P)VR+e56Qfh+kx|?~<3q?leEGE;&gXP@=b00NFjo@anET-3 zYS#AB);-$hR~9iDIqq`R3wnk!FRYuuDle{oWG(4X1V7ycey{lUi6D$qRSI^f0Ag@4 z@qx1z9BE6i+W%oe@fa6q`Y;_#<25eh+q<~Js0ucFuvq*)`6F5}M=nqy2l2&st)s5) zM(lrNu{+^4zo|B9M!RiST4Vm23zO}Uy=33uyRv@a_+!8D<_dOt$(Nvw;whd>qVCVCJh}Ep6o*E8npQ&_CcIs?W zR|04ee}OaneRRkq_(RJ#Ni7c5=mWpaE4gXnLGhs@gyBT?6DmfSOfkz1clyPC)=p?Z z$BS)8X_~Vyk~Q_8MlieVYtr+=mXe35d&GG|FQpEoFtjn0O}A5OW!b~h!$?s-P(kxR zi{kr@>Y**d!GDMs|3o$@F)7r{ z7;`c_;HQ+#-&mt}}%^(#({QtEmm!dRqpeF+6oY53sZ0|rrx8i3WduK{D? zzwmWK7!mtj>l$>$xCQq1ts#|iPxhH3;Hci&!6-RejP=I%jEyl>bNdf6JxNulJ>aMY zlhbx4k(o0BUpY!ewbo7!k4G^ZP6E`r2$7g`JytfI+DtsPm>+Qs18OMPgCpPYLI&w2 zw+R~$l{@P_UMi~_RYTI4OtioOoAV{FW-(G3*cH*vdd9XiYwnZqEl#C8RDQg%mZf(n z;a>#pHC_7W{jMdMmtDT-mf(RaK-CD1sj>(day?6tXZ7UYbvNr*H^T!I#L}V@6RkhGDL|2F{u2+a4 z8Lsiq#F_>GhctpX10Robi)XwI8Yo@TJiY)#bQ(G`x=!jV;%<_Vw{L zclFW5l7`fc$J5t=Iue2c=HAHBJ}0;{ML0iQ9 zR<0h*s-9b>dIIl~pDoSYOI%oHX!1IhRj5xw^Ksi4s+c2nlqL?xIv12hp;F&%SAd5g z0=&KG?jHrWSX2B){#*ZeW!pR9c>Y_7x@*tcM0fML5~i^?+%HNR>^ZMcK=b_-^vGQ0 zhyTujJ(I<|meF(&sJXrhk-S*o{{#`5ac~o`%}OfW>9qMGl>of;`P}kY#cZBcy@y}= z%~dl)IIGD@1R7Zw3nl9I<%_hjbr7%Q{ypMxa?K=SgD(5WpS1Tb5{&O+3CaRi*)TX&+P4amN7^q<*Oq@Tm-_1$*EZ;gsp`<2Nc2DKTNBK$Cw zXjM(uYhU4tyQ`gH5II38(^l3`9|4J$mjgAwch0#$oPJ;1?vH_)y->ml&Cd2$U4&hM zboQBN!~CgfIe7;RvE1FW6vB`iux#a11ATjc;!~DZm)2;aUeiM|@8|hM`_M*}FTXUp zX*k+rJG@^{ivK-o0Qu#VohMudvQI>5Pp6orvan!OI}%Hm(dAIA6T_lBEMx^m8+iB! zrc5>?cp_)#b=;dNVZ%WabWSdxyhiHvFy{|K3@mmS-c8M~o8938*wOU1DiBb@?lyhV z?l}O303|HhtXqGt)RvUbNymzxtl@?2AJ7dT+eokk3^2Lijfv3tVpX${mK=`%D2~)x0n}7G*?6|C``FygmX-V|%{t3C09y;~ zn{I`0Dx2!M|38TKcJkQH35x#Dh5xN4F8iM^$4Vz^wMW~M^Ecv6In!+is-uM2QD^=L z7w>bFYSWreU)gaNU8AYlz$F^D#hGDB;1F{ccz{>WZ43fjW5J(PN%^S(RzI`J+=rJ&98uG~ka5IjRLmna@(&s40ZGYk| z($U=h$rq6tJ&qbVmoJoSkSmdnFg*h^%^J}Tds;>q>dHA@VC&6;C7fXw(X00w-bz!{ zcZH>Xm~zOyeyV%YW`zj;7?028SBZ1$;SEseR+o;Lui5+BplN~P#u@o4$h`@CI4XbT z4Su3Yho>A<%j169XEpn|2 z7k$qJX>W&+;+_;L-DeAja!y)2V`InLl!{HMO@;J}_Q#($-y$sMSG@bJm?Lc=S2cMF zU;}n~vHYqwzEpU)^67{>@%Vuk+*iy0!gtc)^VZIYV?J6pi$zib^j{%qFb zE^H`cL1TS`9haTPRRG;#Vum@=7a#PyTQwTcTDuLTQ3_}hBxQ=)nlS7UaQ zWT!92XHC zdRfsG7gH!#SwKyVOXW2AU^ zWh3_|_&9ULDp;defEzT)v6~HOr0RUo3L|&@AKc~tbDcl=PIdfw9L6#X)n?H*m3%jE zpMp}{&TpYn)^?wi!|Zxnw_x*to_Y#|<7=N!Bl#WY;H<;bq4T6PZ+-}otn7J{HXFy+Kr9(*fe!sk6-%oW@q<4MtWY%I~I zDk}r{Krm=ATXkT~)oC^#{0{gG5Fa{}z8M&;=@Z$py}&Pz+b3rYCRHTUh~fKtr)d|v zx*g6rxoKrl#XI}yLgbK#@tPLBnj#4m4{H|R!H&nxv%otyt>1LQ#>3{t>#>nicdiS} z%N!PZ3((}R&v?cUvUAL%I}eI7gzJBg9c<#{<5~G3Xinv0z*k*ETijI0M9r=6Dm#;4;T( zCh=8LerQyf|N3jb4?sw$JTHHaE}8yMB(4X4{k39vg9%@dVX5P>*DUm0?M2igk}TF# zcLtV#7>3gRWVvg-W`YCs8mDx#BtHy=ACnyqK{MZ}~L_D1Q*B7jO zRsw~`p8y9l+ur$8q`pQcO~)OZVT^CJ)^JaI>&z5GHv!il-~i})aJf|i%Pxbi*?coiHv}HO=JvA^#nzSCz^Ziq@Cp98*djH)4 zabgWwwsW6y3U=>s$)rlgr$@KeK0eZ5*ZC;L9Qh}W%saF8>wtapHhlncsE?+8^dGh_ zb{)TI*aR6y)v*-xWfjB6Rm6BxqJ%L~uo%s4E5pnMPWu@#r&0||b_eciq}Ww!;?Y4^O}L_mW4DK6zj6vSk3 zl~Tr(Kz$6y#~kr^Av7tZZ+LWm#c3a`m^PUJVN)_Q8C;V~TNVyL9`-|hp#k)^rgTNh zV?x->PWU#whNC}xLn&LvhbHafwyb7Rv6<$A)*Y4IlPykFoP|;K2y-aytYKAlp;^4OD_{6AD zFi4ep;FTXBoi4*DV_YREVnm>Bgf$cEFn&r4e@NF-l70@Y6SH-Bt+^IgdJ@s3Zqaou zGo+SAdo__YdXq6-NF4+a`W?+WVitF_2cg)btg{;=GiR@M2^s<&{g4wvZA^xI|JY`$ zwtJ*L*B&=H?O$8u@Y>DmQ}}ixT5(Ug~u!>mFMIz zQ$;=9eJODY&&??T_xETB)mFm#1#o&z<^yhUeWL)5wM+{j&)?So2$vlTd|X)myA3+K zIL~8=`_l*Glk&m2Nt5W(5WdN8hSc3PqF(JYNpIMFIujk9`IOS_-!A}*1Bxg)fp1Y4 z*O-wG*xk6L3L%ktPa}>A?yOA*6QH3+?>*cF+pa#b5R-{ofkZ`Fq#&j{; z@4fxP{&WOG^zc74QORZ8us#MbFcsen)CgCKGG490#$NpZjRyl_cVO7g0X6V0;9K}V zU&m0iTfz^~H7V$xRJHz!n`M>Oo*;_$l|Y=rIJ0C0j;dlM6-3KAKSCOq|8X(wv6u)m_CwvE`j74({{N6L!vC|`{)_Zj(AcaF ze#&V*?#&9Tk^u>}=$dQ(5zIkxmOhiCs;{(F^@Ybg%skXt`TWEB6?$HeeXL&3y!B7q zH4Z#DsPY5e>lmth9bAC_k+I{_W$+biQ+6}xZ_;FgGQ_)12bC3KQ9{t?VD#GHvhkKm zH;pQ@!dyo^&+yL?vR*xmJ<-@+xp4f_)*Ro)uT*H1C5K1U^q=8R|VR__As$dUZ7; zaTlb2zPEn;G&afmy(T=>FsJL?{U=Vt4U>hSp@;_5hE;$8Qk)#=-(+d#G{&mjwPhT7 zndz{P?~}$@`4__+wh3~VUEZyRl%rIibM&>1Ogh9c?(AnvJc!3CvMRnN^MQtpJCy7&Wdire=N)7{K=9JJ=zlTplT`GX*Az zg1B6Czl{*v7D~$vPl83k>6eMx1(o~Xu4Zx#T_vLn9d@QpkG{-5q|_GRQ`%1nr8A^D z20d4=H#*dhjnlw%h&Qz-cB}IKI!tdZuCE8feF)>qucW&fLNZ7X`-9j%(_#Xf%?lj% zEh|Qyce-=vKlCq+kGVcfL!Dr#_;nvNb5&n5Y1BC$O9?<>L8-B{M+SF^v;3?Xkym!8 zA}}p}OKe{t4oCw8-pruv#W@8(^?9hdOqf?@&m$vbgAO$c7Pk!9KBz9^JkCw7W2h_# zo@KClBBoXGCa4&iKUkEe(H4On67rBcikwYWv5i+YJI}vq<;YmZAsYTu)i3Q?fvtFi z5Vbf|^DjVuGXWM(mV%n3u&;nQRHm@cQ*`fmnMAuk^LS0HitSiHxj!3sI<2?IKzQU7 zst8Ol;#w`MoMe)lf#q_wc}I;TII6TOr`{$Ck4!48uM_ zs>kn>{EKgIRM(sxK~VudTRmJdY4_Qn*Q5ItNK=p_A$i@I%fWe4@YCx2hAEJ-dgE@v zyZv?fmme``0%7R#f`a`S^bgjG^ZW-l!(zO}DjBN`A{w==8K+Cj)N?Qdhz zNpW2jW`b^kXt8gOkcET@Z~m>=#WaCW?` z-?-Tur~2-6QNT>YjL8M58fnr~O4sq%!)AM;=pza?85~EL^NqS*sD?}`UWj_A@&|{A zYxq|YwixW+O;3*!#2%e2_V$R8Vpz5UxtU*L@;~R}D8WgRuSw4*UWvmt8BbVRKiTLe zp3$hBBRlu=N*|qSP1&i8u1Qy6p_e9we*jH1O$!1gJjYYLAft>&#UO48sp#&xilwzCs7m; z5@YN$KDzxu#Wgdrz&sOVeUEOO8?U_?ODP0vCNr8Xfq zKR*~FoRTPUAIqP||B8F<3zCpuzff%c%PczSKr|Vyv`%uutJ%ro z{MC8PWd&dE1d*08@0%4bslE+B1=|g`T2}WYbmwInBj$Qj zVoDiVZ|=9Y;`{Hxr_r=!x~BRinH~*{)wj3xA|r*_Z!SVPk@=kH#K{hwI5mKzZ(*g1 z*jvO|dCaITC4#JbgK?;BJ}pUt3K+(sVi_F?9v$7kdjNcrSCOld IF$??u0LY%vh5!Hn literal 0 HcmV?d00001 diff --git a/mods/default/textures/default_dry_grass_normal.png b/mods/default/textures/default_dry_grass_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..e6b16c115299ba43b37dbee52a76efc7d6e1694c GIT binary patch literal 19958 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 literal 0 HcmV?d00001 diff --git a/mods/default/textures/default_dry_grass_side_normal.png b/mods/default/textures/default_dry_grass_side_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..2251870872fc751980c81746303696ee57f9258c GIT binary patch literal 9118 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 literal 0 HcmV?d00001 diff --git a/mods/default/textures/default_grass_side_normal.png b/mods/default/textures/default_grass_side_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..2251870872fc751980c81746303696ee57f9258c GIT binary patch literal 9118 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 literal 0 HcmV?d00001 diff --git a/mods/default/textures/default_jungletree_top_normal.png b/mods/default/textures/default_jungletree_top_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..b31162eb1925713cc3bcd37d945d667b93a03a6e GIT binary patch literal 8706 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 literal 0 HcmV?d00001 diff --git a/mods/default/textures/default_junglewood_normal.png b/mods/default/textures/default_junglewood_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..5d45d7b5fa10d108c5f4029e2c40b12297159b77 GIT binary patch literal 5957 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 literal 0 HcmV?d00001 diff --git a/mods/default/textures/default_wood_normal.png b/mods/default/textures/default_wood_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..5d45d7b5fa10d108c5f4029e2c40b12297159b77 GIT binary patch literal 5957 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 Date: Tue, 18 Aug 2015 01:33:43 +0100 Subject: [PATCH 17/73] Fire: Slow down fire spread and reduce lua load Increase chance value of ABMs Disable ignition from a distance Only detect neighbouring extinguishing nodes Fix code style issues and add comments --- mods/fire/init.lua | 88 +++++++++++++++++++++++++++++++++------------- 1 file changed, 63 insertions(+), 25 deletions(-) diff --git a/mods/fire/init.lua b/mods/fire/init.lua index 20b1dd21..0ca8afc6 100644 --- a/mods/fire/init.lua +++ b/mods/fire/init.lua @@ -1,17 +1,23 @@ -- minetest/fire/init.lua +-- Global namespace for functions + fire = {} + +-- Register flame node + minetest.register_node("fire:basic_flame", { description = "Fire", drawtype = "firelike", tiles = {{ - name="fire_basic_flame_animated.png", - animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=1}, + name = "fire_basic_flame_animated.png", + animation = {type = "vertical_frames", + aspect_w = 16, aspect_h = 16, length = 1}, }}, inventory_image = "fire_basic_flame.png", light_source = 14, - groups = {igniter=2,dig_immediate=3}, + groups = {igniter = 2, dig_immediate = 3}, drop = '', walkable = false, buildable_to = true, @@ -29,44 +35,55 @@ minetest.register_node("fire:basic_flame", { on_blast = function() end, }) -fire.D = 6 + +-- Fire sounds table -- key: position hash of low corner of area -- value: {handle=sound handle, name=sound name} fire.sounds = {} + +-- Get sound area of position + +-- size of sound areas +fire.D = 6 + function fire.get_area_p0p1(pos) local p0 = { - x=math.floor(pos.x/fire.D)*fire.D, - y=math.floor(pos.y/fire.D)*fire.D, - z=math.floor(pos.z/fire.D)*fire.D, + x = math.floor(pos.x / fire.D) * fire.D, + y = math.floor(pos.y / fire.D) * fire.D, + z = math.floor(pos.z / fire.D) * fire.D, } local p1 = { - x=p0.x+fire.D-1, - y=p0.y+fire.D-1, - z=p0.z+fire.D-1 + x = p0.x + fire.D - 1, + y = p0.y + fire.D - 1, + z = p0.z + fire.D - 1 } return p0, p1 end + +-- Update fire sounds in sound area of position + function fire.update_sounds_around(pos) local p0, p1 = fire.get_area_p0p1(pos) - local cp = {x=(p0.x+p1.x)/2, y=(p0.y+p1.y)/2, z=(p0.z+p1.z)/2} + local cp = {x = (p0.x + p1.x) / 2, y = (p0.y + p1.y) / 2, z = (p0.z + p1.z) / 2} local flames_p = minetest.find_nodes_in_area(p0, p1, {"fire:basic_flame"}) --print("number of flames at "..minetest.pos_to_string(p0).."/" -- ..minetest.pos_to_string(p1)..": "..#flames_p) local should_have_sound = (#flames_p > 0) local wanted_sound = nil if #flames_p >= 9 then - wanted_sound = {name="fire_large", gain=1.5} + wanted_sound = {name = "fire_large", gain = 1.5} elseif #flames_p > 0 then - wanted_sound = {name="fire_small", gain=1.5} + wanted_sound = {name = "fire_small", gain = 1.5} end local p0_hash = minetest.hash_node_position(p0) local sound = fire.sounds[p0_hash] if not sound then if should_have_sound then fire.sounds[p0_hash] = { - handle = minetest.sound_play(wanted_sound, {pos=cp, max_hear_distance = 16, loop=true}), + handle = minetest.sound_play(wanted_sound, + {pos = cp, max_hear_distance = 16, loop = true}), name = wanted_sound.name, } end @@ -77,40 +94,53 @@ function fire.update_sounds_around(pos) elseif sound.name ~= wanted_sound.name then minetest.sound_stop(sound.handle) fire.sounds[p0_hash] = { - handle = minetest.sound_play(wanted_sound, {pos=cp, max_hear_distance = 16, loop=true}), + handle = minetest.sound_play(wanted_sound, + {pos = cp, max_hear_distance = 16, loop = true}), name = wanted_sound.name, } end end end + +-- Update fire sounds on flame node construct or destruct + function fire.on_flame_add_at(pos) fire.update_sounds_around(pos) end + function fire.on_flame_remove_at(pos) fire.update_sounds_around(pos) end + +-- Return positions for flames around a burning node + function fire.find_pos_for_flame_around(pos) return minetest.find_node_near(pos, 1, {"air"}) end + +-- Detect nearby extinguishing nodes + function fire.flame_should_extinguish(pos) if minetest.setting_getbool("disable_fire") then return true end --return minetest.find_node_near(pos, 1, {"group:puts_out_fire"}) - local p0 = {x=pos.x-2, y=pos.y, z=pos.z-2} - local p1 = {x=pos.x+2, y=pos.y, z=pos.z+2} + local p0 = {x = pos.x - 1, y = pos.y, z = pos.z - 1} + local p1 = {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1} local ps = minetest.find_nodes_in_area(p0, p1, {"group:puts_out_fire"}) return (#ps ~= 0) end + -- Ignite neighboring nodes + minetest.register_abm({ nodenames = {"group:flammable"}, neighbors = {"group:igniter"}, - interval = 5, - chance = 2, + interval = 7, + chance = 32, action = function(p0, node, _, _) -- If there is water or stuff like that around flame, don't ignite if fire.flame_should_extinguish(p0) then @@ -118,12 +148,17 @@ minetest.register_abm({ end local p = fire.find_pos_for_flame_around(p0) if p then - minetest.set_node(p, {name="fire:basic_flame"}) + minetest.set_node(p, {name = "fire:basic_flame"}) end end, }) + -- Rarely ignite things from far + +--[[ Currently disabled to reduce the chance of uncontrollable spreading + fires that disrupt servers. Also for less lua processing load. + minetest.register_abm({ nodenames = {"group:igniter"}, neighbors = {"air"}, @@ -143,17 +178,20 @@ minetest.register_abm({ end local p2 = fire.find_pos_for_flame_around(p) if p2 then - minetest.set_node(p2, {name="fire:basic_flame"}) + minetest.set_node(p2, {name = "fire:basic_flame"}) end end end, }) +--]] + -- Remove flammable nodes and flame + minetest.register_abm({ nodenames = {"fire:basic_flame"}, - interval = 3, - chance = 2, + interval = 5, + chance = 16, action = function(p0, node, _, _) -- If there is water or stuff like that around flame, remove flame if fire.flame_should_extinguish(p0) then @@ -161,7 +199,7 @@ minetest.register_abm({ return end -- Make the following things rarer - if math.random(1,3) == 1 then + if math.random(1, 3) == 1 then return end -- If there are no flammable nodes around flame, remove flame @@ -169,7 +207,7 @@ minetest.register_abm({ minetest.remove_node(p0) return end - if math.random(1,4) == 1 then + if math.random(1, 4) == 1 then -- remove a flammable node around flame local p = minetest.find_node_near(p0, 1, {"group:flammable"}) if p then From a0d7644a8677080fbd35ab71c78f7d0a330767e4 Mon Sep 17 00:00:00 2001 From: paramat Date: Tue, 25 Aug 2015 01:20:14 +0100 Subject: [PATCH 18/73] Default: Add snow, snowblock, ice to puts_out_fire group --- mods/default/nodes.lua | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mods/default/nodes.lua b/mods/default/nodes.lua index 608f6c29..c9188023 100644 --- a/mods/default/nodes.lua +++ b/mods/default/nodes.lua @@ -374,7 +374,7 @@ minetest.register_node("default:snow", { {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, }, }, - groups = {crumbly = 3, falling_node = 1}, + groups = {crumbly = 3, falling_node = 1, puts_out_fire = 1}, sounds = default.node_sound_dirt_defaults({ footstep = {name = "default_snow_footstep", gain = 0.25}, dug = {name = "default_snow_footstep", gain = 0.75}, @@ -392,10 +392,10 @@ minetest.register_node("default:snow", { minetest.register_node("default:snowblock", { description = "Snow Block", tiles = {"default_snow.png"}, - groups = {crumbly=3}, + groups = {crumbly = 3, puts_out_fire = 1}, sounds = default.node_sound_dirt_defaults({ - footstep = {name="default_snow_footstep", gain=0.25}, - dug = {name="default_snow_footstep", gain=0.75}, + footstep = {name = "default_snow_footstep", gain = 0.25}, + dug = {name = "default_snow_footstep", gain = 0.75}, }), }) @@ -406,7 +406,7 @@ minetest.register_node("default:ice", { tiles = {"default_ice.png"}, is_ground_content = false, paramtype = "light", - groups = {cracky=3}, + groups = {cracky = 3, puts_out_fire = 1}, sounds = default.node_sound_glass_defaults(), }) From 908d8e5f905327cda957f743c2b41611e84f635d Mon Sep 17 00:00:00 2001 From: paramat Date: Tue, 25 Aug 2015 04:11:46 +0100 Subject: [PATCH 19/73] Default/nodes.lua: Add missing spaces, shorten lines --- mods/default/nodes.lua | 373 ++++++++++++++++++++--------------------- 1 file changed, 183 insertions(+), 190 deletions(-) diff --git a/mods/default/nodes.lua b/mods/default/nodes.lua index c9188023..4d7fcbe3 100644 --- a/mods/default/nodes.lua +++ b/mods/default/nodes.lua @@ -143,7 +143,9 @@ default:chest_locked default:bookshelf default:sign_wall + default:ladder + default:fence_wood default:glass @@ -170,7 +172,7 @@ default:nyancat_rainbow minetest.register_node("default:stone", { description = "Stone", tiles = {"default_stone.png"}, - groups = {cracky=3, stone=1}, + groups = {cracky = 3, stone = 1}, drop = 'default:cobble', legacy_mineral = true, sounds = default.node_sound_stone_defaults(), @@ -180,7 +182,7 @@ minetest.register_node("default:cobble", { description = "Cobblestone", tiles = {"default_cobble.png"}, is_ground_content = false, - groups = {cracky=3, stone=2}, + groups = {cracky = 3, stone = 2}, sounds = default.node_sound_stone_defaults(), }) @@ -188,7 +190,7 @@ minetest.register_node("default:stonebrick", { description = "Stone Brick", tiles = {"default_stone_brick.png"}, is_ground_content = false, - groups = {cracky=2, stone=1}, + groups = {cracky = 2, stone = 1}, sounds = default.node_sound_stone_defaults(), }) @@ -196,16 +198,15 @@ minetest.register_node("default:mossycobble", { description = "Mossy Cobblestone", tiles = {"default_mossycobble.png"}, is_ground_content = false, - groups = {cracky=3, stone=1}, + groups = {cracky = 3, stone = 1}, sounds = default.node_sound_stone_defaults(), }) - minetest.register_node("default:desert_stone", { description = "Desert Stone", tiles = {"default_desert_stone.png"}, - groups = {cracky=3, stone=1}, + groups = {cracky = 3, stone = 1}, drop = 'default:desert_cobble', legacy_mineral = true, sounds = default.node_sound_stone_defaults(), @@ -215,7 +216,7 @@ minetest.register_node("default:desert_cobble", { description = "Desert Cobblestone", tiles = {"default_desert_cobble.png"}, is_ground_content = false, - groups = {cracky=3, stone=2}, + groups = {cracky = 3, stone = 2}, sounds = default.node_sound_stone_defaults(), }) @@ -223,16 +224,15 @@ minetest.register_node("default:desert_stonebrick", { description = "Desert Stone Brick", tiles = {"default_desert_stone_brick.png"}, is_ground_content = false, - groups = {cracky=2, stone=1}, + groups = {cracky = 2, stone = 1}, sounds = default.node_sound_stone_defaults(), }) - minetest.register_node("default:sandstone", { description = "Sandstone", tiles = {"default_sandstone.png"}, - groups = {crumbly=2,cracky=3}, + groups = {crumbly = 2, cracky = 3}, sounds = default.node_sound_stone_defaults(), }) @@ -240,17 +240,16 @@ minetest.register_node("default:sandstonebrick", { description = "Sandstone Brick", tiles = {"default_sandstone_brick.png"}, is_ground_content = false, - groups = {cracky=2}, + groups = {cracky = 2}, sounds = default.node_sound_stone_defaults(), }) - minetest.register_node("default:obsidian", { description = "Obsidian", tiles = {"default_obsidian.png"}, sounds = default.node_sound_stone_defaults(), - groups = {cracky=1,level=2}, + groups = {cracky = 1, level = 2}, }) minetest.register_node("default:obsidianbrick", { @@ -258,7 +257,7 @@ minetest.register_node("default:obsidianbrick", { tiles = {"default_obsidian_brick.png"}, is_ground_content = false, sounds = default.node_sound_stone_defaults(), - groups = {cracky=1,level=2}, + groups = {cracky = 1, level = 2}, }) -- @@ -268,7 +267,7 @@ minetest.register_node("default:obsidianbrick", { minetest.register_node("default:dirt", { description = "Dirt", tiles = {"default_dirt.png"}, - groups = {crumbly=3,soil=1}, + groups = {crumbly = 3, soil = 1}, sounds = default.node_sound_dirt_defaults(), }) @@ -277,10 +276,10 @@ minetest.register_node("default:dirt_with_grass", { tiles = {"default_grass.png", "default_dirt.png", {name = "default_dirt.png^default_grass_side.png", tileable_vertical = false}}, - groups = {crumbly=3,soil=1}, + groups = {crumbly = 3, soil = 1}, drop = 'default:dirt', sounds = default.node_sound_dirt_defaults({ - footstep = {name="default_grass_footstep", gain=0.25}, + footstep = {name = "default_grass_footstep", gain = 0.25}, }), }) @@ -289,10 +288,10 @@ minetest.register_node("default:dirt_with_grass_footsteps", { tiles = {"default_grass.png^default_footprint.png", "default_dirt.png", {name = "default_dirt.png^default_grass_side.png", tileable_vertical = false}}, - groups = {crumbly=3,soil=1,not_in_creative_inventory=1}, + groups = {crumbly = 3, soil = 1, not_in_creative_inventory = 1}, drop = 'default:dirt', sounds = default.node_sound_dirt_defaults({ - footstep = {name="default_grass_footstep", gain=0.25}, + footstep = {name = "default_grass_footstep", gain = 0.25}, }), }) @@ -314,10 +313,10 @@ minetest.register_node("default:dirt_with_snow", { tiles = {"default_snow.png", "default_dirt.png", {name = "default_dirt.png^default_snow_side.png", tileable_vertical = false}}, - groups = {crumbly=3,soil=1}, + groups = {crumbly = 3, soil = 1}, drop = 'default:dirt', sounds = default.node_sound_dirt_defaults({ - footstep = {name="default_snow_footstep", gain=0.25}, + footstep = {name = "default_snow_footstep", gain = 0.25}, }), }) @@ -325,41 +324,38 @@ minetest.register_node("default:dirt_with_snow", { minetest.register_node("default:sand", { description = "Sand", tiles = {"default_sand.png"}, - groups = {crumbly=3, falling_node=1, sand=1}, + groups = {crumbly = 3, falling_node = 1, sand = 1}, sounds = default.node_sound_sand_defaults(), }) minetest.register_node("default:desert_sand", { description = "Desert Sand", tiles = {"default_desert_sand.png"}, - groups = {crumbly=3, falling_node=1, sand=1}, + groups = {crumbly = 3, falling_node = 1, sand = 1}, sounds = default.node_sound_sand_defaults(), }) - minetest.register_node("default:gravel", { description = "Gravel", tiles = {"default_gravel.png"}, - groups = {crumbly=2, falling_node=1}, + groups = {crumbly = 2, falling_node = 1}, sounds = default.node_sound_dirt_defaults({ - footstep = {name="default_gravel_footstep", gain=0.5}, - dug = {name="default_gravel_footstep", gain=1.0}, + footstep = {name = "default_gravel_footstep", gain = 0.5}, + dug = {name = "default_gravel_footstep", gain = 1.0}, }), }) - minetest.register_node("default:clay", { description = "Clay", tiles = {"default_clay.png"}, - groups = {crumbly=3}, + groups = {crumbly = 3}, drop = 'default:clay_lump 4', sounds = default.node_sound_dirt_defaults(), }) - minetest.register_node("default:snow", { description = "Snow", tiles = {"default_snow.png"}, @@ -388,7 +384,6 @@ minetest.register_node("default:snow", { end, }) - minetest.register_node("default:snowblock", { description = "Snow Block", tiles = {"default_snow.png"}, @@ -400,7 +395,6 @@ minetest.register_node("default:snowblock", { }) - minetest.register_node("default:ice", { description = "Ice", tiles = {"default_ice.png"}, @@ -419,7 +413,7 @@ 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(), on_place = minetest.rotate_node @@ -429,7 +423,7 @@ minetest.register_node("default:wood", { description = "Wooden Planks", tiles = {"default_wood.png"}, is_ground_content = false, - 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(), }) @@ -447,7 +441,8 @@ minetest.register_node("default:sapling", { 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,sapling=1}, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, sounds = default.node_sound_leaves_defaults(), }) @@ -460,7 +455,7 @@ minetest.register_node("default:leaves", { special_tiles = {"default_leaves_simple.png"}, paramtype = "light", 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 = { @@ -495,25 +490,26 @@ 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"}, + tiles = {"default_jungletree_top.png", "default_jungletree_top.png", + "default_jungletree.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(), on_place = minetest.rotate_node @@ -523,7 +519,7 @@ minetest.register_node("default:junglewood", { description = "Junglewood Planks", tiles = {"default_junglewood.png"}, is_ground_content = false, - 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(), }) @@ -536,20 +532,12 @@ minetest.register_node("default:jungleleaves", { special_tiles = {"default_jungleleaves_simple.png"}, paramtype = "light", 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 = { - { - -- player will get sapling with 1/20 chance - items = {'default:junglesapling'}, - rarity = 20, - }, - { - -- player will get leaves only if he get no saplings, - -- this is because max_items is 1 - items = {'default:jungleleaves'}, - } + {items = {'default:junglesapling'}, rarity = 20}, + {items = {'default:jungleleaves'}} } }, sounds = default.node_sound_leaves_defaults(), @@ -571,12 +559,12 @@ minetest.register_node("default:junglesapling", { 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,sapling=1}, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, sounds = default.node_sound_leaves_defaults(), }) - minetest.register_node("default:pine_tree", { description = "Pine Tree", tiles = {"default_pine_tree_top.png", "default_pine_tree_top.png", @@ -637,6 +625,7 @@ minetest.register_node("default:pine_sapling", { sounds = default.node_sound_leaves_defaults(), }) + minetest.register_node("default:acacia_tree", { description = "Acacia Tree", tiles = {"default_acacia_tree_top.png", "default_acacia_tree_top.png", @@ -703,7 +692,7 @@ minetest.register_node("default:acacia_sapling", { minetest.register_node("default:stone_with_coal", { description = "Coal Ore", tiles = {"default_stone.png^default_mineral_coal.png"}, - groups = {cracky=3}, + groups = {cracky = 3}, drop = 'default:coal_lump', sounds = default.node_sound_stone_defaults(), }) @@ -712,16 +701,15 @@ minetest.register_node("default:coalblock", { description = "Coal Block", tiles = {"default_coal_block.png"}, is_ground_content = false, - 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"}, - groups = {cracky=2}, + groups = {cracky = 2}, drop = 'default:iron_lump', sounds = default.node_sound_stone_defaults(), }) @@ -730,16 +718,15 @@ minetest.register_node("default:steelblock", { description = "Steel Block", tiles = {"default_steel_block.png"}, is_ground_content = false, - groups = {cracky=1,level=2}, + groups = {cracky = 1, level = 2}, sounds = default.node_sound_stone_defaults(), }) - minetest.register_node("default:stone_with_copper", { description = "Copper Ore", tiles = {"default_stone.png^default_mineral_copper.png"}, - groups = {cracky=2}, + groups = {cracky = 2}, drop = 'default:copper_lump', sounds = default.node_sound_stone_defaults(), }) @@ -748,7 +735,7 @@ minetest.register_node("default:copperblock", { description = "Copper Block", tiles = {"default_copper_block.png"}, is_ground_content = false, - groups = {cracky=1,level=2}, + groups = {cracky = 1, level = 2}, sounds = default.node_sound_stone_defaults(), }) @@ -756,12 +743,11 @@ minetest.register_node("default:bronzeblock", { description = "Bronze Block", tiles = {"default_bronze_block.png"}, is_ground_content = false, - groups = {cracky=1,level=2}, + groups = {cracky = 1, level = 2}, sounds = default.node_sound_stone_defaults(), }) - minetest.register_node("default:stone_with_mese", { description = "Mese Ore", tiles = {"default_stone.png^default_mineral_mese.png"}, @@ -782,12 +768,10 @@ minetest.register_node("default:mese", { }) - - minetest.register_node("default:stone_with_gold", { description = "Gold Ore", tiles = {"default_stone.png^default_mineral_gold.png"}, - groups = {cracky=2}, + groups = {cracky = 2}, drop = "default:gold_lump", sounds = default.node_sound_stone_defaults(), }) @@ -796,16 +780,15 @@ minetest.register_node("default:goldblock", { description = "Gold Block", tiles = {"default_gold_block.png"}, is_ground_content = false, - groups = {cracky=1}, + groups = {cracky = 1}, sounds = default.node_sound_stone_defaults(), }) - minetest.register_node("default:stone_with_diamond", { description = "Diamond Ore", tiles = {"default_stone.png^default_mineral_diamond.png"}, - groups = {cracky=1}, + groups = {cracky = 1}, drop = "default:diamond", sounds = default.node_sound_stone_defaults(), }) @@ -814,7 +797,7 @@ minetest.register_node("default:diamondblock", { description = "Diamond Block", tiles = {"default_diamond_block.png"}, is_ground_content = false, - groups = {cracky=1,level=3}, + groups = {cracky = 1, level = 3}, sounds = default.node_sound_stone_defaults(), }) @@ -824,9 +807,10 @@ minetest.register_node("default:diamondblock", { minetest.register_node("default:cactus", { description = "Cactus", - tiles = {"default_cactus_top.png", "default_cactus_top.png", "default_cactus_side.png"}, + tiles = {"default_cactus_top.png", "default_cactus_top.png", + "default_cactus_side.png"}, paramtype2 = "facedir", - groups = {snappy=1,choppy=3,flammable=2}, + groups = {snappy = 1, choppy = 3, flammable = 2}, sounds = default.node_sound_wood_defaults(), on_place = minetest.rotate_node, @@ -848,7 +832,7 @@ minetest.register_node("default:papyrus", { type = "fixed", fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} }, - groups = {snappy=3,flammable=2}, + groups = {snappy = 3, flammable = 2}, sounds = default.node_sound_leaves_defaults(), after_dig_node = function(pos, node, metadata, digger) @@ -868,7 +852,7 @@ minetest.register_node("default:dry_shrub", { sunlight_propagates = true, walkable = false, buildable_to = true, - groups = {snappy=3,flammable=3,attached_node=1}, + groups = {snappy = 3, flammable = 3, attached_node = 1}, sounds = default.node_sound_leaves_defaults(), selection_box = { type = "fixed", @@ -888,7 +872,7 @@ minetest.register_node("default:junglegrass", { sunlight_propagates = true, walkable = false, buildable_to = true, - groups = {snappy=3,flammable=2,flora=1,attached_node=1}, + groups = {snappy = 3, flammable = 2, flora = 1, attached_node = 1}, sounds = default.node_sound_leaves_defaults(), selection_box = { type = "fixed", @@ -896,6 +880,7 @@ minetest.register_node("default:junglegrass", { }, }) + minetest.register_node("default:grass_1", { description = "Grass", drawtype = "plantlike", @@ -908,7 +893,7 @@ minetest.register_node("default:grass_1", { sunlight_propagates = true, walkable = false, buildable_to = true, - groups = {snappy=3,flammable=3,flora=1,attached_node=1}, + groups = {snappy = 3, flammable = 3, flora = 1, attached_node = 1}, sounds = default.node_sound_leaves_defaults(), selection_box = { type = "fixed", @@ -917,26 +902,28 @@ 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)) + 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, { +for i = 2, 5 do + minetest.register_node("default:grass_" .. i, { description = "Grass", drawtype = "plantlike", waving = 1, - tiles = {"default_grass_"..i..".png"}, - inventory_image = "default_grass_"..i..".png", - wield_image = "default_grass_"..i..".png", + tiles = {"default_grass_" .. i .. ".png"}, + inventory_image = "default_grass_" .. i .. ".png", + wield_image = "default_grass_" .. i .. ".png", paramtype = "light", sunlight_propagates = true, walkable = false, buildable_to = true, drop = "default:grass_1", - groups = {snappy=3,flammable=3,flora=1,attached_node=1,not_in_creative_inventory=1}, + groups = {snappy = 3, flammable = 3, flora = 1, + attached_node = 1, not_in_creative_inventory = 1}, sounds = default.node_sound_leaves_defaults(), selection_box = { type = "fixed", @@ -945,6 +932,7 @@ for i=2,5 do }) end + minetest.register_node("default:dry_grass_1", { description = "Dry Grass", drawtype = "plantlike", @@ -956,7 +944,7 @@ minetest.register_node("default:dry_grass_1", { sunlight_propagates = true, walkable = false, buildable_to = true, - groups = {snappy=3,flammable=3,flora=1,attached_node=1}, + groups = {snappy = 3, flammable = 3, flora = 1, attached_node = 1}, sounds = default.node_sound_leaves_defaults(), selection_box = { type = "fixed", @@ -965,25 +953,27 @@ minetest.register_node("default:dry_grass_1", { on_place = function(itemstack, placer, pointed_thing) -- place a random dry grass node - local stack = ItemStack("default:dry_grass_"..math.random(1,5)) + local stack = ItemStack("default:dry_grass_" .. math.random(1, 5)) local ret = minetest.item_place(stack, placer, pointed_thing) - return ItemStack("default:dry_grass_1 "..itemstack:get_count()-(1-ret:get_count())) + return ItemStack("default:dry_grass_1 " .. + itemstack:get_count() - (1 - ret:get_count())) end, }) -for i=2,5 do - minetest.register_node("default:dry_grass_"..i, { +for i = 2, 5 do + minetest.register_node("default:dry_grass_" .. i, { description = "Dry Grass", drawtype = "plantlike", waving = 1, - tiles = {"default_dry_grass_"..i..".png"}, - inventory_image = "default_dry_grass_"..i..".png", - wield_image = "default_dry_grass_"..i..".png", + tiles = {"default_dry_grass_" .. i .. ".png"}, + inventory_image = "default_dry_grass_" .. i .. ".png", + wield_image = "default_dry_grass_" .. i .. ".png", paramtype = "light", sunlight_propagates = true, walkable = false, buildable_to = true, - groups = {snappy=3,flammable=3,flora=1,attached_node=1,not_in_creative_inventory=1}, + groups = {snappy = 3, flammable = 3, flora = 1, + attached_node = 1, not_in_creative_inventory=1}, drop = "default:dry_grass_1", sounds = default.node_sound_leaves_defaults(), selection_box = { @@ -1038,8 +1028,8 @@ minetest.register_node("default:water_source", { liquid_alternative_flowing = "default:water_flowing", liquid_alternative_source = "default:water_source", liquid_viscosity = 1, - post_effect_color = {a=120, r=30, g=60, b=90}, - groups = {water=3, liquid=3, puts_out_fire=1}, + post_effect_color = {a = 120, r = 30, g = 60, b = 90}, + groups = {water = 3, liquid = 3, puts_out_fire = 1}, }) minetest.register_node("default:water_flowing", { @@ -1083,8 +1073,9 @@ minetest.register_node("default:water_flowing", { liquid_alternative_flowing = "default:water_flowing", liquid_alternative_source = "default:water_source", liquid_viscosity = 1, - post_effect_color = {a=120, r=30, g=60, b=90}, - groups = {water=3, liquid=3, puts_out_fire=1, not_in_creative_inventory=1}, + post_effect_color = {a = 120, r = 30, g = 60, b = 90}, + groups = {water = 3, liquid = 3, puts_out_fire = 1, + not_in_creative_inventory = 1}, }) @@ -1130,8 +1121,8 @@ minetest.register_node("default:river_water_source", { liquid_viscosity = 1, liquid_renewable = false, liquid_range = 2, - post_effect_color = {a=120, r=30, g=76, b=90}, - groups = {water=3, liquid=3, puts_out_fire=1}, + post_effect_color = {a = 120, r = 30, g = 76, b = 90}, + groups = {water = 3, liquid = 3, puts_out_fire = 1}, }) minetest.register_node("default:river_water_flowing", { @@ -1177,12 +1168,12 @@ minetest.register_node("default:river_water_flowing", { liquid_viscosity = 1, liquid_renewable = false, liquid_range = 2, - post_effect_color = {a=120, r=30, g=76, b=90}, - groups = {water=3, liquid=3, puts_out_fire=1, not_in_creative_inventory=1}, + post_effect_color = {a = 120, r = 30, g = 76, b = 90}, + 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"), @@ -1226,8 +1217,8 @@ minetest.register_node("default:lava_source", { liquid_viscosity = 7, liquid_renewable = false, damage_per_second = 4 * 2, - post_effect_color = {a=192, r=255, g=64, b=0}, - groups = {lava=3, liquid=2, hot=3, igniter=1}, + post_effect_color = {a = 192, r = 255, g = 64, b = 0}, + groups = {lava = 3, liquid = 2, hot = 3, igniter = 1}, }) minetest.register_node("default:lava_flowing", { @@ -1273,8 +1264,9 @@ minetest.register_node("default:lava_flowing", { liquid_viscosity = 7, liquid_renewable = false, damage_per_second = 4 * 2, - post_effect_color = {a=192, r=255, g=64, b=0}, - groups = {lava=3, liquid=2, hot=3, igniter=1, not_in_creative_inventory=1}, + post_effect_color = {a = 192, r = 255, g = 64, b = 0}, + groups = {lava = 3, liquid = 2, hot = 3, igniter = 1, + not_in_creative_inventory = 1}, }) -- @@ -1323,41 +1315,40 @@ minetest.register_node("default:torch", { light_source = default.LIGHT_MAX - 1, selection_box = { type = "wallmounted", - wall_top = {-0.1, 0.5-0.6, -0.1, 0.1, 0.5, 0.1}, - wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1}, - wall_side = {-0.5, -0.3, -0.1, -0.5+0.3, 0.3, 0.1}, + wall_top = {-0.1, 0.5 - 0.6, -0.1, 0.1, 0.5, 0.1}, + wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5 + 0.6, 0.1}, + wall_side = {-0.5, -0.3, -0.1, -0.5 + 0.3, 0.3, 0.1}, }, - groups = {choppy=2,dig_immediate=3,flammable=1,attached_node=1}, + groups = {choppy = 2, dig_immediate = 3, flammable = 1, attached_node = 1}, legacy_wallmounted = true, sounds = default.node_sound_defaults(), }) - local chest_formspec = - "size[8,9]".. - default.gui_bg.. - default.gui_bg_img.. - default.gui_slots.. - "list[current_name;main;0,0.3;8,4;]".. - "list[current_player;main;0,4.85;8,1;]".. - "list[current_player;main;0,6.08;8,3;8]".. - "listring[current_name;main]".. - "listring[current_player;main]".. + "size[8,9]" .. + default.gui_bg .. + default.gui_bg_img .. + default.gui_slots .. + "list[current_name;main;0,0.3;8,4;]" .. + "list[current_player;main;0,4.85;8,1;]" .. + "list[current_player;main;0,6.08;8,3;8]" .. + "listring[current_name;main]" .. + "listring[current_player;main]" .. default.get_hotbar_bg(0,4.85) local function get_locked_chest_formspec(pos) - local spos = pos.x .. "," .. pos.y .. "," ..pos.z + local spos = pos.x .. "," .. pos.y .. "," .. pos.z local formspec = - "size[8,9]".. - default.gui_bg.. - default.gui_bg_img.. - default.gui_slots.. - "list[nodemeta:".. spos .. ";main;0,0.3;8,4;]".. - "list[current_player;main;0,4.85;8,1;]".. - "list[current_player;main;0,6.08;8,3;8]".. - "listring[nodemeta:".. spos .. ";main]".. - "listring[current_player;main]".. + "size[8,9]" .. + default.gui_bg .. + default.gui_bg_img .. + default.gui_slots .. + "list[nodemeta:" .. spos .. ";main;0,0.3;8,4;]" .. + "list[current_player;main;0,4.85;8,1;]" .. + "list[current_player;main;0,6.08;8,3;8]" .. + "listring[nodemeta:" .. spos .. ";main]" .. + "listring[current_player;main]" .. default.get_hotbar_bg(0,4.85) return formspec end @@ -1374,7 +1365,7 @@ minetest.register_node("default: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}, + groups = {choppy = 2, oddly_breakable_by_hand = 2}, legacy_facedir_simple = true, is_ground_content = false, sounds = default.node_sound_wood_defaults(), @@ -1391,28 +1382,27 @@ minetest.register_node("default:chest", { 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)) + 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)) + 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)) + 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}, + groups = {choppy = 2, oddly_breakable_by_hand = 2}, legacy_facedir_simple = true, is_ground_content = false, sounds = default.node_sound_wood_defaults(), @@ -1420,22 +1410,23 @@ minetest.register_node("default:chest_locked", { 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")..")") + 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("infotext", "Locked Chest") meta:set_string("owner", "") local inv = meta:get_inventory() - inv:set_size("main", 8*4) + 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) + 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 return 0 @@ -1457,12 +1448,12 @@ minetest.register_node("default:chest_locked", { return stack:get_count() 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)) + 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)) + 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) @@ -1478,31 +1469,30 @@ minetest.register_node("default:chest_locked", { }) - local bookshelf_formspec = - "size[8,7;]".. - default.gui_bg.. - default.gui_bg_img.. - default.gui_slots.. - "list[context;books;0,0.3;8,2;]".. - "list[current_player;main;0,2.85;8,1;]".. - "list[current_player;main;0,4.08;8,3;8]".. - "listring[context;books]".. - "listring[current_player;main]".. + "size[8,7;]" .. + default.gui_bg .. + default.gui_bg_img .. + default.gui_slots .. + "list[context;books;0,0.3;8,2;]" .. + "list[current_player;main;0,2.85;8,1;]" .. + "list[current_player;main;0,4.08;8,3;8]" .. + "listring[context;books]" .. + "listring[current_player;main]" .. default.get_hotbar_bg(0,2.85) minetest.register_node("default:bookshelf", { description = "Bookshelf", tiles = {"default_wood.png", "default_wood.png", "default_bookshelf.png"}, is_ground_content = false, - 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", 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); @@ -1524,7 +1514,8 @@ minetest.register_node("default:bookshelf", { end end, - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + allow_metadata_inventory_move = function(pos, from_list, from_index, + to_list, to_index, count, player) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() local stack = inv:get_stack(from_list, from_index) @@ -1539,22 +1530,22 @@ minetest.register_node("default:bookshelf", { end 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 bookshelf at "..minetest.pos_to_string(pos)) + 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 bookshelf 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 bookshelf at "..minetest.pos_to_string(pos)) + minetest.log("action", player:get_player_name() .. + " moves stuff to bookshelf 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 bookshelf at "..minetest.pos_to_string(pos)) + minetest.log("action", player:get_player_name() .. + " takes stuff from bookshelf at " .. minetest.pos_to_string(pos)) end, }) - minetest.register_node("default:sign_wall", { description = "Sign", drawtype = "nodebox", @@ -1572,7 +1563,7 @@ minetest.register_node("default:sign_wall", { 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}, }, - groups = {choppy=2,dig_immediate=2,attached_node=1}, + groups = {choppy = 2, dig_immediate = 2, attached_node = 1}, legacy_wallmounted = true, sounds = default.node_sound_defaults(), @@ -1590,13 +1581,14 @@ minetest.register_node("default:sign_wall", { 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)) + 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..'"') + meta:set_string("infotext", '"' .. fields.text .. '"') end, }) + minetest.register_node("default:ladder", { description = "Ladder", drawtype = "signlike", @@ -1615,12 +1607,14 @@ minetest.register_node("default:ladder", { --wall_bottom = = --wall_side = = }, - groups = {choppy=2,oddly_breakable_by_hand=3,flammable=2}, + groups = {choppy = 2, oddly_breakable_by_hand = 3, flammable = 2}, legacy_wallmounted = true, sounds = default.node_sound_wood_defaults(), }) -local fence_texture = "default_fence_overlay.png^default_wood.png^default_fence_overlay.png^[makealpha:255,126,126" + +local fence_texture = + "default_fence_overlay.png^default_wood.png^default_fence_overlay.png^[makealpha:255,126,126" minetest.register_node("default:fence_wood", { description = "Wooden Fence", drawtype = "fencelike", @@ -1634,12 +1628,11 @@ 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(), }) - minetest.register_node("default:glass", { description = "Glass", drawtype = "glasslike_framed_optional", @@ -1648,7 +1641,7 @@ minetest.register_node("default:glass", { paramtype = "light", sunlight_propagates = true, is_ground_content = false, - groups = {cracky=3,oddly_breakable_by_hand=3}, + groups = {cracky = 3, oddly_breakable_by_hand = 3}, sounds = default.node_sound_glass_defaults(), }) @@ -1660,15 +1653,15 @@ 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"}, + 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", @@ -1680,16 +1673,16 @@ minetest.register_node("default:rail", { -- 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")}, + groups = {bendy = 2, dig_immediate = 2, attached_node = 1, + connect_to_raillike = minetest.raillike_group("rail")}, }) - minetest.register_node("default:brick", { description = "Brick Block", tiles = {"default_brick.png"}, is_ground_content = false, - groups = {cracky=3}, + groups = {cracky = 3}, sounds = default.node_sound_stone_defaults(), }) @@ -1715,7 +1708,7 @@ minetest.register_node("default:cloud", { tiles = {"default_cloud.png"}, is_ground_content = false, sounds = default.node_sound_defaults(), - groups = {not_in_creative_inventory=1}, + groups = {not_in_creative_inventory = 1}, }) minetest.register_node("default:nyancat", { @@ -1723,7 +1716,7 @@ minetest.register_node("default:nyancat", { tiles = {"default_nc_side.png", "default_nc_side.png", "default_nc_side.png", "default_nc_side.png", "default_nc_back.png", "default_nc_front.png"}, paramtype2 = "facedir", - groups = {cracky=2}, + groups = {cracky = 2}, is_ground_content = false, legacy_facedir_simple = true, sounds = default.node_sound_defaults(), @@ -1736,7 +1729,7 @@ minetest.register_node("default:nyancat_rainbow", { "default_nc_rb.png", "default_nc_rb.png" }, paramtype2 = "facedir", - groups = {cracky=2}, + groups = {cracky = 2}, is_ground_content = false, sounds = default.node_sound_defaults(), }) From 4d9b595a69988bcd9add832ba4289c5e8285c800 Mon Sep 17 00:00:00 2001 From: paramat Date: Sat, 29 Aug 2015 23:58:39 +0100 Subject: [PATCH 20/73] Default: Allow papyrus growing on default:sand Mgv5/mgv7 papyrus schematic now has sand nodes as a base Add sand beach to mgv5/mgv7 deserts --- mods/default/functions.lua | 5 +++-- mods/default/mapgen.lua | 10 +++++----- mods/default/schematics/papyrus.mts | Bin 99 -> 73 bytes 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/mods/default/functions.lua b/mods/default/functions.lua index fd759275..3accbd1f 100644 --- a/mods/default/functions.lua +++ b/mods/default/functions.lua @@ -152,7 +152,8 @@ end function default.grow_papyrus(pos, node) pos.y = pos.y - 1 local name = minetest.get_node(pos).name - if name ~= "default:dirt_with_grass" and name ~= "default:dirt" then + if name ~= "default:dirt_with_grass" and name ~= "default:dirt" and + name ~= "default:sand" then return end if not minetest.find_node_near(pos, 3, {"group:water"}) then @@ -184,7 +185,7 @@ minetest.register_abm({ minetest.register_abm({ nodenames = {"default:papyrus"}, - neighbors = {"default:dirt", "default:dirt_with_grass"}, + neighbors = {"default:dirt", "default:dirt_with_grass", "default:sand"}, interval = 50, chance = 20, action = function(...) diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua index c40f2204..733fd6d7 100644 --- a/mods/default/mapgen.lua +++ b/mods/default/mapgen.lua @@ -578,7 +578,7 @@ function default.register_biomes() --node_water_top = "", --depth_water_top = , --node_water = "", - y_min = 1, + y_min = 5, y_max = 31000, heat_point = 95, humidity_point = 10, @@ -596,7 +596,7 @@ function default.register_biomes() --depth_water_top = , --node_water = "", y_min = -112, - y_max = 0, + y_max = 4, heat_point = 95, humidity_point = 10, }) @@ -944,7 +944,7 @@ function default.register_decorations() persist = 0.6 }, biomes = {"desert"}, - y_min = 2, + y_min = 5, y_max = 31000, schematic = minetest.get_modpath("default").."/schematics/large_cactus.mts", flags = "place_center_x", @@ -966,11 +966,11 @@ function default.register_decorations() persist = 0.6 }, biomes = {"desert"}, - y_min = 2, + y_min = 5, y_max = 31000, decoration = "default:cactus", height = 2, - height_max = 5, + height_max = 5, }) -- Papyrus diff --git a/mods/default/schematics/papyrus.mts b/mods/default/schematics/papyrus.mts index a3b67776e25848302c6f9d29c4cfc797f28b0d89..8af4dc2ba41a842443faefc164684f503d29f916 100644 GIT binary patch delta 58 zcmYfHoFHP##K4o1nwD6aQ({$|n3ux9591Xi7E~6M7FWzkPGDeillb$0zZ{E%0t17I H9!os{F+~!~ delta 84 zcmeZFo*?4S%)pb9nwD6aQ(~2pSyaLxj?9ZM&n(G^PcKR=E@t3|Nfaa&R2G#MSIkLH XNJvOYXgc`+|7*tvMkWT6Wh|`#_V*w3 From 73113f344340ca75b5a77961d0d2a205566b1fe4 Mon Sep 17 00:00:00 2001 From: paramat Date: Mon, 31 Aug 2015 05:54:46 +0100 Subject: [PATCH 21/73] Default/trees: Add not-force-placed tree schematics grown from saplings --- .../schematics/acacia_tree_from_sapling.mts | Bin 0 -> 205 bytes .../schematics/apple_tree_from_sapling.mts | Bin 0 -> 165 bytes .../schematics/jungle_tree_from_sapling.mts | Bin 0 -> 245 bytes .../default/schematics/pine_tree_from_sapling.mts | Bin 0 -> 172 bytes mods/default/trees.lua | 8 ++++---- 5 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 mods/default/schematics/acacia_tree_from_sapling.mts create mode 100644 mods/default/schematics/apple_tree_from_sapling.mts create mode 100644 mods/default/schematics/jungle_tree_from_sapling.mts create mode 100644 mods/default/schematics/pine_tree_from_sapling.mts diff --git a/mods/default/schematics/acacia_tree_from_sapling.mts b/mods/default/schematics/acacia_tree_from_sapling.mts new file mode 100644 index 0000000000000000000000000000000000000000..23e8e4b3a8dadb62539672269d9248d9bb6cbb76 GIT binary patch literal 205 zcmeYb3HD`RVc=xoVBoB;x332Q24)84#LOZF(UjD*#L}D+tHk8Q)YOVOZzm-3H7IbnP310T>5E%?$z@9B#N2hyUt?T1xBr;- xU%TSbQdgVF(tK=EpIrhU-M)W+2CwlY!zJqTW*k3t*>?8)`O_mA<#y}H0RTx+Sp)z8 literal 0 HcmV?d00001 diff --git a/mods/default/schematics/apple_tree_from_sapling.mts b/mods/default/schematics/apple_tree_from_sapling.mts new file mode 100644 index 0000000000000000000000000000000000000000..8753f2a97e5c5ee0c98d621fc5d7c77f49bc21e3 GIT binary patch literal 165 zcmeYb3HD`RVPIuoXJDVRmCvV@p$TGiAMLqP8RIj*i;`Nr9fzBCmF|S_FIWO#kuc z&z}l|#$eC7JvIT3wY9Z&%mK0i3*=OO&1XEuB=qys*G~qjUwPCQ;?`Y*km z^-h}gl%_zgbwLySwcmC%wohOC&hUJcyZ~#V#oWT@^Rn{Gt8dkO+_U@n&w20K|DT)p zdEdkMhL$X=iGqg36L>czaw-K)HaQjIHBFai=_Z*=fliA|z6CUDt@X+|U3cp15{>%{ eE?@Fm7`VJJ^p`}$R*RN{m+kAAbXx3{kc5@1x%z|6p$m|4Uil9HO1SejE}RgjsN8lRV%nv#=R z%piy&T2hpnS}`X%K|#{skmALrknWQ<;oQTm zCEG8U?>+MT`t#$$r;l=edM)|tv*fGSuR9+a88k@#f2bo7$lsVy%ChrH5jUU1+yY6~ L5C#V2DSEvC-*7}5 literal 0 HcmV?d00001 diff --git a/mods/default/trees.lua b/mods/default/trees.lua index c55708c4..07cc4d73 100644 --- a/mods/default/trees.lua +++ b/mods/default/trees.lua @@ -360,7 +360,7 @@ end -- New apple tree function default.grow_new_apple_tree(pos) - local path = minetest.get_modpath("default") .. "/schematics/apple_tree.mts" + local path = minetest.get_modpath("default") .. "/schematics/apple_tree_from_sapling.mts" minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, path, 0, nil, false) end @@ -369,7 +369,7 @@ end -- New jungle tree function default.grow_new_jungle_tree(pos) - local path = minetest.get_modpath("default") .. "/schematics/jungle_tree.mts" + local path = minetest.get_modpath("default") .. "/schematics/jungle_tree_from_sapling.mts" minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, path, 0, nil, false) end @@ -378,7 +378,7 @@ end -- New pine tree function default.grow_new_pine_tree(pos) - local path = minetest.get_modpath("default") .. "/schematics/pine_tree.mts" + local path = minetest.get_modpath("default") .. "/schematics/pine_tree_from_sapling.mts" minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, path, 0, nil, false) end @@ -387,7 +387,7 @@ end -- New acacia tree function default.grow_new_acacia_tree(pos) - local path = minetest.get_modpath("default") .. "/schematics/acacia_tree.mts" + local path = minetest.get_modpath("default") .. "/schematics/acacia_tree_from_sapling.mts" minetest.place_schematic({x = pos.x - 4, y = pos.y - 1, z = pos.z - 4}, path, random, nil, false) end From c2307b88169b037e58faa51618065663c5ff9450 Mon Sep 17 00:00:00 2001 From: paramat Date: Tue, 1 Sep 2015 06:12:21 +0100 Subject: [PATCH 22/73] Default/nodes: Fix acacia leaves not waving --- mods/default/nodes.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/mods/default/nodes.lua b/mods/default/nodes.lua index 4d7fcbe3..4a2ca4f9 100644 --- a/mods/default/nodes.lua +++ b/mods/default/nodes.lua @@ -651,6 +651,7 @@ minetest.register_node("default:acacia_leaves", { drawtype = "allfaces_optional", visual_scale = 1.3, tiles = {"default_acacia_leaves.png"}, + waving = 1, paramtype = "light", is_ground_content = false, groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, From acb0cecb36fc4c2b67e2c75a1c32e4d6645dda53 Mon Sep 17 00:00:00 2001 From: paramat Date: Wed, 26 Aug 2015 02:31:56 +0100 Subject: [PATCH 23/73] Fire: Move flame extinguishing to separate faster ABM Add extinguish sounds (from default mod lavacooling) 'disable fire' setting extinguishes fire quickly using a dedicated ABM 'disable fire' also disables all other ABMs Simplify flammable node removal ABM Speed up node ignition, it was too slow Add 'sunlight propagates = true' and 'paramtype = "light" to flame Balance fire sounds' gain --- mods/fire/init.lua | 162 ++++++++++--------- mods/fire/sounds/fire_extinguish_flame.1.ogg | Bin 0 -> 9583 bytes mods/fire/sounds/fire_extinguish_flame.2.ogg | Bin 0 -> 7977 bytes mods/fire/sounds/fire_extinguish_flame.3.ogg | Bin 0 -> 6499 bytes 4 files changed, 86 insertions(+), 76 deletions(-) create mode 100644 mods/fire/sounds/fire_extinguish_flame.1.ogg create mode 100644 mods/fire/sounds/fire_extinguish_flame.2.ogg create mode 100644 mods/fire/sounds/fire_extinguish_flame.3.ogg diff --git a/mods/fire/init.lua b/mods/fire/init.lua index 0ca8afc6..f3f6369a 100644 --- a/mods/fire/init.lua +++ b/mods/fire/init.lua @@ -16,11 +16,13 @@ minetest.register_node("fire:basic_flame", { aspect_w = 16, aspect_h = 16, length = 1}, }}, inventory_image = "fire_basic_flame.png", + paramtype = "light", light_source = 14, groups = {igniter = 2, dig_immediate = 3}, drop = '', walkable = false, buildable_to = true, + sunlight_propagates = true, damage_per_second = 4, on_construct = function(pos) @@ -31,21 +33,13 @@ minetest.register_node("fire:basic_flame", { minetest.after(0, fire.on_flame_remove_at, pos) end, - -- unaffected by explosions - on_blast = function() end, + on_blast = function() end, -- unaffected by explosions }) --- Fire sounds table --- key: position hash of low corner of area --- value: {handle=sound handle, name=sound name} -fire.sounds = {} - - -- Get sound area of position --- size of sound areas -fire.D = 6 +fire.D = 6 -- size of sound areas function fire.get_area_p0p1(pos) local p0 = { @@ -62,6 +56,12 @@ function fire.get_area_p0p1(pos) end +-- Fire sounds table +-- key: position hash of low corner of area +-- value: {handle=sound handle, name=sound name} +fire.sounds = {} + + -- Update fire sounds in sound area of position function fire.update_sounds_around(pos) @@ -73,9 +73,9 @@ function fire.update_sounds_around(pos) local should_have_sound = (#flames_p > 0) local wanted_sound = nil if #flames_p >= 9 then - wanted_sound = {name = "fire_large", gain = 1.5} + wanted_sound = {name = "fire_large", gain = 0.7} elseif #flames_p > 0 then - wanted_sound = {name = "fire_small", gain = 1.5} + wanted_sound = {name = "fire_small", gain = 0.9} end local p0_hash = minetest.hash_node_position(p0) local sound = fire.sounds[p0_hash] @@ -125,33 +125,84 @@ end -- Detect nearby extinguishing nodes function fire.flame_should_extinguish(pos) - if minetest.setting_getbool("disable_fire") then return true end - --return minetest.find_node_near(pos, 1, {"group:puts_out_fire"}) - local p0 = {x = pos.x - 1, y = pos.y, z = pos.z - 1} - local p1 = {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1} - local ps = minetest.find_nodes_in_area(p0, p1, {"group:puts_out_fire"}) - return (#ps ~= 0) + return minetest.find_node_near(pos, 1, {"group:puts_out_fire"}) end --- Ignite neighboring nodes +-- Enable ABMs according to 'disable fire' setting -minetest.register_abm({ - nodenames = {"group:flammable"}, - neighbors = {"group:igniter"}, - interval = 7, - chance = 32, - action = function(p0, node, _, _) - -- If there is water or stuff like that around flame, don't ignite - if fire.flame_should_extinguish(p0) then - return - end - local p = fire.find_pos_for_flame_around(p0) - if p then - minetest.set_node(p, {name = "fire:basic_flame"}) - end - end, -}) +if minetest.setting_getbool("disable_fire") then + + -- Extinguish flames quickly with dedicated ABM + + minetest.register_abm({ + nodenames = {"fire:basic_flame"}, + interval = 3, + chance = 2, + action = function(p0, node, _, _) + minetest.remove_node(p0) + end, + }) + +else + + -- Extinguish flames quickly with water, snow, ice + + minetest.register_abm({ + nodenames = {"fire:basic_flame"}, + neighbors = {"group:puts_out_fire"}, + interval = 3, + chance = 2, + action = function(p0, node, _, _) + minetest.remove_node(p0) + minetest.sound_play("fire_extinguish_flame", + {pos = p0, max_hear_distance = 16, gain = 0.25}) + end, + }) + + -- Ignite neighboring nodes + + minetest.register_abm({ + nodenames = {"group:flammable"}, + neighbors = {"group:igniter"}, + interval = 7, + chance = 16, + action = function(p0, node, _, _) + -- If there is water or stuff like that around node, don't ignite + if fire.flame_should_extinguish(p0) then + return + end + local p = fire.find_pos_for_flame_around(p0) + if p then + minetest.set_node(p, {name = "fire:basic_flame"}) + end + end, + }) + + -- Remove flames and flammable nodes + + minetest.register_abm({ + nodenames = {"fire:basic_flame"}, + interval = 5, + chance = 16, + action = function(p0, node, _, _) + -- If there are no flammable nodes around flame, remove flame + if not minetest.find_node_near(p0, 1, {"group:flammable"}) then + minetest.remove_node(p0) + return + end + if math.random(1, 4) == 1 then + -- remove flammable nodes around flame + local p = minetest.find_node_near(p0, 1, {"group:flammable"}) + if p then + minetest.remove_node(p) + nodeupdate(p) + end + end + end, + }) + +end -- Rarely ignite things from far @@ -184,44 +235,3 @@ minetest.register_abm({ end, }) --]] - - --- Remove flammable nodes and flame - -minetest.register_abm({ - nodenames = {"fire:basic_flame"}, - interval = 5, - chance = 16, - action = function(p0, node, _, _) - -- If there is water or stuff like that around flame, remove flame - if fire.flame_should_extinguish(p0) then - minetest.remove_node(p0) - return - end - -- Make the following things rarer - if math.random(1, 3) == 1 then - return - end - -- If there are no flammable nodes around flame, remove flame - if not minetest.find_node_near(p0, 1, {"group:flammable"}) then - minetest.remove_node(p0) - return - end - if math.random(1, 4) == 1 then - -- remove a flammable node around flame - local p = minetest.find_node_near(p0, 1, {"group:flammable"}) - if p then - -- If there is water or stuff like that around flame, don't remove - if fire.flame_should_extinguish(p0) then - return - end - minetest.remove_node(p) - nodeupdate(p) - end - else - -- remove flame - minetest.remove_node(p0) - end - end, -}) - diff --git a/mods/fire/sounds/fire_extinguish_flame.1.ogg b/mods/fire/sounds/fire_extinguish_flame.1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..42506ddffa2cfa4d3177bf13ce1e49b6785ac4b8 GIT binary patch literal 9583 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
F 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 nW~$6=@x>`Ovb9>9M97n055 literal 0 HcmV?d00001 From 09d910efcb79a3957da2859b632d3d1a00ab3e6b Mon Sep 17 00:00:00 2001 From: paramat Date: Sat, 5 Sep 2015 05:59:01 +0100 Subject: [PATCH 24/73] Default/schematics: Fix root error in jungletree from sapling --- .../schematics/jungle_tree_from_sapling.mts | Bin 245 -> 246 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/mods/default/schematics/jungle_tree_from_sapling.mts b/mods/default/schematics/jungle_tree_from_sapling.mts index 39d46d7c49530d4e1591c28ccacbeb4b4573b7ca..babaa45f7a11de1fc017b341cea0751974ce2ab4 100644 GIT binary patch delta 172 zcmV;d08{_<0rmlqQhy5$!ypK?T+E|*1di~IzA3}j4|HZROP1`BB1(bhiy?dghnT&a z|Ld&>-9|f@Qpc2BrleoX^kPh6Ui9uBc2wt(GB~EJRcmY7YP(z0s*9)HeVwoAe)#Wf zz3!9x0Ss=I7ZNikae9E$#igbInnedC0rdfpQh$LB#2^S%7IPFwU<5|*E5!&^YV$EoKKV06)E=A{LwEs^$9y&Z zXNLvcW;>LEQ3|e7kWVY^ih+lht?n_;S|1PvaX6iE=bmbBcYE4=@w~g|`JV2F|IVKC zzTsbhglamG5ixU+4YFYgB2tqy%2Z00Eexfy9MVxjqBQnUfg~!eN^Hx1%Jrlu-=Ndd ZN}*AwaaH;lShYBW!P7r}0w1GLHY4CrPmllr From fd5721faa82fc8f30441b716cff7344e85db0044 Mon Sep 17 00:00:00 2001 From: paramat Date: Sun, 6 Sep 2015 06:03:08 +0100 Subject: [PATCH 25/73] Flowers: Make flowers wave when waving shader enabled --- mods/flowers/init.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/mods/flowers/init.lua b/mods/flowers/init.lua index bb2f3011..af5da217 100644 --- a/mods/flowers/init.lua +++ b/mods/flowers/init.lua @@ -39,6 +39,7 @@ local function add_simple_flower(name, desc, box, f_groups) minetest.register_node("flowers:" .. name, { description = desc, drawtype = "plantlike", + waving = 1, tiles = {"flowers_" .. name .. ".png"}, inventory_image = "flowers_" .. name .. ".png", wield_image = "flowers_" .. name .. ".png", From 1cc8300ba949395ffae01110bb921e2dfd932ba3 Mon Sep 17 00:00:00 2001 From: paramat Date: Wed, 9 Sep 2015 18:09:10 +0100 Subject: [PATCH 26/73] Default/mapgen: Make river water ice in glacier biome Add commented-out 'node river water' lines to all biomes --- mods/default/mapgen.lua | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua index 733fd6d7..45affbaf 100644 --- a/mods/default/mapgen.lua +++ b/mods/default/mapgen.lua @@ -332,6 +332,7 @@ function default.register_biomes() node_water_top = "default:ice", depth_water_top = 10, --node_water = "", + node_river_water = "default:ice", y_min = -8, y_max = 31000, heat_point = -5, @@ -349,6 +350,7 @@ function default.register_biomes() --node_water_top = "", --depth_water_top = , --node_water = "", + --node_river_water = "", y_min = -112, y_max = -9, heat_point = -5, @@ -368,6 +370,7 @@ function default.register_biomes() --node_water_top = "", --depth_water_top = , --node_water = "", + --node_river_water = "", y_min = 2, y_max = 31000, heat_point = 20, @@ -385,6 +388,7 @@ function default.register_biomes() --node_water_top = "", --depth_water_top = , --node_water = "", + --node_river_water = "", y_min = -112, y_max = 1, heat_point = 20, @@ -402,6 +406,7 @@ function default.register_biomes() --node_water_top = "", --depth_water_top = , --node_water = "", + --node_river_water = "", y_min = 2, y_max = 31000, heat_point = 20, @@ -419,6 +424,7 @@ function default.register_biomes() --node_water_top = "", --depth_water_top = , --node_water = "", + --node_river_water = "", y_min = -112, y_max = 1, heat_point = 20, @@ -438,6 +444,7 @@ function default.register_biomes() --node_water_top = "", --depth_water_top = , --node_water = "", + --node_river_water = "", y_min = 6, y_max = 31000, heat_point = 45, @@ -455,6 +462,7 @@ function default.register_biomes() --node_water_top = "", --depth_water_top = , --node_water = "", + --node_river_water = "", y_min = -112, y_max = 5, heat_point = 45, @@ -472,6 +480,7 @@ function default.register_biomes() --node_water_top = "", --depth_water_top = , --node_water = "", + --node_river_water = "", y_min = 6, y_max = 31000, heat_point = 45, @@ -489,6 +498,7 @@ function default.register_biomes() --node_water_top = "", --depth_water_top = , --node_water = "", + --node_river_water = "", y_min = -112, y_max = 5, heat_point = 45, @@ -508,6 +518,7 @@ function default.register_biomes() --node_water_top = "", --depth_water_top = , --node_water = "", + --node_river_water = "", y_min = 6, y_max = 31000, heat_point = 70, @@ -525,6 +536,7 @@ function default.register_biomes() --node_water_top = "", --depth_water_top = , --node_water = "", + --node_river_water = "", y_min = -112, y_max = 5, heat_point = 70, @@ -542,6 +554,7 @@ function default.register_biomes() --node_water_top = "", --depth_water_top = , --node_water = "", + --node_river_water = "", y_min = 6, y_max = 31000, heat_point = 70, @@ -559,6 +572,7 @@ function default.register_biomes() --node_water_top = "", --depth_water_top = , --node_water = "", + --node_river_water = "", y_min = -112, y_max = 5, heat_point = 70, @@ -578,6 +592,7 @@ function default.register_biomes() --node_water_top = "", --depth_water_top = , --node_water = "", + --node_river_water = "", y_min = 5, y_max = 31000, heat_point = 95, @@ -595,6 +610,7 @@ function default.register_biomes() --node_water_top = "", --depth_water_top = , --node_water = "", + --node_river_water = "", y_min = -112, y_max = 4, heat_point = 95, @@ -612,6 +628,7 @@ function default.register_biomes() --node_water_top = "", --depth_water_top = , --node_water = "", + --node_river_water = "", y_min = 5, y_max = 31000, heat_point = 95, @@ -629,6 +646,7 @@ function default.register_biomes() --node_water_top = "", --depth_water_top = , --node_water = "", + --node_river_water = "", y_min = -112, y_max = 4, heat_point = 95, @@ -646,6 +664,7 @@ function default.register_biomes() --node_water_top = "", --depth_water_top = , --node_water = "", + --node_river_water = "", y_min = 1, y_max = 31000, heat_point = 95, @@ -663,6 +682,7 @@ function default.register_biomes() --node_water_top = "", --depth_water_top = , --node_water = "", + --node_river_water = "", y_min = 0, y_max = 0, heat_point = 95, @@ -680,6 +700,7 @@ function default.register_biomes() --node_water_top = "", --depth_water_top = , --node_water = "", + --node_river_water = "", y_min = -112, y_max = -1, heat_point = 95, @@ -699,6 +720,7 @@ function default.register_biomes() --node_water_top = "", --depth_water_top = , --node_water = "", + --node_river_water = "", y_min = -31000, y_max = -113, heat_point = 50, From 0004c5e637fae407f5e95e589686a8a5f9a93420 Mon Sep 17 00:00:00 2001 From: Wouters Dorian Date: Fri, 10 Jul 2015 02:31:18 +0200 Subject: [PATCH 27/73] Better bucket textures --- mods/bucket/textures/bucket.png | Bin 163 -> 205 bytes mods/bucket/textures/bucket_lava.png | Bin 167 -> 221 bytes mods/bucket/textures/bucket_river_water.png | Bin 316 -> 221 bytes mods/bucket/textures/bucket_water.png | Bin 169 -> 221 bytes 4 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 mods/bucket/textures/bucket.png diff --git a/mods/bucket/textures/bucket.png b/mods/bucket/textures/bucket.png old mode 100644 new mode 100755 index 6779528753716365ba2d722b3587280e82d3a0e0..17b0c4933e22c427c3317c8731be7e82bed88c42 GIT binary patch delta 188 zcmZ3?c$RU3WIZzj1A~Sxe=v~J3h)VW1=0!%3XYDBUS3{7K|wJwF^P$ZX=!Qs`T0#v zO%oB9ZSw)3YQ~ZvzhDN3XE)M-oIp<($B>F!z5R}S2NXD1R(B+I z|Noz7KB;%v#|t~pGO(|kzvSeyw6!x09YehXT_5f9Fg>TV$Ln3@CGEonAMP9%NY#0M o%KU)xh6K5D4TbA@ZtJ_pRc0`Y%-CKm1~i?))78&qol`;+01`e)@c;k- delta 146 zcmV;D0B!%x0iyws8Gi-<001BJ|6u?C0BT7@K~#7F&63dx03i%RZ#7qN11E5YF48@^ zT#x)n;FR?K47|@gBlNj8d8SyLb23`O#oqfC7RlMIwGV1Vy8B}He>2N5h89Ew%TNST zfGk11tXKRKfYbc)EuhF$U*{DlF#7e4C}|26>shZ6scC&W^tdH?_b0d!JMQvg8b*k%9#09Z*x zK~#9!jnBanfFKA2(9j~$K>z=1qnMp(IJGDDfd{sqp*Nqp=0zBDfvAhAUZ&Cs`_`JN z;TJLcQySF*IN2k6f(dYW;E0Zu4Bi7EK93IYaV>y+OU?~%{{nF%q5vZR00007qpP!$mrlz{Ox`z?{J^%m!0d!JMQvg8b*k%9#09Z*x zK~#9!jn7LCfG`LIP$^jGNAdor6>TOltejQnK^JU4LvKE{YelWvLDY;zb{1=deJ+KC z@r&H!X@%whTpqC_fdWDvI9JC?hUg0*F<%`J<2eBNmYf^KXam!FZWG!70000&6h2cL4F4((#GEjuGz$3Dlfq`2Xgc%uT&5-~K zvX^-Jy0YJAV`a8r{WS6WQ=rgEPZ!4!i_>Q(?d3ddAkaGBXPbf7TH8G?9_mbzF0o+- zE!oD+j;UoH>K%e9?IP3N#5So)I(I$M`n$Kj{Qg|NAEh0qEc35+%=%EWd2{#ch1#!< z1g)vs-Sx+!+<5JZ#OXakg&S+sl+={?(s&v|^CQ1bW87faw)NT^wcAq-+7lbT+r62$ zW6yVkV7qpP!$mrlz{Ox0d!JMQvg8b*k%9#09Z*x zK~#9!jn7LCfG`LIPyt)$NAdor6>TOltejQnK^JU4V{bmS*F{ol2U$}V*;%w1_L+!< z@yp!fsbq5iE|2JupaMc3I9JC?hUg0*F<%`J<2eBNmYf@0@&xgXytCZ^00001s-uZqI zKz0GqLi%;x0zpZ=?oWBkc>#OA))9N-cK(e30000 Date: Sat, 28 Feb 2015 22:15:16 -0500 Subject: [PATCH 28/73] Change obsidian glass drawtype to glasslike_framed_optional --- mods/default/nodes.lua | 5 +++-- .../textures/default_obsidian_glass_detail.png | Bin 0 -> 1167 bytes 2 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 mods/default/textures/default_obsidian_glass_detail.png diff --git a/mods/default/nodes.lua b/mods/default/nodes.lua index 4a2ca4f9..7932586b 100644 --- a/mods/default/nodes.lua +++ b/mods/default/nodes.lua @@ -1648,8 +1648,9 @@ minetest.register_node("default:glass", { minetest.register_node("default:obsidian_glass", { description = "Obsidian Glass", - drawtype = "glasslike", - tiles = {"default_obsidian_glass.png"}, + drawtype = "glasslike_framed_optional", + tiles = {"default_obsidian_glass.png", "default_obsidian_glass_detail.png"}, + inventory_image = minetest.inventorycube("default_obsidian_glass.png"), paramtype = "light", is_ground_content = false, sunlight_propagates = true, diff --git a/mods/default/textures/default_obsidian_glass_detail.png b/mods/default/textures/default_obsidian_glass_detail.png new file mode 100644 index 0000000000000000000000000000000000000000..a8bbec98d877d4df1130847e873d9c167bb033db GIT binary patch literal 1167 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9DvULeeP$l}IhprBM{ zNJNQqer|4RUI~!Pz~GyhlB!UiS(2gPo|#(^r~B_60|Se+r;B5Vg&?B<%lqG8Ringc g2#kinXb1p9fJK0TQR@ Date: Wed, 29 Jul 2015 22:18:16 +0100 Subject: [PATCH 29/73] Remove beds/Changelog.txt & farming/API.txt - beds/Changelog.txt probably won't be updated because http://dev.minetest.net/Changelog is used instead - The information in farming/API.txt is already documented in game_api.txt --- mods/beds/Changelog.txt | 18 ------------------ mods/farming/API.txt | 28 ---------------------------- 2 files changed, 46 deletions(-) delete mode 100644 mods/beds/Changelog.txt delete mode 100644 mods/farming/API.txt diff --git a/mods/beds/Changelog.txt b/mods/beds/Changelog.txt deleted file mode 100644 index 988db2af..00000000 --- a/mods/beds/Changelog.txt +++ /dev/null @@ -1,18 +0,0 @@ -1.0.1 beta ----------- -- Add backwards compatibility with PilzAdam's beds mod -- Fix placement -- Fix small bugs -- Prevent possible crash - -1.1 ---- -- Add fancy bed model (based on jp's model) -- Add API to register beds -- Allow players always to detach from bed (by donat-b) -- If more than 50% of players want sleep they can skip the night -- Don't show sleep dialog in singleplayer - -1.1.1 ------ -- Prevent possbile crash by trying to reposition leaving players diff --git a/mods/farming/API.txt b/mods/farming/API.txt deleted file mode 100644 index 171c3c38..00000000 --- a/mods/farming/API.txt +++ /dev/null @@ -1,28 +0,0 @@ -farming.register_hoe(name, hoe definition) - -> Register a new hoe, see [hoe definition] - -farming.register_plant(name, Plant definition) - -> Register a new growing plant, see [Plant definition] - -Hoe Definition -{ - description = "", -- Description for tooltip - inventory_image = "unknown_item.png", -- Image to be used as wield- and inventory image - max_uses = 30, -- Uses until destroyed - material = "", -- Material for recipes - recipe = { -- Craft recipe, if material isn't used - {"air", "air", "air"}, - {"", "group:stick"}, - {"", "group:stick"}, - } -} - -Plant definition -{ - description = "", -- Description of seed item - inventory_image = "unknown_item.png", -- Image to be used as seed's wield- and inventory image - steps = 8, -- How many steps the plant has to grow, until it can be harvested - ^ Always provide a plant texture for each step, format: modname_plantname_i.png (i = stepnumber) - minlight = 13, -- Minimum light to grow - maxlight = default.LIGHT_MAX -- Maximum light to grow -} \ No newline at end of file From 4bb9652c0f6c1736ca325ed94aaff10be9a11b47 Mon Sep 17 00:00:00 2001 From: paramat Date: Wed, 16 Sep 2015 02:38:58 +0100 Subject: [PATCH 30/73] Flowers: Add waterlily and add to mapgen --- mods/flowers/README.txt | 5 +- mods/flowers/init.lua | 36 +++++++++++++ mods/flowers/mapgen.lua | 54 ++++++++++++++++++-- mods/flowers/schematics/waterlily.mts | Bin 0 -> 92 bytes mods/flowers/textures/flowers_waterlily.png | Bin 0 -> 3363 bytes 5 files changed, 89 insertions(+), 6 deletions(-) create mode 100644 mods/flowers/schematics/waterlily.mts create mode 100644 mods/flowers/textures/flowers_waterlily.png diff --git a/mods/flowers/README.txt b/mods/flowers/README.txt index f83abcda..6cfa0eea 100644 --- a/mods/flowers/README.txt +++ b/mods/flowers/README.txt @@ -16,7 +16,8 @@ License of media (textures and sounds) WTFPL Gambit (WTFPL): - flowers_mushroom_*.png + flowers_mushroom_*.png + flowers_waterlily.png DanDuncombe (WTFPL): - flowers_spores_*.png + flowers_spores_*.png diff --git a/mods/flowers/init.lua b/mods/flowers/init.lua index af5da217..32d40cb8 100644 --- a/mods/flowers/init.lua +++ b/mods/flowers/init.lua @@ -236,3 +236,39 @@ minetest.register_abm({ end end }) + + +-- +-- Waterlily +-- + +minetest.register_node("flowers:waterlily", { + description = "Waterlily", + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + tiles = {"flowers_waterlily.png"}, + inventory_image = "flowers_waterlily.png", + wield_image = "flowers_waterlily.png", + liquids_pointable = true, + groups = {snappy = 3}, + sounds = default.node_sound_leaves_defaults(), + node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -0.46875, 0.5} + }, + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5} + }, + + after_place_node = function(pos, placer, itemstack, pointed_thing) + local find_water = minetest.find_nodes_in_area({x = pos.x - 1, y = pos.y, z = pos.z - 1}, + {x = pos.x + 1, y = pos.y, z = pos.z + 1}, "default:water_source") + if #find_water ~= 0 then + minetest.set_node(pos, {name = "default:water_source"}) + pos.y = pos.y + 1 + end + minetest.set_node(pos, {name = "flowers:waterlily", param2 = math.random(0, 3)}) + end +}) diff --git a/mods/flowers/mapgen.lua b/mods/flowers/mapgen.lua index 5c386e58..73b4ed7c 100644 --- a/mods/flowers/mapgen.lua +++ b/mods/flowers/mapgen.lua @@ -10,7 +10,7 @@ local function register_mgv6_flower(name) noise_params = { offset = 0, scale = 0.006, - spread = {x=100, y=100, z=100}, + spread = {x = 100, y = 100, z = 100}, seed = 436, octaves = 3, persist = 0.6 @@ -29,7 +29,7 @@ local function register_mgv6_mushroom(name) noise_params = { offset = 0, scale = 0.04, - spread = {x=100, y=100, z=100}, + spread = {x = 100, y = 100, z = 100}, seed = 7133, octaves = 3, persist = 0.6 @@ -42,6 +42,26 @@ local function register_mgv6_mushroom(name) }) end +local function register_mgv6_waterlily() + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:dirt"}, + sidelen = 16, + noise_params = { + offset = -0.12, + scale = 0.3, + spread = {x = 100, y = 100, z = 100}, + seed = 33, + octaves = 3, + persist = 0.7 + }, + y_min = 0, + y_max = 0, + schematic = minetest.get_modpath("flowers").."/schematics/waterlily.mts", + rotation = "random", + }) +end + function flowers.register_mgv6_decorations() register_mgv6_flower("rose") register_mgv6_flower("tulip") @@ -52,6 +72,8 @@ function flowers.register_mgv6_decorations() register_mgv6_mushroom("mushroom_fertile_brown") register_mgv6_mushroom("mushroom_fertile_red") + + register_mgv6_waterlily() end @@ -67,7 +89,7 @@ local function register_flower(seed, name) noise_params = { offset = -0.02, scale = 0.03, - spread = {x=200, y=200, z=200}, + spread = {x = 200, y = 200, z = 200}, seed = seed, octaves = 3, persist = 0.6 @@ -92,7 +114,7 @@ local function register_mushroom(name) noise_params = { offset = 0, scale = 0.006, - spread = {x=200, y=200, z=200}, + spread = {x = 200, y = 200, z = 200}, seed = 2, octaves = 3, persist = 0.66 @@ -104,6 +126,28 @@ local function register_mushroom(name) }) end +local function register_waterlily() + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:dirt", "default:sand"}, + sidelen = 16, + noise_params = { + offset = -0.12, + scale = 0.3, + spread = {x = 200, y = 200, z = 200}, + seed = 33, + octaves = 3, + persist = 0.7 + }, + biomes = {"deciduous_forest_ocean", "sandstone_grassland_ocean", + "rainforest_swamp", "savanna_ocean", "desert_ocean"}, + y_min = 0, + y_max = 0, + schematic = minetest.get_modpath("flowers").."/schematics/waterlily.mts", + rotation = "random", + }) +end + function flowers.register_decorations() register_flower(436, "rose") register_flower(19822, "tulip") @@ -114,6 +158,8 @@ function flowers.register_decorations() register_mushroom("mushroom_fertile_brown") register_mushroom("mushroom_fertile_red") + + register_waterlily() end diff --git a/mods/flowers/schematics/waterlily.mts b/mods/flowers/schematics/waterlily.mts new file mode 100644 index 0000000000000000000000000000000000000000..876310cce9110775b10b9cef15ae36e7a5b2d800 GIT binary patch literal 92 zcmeYb3HD`RVPIrnW?-zZuLn{*DXD3Rr8y;5DVaqj3?eXId16UwQG9WJX;E@2gJ4=t letBw9u@zV}Co`wAVoq{GLPAQyulV@$2M#bWa7|%i1OWYj9~=Mx literal 0 HcmV?d00001 diff --git a/mods/flowers/textures/flowers_waterlily.png b/mods/flowers/textures/flowers_waterlily.png new file mode 100644 index 0000000000000000000000000000000000000000..a92d3b9faa3ad04fc7df64275821dd7a465d47ef GIT binary patch literal 3363 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 Date: Thu, 17 Sep 2015 15:43:29 +0100 Subject: [PATCH 31/73] Flowers: Make waterlily not walkable. Add missing flower group --- mods/flowers/init.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mods/flowers/init.lua b/mods/flowers/init.lua index 32d40cb8..c6ab0a26 100644 --- a/mods/flowers/init.lua +++ b/mods/flowers/init.lua @@ -251,7 +251,8 @@ minetest.register_node("flowers:waterlily", { inventory_image = "flowers_waterlily.png", wield_image = "flowers_waterlily.png", liquids_pointable = true, - groups = {snappy = 3}, + walkable = false, + groups = {snappy = 3, flower = 1}, sounds = default.node_sound_leaves_defaults(), node_box = { type = "fixed", From 24578ca968be6be52a722c16e640df8c3ce3cbb6 Mon Sep 17 00:00:00 2001 From: paramat Date: Fri, 18 Sep 2015 22:59:02 +0100 Subject: [PATCH 32/73] Default/mapgen blob ores: Tune, make faithful to mgv6 --- mods/default/mapgen.lua | 44 ++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua index 45affbaf..5e251749 100644 --- a/mods/default/mapgen.lua +++ b/mods/default/mapgen.lua @@ -53,18 +53,18 @@ function default.register_ores() ore_type = "blob", ore = "default:clay", wherein = {"default:sand"}, - clust_scarcity = 24 * 24 * 24, - clust_size = 7, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, y_min = -15, y_max = 0, - noise_threshhold = 0, + noise_threshhold = 0.0, noise_params = { - offset = 0.35, + offset = 0.5, scale = 0.2, spread = {x = 5, y = 5, z = 5}, seed = -316, octaves = 1, - persist = 0.5 + persist = 0.0 }, }) @@ -74,18 +74,18 @@ function default.register_ores() ore_type = "blob", ore = "default:sand", wherein = {"default:stone"}, - clust_scarcity = 24 * 24 * 24, - clust_size = 7, - y_min = -63, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_min = -31, y_max = 4, - noise_threshhold = 0, + noise_threshhold = 0.0, noise_params = { - offset = 0.35, + offset = 0.5, scale = 0.2, spread = {x = 5, y = 5, z = 5}, seed = 2316, octaves = 1, - persist = 0.5 + persist = 0.0 }, }) @@ -95,18 +95,18 @@ function default.register_ores() ore_type = "blob", ore = "default:dirt", wherein = {"default:stone"}, - clust_scarcity = 24 * 24 * 24, - clust_size = 7, - y_min = -63, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_min = -31, y_max = 31000, - noise_threshhold = 0, + noise_threshhold = 0.0, noise_params = { - offset = 0.35, + offset = 0.5, scale = 0.2, spread = {x = 5, y = 5, z = 5}, seed = 17676, octaves = 1, - persist = 0.5 + persist = 0.0 }, }) @@ -116,18 +116,18 @@ function default.register_ores() ore_type = "blob", ore = "default:gravel", wherein = {"default:stone"}, - clust_scarcity = 24 * 24 * 24, - clust_size = 7, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, y_min = -31000, y_max = 31000, - noise_threshhold = 0, + noise_threshhold = 0.0, noise_params = { - offset = 0.35, + offset = 0.5, scale = 0.2, spread = {x = 5, y = 5, z = 5}, seed = 766, octaves = 1, - persist = 0.5 + persist = 0.0 }, }) From 279b85fc459c4ede0f6823da0a9f259101d86f06 Mon Sep 17 00:00:00 2001 From: LeMagnesium Date: Thu, 14 May 2015 18:57:41 +0200 Subject: [PATCH 33/73] Add option to disable bed's night skip - Solve second point of #512 by adding a setting, `enable_bed_night_skip` , with default value of `true`. --- minetest.conf.example | 8 ++++++++ mods/beds/README.txt | 3 ++- mods/beds/functions.lua | 38 ++++++++++++++++++++++++++------------ 3 files changed, 36 insertions(+), 13 deletions(-) diff --git a/minetest.conf.example b/minetest.conf.example index 47d03b00..c81040c7 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -26,3 +26,11 @@ # Enable the stairs mod ABM that replaces the old 'upside down' # stair and slab nodes in old maps with the new param2 versions. #enable_stairs_replace_abm = false + +# Whether you allow respawning in beds +# Default value is true +#enable_bed_respawn = true + +# Whether players can skip night by sleeping +# Default value is true +#enable_bed_night_skip = true diff --git a/mods/beds/README.txt b/mods/beds/README.txt index 21d4433f..cb76628a 100644 --- a/mods/beds/README.txt +++ b/mods/beds/README.txt @@ -14,7 +14,8 @@ if more than 50% of the players are lying in bed and use this option. Another feature is a controled respawning. If you have slept in bed (not just lying in it) your respawn point is set to the beds location and you will respawn there after death. You can disable the respawn at beds by setting "enable_bed_respawn = false" in minetest.conf - +You can also disable the night skip feature by setting "enable_bed_night_skip = false" in minetest.conf or by using +the /set command ingame. License of source code, textures: WTFPL diff --git a/mods/beds/functions.lua b/mods/beds/functions.lua index 4c5c7d16..59b22480 100644 --- a/mods/beds/functions.lua +++ b/mods/beds/functions.lua @@ -21,6 +21,14 @@ local function get_look_yaw(pos) end end +local function is_night_skip_enabled() + local enable_night_skip = minetest.setting_getbool("enable_bed_night_skip") + if enable_night_skip == nil then + enable_night_skip = true + end + return enable_night_skip +end + local function check_in_beds(players) local in_bed = beds.player if not players then @@ -56,7 +64,7 @@ local function lay_down(player, pos, bed_pos, state, skip) if skip then return end - if p then + if p then player:setpos(p) end @@ -100,8 +108,8 @@ local function update_formspecs(finished) "label[2.7,11; Good morning.]" else form_n = beds.formspec .. - "label[2.2,11;"..tostring(player_in_bed).." of "..tostring(ges).." players are in bed]" - if is_majority then + "label[2.2,11;"..tostring(player_in_bed).." of "..tostring(ges).." players are in bed]" + if is_majority and is_night_skip_enabled() then form_n = form_n .. "button_exit[2,8;4,0.75;force;Force night skip]" end @@ -154,11 +162,13 @@ function beds.on_rightclick(pos, player) -- skip the night and let all players stand up if check_in_beds() then minetest.after(2, function() - beds.skip_night() if not is_sp then - update_formspecs(true) + update_formspecs(is_night_skip_enabled()) + end + if is_night_skip_enabled() then + beds.skip_night() + beds.kick_players() end - beds.kick_players() end) end end @@ -189,9 +199,11 @@ minetest.register_on_leaveplayer(function(player) beds.player[name] = nil if check_in_beds() then minetest.after(2, function() - beds.skip_night() - update_formspecs(true) - beds.kick_players() + update_formspecs(is_night_skip_enabled()) + if is_night_skip_enabled() then + beds.skip_night() + beds.kick_players() + end end) end end) @@ -206,8 +218,10 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end if fields.force then - beds.skip_night() - update_formspecs(true) - beds.kick_players() + update_formspecs(is_night_skip_enabled()) + if is_night_skip_enabled() then + beds.skip_night() + beds.kick_players() + end end end) From 1f85f001f9f888a071980c6929aa096193e05383 Mon Sep 17 00:00:00 2001 From: Rui914 Date: Tue, 1 Sep 2015 01:35:59 +0900 Subject: [PATCH 34/73] Remove ugly def of xpanes --- mods/xpanes/init.lua | 62 ++++++++++++++++++-------------------------- 1 file changed, 25 insertions(+), 37 deletions(-) diff --git a/mods/xpanes/init.lua b/mods/xpanes/init.lua index 84221d65..ebd1566f 100644 --- a/mods/xpanes/init.lua +++ b/mods/xpanes/init.lua @@ -17,11 +17,7 @@ local function update_pane(pos, name) end local sum = 0 for i, dir in pairs(directions) do - local node = minetest.get_node({ - x = pos.x + dir.x, - y = pos.y + dir.y, - z = pos.z + dir.z - }) + local node = minetest.get_node(vector.add(pos, dir)) local def = minetest.registered_nodes[node.name] local pane_num = def and def.groups.pane or 0 if pane_num > 0 or not def or (def.walkable ~= false and @@ -50,14 +46,13 @@ local function update_nearby(pos, node) name = name:sub(8, underscore_pos - 1) end for i, dir in pairs(directions) do - update_pane({ - x = pos.x + dir.x, - y = pos.y + dir.y, - z = pos.z + dir.z - }, name) + update_pane(vector.add(pos, dir), name) end end +minetest.register_on_placenode(update_nearby) +minetest.register_on_dignode(update_nearby) + local half_boxes = { {0, -0.5, -1/32, 0.5, 0.5, 1/32}, {-1/32, -0.5, 0, 1/32, 0.5, 0.5}, @@ -82,6 +77,18 @@ local sb_full_boxes = { {-0.06, -0.5, -0.5, 0.06, 0.5, 0.5} } +local pane_def_fields = { + drawtype = "airlike", + paramtype = "light", + is_ground_content = false, + sunlight_propagates = true, + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + air_equivalent = true, +} + function xpanes.register_pane(name, def) for i = 1, 15 do local need = {} @@ -132,6 +139,10 @@ function xpanes.register_pane(name, def) }) end + for k, v in pairs(pane_def_fields) do + def[k] = def[k] or v + end + def.on_construct = function(pos) update_pane(pos, name) end @@ -144,52 +155,29 @@ function xpanes.register_pane(name, def) }) end -minetest.register_on_placenode(update_nearby) -minetest.register_on_dignode(update_nearby) - xpanes.register_pane("pane", { description = "Glass Pane", - tiles = {"xpanes_space.png"}, - drawtype = "airlike", - paramtype = "light", - is_ground_content = false, - sunlight_propagates = true, - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - air_equivalent = true, textures = {"default_glass.png","xpanes_pane_half.png","xpanes_white.png"}, inventory_image = "default_glass.png", wield_image = "default_glass.png", sounds = default.node_sound_glass_defaults(), groups = {snappy=2, cracky=3, oddly_breakable_by_hand=3, pane=1}, recipe = { - {'default:glass', 'default:glass', 'default:glass'}, - {'default:glass', 'default:glass', 'default:glass'} + {"default:glass", "default:glass", "default:glass"}, + {"default:glass", "default:glass", "default:glass"} } }) xpanes.register_pane("bar", { description = "Iron bar", - tiles = {"xpanes_space.png"}, - drawtype = "airlike", - paramtype = "light", - is_ground_content = false, - sunlight_propagates = true, - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - air_equivalent = true, textures = {"xpanes_bar.png","xpanes_bar.png","xpanes_space.png"}, inventory_image = "xpanes_bar.png", wield_image = "xpanes_bar.png", groups = {snappy=2, cracky=3, oddly_breakable_by_hand=3, pane=1}, sounds = default.node_sound_stone_defaults(), recipe = { - {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, - {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'} + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"} } }) From ff0973fa4fc3f7f5bfb4a79a1ee06df1c478e2b2 Mon Sep 17 00:00:00 2001 From: codeandfix Date: Tue, 2 Sep 2014 20:40:06 +0200 Subject: [PATCH 35/73] Update api.lua added protection for seed placement and hoeing --- mods/farming/api.lua | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/mods/farming/api.lua b/mods/farming/api.lua index 4b6f5617..7123cbc1 100644 --- a/mods/farming/api.lua +++ b/mods/farming/api.lua @@ -38,6 +38,16 @@ farming.hoe_on_use = function(itemstack, user, pointed_thing, uses) return end + if minetest.is_protected(pt.under, user:get_player_name()) then + minetest.record_protection_violation(pt.under, user:get_player_name()) + return + end + if minetest.is_protected(pt.above, user:get_player_name()) then + minetest.record_protection_violation(pt.above, user:get_player_name()) + return + end + + -- turn the node into soil, wear out item and play sound minetest.set_node(pt.under, {name = regN[under.name].soil.dry}) minetest.sound_play("default_dig_crumbly", { @@ -123,6 +133,16 @@ farming.place_seed = function(itemstack, placer, pointed_thing, plantname) local under = minetest.get_node(pt.under) local above = minetest.get_node(pt.above) + if minetest.is_protected(pt.under, placer:get_player_name()) then + minetest.record_protection_violation(pt.under, placer:get_player_name()) + return + end + if minetest.is_protected(pt.above, placer:get_player_name()) then + minetest.record_protection_violation(pt.above, placer:get_player_name()) + return + end + + -- return if any of the nodes is not registered if not minetest.registered_nodes[under.name] then return From 93a2c40ebc30ba0cacff388aa8d46859e7730148 Mon Sep 17 00:00:00 2001 From: LeMagnesium Date: Tue, 3 Feb 2015 20:23:00 +0100 Subject: [PATCH 36/73] Adding bones' drop feature Before, when you died, you got to punch you bones to get back your stuff, the bones block was not dropped. However, a lot of people wants to use them for decorations/building, and have to install a dedicated mod since 0.4.10-release. With this commit, a bones block containing an inventory is dropped/added to inventory (if enough room) when the bones block is removed. Then, when a player places a bones block by himself, he will dig it like any other basic node (eg. default:tree), not just punch it. Thanks for reading. --- mods/bones/init.lua | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mods/bones/init.lua b/mods/bones/init.lua index f35d5192..899ac809 100644 --- a/mods/bones/init.lua +++ b/mods/bones/init.lua @@ -76,6 +76,10 @@ minetest.register_node("bones:bones", { return end + if(minetest.get_meta(pos):get_string("infotext") == "") then + return + end + local inv = minetest.get_meta(pos):get_inventory() local player_inv = player:get_inventory() local has_space = true @@ -93,6 +97,11 @@ minetest.register_node("bones:bones", { -- remove bones if player emptied them if has_space then + if player_inv:room_for_item("main", {name = "bones:bones"}) then + player_inv:add_item("main", {name = "bones:bones"}) + else + minetest.add_item(pos,"bones:bones") + end minetest.remove_node(pos) end end, From 8e51f318b3ac9130bb1be4644b379f64e8f60b02 Mon Sep 17 00:00:00 2001 From: paramat Date: Wed, 30 Sep 2015 00:48:09 +0100 Subject: [PATCH 37/73] Rename to Minetest Game Rename in game.conf and documentation Update game_api.txt documentation for bucket API and tree functions Fix tab, space and comment formatting in game_api.txt Rename in mod READMEs --- README.txt | 27 +++++----- game.conf | 2 +- game_api.txt | 103 ++++++++++++++++++++---------------- minetest.conf.example | 4 +- mods/beds/README.txt | 4 +- mods/boats/README.txt | 6 +-- mods/bones/README.txt | 4 +- mods/bucket/README.txt | 2 +- mods/creative/README.txt | 4 +- mods/default/README.txt | 2 +- mods/doors/README.txt | 4 +- mods/dye/README.txt | 2 +- mods/farming/README.txt | 6 +-- mods/fire/README.txt | 4 +- mods/flowers/README.txt | 4 +- mods/screwdriver/readme.txt | 6 +-- mods/stairs/README.txt | 2 +- mods/tnt/README.txt | 3 +- mods/vessels/README.txt | 2 +- mods/wool/README.txt | 4 +- mods/xpanes/README.txt | 4 +- 21 files changed, 106 insertions(+), 93 deletions(-) diff --git a/README.txt b/README.txt index 7a9b12f5..8c85d665 100644 --- a/README.txt +++ b/README.txt @@ -1,23 +1,24 @@ -The main game for the Minetest game engine [minetest_game] -========================================================== +Minetest Game [minetest_game] +============================= +The main subgame for the Minetest engine +======================================== -To use this game with Minetest, insert this repository as - /games/minetest_game -in the Minetest Engine. +To use this subgame with the Minetest engine, insert this repository as + /games/minetest_game -The Minetest Engine can be found in: - https://github.com/minetest/minetest/ +The Minetest engine can be found in: + https://github.com/minetest/minetest/ Compatibility -------------- -The minetest_game github master HEAD is generally compatible with the github -master HEAD of minetest. +The Minetest Game github master HEAD is generally compatible with the github +master HEAD of the Minetest engine. -Additionally, when the minetest engine is tagged to be a certain version (eg. -0.4.10), minetest_game is tagged with the version too. +Additionally, when the Minetest engine is tagged to be a certain version (eg. +0.4.10), Minetest Game is tagged with the version too. -When stable releases are made, minetest_game is packaged and made available in - http://minetest.net/download +When stable releases are made, Minetest Game is packaged and made available in + http://minetest.net/download and in case the repository has grown too much, it may be reset. In that sense, this is not a "real" git repository. (Package maintainers please note!) diff --git a/game.conf b/game.conf index 8b819bb9..4dea9498 100644 --- a/game.conf +++ b/game.conf @@ -1 +1 @@ -name = Minetest +name = Minetest Game diff --git a/game_api.txt b/game_api.txt index 791a7f92..9c717e75 100644 --- a/game_api.txt +++ b/game_api.txt @@ -1,11 +1,11 @@ -minetest_game API -====================== +Minetest Game API +================= GitHub Repo: https://github.com/minetest/minetest_game Introduction ------------ -The minetest_game gamemode offers multiple new possibilities in addition to Minetest's built-in API, allowing you to -add new plants to farming mod, buckets for new liquids, new stairs and custom panes. +The Minetest Game subgame offers multiple new possibilities in addition to the Minetest engine's built-in API, +allowing you to add new plants to farming mod, buckets for new liquids, new stairs and custom panes. For information on the Minetest API, visit https://github.com/minetest/minetest/blob/master/doc/lua_api.txt Please note: [XYZ] refers to a section the Minetest API @@ -17,23 +17,24 @@ Bucket API The bucket API allows registering new types of buckets for non-default liquids. bucket.register_liquid( - "default:lava_source", -- Source node name - "default:lava_flowing", -- Flowing node name - "bucket:bucket_lava", -- Name to be used for bucket - "bucket_lava.png", -- Bucket texture (for wielditem and inventory_image) - "Lava Bucket" -- Bucket description + "default:lava_source", -- name of the source node + "default:lava_flowing", -- name of the flowing node + "bucket:bucket_lava", -- name of the new bucket item (or nil if liquid is not takeable) + "bucket_lava.png", -- texture of the new bucket item (ignored if itemname == nil) + "Lava Bucket", -- text description of the bucket item + {lava_bucket = 1} -- groups of the bucket item, OPTIONAL ) Beds API -------- beds.register_bed( - "beds:bed", -- Bed name - def: See [#Bed definition] -- Bed definition + "beds:bed", -- Bed name + def: See [#Bed definition] -- Bed definition ) - beds.read_spawns() -- returns a table containing players respawn positions - beds.kick_players() -- forces all players to leave bed - beds.skip_night() -- sets world time to morning and saves respawn position of all players currently sleeping + beds.read_spawns() -- returns a table containing players respawn positions + beds.kick_players() -- forces all players to leave bed + beds.skip_night() -- sets world time to morning and saves respawn position of all players currently sleeping #Bed definition --------------- @@ -50,11 +51,11 @@ Beds API } }, nodebox = { - bottom = regular nodebox, see [Node boxes], -- bottm part of bed - top = regular nodebox, see [Node boxes], -- top part of bed + bottom = regular nodebox, see [Node boxes], -- bottm part of bed + top = regular nodebox, see [Node boxes], -- top part of bed }, - selectionbox = regular nodebox, see [Node boxes], -- for both nodeboxes - recipe = { -- Craft recipe + selectionbox = regular nodebox, see [Node boxes], -- for both nodeboxes + recipe = { -- Craft recipe {"group:wool", "group:wool", "group:wool"}, {"group:wood", "group:wood", "group:wood"} } @@ -104,9 +105,9 @@ doors.register_trapdoor(name, def) sound_open = sound to play when opening the trapdoor, OPTIONAL, sound_close = sound to play when closing the trapdoor, OPTIONAL, -> You can add any other node definition properties for minetest.register_node, - such as wield_image, inventory_image, sounds, groups, description, ... - Only node_box, selection_box, tiles, drop, drawtype, paramtype, paramtype2, on_rightclick - will be overwritten by the trapdoor registration function + such as wield_image, inventory_image, sounds, groups, description, ... + Only node_box, selection_box, tiles, drop, drawtype, paramtype, paramtype2, on_rightclick + will be overwritten by the trapdoor registration function } Farming API @@ -122,11 +123,11 @@ farming.register_plant(name, Plant definition) #Hoe Definition --------------- { - description = "", -- Description for tooltip - inventory_image = "unknown_item.png", -- Image to be used as wield- and inventory image - max_uses = 30, -- Uses until destroyed - material = "", -- Material for recipes - recipe = { -- Craft recipe, if material isn't used + description = "", -- Description for tooltip + inventory_image = "unknown_item.png", -- Image to be used as wield- and inventory image + max_uses = 30, -- Uses until destroyed + material = "", -- Material for recipes + recipe = { -- Craft recipe, if material isn't used {"air", "air", "air"}, {"", "group:stick"}, {"", "group:stick"}, @@ -136,12 +137,12 @@ farming.register_plant(name, Plant definition) #Plant definition ----------------- { - description = "", -- Description of seed item - inventory_image = "unknown_item.png", -- Image to be used as seed's wield- and inventory image - steps = 8, -- How many steps the plant has to grow, until it can be harvested + description = "", -- Description of seed item + inventory_image = "unknown_item.png", -- Image to be used as seed's wield- and inventory image + steps = 8, -- How many steps the plant has to grow, until it can be harvested ^ Always provide a plant texture for each step, format: modname_plantname_i.png (i = stepnumber) - minlight = 13, -- Minimum light to grow - maxlight = default.LIGHT_MAX -- Maximum light to grow + minlight = 13, -- Minimum light to grow + maxlight = default.LIGHT_MAX -- Maximum light to grow } Screwdriver API @@ -155,7 +156,7 @@ on_rotate(pos, node, user, mode, new_param2) ^ mode: screwdriver.ROTATE_FACE or screwdriver.ROTATE_AXIS ^ new_param2: the new value of param2 that would have been set if on_rotate wasn't there ^ return value: false to disallow rotation, nil to keep default behaviour, true to allow - it but to indicate that changed have already been made (so the screwdriver will wear out) + it but to indicate that changed have already been made (so the screwdriver will wear out) ^ use on_rotate = screwdriver.disallow to always disallow rotation ^ use on_rotate = screwdriver.rotate_simple to allow only face rotation @@ -215,10 +216,10 @@ The following nodes use the group `connect_to_raillike` and will only connect to raillike nodes within this group and the same group value. Use `minetest.raillike_group()` to get the group value. -| Node type | Raillike group name -+-----------------------+---------------------------------- -| default:rail | "rail" -| tnt:gunpowder | "gunpowder" +| Node type | Raillike group name ++-----------------------+-------------------- +| default:rail | "rail" +| tnt:gunpowder | "gunpowder" | tnt:gunpowder_burning | "gunpowder" Example: @@ -281,13 +282,13 @@ default.player_get_animation(player) Model Definition ---------------- { - animation_speed = 30, -- Default animation speed, in FPS. - textures = {"character.png", }, -- Default array of textures. - visual_size = {x=1, y=1,}, -- Used to scale the model. + animation_speed = 30, -- Default animation speed, in FPS. + textures = {"character.png", }, -- Default array of textures. + visual_size = {x = 1, y = 1}, -- Used to scale the model. animations = { - -- = { x=, y=, }, - foo = { x= 0, y=19, }, - bar = { x=20, y=39, }, + -- = {x = , y = }, + foo = {x = 0, y = 19}, + bar = {x = 20, y = 39}, -- ... }, } @@ -375,10 +376,22 @@ dye.excolors Trees ----- default.grow_tree(pos, is_apple_tree) -^ Grows a tree or apple tree at pos +^ Grows a mgv6 tree or apple tree at pos default.grow_jungle_tree(pos) -^ Grows a jungletree at pos +^ Grows a mgv6 jungletree at pos default.grow_pine_tree(pos) -^ Grows a pinetree at pos +^ Grows a mgv6 pinetree at pos + +default.grow_new_apple_tree(pos) +^ Grows a new design apple tree at pos + +default.grow_new_jungle_tree(pos) +^ Grows a new design jungle tree at pos + +default.grow_new_pine_tree(pos) +^ Grows a new design pine tree at pos + +default.grow_new_acacia_tree(pos) +^ Grows a new design acacia tree at pos diff --git a/minetest.conf.example b/minetest.conf.example index c81040c7..0e3c2c55 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -1,6 +1,4 @@ -# This file contains settings of minetest_game that can be changed in -# minetest.conf -# +# This file contains settings of Minetest Game that can be changed in minetest.conf # By default, all the settings are commented and not functional. # Uncomment settings by removing the preceding #. diff --git a/mods/beds/README.txt b/mods/beds/README.txt index cb76628a..9710c459 100644 --- a/mods/beds/README.txt +++ b/mods/beds/README.txt @@ -1,5 +1,5 @@ -Minetest mod "Beds" -=================== +Minetest Game mod: beds +======================= by BlockMen (c) 2014-2015 Version: 1.1.1 diff --git a/mods/boats/README.txt b/mods/boats/README.txt index 5100481d..1de71678 100644 --- a/mods/boats/README.txt +++ b/mods/boats/README.txt @@ -1,6 +1,6 @@ -Minetest 0.4 mod: boats -======================= -by PilzAdam, slightly modified for NeXt +Minetest Game mod: boats +======================== +by PilzAdam License of source code: ----------------------- diff --git a/mods/bones/README.txt b/mods/bones/README.txt index b0ebed8f..b40a384d 100644 --- a/mods/bones/README.txt +++ b/mods/bones/README.txt @@ -1,5 +1,5 @@ -Minetest 0.4 mod: bones -======================= +Minetest Game mod: bones +======================== License of source code: ----------------------- diff --git a/mods/bucket/README.txt b/mods/bucket/README.txt index 7dad6419..a6674b43 100644 --- a/mods/bucket/README.txt +++ b/mods/bucket/README.txt @@ -1,4 +1,4 @@ -Minetest 0.4 mod: bucket +Minetest Game mod: bucket ========================= License of source code: diff --git a/mods/creative/README.txt b/mods/creative/README.txt index 7d49b981..a34dcaad 100644 --- a/mods/creative/README.txt +++ b/mods/creative/README.txt @@ -1,5 +1,5 @@ -Minetest 0.4 mod: creative -========================== +Minetest Game mod: creative +=========================== Implements creative mode. diff --git a/mods/default/README.txt b/mods/default/README.txt index 13fdef5f..f0dea682 100644 --- a/mods/default/README.txt +++ b/mods/default/README.txt @@ -1,4 +1,4 @@ -Minetest 0.4 mod: default +Minetest Game mod: default ========================== License of source code: diff --git a/mods/doors/README.txt b/mods/doors/README.txt index 146af8ed..5ae63caf 100644 --- a/mods/doors/README.txt +++ b/mods/doors/README.txt @@ -1,5 +1,5 @@ -Minetest 0.4 mod: doors -======================= +Minetest Game mod: doors +======================== version: 1.3 License of source code: diff --git a/mods/dye/README.txt b/mods/dye/README.txt index d414c2cc..b1035419 100644 --- a/mods/dye/README.txt +++ b/mods/dye/README.txt @@ -1,4 +1,4 @@ -Minetest 0.4 mod: dye +Minetest Game mod: dye ====================== See init.lua for documentation. diff --git a/mods/farming/README.txt b/mods/farming/README.txt index 67246957..143cf382 100644 --- a/mods/farming/README.txt +++ b/mods/farming/README.txt @@ -1,5 +1,5 @@ -Minetest 0.4 mod: farming -========================= +Minetest Game mod: farming +========================== License of source code: ----------------------- @@ -45,4 +45,4 @@ Created by Gambit (License: WTFPL): farming_cotton_*.png farming_flour.png farming_cotton_seed.png - farming_wheat_seed.png \ No newline at end of file + farming_wheat_seed.png diff --git a/mods/fire/README.txt b/mods/fire/README.txt index fdbce15f..bf143e5c 100644 --- a/mods/fire/README.txt +++ b/mods/fire/README.txt @@ -1,5 +1,5 @@ -Minetest 0.4 mod: fire -====================== +Minetest Game mod: fire +======================= License of source code: ----------------------- diff --git a/mods/flowers/README.txt b/mods/flowers/README.txt index 6cfa0eea..ebd4a21f 100644 --- a/mods/flowers/README.txt +++ b/mods/flowers/README.txt @@ -1,5 +1,5 @@ -Minetest 0.4 mod: flowers -========================= +Minetest Game mod: flowers +========================== License of source code: ----------------------- diff --git a/mods/screwdriver/readme.txt b/mods/screwdriver/readme.txt index ced1ff55..bdf109b8 100644 --- a/mods/screwdriver/readme.txt +++ b/mods/screwdriver/readme.txt @@ -1,5 +1,5 @@ -Minetest mod: screwdriver -========================= +Minetest Game mod: screwdriver +============================== License of source code: ----------------------- @@ -18,4 +18,4 @@ Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) http://creativecommons.org/licenses/by-sa/3.0/ Created by Gambit (WTFPL): - screwdriver.png \ No newline at end of file + screwdriver.png diff --git a/mods/stairs/README.txt b/mods/stairs/README.txt index 716a677c..9bd0b213 100644 --- a/mods/stairs/README.txt +++ b/mods/stairs/README.txt @@ -1,4 +1,4 @@ -Minetest 0.4 mod: stairs +Minetest Game mod: stairs ========================= License of source code: diff --git a/mods/tnt/README.txt b/mods/tnt/README.txt index 90a34677..df98f7e2 100644 --- a/mods/tnt/README.txt +++ b/mods/tnt/README.txt @@ -1,4 +1,5 @@ -=== TNT mod for Minetest === +Minetest Game mod: tnt +====================== by PilzAdam and ShadowNinja Introduction: diff --git a/mods/vessels/README.txt b/mods/vessels/README.txt index 150b501d..d5c3da84 100644 --- a/mods/vessels/README.txt +++ b/mods/vessels/README.txt @@ -1,4 +1,4 @@ -Minetest 0.4 mod: vessels +Minetest Game mod: vessels ========================== Crafts diff --git a/mods/wool/README.txt b/mods/wool/README.txt index 9db13327..f57b6dd3 100644 --- a/mods/wool/README.txt +++ b/mods/wool/README.txt @@ -1,5 +1,5 @@ -Minetest 0.4 mod: wool -====================== +Minetest Game mod: wool +======================= Mostly backward-compatible with jordach's 16-color wool mod. diff --git a/mods/xpanes/README.txt b/mods/xpanes/README.txt index 233978c4..b89e74a2 100644 --- a/mods/xpanes/README.txt +++ b/mods/xpanes/README.txt @@ -1,5 +1,5 @@ -Minetest 0.4.x mod: xpanes -========================== +Minetest Game mod: xpanes +========================= License: -------- From ac810dbf9d2cdf12f7061dd8d316c8b1214cf7c2 Mon Sep 17 00:00:00 2001 From: paramat Date: Tue, 22 Sep 2015 22:25:41 +0100 Subject: [PATCH 38/73] Default: Remove light source from mese ore New brighter mineral_mese texture --- mods/default/nodes.lua | 2 -- mods/default/textures/default_mineral_mese.png | Bin 358 -> 546 bytes 2 files changed, 2 deletions(-) diff --git a/mods/default/nodes.lua b/mods/default/nodes.lua index 7932586b..f7e40181 100644 --- a/mods/default/nodes.lua +++ b/mods/default/nodes.lua @@ -752,11 +752,9 @@ minetest.register_node("default:bronzeblock", { minetest.register_node("default:stone_with_mese", { description = "Mese Ore", tiles = {"default_stone.png^default_mineral_mese.png"}, - paramtype = "light", groups = {cracky = 1}, drop = "default:mese_crystal", sounds = default.node_sound_stone_defaults(), - light_source = 1, }) minetest.register_node("default:mese", { diff --git a/mods/default/textures/default_mineral_mese.png b/mods/default/textures/default_mineral_mese.png index 566d379a73ba4c878bafd3c2611ade410e33dd6d..6952670a8a9bdfe5be45b3538a9e82c86b1525df 100644 GIT binary patch delta 501 zcmVQ}#>=iB%9eEam%5fRcUR=tR^ zx0Iq4e>*G8FBl}ZQ}(o+D;L@s^IhmZG)9+-SgW?**o<+Wlk2=bh*up(SFT?_Je|Wb z2^(mHoYx2O3FuM#;SdHa7D$Uh+@BrigidZ`W@7`d07eov2!}8*IgPd18Thq*eI~$H z8BkV+F5sClCJuYeRm(YzQT4=gjA(Qh(_RX zyI?n4P`72|IdekbShz%Fx11cSBDx%k0k{+PZh82(#WGt9vjGZ+RS2b7sP z^Ca}>!sQ*TVML&%!(hGlFvB Date: Mon, 28 Sep 2015 03:14:44 +0100 Subject: [PATCH 39/73] Mgv5/7 biomes: Add more shallow dirt waters Dirt waters are more suitable for waterlilies Add dedicated dunes biome in coniferous forest Papyrus: use dirt base again Force-place roots on mapgen tree schematics Tune some humidity points to improve voronoi cells Add random rotation to jungle trees --- mods/default/mapgen.lua | 153 ++++++++++++++++-------- mods/default/schematics/acacia_tree.mts | Bin 204 -> 204 bytes mods/default/schematics/apple_tree.mts | Bin 163 -> 161 bytes mods/default/schematics/papyrus.mts | Bin 73 -> 99 bytes mods/default/schematics/pine_tree.mts | Bin 175 -> 175 bytes mods/flowers/mapgen.lua | 17 +-- 6 files changed, 110 insertions(+), 60 deletions(-) diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua index 5e251749..cb9fbe78 100644 --- a/mods/default/mapgen.lua +++ b/mods/default/mapgen.lua @@ -374,7 +374,7 @@ function default.register_biomes() y_min = 2, y_max = 31000, heat_point = 20, - humidity_point = 30, + humidity_point = 25, }) minetest.register_biome({ @@ -392,9 +392,10 @@ function default.register_biomes() y_min = -112, y_max = 1, heat_point = 20, - humidity_point = 30, + humidity_point = 25, }) + minetest.register_biome({ name = "taiga", node_dust = "default:snow", @@ -410,7 +411,7 @@ function default.register_biomes() y_min = 2, y_max = 31000, heat_point = 20, - humidity_point = 70, + humidity_point = 75, }) minetest.register_biome({ @@ -428,10 +429,10 @@ function default.register_biomes() y_min = -112, y_max = 1, heat_point = 20, - humidity_point = 70, + humidity_point = 75, }) - -- Cool + -- Temperate minetest.register_biome({ name = "stone_grassland", @@ -445,10 +446,10 @@ function default.register_biomes() --depth_water_top = , --node_water = "", --node_river_water = "", - y_min = 6, + y_min = 5, y_max = 31000, heat_point = 45, - humidity_point = 30, + humidity_point = 25, }) minetest.register_biome({ @@ -464,11 +465,12 @@ function default.register_biomes() --node_water = "", --node_river_water = "", y_min = -112, - y_max = 5, + y_max = 4, heat_point = 45, - humidity_point = 30, + humidity_point = 25, }) + minetest.register_biome({ name = "coniferous_forest", --node_dust = "", @@ -481,10 +483,28 @@ function default.register_biomes() --depth_water_top = , --node_water = "", --node_river_water = "", - y_min = 6, + y_min = 9, y_max = 31000, heat_point = 45, - humidity_point = 70, + humidity_point = 75, + }) + + minetest.register_biome({ + name = "coniferous_forest_dunes", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 2, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + y_min = 5, + y_max = 8, + heat_point = 45, + humidity_point = 75, }) minetest.register_biome({ @@ -500,12 +520,11 @@ function default.register_biomes() --node_water = "", --node_river_water = "", y_min = -112, - y_max = 5, + y_max = 4, heat_point = 45, - humidity_point = 70, + humidity_point = 75, }) - -- Warm minetest.register_biome({ name = "sandstone_grassland", @@ -519,10 +538,10 @@ function default.register_biomes() --depth_water_top = , --node_water = "", --node_river_water = "", - y_min = 6, + y_min = 5, y_max = 31000, heat_point = 70, - humidity_point = 30, + humidity_point = 25, }) minetest.register_biome({ @@ -538,11 +557,12 @@ function default.register_biomes() --node_water = "", --node_river_water = "", y_min = -112, - y_max = 5, + y_max = 4, heat_point = 70, - humidity_point = 30, + humidity_point = 25, }) + minetest.register_biome({ name = "deciduous_forest", --node_dust = "", @@ -555,10 +575,28 @@ function default.register_biomes() --depth_water_top = , --node_water = "", --node_river_water = "", - y_min = 6, + y_min = 1, y_max = 31000, heat_point = 70, - humidity_point = 70, + humidity_point = 75, + }) + + minetest.register_biome({ + name = "deciduous_forest_swamp", + --node_dust = "", + node_top = "default:dirt", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 2, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + y_min = -3, + y_max = 0, + heat_point = 70, + humidity_point = 75, }) minetest.register_biome({ @@ -574,9 +612,9 @@ function default.register_biomes() --node_water = "", --node_river_water = "", y_min = -112, - y_max = 5, + y_max = -4, heat_point = 70, - humidity_point = 70, + humidity_point = 75, }) -- Hot @@ -617,6 +655,7 @@ function default.register_biomes() humidity_point = 10, }) + minetest.register_biome({ name = "savanna", --node_dust = "", @@ -629,12 +668,30 @@ function default.register_biomes() --depth_water_top = , --node_water = "", --node_river_water = "", - y_min = 5, + y_min = 1, y_max = 31000, heat_point = 95, humidity_point = 50, }) + minetest.register_biome({ + name = "savanna_swamp", + --node_dust = "", + node_top = "default:dirt", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 2, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + y_min = -3, + y_max = 0, + heat_point = 95, + humidity_point = 50, + }) + minetest.register_biome({ name = "savanna_ocean", --node_dust = "", @@ -648,11 +705,12 @@ function default.register_biomes() --node_water = "", --node_river_water = "", y_min = -112, - y_max = 4, + y_max = -4, heat_point = 95, humidity_point = 50, }) + minetest.register_biome({ name = "rainforest", --node_dust = "", @@ -683,7 +741,7 @@ function default.register_biomes() --depth_water_top = , --node_water = "", --node_river_water = "", - y_min = 0, + y_min = -3, y_max = 0, heat_point = 95, humidity_point = 90, @@ -702,7 +760,7 @@ function default.register_biomes() --node_water = "", --node_river_water = "", y_min = -112, - y_max = -1, + y_max = -4, heat_point = 95, humidity_point = 90, }) @@ -713,9 +771,9 @@ function default.register_biomes() name = "underground", --node_dust = "", --node_top = "", - depth_top = 0, + --depth_top = , --node_filler = "", - depth_filler = -4, + --depth_filler = , --node_stone = "", --node_water_top = "", --depth_water_top = , @@ -833,18 +891,14 @@ local function register_grass_decoration(offset, scale, length) noise_params = { offset = offset, scale = scale, - spread = {x=200, y=200, z=200}, + spread = {x = 200, y = 200, z = 200}, seed = 329, octaves = 3, persist = 0.6 }, - biomes = { - "stone_grassland", "stone_grassland_ocean", - "sandstone_grassland", "sandstone_grassland_ocean", - "deciduous_forest", "deciduous_forest_ocean", - "coniferous_forest", "coniferous_forest_ocean", - }, - y_min = 5, + biomes = {"stone_grassland", "sandstone_grassland", + "deciduous_forest", "coniferous_forest", "coniferous_forest_dunes"}, + y_min = 1, y_max = 31000, decoration = "default:grass_"..length, }) @@ -858,13 +912,13 @@ local function register_dry_grass_decoration(offset, scale, length) noise_params = { offset = offset, scale = scale, - spread = {x=200, y=200, z=200}, + spread = {x = 200, y = 200, z = 200}, seed = 329, octaves = 3, persist = 0.6 }, biomes = {"savanna"}, - y_min = 5, + y_min = 1, y_max = 31000, decoration = "default:dry_grass_"..length, }) @@ -882,13 +936,13 @@ function default.register_decorations() noise_params = { offset = 0.04, scale = 0.02, - spread = {x=250, y=250, z=250}, + spread = {x = 250, y = 250, z = 250}, seed = 2, octaves = 3, persist = 0.66 }, biomes = {"deciduous_forest"}, - y_min = 6, + y_min = 1, y_max = 31000, schematic = minetest.get_modpath("default").."/schematics/apple_tree.mts", flags = "place_center_x, place_center_z", @@ -906,6 +960,7 @@ function default.register_decorations() y_max = 31000, schematic = minetest.get_modpath("default").."/schematics/jungle_tree.mts", flags = "place_center_x, place_center_z", + rotation = "random", }) -- Taiga and temperate forest pine tree @@ -917,7 +972,7 @@ function default.register_decorations() noise_params = { offset = 0.04, scale = 0.02, - spread = {x=250, y=250, z=250}, + spread = {x = 250, y = 250, z = 250}, seed = 2, octaves = 3, persist = 0.66 @@ -938,13 +993,13 @@ function default.register_decorations() noise_params = { offset = 0, scale = 0.003, - spread = {x=250, y=250, z=250}, + spread = {x = 250, y = 250, z = 250}, seed = 2, octaves = 3, persist = 0.66 }, biomes = {"savanna"}, - y_min = 6, + y_min = 1, y_max = 31000, schematic = minetest.get_modpath("default").."/schematics/acacia_tree.mts", flags = "place_center_x, place_center_z", @@ -960,7 +1015,7 @@ function default.register_decorations() noise_params = { offset = -0.0005, scale = 0.0015, - spread = {x=200, y=200, z=200}, + spread = {x = 200, y = 200, z = 200}, seed = 230, octaves = 3, persist = 0.6 @@ -982,7 +1037,7 @@ function default.register_decorations() noise_params = { offset = -0.0005, scale = 0.0015, - spread = {x=200, y=200, z=200}, + spread = {x = 200, y = 200, z = 200}, seed = 230, octaves = 3, persist = 0.6 @@ -999,17 +1054,17 @@ function default.register_decorations() minetest.register_decoration({ deco_type = "schematic", - place_on = {"default:sand"}, + place_on = {"default:dirt", "default:sand"}, sidelen = 16, noise_params = { offset = -0.3, scale = 0.7, - spread = {x=200, y=200, z=200}, + spread = {x = 200, y = 200, z = 200}, seed = 354, octaves = 3, persist = 0.7 }, - biomes = {"savanna_ocean", "desert_ocean"}, + biomes = {"savanna_swamp", "desert_ocean"}, y_min = 0, y_max = 0, schematic = minetest.get_modpath("default").."/schematics/papyrus.mts", @@ -1053,7 +1108,7 @@ function default.register_decorations() noise_params = { offset = 0, scale = 0.02, - spread = {x=200, y=200, z=200}, + spread = {x = 200, y = 200, z = 200}, seed = 329, octaves = 3, persist = 0.6 diff --git a/mods/default/schematics/acacia_tree.mts b/mods/default/schematics/acacia_tree.mts index 43e7867a4f1262815fad4e05f1ccd3868ee5ed6f..4732ade3d9df99c4f543ad168dc090e551cfdee5 100644 GIT binary patch delta 85 zcmV-b0IL7Y0n7mpO;l4&00aOD00;mHe}6xb4@LugbZU`UJ~nX<PK>~Xy0 r|K&ZDy%q`%dK&WtQRF+mf3O>7bmx-ZctRd6Pxo#Xi;vj=)n_rDB?= Date: Mon, 5 Oct 2015 00:06:07 +0100 Subject: [PATCH 40/73] Flowers: Allow placing waterlily on river water Add 'buildable_to = true' to flowers and waterlily --- mods/flowers/init.lua | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/mods/flowers/init.lua b/mods/flowers/init.lua index c6ab0a26..e8899efd 100644 --- a/mods/flowers/init.lua +++ b/mods/flowers/init.lua @@ -46,6 +46,7 @@ local function add_simple_flower(name, desc, box, f_groups) sunlight_propagates = true, paramtype = "light", walkable = false, + buildable_to = true, stack_max = 99, groups = f_groups, sounds = default.node_sound_leaves_defaults(), @@ -252,6 +253,7 @@ minetest.register_node("flowers:waterlily", { wield_image = "flowers_waterlily.png", liquids_pointable = true, walkable = false, + buildable_to = true, groups = {snappy = 3, flower = 1}, sounds = default.node_sound_leaves_defaults(), node_box = { @@ -266,10 +268,19 @@ minetest.register_node("flowers:waterlily", { after_place_node = function(pos, placer, itemstack, pointed_thing) local find_water = minetest.find_nodes_in_area({x = pos.x - 1, y = pos.y, z = pos.z - 1}, {x = pos.x + 1, y = pos.y, z = pos.z + 1}, "default:water_source") + local find_river_water = minetest.find_nodes_in_area({x = pos.x - 1, y = pos.y, z = pos.z - 1}, + {x = pos.x + 1, y = pos.y, z = pos.z + 1}, "default:river_water_source") if #find_water ~= 0 then minetest.set_node(pos, {name = "default:water_source"}) pos.y = pos.y + 1 + minetest.set_node(pos, {name = "flowers:waterlily", param2 = math.random(0, 3)}) + elseif #find_river_water ~= 0 then + minetest.set_node(pos, {name = "default:river_water_source"}) + pos.y = pos.y + 1 + minetest.set_node(pos, {name = "flowers:waterlily", param2 = math.random(0, 3)}) + else + minetest.remove_node(pos) + return true end - minetest.set_node(pos, {name = "flowers:waterlily", param2 = math.random(0, 3)}) end }) From f4a412d9c1bb7f6d297bb6e215e064a254f7f6ed Mon Sep 17 00:00:00 2001 From: paramat Date: Mon, 5 Oct 2015 01:25:23 +0100 Subject: [PATCH 41/73] Papyrus: Grow on dirt and grass only, remove from desert ocean --- mods/default/functions.lua | 3 +-- mods/default/mapgen.lua | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/mods/default/functions.lua b/mods/default/functions.lua index 3accbd1f..50f481f6 100644 --- a/mods/default/functions.lua +++ b/mods/default/functions.lua @@ -152,8 +152,7 @@ end function default.grow_papyrus(pos, node) pos.y = pos.y - 1 local name = minetest.get_node(pos).name - if name ~= "default:dirt_with_grass" and name ~= "default:dirt" and - name ~= "default:sand" then + if name ~= "default:dirt_with_grass" and name ~= "default:dirt" then return end if not minetest.find_node_near(pos, 3, {"group:water"}) then diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua index cb9fbe78..0a2b3bc2 100644 --- a/mods/default/mapgen.lua +++ b/mods/default/mapgen.lua @@ -1054,7 +1054,7 @@ function default.register_decorations() minetest.register_decoration({ deco_type = "schematic", - place_on = {"default:dirt", "default:sand"}, + place_on = {"default:dirt"}, sidelen = 16, noise_params = { offset = -0.3, @@ -1064,7 +1064,7 @@ function default.register_decorations() octaves = 3, persist = 0.7 }, - biomes = {"savanna_swamp", "desert_ocean"}, + biomes = {"savanna_swamp"}, y_min = 0, y_max = 0, schematic = minetest.get_modpath("default").."/schematics/papyrus.mts", From 70e892408261b5a4711f52b62048f8cc061655a4 Mon Sep 17 00:00:00 2001 From: paramat Date: Tue, 6 Oct 2015 03:14:59 +0100 Subject: [PATCH 42/73] New header image 'Minetest Game' --- README.txt | 2 +- menu/header.png | Bin 80804 -> 1921 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/README.txt b/README.txt index 8c85d665..b59b7f94 100644 --- a/README.txt +++ b/README.txt @@ -50,4 +50,4 @@ Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) http://creativecommons.org/licenses/by-sa/3.0/ License of menu/header.png -Copyright (C) 2013 BlockMen CC BY-3.0 +Copyright (C) 2015 paramat CC BY-SA 3.0 diff --git a/menu/header.png b/menu/header.png index 2866626eef393f4765f682101aa8b09ef9780487..2ecda837058d5f18fa114a59419d7536fcd15705 100644 GIT binary patch literal 1921 zcmV-{2Y&d8P)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00!wvL_t(&-tAgTZxdG({>B>o zo=H+@h|@|WD5OOy>K28^u2rR0>ZU4)hgw)rsUQ|C+DHvW5iIxzm1q}8B`Lc~ELxg~ zKpqf+YbC`&kf%jLV#ju9JTtb(Hpz5h&veGVlNo1BOjXVb#`B%?oqNu?_uMm~?%lp6 zP0q|fEs<~-?dLC0>SuRv^-7b|)5`xTn+=hr2oCPsk7B&Ex(WbTibip8f9da)(l1Lk zn}ywO*F1ZT&*R%WwCh|fr1)3czs<}KdTwC>qho)8=Xo#;gN!J`?r`Ap#ZE~k@!;;D zbglar005Urpr*DK01zC1gr=ruBA!bmFflcSrsift{Qxk(7{=(sU|ISBfUT*~IQAN^ z#T$uU{HyI>CGyXVeL5bCAruP1>2g6xCIJ9$rxRQvfy);=r2}nkkd5;^56WgkI1&K> zB)A0h@Uj@`R~NxX^mB=X;^b?5Dc(q4RsSlLe@6Cc0C2io@OnIuBq@J{tgRuLN+B>h zhQR0;yk0K=Ael;O7H{>%3#^CFX0tHTf9XPp)X{l~62)}c`qjtTM)>_-@J8~g`e!x& z%-E;5I2-_=RF7OiKA#UgslTrLMA{WGDbxO}No z($i1E{}~9NX~zzv(`itYev8ZT0*3v5%*@Vep1-$ycZq-fgF|T8USEQ@YQNh2jbyX@ zYu(jiI=}!)}Myu!^UJ$@>9Hg~154QkIHbY9 zQCElIkq4B+ZkLSo3qlH(Y)J*H#f<)k!Jw}GV*IC{e2h~kPe_!_hDmG}NmtgJf) zQQLpEu%Nq0R_wnD{EeiTpL#+ReEhf~{;{kVp-{+Fe9O&0E9*-;olf`~8o=|sQb8=s zDlfg&*r@!Q7X;-Up67wW@lwOGnjVa0S-4#Jnwy(V#dkCFgBC?m zIacJVT3%jOKsK8Vc85dhztqQ%(~+-KF`dTR>Z%4GUykR0v#7rk{PZRtYW&K|3h~|l zI)5V}@snd0kHs+l=+R5{uiAJTg^G|b8I;YYxpfy`JW`^FlqeF%Y-)U5CSg@S0UsD0 zL&NrZWU^T}iau~;3X>-Qh{fZ?pnJVuY~8w*Xum`(+P~A^kIAWNW#>^}%GCJQT`iy} z+q&z!A^t`}icg`Z9`^eYjm6gI_Y&f}nfXCWYimmNWD0!}Q^O*c%_+uNmc`AUUVQZ7 z2VhxN`RE|`oyB;k%cU4Ht6!F4{Um%{T`lh2AE7oH^Gq(MSzMN7;dHvl`C-xi)t|de zaXNeEv^0Ewgt)#|_#5Uw!9O{6UES9yBYq_OSTKk;w{26B&*^kw=gww$+-_6&a`Mk= zeCTX8i<;V6rKbb{e;|PO_v}$VAOCve2EJ?m7PtCtE4xED5j_>u7O=g)C(_`YV{ z4}JcbM9Lql`DZmgw8QBH$8n%23Jk+2z0nU>ex$xUeoPt|x{JBFdCfRePE?28j?mLN z^bZbc@C?IXW;O(WAb?XRPpqq-qA2AOqdDda`bqr4i(!Np!^*`+-W7`F$;5>2#g7*R z1@CKU(A{mV+JD>ESh7CqjY7tcj648oeXa609AldFPmiBo{;W4{HG?;se^%o|J6$eN z6a^ufRK`hSMl2lP*C=)G)adgmw`uiP#A3XfsFD7oM-EH!3DDZoQnvnNDy3Y0NO--A zpS&P4UT?RxYQNh2&3px}w10AZi+gXg`BTaKGvZH+q6mgzz%b0eqa@YELS4a&;V^_` zQgbmO;pM8+`(3TStNS|j?|%QnFdGUv2(ora+bU z&uacuD*w#zr+a#OF;Vz4Q~Ah^6lSPu>Fw*olP43J_ns{-f`peP5{<%)e)%LQSHJun zqImaH<4JO7U;vX-(;B?q#K@}sYV$Xem*Jn){Hav_nc@Er|C%)_5I5-d00000NkvXX Hu0mjfj{w9^ literal 80804 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 LNkvXXu0mjf@6&QC From 41c1e99b1f4ce34ff42d239d69d4ad840a1b5dc9 Mon Sep 17 00:00:00 2001 From: paramat Date: Sat, 10 Oct 2015 13:56:52 +0100 Subject: [PATCH 43/73] Default/mapgen: Remove dunes biome. Sand for glacier seabed --- mods/default/mapgen.lua | 26 ++++---------------------- 1 file changed, 4 insertions(+), 22 deletions(-) diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua index 0a2b3bc2..1cb31f5c 100644 --- a/mods/default/mapgen.lua +++ b/mods/default/mapgen.lua @@ -342,9 +342,9 @@ function default.register_biomes() minetest.register_biome({ name = "glacier_ocean", node_dust = "default:snowblock", - node_top = "default:gravel", + node_top = "default:sand", depth_top = 1, - node_filler = "default:gravel", + node_filler = "default:sand", depth_filler = 2, --node_stone = "", --node_water_top = "", @@ -483,26 +483,8 @@ function default.register_biomes() --depth_water_top = , --node_water = "", --node_river_water = "", - y_min = 9, - y_max = 31000, - heat_point = 45, - humidity_point = 75, - }) - - minetest.register_biome({ - name = "coniferous_forest_dunes", - --node_dust = "", - node_top = "default:sand", - depth_top = 1, - node_filler = "default:sand", - depth_filler = 2, - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", y_min = 5, - y_max = 8, + y_max = 31000, heat_point = 45, humidity_point = 75, }) @@ -897,7 +879,7 @@ local function register_grass_decoration(offset, scale, length) persist = 0.6 }, biomes = {"stone_grassland", "sandstone_grassland", - "deciduous_forest", "coniferous_forest", "coniferous_forest_dunes"}, + "deciduous_forest", "coniferous_forest"}, y_min = 1, y_max = 31000, decoration = "default:grass_"..length, From c15bd9d529812a14d516f8063baea903133cadbe Mon Sep 17 00:00:00 2001 From: PilzAdam Date: Sun, 11 Oct 2015 18:29:39 +0200 Subject: [PATCH 44/73] Fix wrong nomenclature in game_api.txt --- game_api.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/game_api.txt b/game_api.txt index 9c717e75..8ab44309 100644 --- a/game_api.txt +++ b/game_api.txt @@ -163,7 +163,7 @@ on_rotate(pos, node, user, mode, new_param2) Stairs API ---------- The stairs API lets you register stairs and slabs and ensures that they are registered the same way as those -delivered with minetest_game, to keep them compatible with other mods. +delivered with Minetest Game, to keep them compatible with other mods. stairs.register_stair(subname, recipeitem, groups, images, description, sounds) -> Registers a stair. From ef8b7e230d17b424749e0ce428720afa7ac4fe6d Mon Sep 17 00:00:00 2001 From: paramat Date: Fri, 16 Oct 2015 11:51:27 +0100 Subject: [PATCH 45/73] Default/trees: Add requirement of light level 13 for sapling growth --- mods/default/trees.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mods/default/trees.lua b/mods/default/trees.lua index 07cc4d73..5f50b040 100644 --- a/mods/default/trees.lua +++ b/mods/default/trees.lua @@ -16,6 +16,10 @@ local function can_grow(pos) if is_soil == 0 then return false end + local ll = minetest.get_node_light(pos) + if not ll or ll < 13 then -- Minimum light level for growth + return false -- matches grass, wheat and cotton + end return true end From 3fb6ee5bdf7a8940d7e25c96f41436a49fea32fc Mon Sep 17 00:00:00 2001 From: Rui Date: Sun, 4 Oct 2015 18:36:58 +0900 Subject: [PATCH 46/73] Default/book: textarea -> table --- mods/default/craftitems.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mods/default/craftitems.lua b/mods/default/craftitems.lua index facff57e..c41129d3 100644 --- a/mods/default/craftitems.lua +++ b/mods/default/craftitems.lua @@ -30,7 +30,8 @@ local function book_on_use(itemstack, user, pointed_thing) formspec = "size[8,8]"..default.gui_bg.. "label[0.5,0.5;by "..owner.."]".. "label[0.5,0;"..minetest.formspec_escape(title).."]".. - "textarea[0.5,1.5;7.5,7;;"..minetest.formspec_escape(text)..";]" + "tableoptions[background=#00000000;highlight=#00000000;border=false]".. + "table[0.5,1.5;7.5,7;;"..minetest.formspec_escape(text):gsub("\n", ",")..";1]" end minetest.show_formspec(user:get_player_name(), "default:book", formspec) end From b292975fbced72bbd9aea470241b1f626110bf2d Mon Sep 17 00:00:00 2001 From: Marcin Date: Mon, 5 Oct 2015 00:17:30 +0200 Subject: [PATCH 47/73] Use PI variable rather than unclear constant --- mods/beds/functions.lua | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/mods/beds/functions.lua b/mods/beds/functions.lua index 59b22480..5b2f5406 100644 --- a/mods/beds/functions.lua +++ b/mods/beds/functions.lua @@ -1,3 +1,4 @@ +local pi = math.pi local player_in_bed = 0 local is_sp = minetest.is_singleplayer() local enable_respawn = minetest.setting_getbool("enable_bed_respawn") @@ -11,13 +12,13 @@ end local function get_look_yaw(pos) local n = minetest.get_node(pos) if n.param2 == 1 then - return 7.9, n.param2 + return pi/2, n.param2 elseif n.param2 == 3 then - return 4.75, n.param2 + return -pi/2, n.param2 elseif n.param2 == 0 then - return 3.15, n.param2 + return pi, n.param2 else - return 6.28, n.param2 + return 0, n.param2 end end From f3dc78204c83e55363bcdfe40b31b33949e198a7 Mon Sep 17 00:00:00 2001 From: paramat Date: Mon, 19 Oct 2015 23:58:24 +0100 Subject: [PATCH 48/73] Boats: Check inventory in boat.on_punch If puncher inventory is full, then drop boat --- mods/boats/init.lua | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/mods/boats/init.lua b/mods/boats/init.lua index 0fb54f1a..e17d8b1b 100644 --- a/mods/boats/init.lua +++ b/mods/boats/init.lua @@ -105,7 +105,12 @@ function boat.on_punch(self, puncher, time_from_last_punch, self.object:remove() end) if not minetest.setting_getbool("creative_mode") then - puncher:get_inventory():add_item("main", "boats:boat") + local inv = puncher:get_inventory() + if inv:room_for_item("main", "boats:boat") then + inv:add_item("main", "boats:boat") + else + minetest.add_item(self.object:getpos(), "boats:boat") + end end end end From 2729777b943413323550d7891ea6df8861376598 Mon Sep 17 00:00:00 2001 From: paramat Date: Thu, 22 Oct 2015 18:54:18 +0100 Subject: [PATCH 49/73] Default/functions: ABM for mossycobble replacing cobble next to water --- mods/default/functions.lua | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/mods/default/functions.lua b/mods/default/functions.lua index 50f481f6..7ba71fec 100644 --- a/mods/default/functions.lua +++ b/mods/default/functions.lua @@ -306,7 +306,7 @@ minetest.register_abm({ -- --- Grass growing +-- Grass growing on well-lit dirt -- minetest.register_abm({ @@ -329,6 +329,11 @@ minetest.register_abm({ end }) + +-- +-- Grass and dry grass removed in darkness +-- + minetest.register_abm({ nodenames = {"default:dirt_with_grass", "default:dirt_with_dry_grass"}, interval = 2, @@ -345,3 +350,18 @@ minetest.register_abm({ end }) + +-- +-- Moss growth on cobble near water +-- + +minetest.register_abm({ + nodenames = {"default:cobble"}, + neighbors = {"group:water"}, + interval = 17, + chance = 200, + catch_up = false, + action = function(pos, node) + minetest.set_node(pos, {name = "default:mossycobble"}) + end +}) From 321bd6672113232817774670c9be89d22aecd956 Mon Sep 17 00:00:00 2001 From: paramat Date: Tue, 27 Oct 2015 01:10:25 +0000 Subject: [PATCH 50/73] Default/trees: Clean-up 'can grow' function --- mods/default/trees.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mods/default/trees.lua b/mods/default/trees.lua index 5f50b040..c6bb489d 100644 --- a/mods/default/trees.lua +++ b/mods/default/trees.lua @@ -16,9 +16,9 @@ local function can_grow(pos) if is_soil == 0 then return false end - local ll = minetest.get_node_light(pos) - if not ll or ll < 13 then -- Minimum light level for growth - return false -- matches grass, wheat and cotton + local light_level = minetest.get_node_light(pos) + if not light_level or light_level < 13 then + return false end return true end From 7c0abe93664dca2ae87ae2e4bb83e30febd6c06a Mon Sep 17 00:00:00 2001 From: Craig Davison Date: Wed, 29 Jul 2015 22:07:26 +0100 Subject: [PATCH 51/73] Remove unused TNT & torch textures Closes #544 --- mods/default/textures/default_tnt_bottom.png | Bin 98 -> 0 bytes mods/default/textures/default_tnt_side.png | Bin 122 -> 0 bytes mods/default/textures/default_tnt_top.png | Bin 143 -> 0 bytes mods/default/textures/default_torch.png | Bin 151 -> 0 bytes .../default/textures/default_torch_on_ceiling.png | Bin 136 -> 0 bytes 5 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 mods/default/textures/default_tnt_bottom.png delete mode 100644 mods/default/textures/default_tnt_side.png delete mode 100644 mods/default/textures/default_tnt_top.png delete mode 100644 mods/default/textures/default_torch.png delete mode 100644 mods/default/textures/default_torch_on_ceiling.png diff --git a/mods/default/textures/default_tnt_bottom.png b/mods/default/textures/default_tnt_bottom.png deleted file mode 100644 index 4eda0603ff17f85b0b81ea90819866aa73ec432c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9oB=)|u6Ya$Ycw?0*L%EQZ@v*I tDB|hj7{U>q%)!Xi#-q?6kl@fL!N7P|$g$3GuLw|{!PC{xWt~$(69BaA732T_ diff --git a/mods/default/textures/default_tnt_side.png b/mods/default/textures/default_tnt_side.png deleted file mode 100644 index 947f862d142535b58ba83d3409f04c9c719e134d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`j-D=#Ar*|t5sMdo+~3&9*z>tz zMu^>ohCt?j!5k6~c-Yt^+CEQwa^Y%%M8mqy35hO}42w058#ZujFkkUtUko(qd#KID UOr>c;K*Jb3UHx3vIVCg!06JlB^AKI^qX3iNVv=&t;ucLK6VNA}G}W diff --git a/mods/default/textures/default_torch.png b/mods/default/textures/default_torch.png deleted file mode 100644 index e21aac332e0afb86d1491acbf434e182d5e3452a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`ah@)YAr*|t3#@<4Kl)+5(%Jw2 zSN~zZl;E>X@dVq%$4nM%A3ZPC%w{}V))m8G#N#qKhr!2KAXs3+PA#7QwxJrG=e9om yuU=^c)bm7|sf6)_z^Pcqq~Ir9r+6g_7#I?#C8x{9|NjHDiNVv=&t;ucLK6UXpfx-I diff --git a/mods/default/textures/default_torch_on_ceiling.png b/mods/default/textures/default_torch_on_ceiling.png deleted file mode 100644 index 89f41f5b068a98d2be89b86d3e9235edcf2fc475..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`{+=$5Ar*|t2iVmrjsAQON&M08 z&zsBhWB$<(|Nqxd{r~^^wEy#;aHdU8 Date: Tue, 22 Sep 2015 21:37:05 +0100 Subject: [PATCH 52/73] Fire: Add 'permanent flame' node Update 'disable fire' documentation in conf.example --- minetest.conf.example | 3 +- mods/fire/init.lua | 94 ++++++++++++++++++++++++++++++------------- 2 files changed, 67 insertions(+), 30 deletions(-) diff --git a/minetest.conf.example b/minetest.conf.example index 0e3c2c55..11b4835f 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -9,7 +9,8 @@ # 0 to disable #share_bones_time = 1200 -# Whether fire should be disabled (all fire nodes will instantly disappear) +# Whether standard fire should be disabled ('basic flame' nodes will disappear) +# 'permanent flame' nodes will remain with either setting #disable_fire = false # Whether steel tools, torches and cobblestone should be given to new players diff --git a/mods/fire/init.lua b/mods/fire/init.lua index f3f6369a..7c65c5bb 100644 --- a/mods/fire/init.lua +++ b/mods/fire/init.lua @@ -5,25 +5,31 @@ fire = {} --- Register flame node +-- Register flame nodes minetest.register_node("fire:basic_flame", { - description = "Fire", + description = "Basic Flame", drawtype = "firelike", - tiles = {{ - name = "fire_basic_flame_animated.png", - animation = {type = "vertical_frames", - aspect_w = 16, aspect_h = 16, length = 1}, - }}, + tiles = { + { + name = "fire_basic_flame_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1 + }, + }, + }, inventory_image = "fire_basic_flame.png", paramtype = "light", light_source = 14, - groups = {igniter = 2, dig_immediate = 3}, - drop = '', walkable = false, buildable_to = true, sunlight_propagates = true, damage_per_second = 4, + groups = {igniter = 2, dig_immediate = 3}, + drop = "", on_construct = function(pos) minetest.after(0, fire.on_flame_add_at, pos) @@ -33,7 +39,36 @@ minetest.register_node("fire:basic_flame", { minetest.after(0, fire.on_flame_remove_at, pos) end, - on_blast = function() end, -- unaffected by explosions + on_blast = function() + end, -- unaffected by explosions +}) + +minetest.register_node("fire:permanent_flame", { + description = "Permanent Flame", + drawtype = "firelike", + tiles = { + { + name = "fire_basic_flame_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1 + }, + }, + }, + inventory_image = "fire_basic_flame.png", + paramtype = "light", + light_source = 14, + walkable = false, + buildable_to = true, + sunlight_propagates = true, + damage_per_second = 4, + groups = {igniter = 2, dig_immediate = 3}, + drop = "", + + on_blast = function() + end, }) @@ -129,15 +164,30 @@ function fire.flame_should_extinguish(pos) end --- Enable ABMs according to 'disable fire' setting +-- Extinguish all flames quickly with water, snow, ice + +minetest.register_abm({ + nodenames = {"fire:basic_flame", "fire:permanent_flame"}, + neighbors = {"group:puts_out_fire"}, + interval = 3, + chance = 2, + action = function(p0, node, _, _) + minetest.remove_node(p0) + minetest.sound_play("fire_extinguish_flame", + {pos = p0, max_hear_distance = 16, gain = 0.25}) + end, +}) + + +-- Enable the following ABMs according to 'disable fire' setting if minetest.setting_getbool("disable_fire") then - -- Extinguish flames quickly with dedicated ABM + -- Remove basic flames only minetest.register_abm({ nodenames = {"fire:basic_flame"}, - interval = 3, + interval = 7, chance = 2, action = function(p0, node, _, _) minetest.remove_node(p0) @@ -146,21 +196,7 @@ if minetest.setting_getbool("disable_fire") then else - -- Extinguish flames quickly with water, snow, ice - - minetest.register_abm({ - nodenames = {"fire:basic_flame"}, - neighbors = {"group:puts_out_fire"}, - interval = 3, - chance = 2, - action = function(p0, node, _, _) - minetest.remove_node(p0) - minetest.sound_play("fire_extinguish_flame", - {pos = p0, max_hear_distance = 16, gain = 0.25}) - end, - }) - - -- Ignite neighboring nodes + -- Ignite neighboring nodes, add basic flames minetest.register_abm({ nodenames = {"group:flammable"}, @@ -179,7 +215,7 @@ else end, }) - -- Remove flames and flammable nodes + -- Remove basic flames and flammable nodes minetest.register_abm({ nodenames = {"fire:basic_flame"}, From a88576afd1a27faf1a8036e2ed4c4b1e5c78ec90 Mon Sep 17 00:00:00 2001 From: Rui914 Date: Thu, 29 Oct 2015 00:41:15 +0900 Subject: [PATCH 53/73] Boats: Check player attached object --- mods/boats/init.lua | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/mods/boats/init.lua b/mods/boats/init.lua index e17d8b1b..a7e62e43 100644 --- a/mods/boats/init.lua +++ b/mods/boats/init.lua @@ -62,6 +62,14 @@ function boat.on_rightclick(self, clicker) clicker:setpos(pos) end) elseif not self.driver then + local attach = clicker:get_attach() + if attach and attach:get_luaentity() then + local luaentity = attach:get_luaentity() + if luaentity.driver then + luaentity.driver = nil + end + clicker:set_detach() + end self.driver = clicker clicker:set_attach(self.object, "", {x = 0, y = 11, z = -3}, {x = 0, y = 0, z = 0}) @@ -88,8 +96,7 @@ function boat.get_staticdata(self) end -function boat.on_punch(self, puncher, time_from_last_punch, - tool_capabilities, direction) +function boat.on_punch(self, puncher) if not puncher or not puncher:is_player() or self.removed then return end From 592ca341eaab496bfedeb62b2ae6c63f320c5b66 Mon Sep 17 00:00:00 2001 From: paramat Date: Tue, 3 Nov 2015 01:52:43 +0000 Subject: [PATCH 54/73] Default/mapgen: Tune biome points and biome depths --- mods/default/mapgen.lua | 104 ++++++++++++++++++++-------------------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua index 1cb31f5c..7bcfd3b2 100644 --- a/mods/default/mapgen.lua +++ b/mods/default/mapgen.lua @@ -335,7 +335,7 @@ function default.register_biomes() node_river_water = "default:ice", y_min = -8, y_max = 31000, - heat_point = -5, + heat_point = 5, humidity_point = 50, }) @@ -345,7 +345,7 @@ function default.register_biomes() node_top = "default:sand", depth_top = 1, node_filler = "default:sand", - depth_filler = 2, + depth_filler = 3, --node_stone = "", --node_water_top = "", --depth_water_top = , @@ -353,7 +353,7 @@ function default.register_biomes() --node_river_water = "", y_min = -112, y_max = -9, - heat_point = -5, + heat_point = 5, humidity_point = 50, }) @@ -365,7 +365,7 @@ function default.register_biomes() node_top = "default:dirt_with_snow", depth_top = 1, node_filler = "default:dirt", - depth_filler = 0, + depth_filler = 1, --node_stone = "", --node_water_top = "", --depth_water_top = , @@ -373,8 +373,8 @@ function default.register_biomes() --node_river_water = "", y_min = 2, y_max = 31000, - heat_point = 20, - humidity_point = 25, + heat_point = 15, + humidity_point = 30, }) minetest.register_biome({ @@ -383,7 +383,7 @@ function default.register_biomes() node_top = "default:sand", depth_top = 1, node_filler = "default:sand", - depth_filler = 2, + depth_filler = 3, --node_stone = "", --node_water_top = "", --depth_water_top = , @@ -391,8 +391,8 @@ function default.register_biomes() --node_river_water = "", y_min = -112, y_max = 1, - heat_point = 20, - humidity_point = 25, + heat_point = 15, + humidity_point = 30, }) @@ -402,7 +402,7 @@ function default.register_biomes() node_top = "default:snowblock", depth_top = 1, node_filler = "default:dirt", - depth_filler = 2, + depth_filler = 4, --node_stone = "", --node_water_top = "", --depth_water_top = , @@ -410,8 +410,8 @@ function default.register_biomes() --node_river_water = "", y_min = 2, y_max = 31000, - heat_point = 20, - humidity_point = 75, + heat_point = 15, + humidity_point = 70, }) minetest.register_biome({ @@ -420,7 +420,7 @@ function default.register_biomes() node_top = "default:sand", depth_top = 1, node_filler = "default:sand", - depth_filler = 2, + depth_filler = 3, --node_stone = "", --node_water_top = "", --depth_water_top = , @@ -428,8 +428,8 @@ function default.register_biomes() --node_river_water = "", y_min = -112, y_max = 1, - heat_point = 20, - humidity_point = 75, + heat_point = 15, + humidity_point = 70, }) -- Temperate @@ -440,7 +440,7 @@ function default.register_biomes() node_top = "default:dirt_with_grass", depth_top = 1, node_filler = "default:dirt", - depth_filler = 0, + depth_filler = 1, --node_stone = "", --node_water_top = "", --depth_water_top = , @@ -449,7 +449,7 @@ function default.register_biomes() y_min = 5, y_max = 31000, heat_point = 45, - humidity_point = 25, + humidity_point = 30, }) minetest.register_biome({ @@ -458,7 +458,7 @@ function default.register_biomes() node_top = "default:sand", depth_top = 1, node_filler = "default:sand", - depth_filler = 2, + depth_filler = 3, --node_stone = "", --node_water_top = "", --depth_water_top = , @@ -467,7 +467,7 @@ function default.register_biomes() y_min = -112, y_max = 4, heat_point = 45, - humidity_point = 25, + humidity_point = 30, }) @@ -477,7 +477,7 @@ function default.register_biomes() node_top = "default:dirt_with_grass", depth_top = 1, node_filler = "default:dirt", - depth_filler = 2, + depth_filler = 3, --node_stone = "", --node_water_top = "", --depth_water_top = , @@ -486,7 +486,7 @@ function default.register_biomes() y_min = 5, y_max = 31000, heat_point = 45, - humidity_point = 75, + humidity_point = 70, }) minetest.register_biome({ @@ -495,7 +495,7 @@ function default.register_biomes() node_top = "default:sand", depth_top = 1, node_filler = "default:sand", - depth_filler = 2, + depth_filler = 3, --node_stone = "", --node_water_top = "", --depth_water_top = , @@ -504,7 +504,7 @@ function default.register_biomes() y_min = -112, y_max = 4, heat_point = 45, - humidity_point = 75, + humidity_point = 70, }) @@ -514,7 +514,7 @@ function default.register_biomes() node_top = "default:dirt_with_grass", depth_top = 1, node_filler = "default:dirt", - depth_filler = 0, + depth_filler = 1, node_stone = "default:sandstone", --node_water_top = "", --depth_water_top = , @@ -522,8 +522,8 @@ function default.register_biomes() --node_river_water = "", y_min = 5, y_max = 31000, - heat_point = 70, - humidity_point = 25, + heat_point = 55, + humidity_point = 30, }) minetest.register_biome({ @@ -532,7 +532,7 @@ function default.register_biomes() node_top = "default:sand", depth_top = 1, node_filler = "default:sand", - depth_filler = 2, + depth_filler = 3, node_stone = "default:sandstone", --node_water_top = "", --depth_water_top = , @@ -540,8 +540,8 @@ function default.register_biomes() --node_river_water = "", y_min = -112, y_max = 4, - heat_point = 70, - humidity_point = 25, + heat_point = 55, + humidity_point = 30, }) @@ -551,7 +551,7 @@ function default.register_biomes() node_top = "default:dirt_with_grass", depth_top = 1, node_filler = "default:dirt", - depth_filler = 2, + depth_filler = 3, --node_stone = "", --node_water_top = "", --depth_water_top = , @@ -559,8 +559,8 @@ function default.register_biomes() --node_river_water = "", y_min = 1, y_max = 31000, - heat_point = 70, - humidity_point = 75, + heat_point = 55, + humidity_point = 70, }) minetest.register_biome({ @@ -569,7 +569,7 @@ function default.register_biomes() node_top = "default:dirt", depth_top = 1, node_filler = "default:dirt", - depth_filler = 2, + depth_filler = 3, --node_stone = "", --node_water_top = "", --depth_water_top = , @@ -577,8 +577,8 @@ function default.register_biomes() --node_river_water = "", y_min = -3, y_max = 0, - heat_point = 70, - humidity_point = 75, + heat_point = 55, + humidity_point = 70, }) minetest.register_biome({ @@ -587,7 +587,7 @@ function default.register_biomes() node_top = "default:sand", depth_top = 1, node_filler = "default:sand", - depth_filler = 2, + depth_filler = 3, --node_stone = "", --node_water_top = "", --depth_water_top = , @@ -595,8 +595,8 @@ function default.register_biomes() --node_river_water = "", y_min = -112, y_max = -4, - heat_point = 70, - humidity_point = 75, + heat_point = 55, + humidity_point = 70, }) -- Hot @@ -615,7 +615,7 @@ function default.register_biomes() --node_river_water = "", y_min = 5, y_max = 31000, - heat_point = 95, + heat_point = 85, humidity_point = 10, }) @@ -625,7 +625,7 @@ function default.register_biomes() node_top = "default:sand", depth_top = 1, node_filler = "default:sand", - depth_filler = 2, + depth_filler = 3, node_stone = "default:desert_stone", --node_water_top = "", --depth_water_top = , @@ -633,7 +633,7 @@ function default.register_biomes() --node_river_water = "", y_min = -112, y_max = 4, - heat_point = 95, + heat_point = 85, humidity_point = 10, }) @@ -652,7 +652,7 @@ function default.register_biomes() --node_river_water = "", y_min = 1, y_max = 31000, - heat_point = 95, + heat_point = 85, humidity_point = 50, }) @@ -662,7 +662,7 @@ function default.register_biomes() node_top = "default:dirt", depth_top = 1, node_filler = "default:dirt", - depth_filler = 2, + depth_filler = 3, --node_stone = "", --node_water_top = "", --depth_water_top = , @@ -670,7 +670,7 @@ function default.register_biomes() --node_river_water = "", y_min = -3, y_max = 0, - heat_point = 95, + heat_point = 85, humidity_point = 50, }) @@ -680,7 +680,7 @@ function default.register_biomes() node_top = "default:sand", depth_top = 1, node_filler = "default:sand", - depth_filler = 2, + depth_filler = 3, --node_stone = "", --node_water_top = "", --depth_water_top = , @@ -688,7 +688,7 @@ function default.register_biomes() --node_river_water = "", y_min = -112, y_max = -4, - heat_point = 95, + heat_point = 85, humidity_point = 50, }) @@ -699,7 +699,7 @@ function default.register_biomes() node_top = "default:dirt_with_grass", depth_top = 1, node_filler = "default:dirt", - depth_filler = 2, + depth_filler = 3, --node_stone = "", --node_water_top = "", --depth_water_top = , @@ -707,7 +707,7 @@ function default.register_biomes() --node_river_water = "", y_min = 1, y_max = 31000, - heat_point = 95, + heat_point = 85, humidity_point = 90, }) @@ -717,7 +717,7 @@ function default.register_biomes() node_top = "default:dirt", depth_top = 1, node_filler = "default:dirt", - depth_filler = 2, + depth_filler = 3, --node_stone = "", --node_water_top = "", --depth_water_top = , @@ -725,7 +725,7 @@ function default.register_biomes() --node_river_water = "", y_min = -3, y_max = 0, - heat_point = 95, + heat_point = 85, humidity_point = 90, }) @@ -735,7 +735,7 @@ function default.register_biomes() node_top = "default:sand", depth_top = 1, node_filler = "default:sand", - depth_filler = 2, + depth_filler = 3, --node_stone = "", --node_water_top = "", --depth_water_top = , @@ -743,7 +743,7 @@ function default.register_biomes() --node_river_water = "", y_min = -112, y_max = -4, - heat_point = 95, + heat_point = 85, humidity_point = 90, }) From 3d6f1685ad1396367b9cb6bce111208a9b6b660b Mon Sep 17 00:00:00 2001 From: paramat Date: Sat, 7 Nov 2015 04:12:55 +0000 Subject: [PATCH 55/73] Default/mapgen: Tune biome points for improved disribution Bring humidity points closer to reduce distortion of voronoi cells Slightly reduce size of hot and frozen biomes Improve location of glacier biomes Remove unnecessary snow nodeboxes from tundra to improve FPS Add missing dirt_with_snow to taiga --- mods/default/mapgen.lua | 64 ++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua index 7bcfd3b2..01f68ae1 100644 --- a/mods/default/mapgen.lua +++ b/mods/default/mapgen.lua @@ -335,7 +335,7 @@ function default.register_biomes() node_river_water = "default:ice", y_min = -8, y_max = 31000, - heat_point = 5, + heat_point = 0, humidity_point = 50, }) @@ -353,7 +353,7 @@ function default.register_biomes() --node_river_water = "", y_min = -112, y_max = -9, - heat_point = 5, + heat_point = 0, humidity_point = 50, }) @@ -361,7 +361,7 @@ function default.register_biomes() minetest.register_biome({ name = "tundra", - node_dust = "default:snow", + --node_dust = "", node_top = "default:dirt_with_snow", depth_top = 1, node_filler = "default:dirt", @@ -374,7 +374,7 @@ function default.register_biomes() y_min = 2, y_max = 31000, heat_point = 15, - humidity_point = 30, + humidity_point = 35, }) minetest.register_biome({ @@ -392,17 +392,17 @@ function default.register_biomes() y_min = -112, y_max = 1, heat_point = 15, - humidity_point = 30, + humidity_point = 35, }) minetest.register_biome({ name = "taiga", node_dust = "default:snow", - node_top = "default:snowblock", + node_top = "default:dirt_with_snow", depth_top = 1, node_filler = "default:dirt", - depth_filler = 4, + depth_filler = 3, --node_stone = "", --node_water_top = "", --depth_water_top = , @@ -411,7 +411,7 @@ function default.register_biomes() y_min = 2, y_max = 31000, heat_point = 15, - humidity_point = 70, + humidity_point = 65, }) minetest.register_biome({ @@ -429,7 +429,7 @@ function default.register_biomes() y_min = -112, y_max = 1, heat_point = 15, - humidity_point = 70, + humidity_point = 65, }) -- Temperate @@ -448,8 +448,8 @@ function default.register_biomes() --node_river_water = "", y_min = 5, y_max = 31000, - heat_point = 45, - humidity_point = 30, + heat_point = 40, + humidity_point = 35, }) minetest.register_biome({ @@ -466,8 +466,8 @@ function default.register_biomes() --node_river_water = "", y_min = -112, y_max = 4, - heat_point = 45, - humidity_point = 30, + heat_point = 40, + humidity_point = 35, }) @@ -485,8 +485,8 @@ function default.register_biomes() --node_river_water = "", y_min = 5, y_max = 31000, - heat_point = 45, - humidity_point = 70, + heat_point = 40, + humidity_point = 65, }) minetest.register_biome({ @@ -503,8 +503,8 @@ function default.register_biomes() --node_river_water = "", y_min = -112, y_max = 4, - heat_point = 45, - humidity_point = 70, + heat_point = 40, + humidity_point = 65, }) @@ -522,8 +522,8 @@ function default.register_biomes() --node_river_water = "", y_min = 5, y_max = 31000, - heat_point = 55, - humidity_point = 30, + heat_point = 60, + humidity_point = 35, }) minetest.register_biome({ @@ -540,8 +540,8 @@ function default.register_biomes() --node_river_water = "", y_min = -112, y_max = 4, - heat_point = 55, - humidity_point = 30, + heat_point = 60, + humidity_point = 35, }) @@ -559,8 +559,8 @@ function default.register_biomes() --node_river_water = "", y_min = 1, y_max = 31000, - heat_point = 55, - humidity_point = 70, + heat_point = 60, + humidity_point = 65, }) minetest.register_biome({ @@ -577,8 +577,8 @@ function default.register_biomes() --node_river_water = "", y_min = -3, y_max = 0, - heat_point = 55, - humidity_point = 70, + heat_point = 60, + humidity_point = 65, }) minetest.register_biome({ @@ -595,8 +595,8 @@ function default.register_biomes() --node_river_water = "", y_min = -112, y_max = -4, - heat_point = 55, - humidity_point = 70, + heat_point = 60, + humidity_point = 65, }) -- Hot @@ -616,7 +616,7 @@ function default.register_biomes() y_min = 5, y_max = 31000, heat_point = 85, - humidity_point = 10, + humidity_point = 20, }) minetest.register_biome({ @@ -634,7 +634,7 @@ function default.register_biomes() y_min = -112, y_max = 4, heat_point = 85, - humidity_point = 10, + humidity_point = 20, }) @@ -708,7 +708,7 @@ function default.register_biomes() y_min = 1, y_max = 31000, heat_point = 85, - humidity_point = 90, + humidity_point = 80, }) minetest.register_biome({ @@ -726,7 +726,7 @@ function default.register_biomes() y_min = -3, y_max = 0, heat_point = 85, - humidity_point = 90, + humidity_point = 80, }) minetest.register_biome({ @@ -744,7 +744,7 @@ function default.register_biomes() y_min = -112, y_max = -4, heat_point = 85, - humidity_point = 90, + humidity_point = 80, }) -- Underground From e67e28d226046bd50416999d924ddf9e6cd6de7d Mon Sep 17 00:00:00 2001 From: paramat Date: Mon, 9 Nov 2015 00:55:41 +0000 Subject: [PATCH 56/73] Default/mapgen: Fix missing taiga pine --- mods/default/mapgen.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua index 01f68ae1..0018d841 100644 --- a/mods/default/mapgen.lua +++ b/mods/default/mapgen.lua @@ -945,11 +945,11 @@ function default.register_decorations() rotation = "random", }) - -- Taiga and temperate forest pine tree + -- Taiga and temperate coniferous forest pine tree minetest.register_decoration({ deco_type = "schematic", - place_on = {"default:snowblock", "default:dirt_with_grass"}, + place_on = {"default:dirt_with_snow", "default:dirt_with_grass"}, sidelen = 16, noise_params = { offset = 0.04, From e41a411f1c948fa4bb79562ab9bf80a5bd757efe Mon Sep 17 00:00:00 2001 From: paramat Date: Thu, 5 Nov 2015 01:17:13 +0000 Subject: [PATCH 57/73] Default, fire: Disable catch-up in some ABMs To avoid processing spikes where catch-up is non-essential Disable in: Lavacooling, grass growing, grass removal and all fire mod ABMs --- mods/default/functions.lua | 4 ++++ mods/fire/init.lua | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/mods/default/functions.lua b/mods/default/functions.lua index 7ba71fec..ef4ea55b 100644 --- a/mods/default/functions.lua +++ b/mods/default/functions.lua @@ -105,6 +105,7 @@ minetest.register_abm({ neighbors = {"group:water"}, interval = 1, chance = 2, + catch_up = false, action = function(...) default.cool_lava_flowing(...) end, @@ -115,6 +116,7 @@ minetest.register_abm({ neighbors = {"group:water"}, interval = 1, chance = 2, + catch_up = false, action = function(...) default.cool_lava_source(...) end, @@ -313,6 +315,7 @@ minetest.register_abm({ nodenames = {"default:dirt"}, interval = 2, chance = 200, + catch_up = false, action = function(pos, node) local above = {x = pos.x, y = pos.y + 1, z = pos.z} local name = minetest.get_node(above).name @@ -338,6 +341,7 @@ minetest.register_abm({ nodenames = {"default:dirt_with_grass", "default:dirt_with_dry_grass"}, interval = 2, chance = 20, + catch_up = false, action = function(pos, node) local above = {x = pos.x, y = pos.y + 1, z = pos.z} local name = minetest.get_node(above).name diff --git a/mods/fire/init.lua b/mods/fire/init.lua index 7c65c5bb..fc55b8dd 100644 --- a/mods/fire/init.lua +++ b/mods/fire/init.lua @@ -171,6 +171,7 @@ minetest.register_abm({ neighbors = {"group:puts_out_fire"}, interval = 3, chance = 2, + catch_up = false, action = function(p0, node, _, _) minetest.remove_node(p0) minetest.sound_play("fire_extinguish_flame", @@ -189,6 +190,7 @@ if minetest.setting_getbool("disable_fire") then nodenames = {"fire:basic_flame"}, interval = 7, chance = 2, + catch_up = false, action = function(p0, node, _, _) minetest.remove_node(p0) end, @@ -203,6 +205,7 @@ else neighbors = {"group:igniter"}, interval = 7, chance = 16, + catch_up = false, action = function(p0, node, _, _) -- If there is water or stuff like that around node, don't ignite if fire.flame_should_extinguish(p0) then @@ -221,6 +224,7 @@ else nodenames = {"fire:basic_flame"}, interval = 5, chance = 16, + catch_up = false, action = function(p0, node, _, _) -- If there are no flammable nodes around flame, remove flame if not minetest.find_node_near(p0, 1, {"group:flammable"}) then From 1d8def5c06346aad7f400156be95f50b67ceee48 Mon Sep 17 00:00:00 2001 From: Rui Date: Wed, 11 Nov 2015 16:49:12 +0900 Subject: [PATCH 58/73] Beds: Make non pointable by pointable definition --- mods/beds/api.lua | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/mods/beds/api.lua b/mods/beds/api.lua index 9104ee77..dd4cfe36 100644 --- a/mods/beds/api.lua +++ b/mods/beds/api.lua @@ -13,12 +13,11 @@ function beds.register_bed(name, def) sounds = default.node_sound_wood_defaults(), node_box = { type = "fixed", - fixed = def.nodebox.bottom, + fixed = def.nodebox.bottom }, selection_box = { type = "fixed", - fixed = def.selectionbox, - + fixed = def.selectionbox }, after_place_node = function(pos, placer, itemstack) local n = minetest.get_node_or_nil(pos) @@ -89,16 +88,13 @@ function beds.register_bed(name, def) paramtype = "light", paramtype2 = "facedir", is_ground_content = false, + pointable = false, groups = {snappy = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, bed = 2}, sounds = default.node_sound_wood_defaults(), node_box = { type = "fixed", fixed = def.nodebox.top, - }, - selection_box = { - type = "fixed", - fixed = {0, 0, 0, 0, 0, 0}, - }, + } }) minetest.register_alias(name, name .. "_bottom") From 4ef68102989193ab562da38e2745d451ec4e2a0c Mon Sep 17 00:00:00 2001 From: paramat Date: Sat, 14 Nov 2015 05:10:38 +0000 Subject: [PATCH 59/73] Beds: Re-add commas at list ends --- mods/beds/api.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mods/beds/api.lua b/mods/beds/api.lua index dd4cfe36..6b72814d 100644 --- a/mods/beds/api.lua +++ b/mods/beds/api.lua @@ -13,11 +13,11 @@ function beds.register_bed(name, def) sounds = default.node_sound_wood_defaults(), node_box = { type = "fixed", - fixed = def.nodebox.bottom + fixed = def.nodebox.bottom, }, selection_box = { type = "fixed", - fixed = def.selectionbox + fixed = def.selectionbox, }, after_place_node = function(pos, placer, itemstack) local n = minetest.get_node_or_nil(pos) @@ -94,7 +94,7 @@ function beds.register_bed(name, def) node_box = { type = "fixed", fixed = def.nodebox.top, - } + }, }) minetest.register_alias(name, name .. "_bottom") From 0d49978341efaa07c182e503cd993e765c1ceb2b Mon Sep 17 00:00:00 2001 From: paramat Date: Sun, 15 Nov 2015 08:28:47 +0000 Subject: [PATCH 60/73] Default/mapgen: Use sidelen 16 for low density decorations The fixing of low density decorations allows returning to sidelen 16 for acacia trees and cacti, previously sidelen 80 was required for low density decorations to appear Also use sidelen 16 instead of 8 for mgv6 papyrus --- mods/default/mapgen.lua | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua index 0018d841..c914cc3e 100644 --- a/mods/default/mapgen.lua +++ b/mods/default/mapgen.lua @@ -783,7 +783,7 @@ function default.register_mgv6_decorations() minetest.register_decoration({ deco_type = "simple", place_on = {"default:dirt_with_grass"}, - sidelen = 8, + sidelen = 16, noise_params = { offset = -0.3, scale = 0.7, @@ -971,10 +971,10 @@ function default.register_decorations() minetest.register_decoration({ deco_type = "schematic", place_on = {"default:dirt_with_dry_grass"}, - sidelen = 80, + sidelen = 16, noise_params = { offset = 0, - scale = 0.003, + scale = 0.002, spread = {x = 250, y = 250, z = 250}, seed = 2, octaves = 3, @@ -993,7 +993,7 @@ function default.register_decorations() minetest.register_decoration({ deco_type = "schematic", place_on = {"default:desert_sand"}, - sidelen = 80, + sidelen = 16, noise_params = { offset = -0.0005, scale = 0.0015, @@ -1015,7 +1015,7 @@ function default.register_decorations() minetest.register_decoration({ deco_type = "simple", place_on = {"default:desert_sand"}, - sidelen = 80, + sidelen = 16, noise_params = { offset = -0.0005, scale = 0.0015, From 135d80eb8604721d103a2bdf9b402f3b466447c9 Mon Sep 17 00:00:00 2001 From: paramat Date: Mon, 23 Nov 2015 00:55:11 +0000 Subject: [PATCH 61/73] Default/trees: Make 'can grow' public to enable over-riding --- mods/default/trees.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/default/trees.lua b/mods/default/trees.lua index c6bb489d..51a7a2e6 100644 --- a/mods/default/trees.lua +++ b/mods/default/trees.lua @@ -6,7 +6,7 @@ local random = math.random -local function can_grow(pos) +function default.can_grow(pos) local node_under = minetest.get_node_or_nil({x = pos.x, y = pos.y - 1, z = pos.z}) if not node_under then return false @@ -32,7 +32,7 @@ minetest.register_abm({ interval = 10, chance = 50, action = function(pos, node) - if not can_grow(pos) then + if not default.can_grow(pos) then return end From abf0ca9c7ecff400ca23aebdaa34c2fc43e25458 Mon Sep 17 00:00:00 2001 From: paramat Date: Mon, 23 Nov 2015 01:07:28 +0000 Subject: [PATCH 62/73] Default/mapgen: Retune cactus density due to low density fix --- mods/default/mapgen.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua index c914cc3e..79a3c401 100644 --- a/mods/default/mapgen.lua +++ b/mods/default/mapgen.lua @@ -995,8 +995,8 @@ function default.register_decorations() place_on = {"default:desert_sand"}, sidelen = 16, noise_params = { - offset = -0.0005, - scale = 0.0015, + offset = -0.0003, + scale = 0.0009, spread = {x = 200, y = 200, z = 200}, seed = 230, octaves = 3, @@ -1017,8 +1017,8 @@ function default.register_decorations() place_on = {"default:desert_sand"}, sidelen = 16, noise_params = { - offset = -0.0005, - scale = 0.0015, + offset = -0.0003, + scale = 0.0009, spread = {x = 200, y = 200, z = 200}, seed = 230, octaves = 3, From b8333cf82a43d40fd06d6bd286959654e35d9c79 Mon Sep 17 00:00:00 2001 From: "jeanpatrick.guerrero@gmail.com" Date: Sat, 28 Nov 2015 17:29:46 +0100 Subject: [PATCH 63/73] Speed-up creative inventory initializing (~10x faster) --- mods/creative/init.lua | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/mods/creative/init.lua b/mods/creative/init.lua index 68d5180e..7bcf687f 100644 --- a/mods/creative/init.lua +++ b/mods/creative/init.lua @@ -39,14 +39,12 @@ minetest.after(0, function() for name,def in pairs(minetest.registered_items) do if (not def.groups.not_in_creative_inventory or def.groups.not_in_creative_inventory == 0) and def.description and def.description ~= "" then - table.insert(creative_list, name) + creative_list[#creative_list+1] = name end end table.sort(creative_list) inv:set_size("main", #creative_list) - for _,itemstring in ipairs(creative_list) do - inv:add_item("main", ItemStack(itemstring)) - end + inv:set_list("main", creative_list) creative_inventory.creative_inventory_size = #creative_list --print("creative inventory size: "..dump(creative_inventory.creative_inventory_size)) end) From 25e1f84733178b5e596b59cc171f5fbca28bfd45 Mon Sep 17 00:00:00 2001 From: paramat Date: Sun, 6 Dec 2015 21:26:55 +0000 Subject: [PATCH 64/73] Default: Remove root from mapgen trees and large cactus --- mods/default/schematics/acacia_tree.mts | Bin 204 -> 204 bytes mods/default/schematics/apple_tree.mts | Bin 161 -> 163 bytes mods/default/schematics/large_cactus.mts | Bin 94 -> 92 bytes mods/default/schematics/pine_tree.mts | Bin 175 -> 177 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/mods/default/schematics/acacia_tree.mts b/mods/default/schematics/acacia_tree.mts index 4732ade3d9df99c4f543ad168dc090e551cfdee5..ec7d5f9a539030e474682d24f76fe1b466fa36e7 100644 GIT binary patch delta 68 zcmV-K0K5Op0n7oARRef*Ymrz!HX*{ep delta 31 ncmZ3?xR7x|r^J7r7cTp1_S*P(*4h;=oA7j+BM-x;9Jz@A+f5Cw diff --git a/mods/default/schematics/large_cactus.mts b/mods/default/schematics/large_cactus.mts index b71077b3c5a0f397aade8d76cbe2f0a081d80b9f..43555b962f7bdb0e13a16b5ede7c1fafe9be97c4 100644 GIT binary patch delta 35 qcma!xnP4Y(MOpZ30z=Bx+svHRD_S^=6q(o@#9A1-85!z5IdlQsV+xZ1 delta 37 tcma!vn_#E#hh6Y%z#=)GhBZ~y3W@wv1sv5}4ltZ(5=by)Sm?>I761dX4H*Cc diff --git a/mods/default/schematics/pine_tree.mts b/mods/default/schematics/pine_tree.mts index 3a3fa7ad0e7f7c3bbd3282856d1985734b62d702..576a2dfb79acfa829190dd5358c04693b9acabc4 100644 GIT binary patch delta 41 xcmZ3_xRG%}zfyzbf5VO{1;&tH`{m@tbGYuPoVwe@9H1WK#wg0bkiN>e7XU{W4wC=? delta 39 xcmV+?0NDSr0j~j&k0AWVPSgVlpwj>K__$zG;3iS-794;&;W7%S004fuG!25t5y}7n From c66a98bbedac2e08e57b3efae9ecf0ee4219c17f Mon Sep 17 00:00:00 2001 From: paramat Date: Sun, 6 Dec 2015 03:09:29 +0000 Subject: [PATCH 65/73] Default: Slightly reduce alpha of water post effect colour To make water a little clearer and feel purer Also correct lava alpha values from 192 to 191 --- mods/default/nodes.lua | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mods/default/nodes.lua b/mods/default/nodes.lua index f7e40181..aecbd357 100644 --- a/mods/default/nodes.lua +++ b/mods/default/nodes.lua @@ -1027,7 +1027,7 @@ minetest.register_node("default:water_source", { liquid_alternative_flowing = "default:water_flowing", liquid_alternative_source = "default:water_source", liquid_viscosity = 1, - post_effect_color = {a = 120, r = 30, g = 60, b = 90}, + post_effect_color = {a = 103, r = 30, g = 60, b = 90}, groups = {water = 3, liquid = 3, puts_out_fire = 1}, }) @@ -1072,7 +1072,7 @@ minetest.register_node("default:water_flowing", { liquid_alternative_flowing = "default:water_flowing", liquid_alternative_source = "default:water_source", liquid_viscosity = 1, - post_effect_color = {a = 120, r = 30, g = 60, b = 90}, + post_effect_color = {a = 103, r = 30, g = 60, b = 90}, groups = {water = 3, liquid = 3, puts_out_fire = 1, not_in_creative_inventory = 1}, }) @@ -1120,7 +1120,7 @@ minetest.register_node("default:river_water_source", { liquid_viscosity = 1, liquid_renewable = false, liquid_range = 2, - post_effect_color = {a = 120, r = 30, g = 76, b = 90}, + post_effect_color = {a = 103, r = 30, g = 76, b = 90}, groups = {water = 3, liquid = 3, puts_out_fire = 1}, }) @@ -1167,7 +1167,7 @@ minetest.register_node("default:river_water_flowing", { liquid_viscosity = 1, liquid_renewable = false, liquid_range = 2, - post_effect_color = {a = 120, r = 30, g = 76, b = 90}, + post_effect_color = {a = 103, r = 30, g = 76, b = 90}, groups = {water = 3, liquid = 3, puts_out_fire = 1, not_in_creative_inventory = 1}, }) @@ -1216,7 +1216,7 @@ minetest.register_node("default:lava_source", { liquid_viscosity = 7, liquid_renewable = false, damage_per_second = 4 * 2, - post_effect_color = {a = 192, r = 255, g = 64, b = 0}, + post_effect_color = {a = 191, r = 255, g = 64, b = 0}, groups = {lava = 3, liquid = 2, hot = 3, igniter = 1}, }) @@ -1263,7 +1263,7 @@ minetest.register_node("default:lava_flowing", { liquid_viscosity = 7, liquid_renewable = false, damage_per_second = 4 * 2, - post_effect_color = {a = 192, r = 255, g = 64, b = 0}, + post_effect_color = {a = 191, r = 255, g = 64, b = 0}, groups = {lava = 3, liquid = 2, hot = 3, igniter = 1, not_in_creative_inventory = 1}, }) From b57ecb94df2bfc1c6383a3d35465e22b683821ee Mon Sep 17 00:00:00 2001 From: Auke Kok Date: Mon, 7 Dec 2015 16:29:33 -0800 Subject: [PATCH 66/73] Add a separate image for a written book. Since written books are quite different from empty books, the visual clue that they are different items is really needed in-game. I've added a "clasp" or "belt-with-buckle" like element to the png from default_book, keeping them very similar but also immediately recgnizably different. I added the new texture to blockmen's license list since it's obviously derivative of his work. The PNG was run through a minimizer/optimizer to save space. --- mods/default/README.txt | 3 +++ mods/default/craftitems.lua | 2 +- mods/default/textures/default_book_written.png | Bin 0 -> 228 bytes 3 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 mods/default/textures/default_book_written.png diff --git a/mods/default/README.txt b/mods/default/README.txt index f0dea682..5b07a36c 100644 --- a/mods/default/README.txt +++ b/mods/default/README.txt @@ -148,6 +148,9 @@ BlockMen (CC BY-SA 3.0): heart.png gui_*.png +sofar (CC BY-SA 3.0): + default_book_written.png, based on default_book.png + Neuromancer (CC BY-SA 2.0): default_cobble.png, based on texture by Brane praefect default_mossycobble.png, based on texture by Brane praefect diff --git a/mods/default/craftitems.lua b/mods/default/craftitems.lua index c41129d3..bbe11f52 100644 --- a/mods/default/craftitems.lua +++ b/mods/default/craftitems.lua @@ -82,7 +82,7 @@ minetest.register_craftitem("default:book", { minetest.register_craftitem("default:book_written", { description = "Book With Text", - inventory_image = "default_book.png", + inventory_image = "default_book_written.png", groups = {book=1, not_in_creative_inventory=1}, stack_max = 1, on_use = book_on_use, diff --git a/mods/default/textures/default_book_written.png b/mods/default/textures/default_book_written.png new file mode 100644 index 0000000000000000000000000000000000000000..d843e5f6d7c7cc0a7a0740aed086390f33713d7e GIT binary patch literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRt!VDzU8V$b#Dct~{5LX~=r@>Yh!0T_wQ4_>< z`TF_2ySHuGvSR9l+S@m-tXn&O?#%WGYtHv?Ud))(`Ssg7R-gvPk|4ie28U-i(tw;) zPZ!4!j_b(>_*hsMY?-9gk;HPzk4a(Q#tDl%lmZ+)E7o-_n8eV$VDhYwDypuGYzvjW z&hyB+N=vjP%@OH!JuEFD;q5BZdQ`gc))FSy)`MzBdc4AIGj#R_3M8>FX1GwIlAXxF Y@W+}@MPN@vC(uF$Pgg&ebxsLQ07*AZ#Q*>R literal 0 HcmV?d00001 From a1b8b68e92ac37e767f9ae0f8b88691039fd3141 Mon Sep 17 00:00:00 2001 From: paramat Date: Tue, 15 Dec 2015 04:06:09 +0000 Subject: [PATCH 67/73] Default/mapgen: Re-add grassy sand dune biomes --- mods/default/mapgen.lua | 64 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 60 insertions(+), 4 deletions(-) diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua index 79a3c401..886abe73 100644 --- a/mods/default/mapgen.lua +++ b/mods/default/mapgen.lua @@ -446,12 +446,30 @@ function default.register_biomes() --depth_water_top = , --node_water = "", --node_river_water = "", - y_min = 5, + y_min = 6, y_max = 31000, heat_point = 40, humidity_point = 35, }) + minetest.register_biome({ + name = "stone_grassland_dunes", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 2, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + y_min = 5, + y_max = 5, + heat_point = 40, + humidity_point = 35, + }) + minetest.register_biome({ name = "stone_grassland_ocean", --node_dust = "", @@ -483,12 +501,30 @@ function default.register_biomes() --depth_water_top = , --node_water = "", --node_river_water = "", - y_min = 5, + y_min = 6, y_max = 31000, heat_point = 40, humidity_point = 65, }) + minetest.register_biome({ + name = "coniferous_forest_dunes", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + y_min = 5, + y_max = 5, + heat_point = 40, + humidity_point = 65, + }) + minetest.register_biome({ name = "coniferous_forest_ocean", --node_dust = "", @@ -520,12 +556,30 @@ function default.register_biomes() --depth_water_top = , --node_water = "", --node_river_water = "", - y_min = 5, + y_min = 6, y_max = 31000, heat_point = 60, humidity_point = 35, }) + minetest.register_biome({ + name = "sandstone_grassland_dunes", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 2, + node_stone = "default:sandstone", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + y_min = 5, + y_max = 5, + heat_point = 60, + humidity_point = 35, + }) + minetest.register_biome({ name = "sandstone_grassland_ocean", --node_dust = "", @@ -879,7 +933,9 @@ local function register_grass_decoration(offset, scale, length) persist = 0.6 }, biomes = {"stone_grassland", "sandstone_grassland", - "deciduous_forest", "coniferous_forest"}, + "deciduous_forest", "coniferous_forest", + "stone_grassland_dunes", "sandstone_grassland_dunes", + "coniferous_forest_dunes"}, y_min = 1, y_max = 31000, decoration = "default:grass_"..length, From c3a1545ca1dda4b94bfecc281097ab0cdc3e565b Mon Sep 17 00:00:00 2001 From: paramat Date: Fri, 18 Dec 2015 05:23:45 +0000 Subject: [PATCH 68/73] Default/mapgen: Correct spelling of 'noise threshhold' in 'register ore' --- mods/default/mapgen.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua index 886abe73..152125a8 100644 --- a/mods/default/mapgen.lua +++ b/mods/default/mapgen.lua @@ -57,7 +57,7 @@ function default.register_ores() clust_size = 5, y_min = -15, y_max = 0, - noise_threshhold = 0.0, + noise_threshold = 0.0, noise_params = { offset = 0.5, scale = 0.2, @@ -78,7 +78,7 @@ function default.register_ores() clust_size = 5, y_min = -31, y_max = 4, - noise_threshhold = 0.0, + noise_threshold = 0.0, noise_params = { offset = 0.5, scale = 0.2, @@ -99,7 +99,7 @@ function default.register_ores() clust_size = 5, y_min = -31, y_max = 31000, - noise_threshhold = 0.0, + noise_threshold = 0.0, noise_params = { offset = 0.5, scale = 0.2, @@ -120,7 +120,7 @@ function default.register_ores() clust_size = 5, y_min = -31000, y_max = 31000, - noise_threshhold = 0.0, + noise_threshold = 0.0, noise_params = { offset = 0.5, scale = 0.2, From 8704afe5b1683d8e10929aee20dea8f8580144e7 Mon Sep 17 00:00:00 2001 From: paramat Date: Fri, 18 Dec 2015 07:08:37 +0000 Subject: [PATCH 69/73] Flowers/mapgen: Slightly more flowers in mgv5/v7/flat/fractal --- mods/flowers/mapgen.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/flowers/mapgen.lua b/mods/flowers/mapgen.lua index 86ecdac9..51525c74 100644 --- a/mods/flowers/mapgen.lua +++ b/mods/flowers/mapgen.lua @@ -87,8 +87,8 @@ local function register_flower(seed, name) place_on = {"default:dirt_with_grass"}, sidelen = 16, noise_params = { - offset = -0.02, - scale = 0.03, + offset = -0.015, + scale = 0.025, spread = {x = 200, y = 200, z = 200}, seed = seed, octaves = 3, From eaed418b10ad25a4269219384ba96811f754cc24 Mon Sep 17 00:00:00 2001 From: paramat Date: Sat, 19 Dec 2015 15:32:41 +0000 Subject: [PATCH 70/73] Ores: Allow dirt and sand blob ore in sandstone, desert stone Re-align parameter format in 'register ore' --- mods/default/mapgen.lua | 65 +++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 32 deletions(-) diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua index 152125a8..7c3c20b9 100644 --- a/mods/default/mapgen.lua +++ b/mods/default/mapgen.lua @@ -50,15 +50,15 @@ function default.register_ores() -- Clay minetest.register_ore({ - ore_type = "blob", - ore = "default:clay", - wherein = {"default:sand"}, - clust_scarcity = 16 * 16 * 16, - clust_size = 5, - y_min = -15, - y_max = 0, + ore_type = "blob", + ore = "default:clay", + wherein = {"default:sand"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_min = -15, + y_max = 0, noise_threshold = 0.0, - noise_params = { + noise_params = { offset = 0.5, scale = 0.2, spread = {x = 5, y = 5, z = 5}, @@ -71,15 +71,16 @@ function default.register_ores() -- Sand minetest.register_ore({ - ore_type = "blob", - ore = "default:sand", - wherein = {"default:stone"}, - clust_scarcity = 16 * 16 * 16, - clust_size = 5, - y_min = -31, - y_max = 4, + ore_type = "blob", + ore = "default:sand", + wherein = {"default:stone", "default:sandstone", + "default:desert_stone"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_min = -31, + y_max = 4, noise_threshold = 0.0, - noise_params = { + noise_params = { offset = 0.5, scale = 0.2, spread = {x = 5, y = 5, z = 5}, @@ -92,15 +93,15 @@ function default.register_ores() -- Dirt minetest.register_ore({ - ore_type = "blob", - ore = "default:dirt", - wherein = {"default:stone"}, - clust_scarcity = 16 * 16 * 16, - clust_size = 5, - y_min = -31, - y_max = 31000, + ore_type = "blob", + ore = "default:dirt", + wherein = {"default:stone", "default:sandstone"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_min = -31, + y_max = 31000, noise_threshold = 0.0, - noise_params = { + noise_params = { offset = 0.5, scale = 0.2, spread = {x = 5, y = 5, z = 5}, @@ -113,15 +114,15 @@ function default.register_ores() -- Gravel minetest.register_ore({ - ore_type = "blob", - ore = "default:gravel", - wherein = {"default:stone"}, - clust_scarcity = 16 * 16 * 16, - clust_size = 5, - y_min = -31000, - y_max = 31000, + ore_type = "blob", + ore = "default:gravel", + wherein = {"default:stone"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_min = -31000, + y_max = 31000, noise_threshold = 0.0, - noise_params = { + noise_params = { offset = 0.5, scale = 0.2, spread = {x = 5, y = 5, z = 5}, From b1e2ece63842ff5228798feb9259398c75524f8b Mon Sep 17 00:00:00 2001 From: "jeanpatrick.guerrero@gmail.com" Date: Mon, 7 Dec 2015 11:36:40 +0100 Subject: [PATCH 71/73] Add a search field to the creative inventory --- mods/creative/init.lua | 96 ++++++++++++++++++++++++++++-------------- 1 file changed, 64 insertions(+), 32 deletions(-) diff --git a/mods/creative/init.lua b/mods/creative/init.lua index 7bcf687f..8e6eda95 100644 --- a/mods/creative/init.lua +++ b/mods/creative/init.lua @@ -1,11 +1,16 @@ -- minetest/creative/init.lua creative_inventory = {} -creative_inventory.creative_inventory_size = 0 -- Create detached creative inventory after loading all mods -minetest.after(0, function() - local inv = minetest.create_detached_inventory("creative", { +creative_inventory.init_creative_inventory = function(player) + local player_name = player:get_player_name() + creative_inventory[player_name] = {} + creative_inventory[player_name].size = 0 + creative_inventory[player_name].filter = nil + creative_inventory[player_name].start_i = 1 + + local inv = minetest.create_detached_inventory("creative_" .. player_name, { allow_move = function(inv, from_list, from_index, to_list, to_index, count, player) if minetest.setting_getbool("creative_mode") then return count @@ -35,19 +40,29 @@ minetest.after(0, function() end end, }) + + creative_inventory.update(player_name, nil) + --print("creative inventory size: "..dump(creative_inventory.creative_inventory_size)) +end + +function creative_inventory.update(player_name, filter) local creative_list = {} - for name,def in pairs(minetest.registered_items) do - if (not def.groups.not_in_creative_inventory or def.groups.not_in_creative_inventory == 0) - and def.description and def.description ~= "" then - creative_list[#creative_list+1] = name + local inv = minetest.get_inventory({type = "detached", name = "creative_" .. player_name}) + + for name, def in pairs(minetest.registered_items) do + if not (def.groups.not_in_creative_inventory == 1) and + def.description and def.description ~= "" then + if (filter and def.name:find(filter, 1, true)) or not filter then + creative_list[#creative_list+1] = name + end end end + table.sort(creative_list) inv:set_size("main", #creative_list) inv:set_list("main", creative_list) - creative_inventory.creative_inventory_size = #creative_list - --print("creative inventory size: "..dump(creative_inventory.creative_inventory_size)) -end) + creative_inventory[player_name].size = #creative_list +end -- Create the trash field local trash = minetest.create_detached_inventory("creative_trash", { @@ -66,10 +81,12 @@ local trash = minetest.create_detached_inventory("creative_trash", { }) trash:set_size("main", 1) - creative_inventory.set_creative_formspec = function(player, start_i, pagenum) + local player_name = player:get_player_name() + local filter = creative_inventory[player_name].filter or "" pagenum = math.floor(pagenum) - local pagemax = math.floor((creative_inventory.creative_inventory_size-1) / (6*4) + 1) + local pagemax = math.floor((creative_inventory[player_name].size - 1) / (6*4) + 1) + player:set_inventory_formspec( "size[13,7.5]".. --"image[6,0.6;1,2;player.png]".. @@ -81,51 +98,67 @@ creative_inventory.set_creative_formspec = function(player, start_i, pagenum) "list[current_player;craft;8,0;3,3;]".. "list[current_player;craftpreview;12,1;1,1;]".. "image[11,1;1,1;gui_furnace_arrow_bg.png^[transformR270]".. - "list[detached:creative;main;0.3,0.5;4,6;"..tostring(start_i).."]".. - "label[2.0,6.55;"..tostring(pagenum).."/"..tostring(pagemax).."]".. - "button[0.3,6.5;1.6,1;creative_prev;<<]".. - "button[2.7,6.5;1.6,1;creative_next;>>]".. + "list[detached:creative_" .. player_name .. ";main;0.05,1;4,6;" .. tostring(start_i) .. "]".. + "tablecolumns[color;text;color;text]".. + "tableoptions[background=#00000000;highlight=#00000000;border=false]".. + "table[1.4,7.2;1.1,0.5;pagenum;#FFFF00," .. tostring(pagenum) .. ",#FFFFFF,/ " .. tostring(pagemax) .. "]".. + "button[0,7;1,1;creative_prev;<<]".. + "button[3.08,7;1,1;creative_next;>>]".. + "button[2.55,0.2;0.8,0.5;search;?]".. + "button[3.3,0.2;0.8,0.5;clear;X]".. + "tooltip[search;Search]".. + "tooltip[clear;Reset]".. "listring[current_player;main]".. "listring[current_player;craft]".. "listring[current_player;main]".. - "listring[detached:creative;main]".. + "listring[detached:creative_" .. player_name .. ";main]".. "label[5,1.5;Trash:]".. "list[detached:creative_trash;main;5,2;1,1;]".. + "field[0.3,0.3;2.6,1;filter;;" .. filter .. "]".. default.get_hotbar_bg(5,3.5) ) end + minetest.register_on_joinplayer(function(player) -- If in creative mode, modify player's inventory forms if not minetest.setting_getbool("creative_mode") then return end + creative_inventory.init_creative_inventory(player) creative_inventory.set_creative_formspec(player, 0, 1) end) + minetest.register_on_player_receive_fields(function(player, formname, fields) if not minetest.setting_getbool("creative_mode") then return end -- Figure out current page from formspec local current_page = 0 + local player_name = player:get_player_name() local formspec = player:get_inventory_formspec() - local start_i = string.match(formspec, "list%[detached:creative;main;[%d.]+,[%d.]+;[%d.]+,[%d.]+;(%d+)%]") + local start_i = formspec:match("list%[detached:creative_" .. player_name .. ";main;[%d.]+,[%d.]+;[%d.]+,[%d.]+;(%d+)%]") start_i = tonumber(start_i) or 0 - if fields.creative_prev then + if fields.creative_prev or start_i >= creative_inventory[player_name].size then start_i = start_i - 4*6 - end - if fields.creative_next then + elseif fields.creative_next or start_i < 0 then start_i = start_i + 4*6 end - if start_i < 0 then - start_i = start_i + 4*6 + if fields.search or fields.clear then + if fields.clear then + creative_inventory[player_name].filter = "" + creative_inventory.update(player_name, nil) + else + creative_inventory[player_name].filter = fields.filter:lower() + creative_inventory.update(player_name, fields.filter:lower()) + end + minetest.after(0, function() + creative_inventory.set_creative_formspec(player, 0, 1) + end) end - if start_i >= creative_inventory.creative_inventory_size then - start_i = start_i - 4*6 - end - - if start_i < 0 or start_i >= creative_inventory.creative_inventory_size then + + if start_i < 0 or start_i >= creative_inventory[player_name].size then start_i = 0 end @@ -152,18 +185,18 @@ if minetest.setting_getbool("creative_mode") then damage_groups = {fleshy = 10}, } }) - + minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack) return true end) - + function minetest.handle_node_drops(pos, drops, digger) if not digger or not digger:is_player() then return end local inv = digger:get_inventory() if inv then - for _,item in ipairs(drops) do + for _, item in ipairs(drops) do item = ItemStack(item):get_name() if not inv:contains_item("main", item) then inv:add_item("main", item) @@ -171,5 +204,4 @@ if minetest.setting_getbool("creative_mode") then end end end - end From 82299b94dc6f661e0b97e6f747dee8c250a70aa8 Mon Sep 17 00:00:00 2001 From: Auke Kok Date: Thu, 24 Dec 2015 12:41:52 -0800 Subject: [PATCH 72/73] Verify node type is facedir. This prevents nodes that are not of the "facedir" paramtype2, as these are generally not expected to be able to rotate. Mods and other methods may still manipulate param2 of these nodes as expected. Addresses #712 --- mods/screwdriver/init.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mods/screwdriver/init.lua b/mods/screwdriver/init.lua index 0c77754e..34b4b4a8 100644 --- a/mods/screwdriver/init.lua +++ b/mods/screwdriver/init.lua @@ -35,6 +35,10 @@ local function screwdriver_handler(itemstack, user, pointed_thing, mode) local node = minetest.get_node(pos) local ndef = minetest.registered_nodes[node.name] + -- verify node is facedir (expected to be rotatable) + if ndef.paramtype2 ~= "facedir" then + return + end -- Compute param2 local rotationPart = node.param2 % 32 -- get first 4 bits local preservePart = node.param2 - rotationPart From 32bdb9a393754464d9baece64e1a3e93d0e29981 Mon Sep 17 00:00:00 2001 From: Auke Kok Date: Mon, 14 Dec 2015 23:53:27 -0800 Subject: [PATCH 73/73] Remove spores from mushrooms. These have almost no value gameplay wise. Mushrooms spread by their very nature into appropriate soil nearby, and harvesting spores is something only scientists do. Actual mushroom farmers leave a few mushrooms and put on more manure, and keep the light off. Modify the growth ABM to test for light levels and attempt to plant a similar mushroom nearby (+/- 2 x,z, +/- y). Light at both source and destination needs to be low enough. I've tuned it to be 3-4 spaces from a torch. Mushrooms will die in full sunlight, but they can survive under trees and may grow out at night anywhere. Removed obsolete textures. Remove unused nodes and provide aliases for them. Aliased obsolete nodes so no unknown item nodes appear. Mushrooms die only in full sunlight (light level 15). --- mods/flowers/init.lua | 164 +++++++----------- .../flowers_mushroom_spores_brown.png | Bin 94 -> 0 bytes .../textures/flowers_mushroom_spores_red.png | Bin 92 -> 0 bytes 3 files changed, 64 insertions(+), 100 deletions(-) delete mode 100644 mods/flowers/textures/flowers_mushroom_spores_brown.png delete mode 100644 mods/flowers/textures/flowers_mushroom_spores_red.png diff --git a/mods/flowers/init.lua b/mods/flowers/init.lua index e8899efd..dd8e031d 100644 --- a/mods/flowers/init.lua +++ b/mods/flowers/init.lua @@ -124,120 +124,84 @@ minetest.register_abm({ -- Mushrooms -- -local mushrooms_datas = { - {"brown", 2}, - {"red", -6} -} +minetest.register_node("flowers:mushroom_red", { + description = "Red Mushroom", + tiles = {"flowers_mushroom_red.png"}, + inventory_image = "flowers_mushroom_red.png", + wield_image = "flowers_mushroom_red.png", + drawtype = "plantlike", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flammable = 3, attached_node = 1}, + sounds = default.node_sound_leaves_defaults(), + on_use = minetest.item_eat(-5), + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3} + } +}) -for _, m in pairs(mushrooms_datas) do - local name, nut = m[1], m[2] - - -- Register fertile mushrooms - - -- These are placed by mapgen and the growing ABM. - -- These drop an infertile mushroom, and 0 to 3 spore - -- nodes with an average of 1.25 per mushroom, for - -- a slow multiplication of mushrooms when farming. - - minetest.register_node("flowers:mushroom_fertile_" .. name, { - description = string.sub(string.upper(name), 0, 1) .. - string.sub(name, 2) .. " Fertile Mushroom", - tiles = {"flowers_mushroom_" .. name .. ".png"}, - inventory_image = "flowers_mushroom_" .. name .. ".png", - wield_image = "flowers_mushroom_" .. name .. ".png", - drawtype = "plantlike", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - buildable_to = true, - groups = {snappy = 3, flammable = 3, attached_node = 1, - not_in_creative_inventory = 1}, - drop = { - items = { - {items = {"flowers:mushroom_" .. name}}, - {items = {"flowers:mushroom_spores_" .. name}, rarity = 4}, - {items = {"flowers:mushroom_spores_" .. name}, rarity = 2}, - {items = {"flowers:mushroom_spores_" .. name}, rarity = 2} - } - }, - sounds = default.node_sound_leaves_defaults(), - on_use = minetest.item_eat(nut), - selection_box = { - type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3} - } - }) - - -- Register infertile mushrooms - - -- These do not drop spores, to avoid the use of repeated digging - -- and placing of a single mushroom to generate unlimited spores. - - minetest.register_node("flowers:mushroom_" .. name, { - description = string.sub(string.upper(name), 0, 1) .. - string.sub(name, 2) .. " Mushroom", - tiles = {"flowers_mushroom_" .. name .. ".png"}, - inventory_image = "flowers_mushroom_" .. name .. ".png", - wield_image = "flowers_mushroom_" .. name .. ".png", - drawtype = "plantlike", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - buildable_to = true, - groups = {snappy = 3, flammable = 3, attached_node = 1}, - sounds = default.node_sound_leaves_defaults(), - on_use = minetest.item_eat(nut), - selection_box = { - type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3} - } - }) - - -- Register mushroom spores - - minetest.register_node("flowers:mushroom_spores_" .. name, { - description = string.sub(string.upper(name), 0, 1) .. - string.sub(name, 2) .. " Mushroom Spores", - drawtype = "signlike", - tiles = {"flowers_mushroom_spores_" .. name .. ".png"}, - inventory_image = "flowers_mushroom_spores_" .. name .. ".png", - wield_image = "flowers_mushroom_spores_" .. name .. ".png", - paramtype = "light", - paramtype2 = "wallmounted", - sunlight_propagates = true, - walkable = false, - buildable_to = true, - selection_box = { - type = "wallmounted", - }, - groups = {dig_immediate = 3, attached_node = 1}, - }) -end - - --- Register growing ABM +minetest.register_node("flowers:mushroom_brown", { + description = "Brown Mushroom", + tiles = {"flowers_mushroom_brown.png"}, + inventory_image = "flowers_mushroom_brown.png", + wield_image = "flowers_mushroom_brown.png", + drawtype = "plantlike", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flammable = 3, attached_node = 1}, + sounds = default.node_sound_leaves_defaults(), + on_use = minetest.item_eat(1), + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3} + } +}) +-- mushroom spread and death minetest.register_abm({ - nodenames = {"flowers:mushroom_spores_brown", "flowers:mushroom_spores_red"}, + nodenames = {"flowers:mushroom_brown", "flowers:mushroom_red"}, interval = 11, chance = 50, action = function(pos, node) - local node_under = minetest.get_node_or_nil({x = pos.x, - y = pos.y - 1, z = pos.z}) + if minetest.get_node_light(pos, nil) == 15 then + minetest.remove_node(pos) + end + local random = { + x = pos.x + math.random(-2,2), + y = pos.y + math.random(-1,1), + z = pos.z + math.random(-2,2) + } + local random_node = minetest.get_node_or_nil(random) + if not random_node then + return + end + if random_node.name ~= "air" then + return + end + local node_under = minetest.get_node_or_nil({x = random.x, + y = random.y - 1, z = random.z}) if not node_under then return end if minetest.get_item_group(node_under.name, "soil") ~= 0 and - minetest.get_node_light(pos, nil) <= 13 then - if node.name == "flowers:mushroom_spores_brown" then - minetest.set_node(pos, {name = "flowers:mushroom_fertile_brown"}) - elseif node.name == "flowers:mushroom_spores_red" then - minetest.set_node(pos, {name = "flowers:mushroom_fertile_red"}) - end + minetest.get_node_light(pos, nil) <= 9 and + minetest.get_node_light(random, nil) <= 9 then + minetest.set_node(random, {name = node.name}) end end }) +-- these old mushroom related nodes can be simplified now +minetest.register_alias("flowers:mushroom_spores_brown", "flowers:mushroom_brown") +minetest.register_alias("flowers:mushroom_spores_red", "flowers:mushroom_red") +minetest.register_alias("flowers:mushroom_fertile_brown", "flowers:mushroom_brown") +minetest.register_alias("flowers:mushroom_fertile_red", "flowers:mushroom_red") + -- -- Waterlily diff --git a/mods/flowers/textures/flowers_mushroom_spores_brown.png b/mods/flowers/textures/flowers_mushroom_spores_brown.png deleted file mode 100644 index a0818d23f0a2f7a3f2c25f61b44e34a002d3e9dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`s-7;6Ar_~T6D00EsA4)?|4Z7V rG`c;bL1=Nsgm%$gpW6zrG%+wN?-JbD?;~yp)WG2B>gTe~DWM4fXE7Wj diff --git a/mods/flowers/textures/flowers_mushroom_spores_red.png b/mods/flowers/textures/flowers_mushroom_spores_red.png deleted file mode 100644 index 1f1d3a4592af275bb1dd00dcfea73cd3094ca8c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`%APKcAr_~T6D00Eu$Q=a+hNsh qD;MS|5=WbD)?Aot-m_SYg~6(q|KstWS9pQS89ZJ6T-G@yGywoBP#ent