Saplings, mine lanterns, weather changes

master
D00Med 2017-07-07 07:42:39 +10:00
parent 7f11925041
commit 67c48c0e83
14 changed files with 539 additions and 13 deletions

View File

@ -0,0 +1,264 @@
function default.grow_new_baobab_tree(pos)
local path = minetest.get_modpath("mapgen") ..
"/schematics/baobab.mts"
minetest.place_schematic({x = pos.x - 8, y = pos.y - 1, z = pos.z - 8},
path, "random", nil, false)
minetest.set_node(pos, {name="mapgen:baobab_tree"})
end
function default.grow_new_bamboo_tree(pos)
local path = minetest.get_modpath("mapgen") ..
"/schematics/bamboo1.mts"
minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2},
path, "random", nil, false)
minetest.set_node(pos, {name="mapgen:bamboo"})
end
function default.grow_new_ipe_tree(pos)
local path = minetest.get_modpath("mapgen") ..
"/schematics/ipe.mts"
minetest.place_schematic({x = pos.x - 7, y = pos.y - 1, z = pos.z - 6},
path, "random", nil, false)
minetest.set_node(pos, {name="mapgen:yellow_ipe_tree"})
end
function default.grow_new_palm_tree(pos)
local path = minetest.get_modpath("mapgen") ..
"/schematics/palmtree.mts"
minetest.place_schematic({x = pos.x - 3, y = pos.y - 1, z = pos.z - 3},
path, "random", nil, false)
minetest.set_node(pos, {name="mapgen:palm_tree"})
end
function default.grow_new_big_pine_tree(pos)
local path = minetest.get_modpath("mapgen") ..
"/schematics/pine.mts"
minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 3},
path, "random", nil, false)
minetest.set_node(pos, {name="default:pine_tree"})
end
function default.grow_new_willow_tree(pos)
local path = minetest.get_modpath("mapgen") ..
"/schematics/willow.mts"
minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2},
path, "random", nil, false)
minetest.set_node(pos, {name="mapgen:willow_tree"})
end
minetest.register_node("default:bamboo_sapling", {
description = "Bamboo Sapling",
drawtype = "plantlike",
tiles = {"mapgen_bamboo_sapling.png"},
inventory_image = "mapgen_bamboo_sapling.png",
wield_image = "mapgen_bamboo_sapling.png",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
on_timer = default.grow_sapling,
selection_box = {
type = "fixed",
fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16}
},
groups = {snappy = 2, dig_immediate = 3, flammable = 2,
attached_node = 1, sapling = 1},
sounds = default.node_sound_leaves_defaults(),
on_construct = function(pos)
minetest.get_node_timer(pos):start(math.random(2400,4800))
end,
on_place = function(itemstack, placer, pointed_thing)
itemstack = default.sapling_on_place(itemstack, placer, pointed_thing,
"default:bamboo_sapling",
-- minp, maxp to be checked, relative to sapling pos
-- minp_relative.y = 1 because sapling pos has been checked
{x = -2, y = 1, z = -2},
{x = 2, y = 15, z = 2},
-- maximum interval of interior volume check
4)
return itemstack
end,
})
minetest.register_node("default:baobab_sapling", {
description = "Baobab Sapling",
drawtype = "plantlike",
tiles = {"mapgen_baobab_sapling.png"},
inventory_image = "mapgen_baobab_sapling.png",
wield_image = "mapgen_baobab_sapling.png",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
on_timer = default.grow_sapling,
selection_box = {
type = "fixed",
fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16}
},
groups = {snappy = 2, dig_immediate = 3, flammable = 2,
attached_node = 1, sapling = 1},
sounds = default.node_sound_leaves_defaults(),
on_construct = function(pos)
minetest.get_node_timer(pos):start(math.random(2400,4800))
end,
on_place = function(itemstack, placer, pointed_thing)
itemstack = default.sapling_on_place(itemstack, placer, pointed_thing,
"default:baobab_sapling",
-- minp, maxp to be checked, relative to sapling pos
-- minp_relative.y = 1 because sapling pos has been checked
{x = -2, y = 1, z = -2},
{x = 2, y = 15, z = 2},
-- maximum interval of interior volume check
4)
return itemstack
end,
})
minetest.register_node("default:ipe_sapling", {
description = "Yellow Ipe Sapling",
drawtype = "plantlike",
tiles = {"mapgen_yellow_ipe_sapling.png"},
inventory_image = "mapgen_yellow_ipe_sapling.png",
wield_image = "mapgen_yellow_ipe_sapling.png",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
on_timer = default.grow_sapling,
selection_box = {
type = "fixed",
fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16}
},
groups = {snappy = 2, dig_immediate = 3, flammable = 2,
attached_node = 1, sapling = 1},
sounds = default.node_sound_leaves_defaults(),
on_construct = function(pos)
minetest.get_node_timer(pos):start(math.random(2400,4800))
end,
on_place = function(itemstack, placer, pointed_thing)
itemstack = default.sapling_on_place(itemstack, placer, pointed_thing,
"default:ipe_sapling",
-- minp, maxp to be checked, relative to sapling pos
-- minp_relative.y = 1 because sapling pos has been checked
{x = -2, y = 1, z = -2},
{x = 2, y = 15, z = 2},
-- maximum interval of interior volume check
4)
return itemstack
end,
})
minetest.register_node("default:palmtree_sapling", {
description = "Palm Tree Sapling",
drawtype = "plantlike",
tiles = {"mapgen_palmtree_sapling.png"},
inventory_image = "mapgen_palmtree_sapling.png",
wield_image = "mapgen_palmtree_sapling.png",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
on_timer = default.grow_sapling,
selection_box = {
type = "fixed",
fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16}
},
groups = {snappy = 2, dig_immediate = 3, flammable = 2,
attached_node = 1, sapling = 1},
sounds = default.node_sound_leaves_defaults(),
on_construct = function(pos)
minetest.get_node_timer(pos):start(math.random(2400,4800))
end,
on_place = function(itemstack, placer, pointed_thing)
itemstack = default.sapling_on_place(itemstack, placer, pointed_thing,
"default:palmtree_sapling",
-- minp, maxp to be checked, relative to sapling pos
-- minp_relative.y = 1 because sapling pos has been checked
{x = -2, y = 1, z = -2},
{x = 2, y = 15, z = 2},
-- maximum interval of interior volume check
4)
return itemstack
end,
})
minetest.register_node("default:willow_sapling", {
description = "Willow Tree Sapling",
drawtype = "plantlike",
tiles = {"mapgen_willow_sapling.png"},
inventory_image = "mapgen_willow_sapling.png",
wield_image = "mapgen_willow_sapling.png",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
on_timer = default.grow_sapling,
selection_box = {
type = "fixed",
fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16}
},
groups = {snappy = 2, dig_immediate = 3, flammable = 2,
attached_node = 1, sapling = 1},
sounds = default.node_sound_leaves_defaults(),
on_construct = function(pos)
minetest.get_node_timer(pos):start(math.random(2400,4800))
end,
on_place = function(itemstack, placer, pointed_thing)
itemstack = default.sapling_on_place(itemstack, placer, pointed_thing,
"default:willow_sapling",
-- minp, maxp to be checked, relative to sapling pos
-- minp_relative.y = 1 because sapling pos has been checked
{x = -2, y = 1, z = -2},
{x = 2, y = 15, z = 2},
-- maximum interval of interior volume check
4)
return itemstack
end,
})
minetest.register_node("default:big_pine_sapling", {
description = "Big Pine Sapling",
drawtype = "plantlike",
tiles = {"mapgen_big_pine_sapling.png"},
inventory_image = "mapgen_big_pine_sapling.png",
wield_image = "mapgen_big_pine_sapling.png",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
on_timer = default.grow_sapling,
selection_box = {
type = "fixed",
fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16}
},
groups = {snappy = 2, dig_immediate = 3, flammable = 2,
attached_node = 1, sapling = 1},
sounds = default.node_sound_leaves_defaults(),
on_construct = function(pos)
minetest.get_node_timer(pos):start(math.random(2400,4800))
end,
on_place = function(itemstack, placer, pointed_thing)
itemstack = default.sapling_on_place(itemstack, placer, pointed_thing,
"default:big_pine_sapling",
-- minp, maxp to be checked, relative to sapling pos
-- minp_relative.y = 1 because sapling pos has been checked
{x = -2, y = 1, z = -2},
{x = 2, y = 15, z = 2},
-- maximum interval of interior volume check
4)
return itemstack
end,
})

View File

@ -50,3 +50,4 @@ dofile(default_path.."/mapgen.lua")
dofile(default_path.."/player.lua")
dofile(default_path.."/aliases.lua")
dofile(default_path.."/legacy.lua")
dofile(default_path.."/default_farlands.lua")

Binary file not shown.

Before

Width:  |  Height:  |  Size: 355 B

After

Width:  |  Height:  |  Size: 367 B

View File

@ -27,8 +27,7 @@ end
-- 'is snow nearby' function
local function is_snow_nearby(pos)
return minetest.find_node_near(pos, 1,
{"default:snow", "default:snowblock", "default:dirt_with_snow"})
return minetest.find_node_near(pos, 1, {"group:snowy"})
end
@ -78,6 +77,38 @@ function default.grow_sapling(pos)
minetest.log("action", "An aspen sapling grows into a tree at "..
minetest.pos_to_string(pos))
default.grow_new_aspen_tree(pos)
elseif node.name == "default:bush_sapling" then
minetest.log("action", "A bush sapling grows into a bush at "..
minetest.pos_to_string(pos))
default.grow_bush(pos)
elseif node.name == "default:acacia_bush_sapling" then
minetest.log("action", "An acacia bush sapling grows into a bush at "..
minetest.pos_to_string(pos))
default.grow_acacia_bush(pos)
elseif node.name == "default:palmtree_sapling" then
minetest.log("action", "A palm tree sapling grows into a tree at "..
minetest.pos_to_string(pos))
default.grow_new_palm_tree(pos)
elseif node.name == "default:baobab_sapling" then
minetest.log("action", "A baobab tree sapling grows into a tree at "..
minetest.pos_to_string(pos))
default.grow_new_baobab_tree(pos)
elseif node.name == "default:ipe_sapling" then
minetest.log("action", "A yellow ipe tree sapling grows into a tree at "..
minetest.pos_to_string(pos))
default.grow_new_ipe_tree(pos)
elseif node.name == "default:big_pine_sapling" then
minetest.log("action", "A big pine tree sapling grows into a tree at "..
minetest.pos_to_string(pos))
default.grow_new_big_pine_tree(pos)
elseif node.name == "default:willow_sapling" then
minetest.log("action", "A willow tree sapling grows into a tree at "..
minetest.pos_to_string(pos))
default.grow_new_willow_tree(pos)
elseif node.name == "default:bamboo_sapling" then
minetest.log("action", "A bamboo sapling grows into a tree at "..
minetest.pos_to_string(pos))
default.grow_new_bamboo_tree(pos)
end
end
@ -85,7 +116,9 @@ minetest.register_lbm({
name = "default:convert_saplings_to_node_timer",
nodenames = {"default:sapling", "default:junglesapling",
"default:pine_sapling", "default:acacia_sapling",
"default:aspen_sapling"},
"default:aspen_sapling", "default:ipe_sapling",
"default:baobab_sapling", "default:palmtree_sapling",
"default:big_pine_sapling", "default:willow_sapling", "default:bamboo_sapling"},
action = function(pos)
minetest.get_node_timer(pos):start(math.random(1200, 2400))
end
@ -373,7 +406,7 @@ function default.grow_new_apple_tree(pos)
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)
path, "random", nil, false)
end
@ -427,6 +460,29 @@ function default.grow_new_aspen_tree(pos)
end
-- Bushes do not need 'from sapling' schematic variants because
-- only the stem node is force-placed in the schematic.
-- Bush
function default.grow_bush(pos)
local path = minetest.get_modpath("default") ..
"/schematics/bush.mts"
minetest.place_schematic({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1},
path, "0", nil, false)
end
-- Acacia bush
function default.grow_acacia_bush(pos)
local path = minetest.get_modpath("default") ..
"/schematics/acacia_bush.mts"
minetest.place_schematic({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1},
path, "0", nil, false)
end
--
-- Sapling 'on place' function to check protection of node and resulting tree volume
--
@ -458,19 +514,47 @@ function default.sapling_on_place(itemstack, placer, pointed_thing,
return itemstack
end
-- Check tree volume for protection
if not default.intersects_protection(
if default.intersects_protection(
vector.add(pos, minp_relative),
vector.add(pos, maxp_relative),
player_name,
interval) then
minetest.set_node(pos, {name = sapling_name})
if not minetest.setting_getbool("creative_mode") then
itemstack:take_item()
end
else
minetest.record_protection_violation(pos, player_name)
-- Print extra information to explain
minetest.chat_send_player(player_name, "Tree will intersect protection")
return itemstack
end
minetest.log("action", player_name .. " places node "
.. sapling_name .. " at " .. minetest.pos_to_string(pos))
local take_item = not (creative and creative.is_enabled_for
and creative.is_enabled_for(player_name))
local newnode = {name = sapling_name}
local ndef = minetest.registered_nodes[sapling_name]
minetest.set_node(pos, newnode)
-- Run callback
if ndef and ndef.after_place_node then
-- Deepcopy place_to and pointed_thing because callback can modify it
if ndef.after_place_node(table.copy(pos), placer,
itemstack, table.copy(pointed_thing)) then
take_item = false
end
end
-- Run script hook
for _, callback in ipairs(minetest.registered_on_placenodes) do
-- Deepcopy pos, node and pointed_thing because callback can modify them
if callback(table.copy(pos), table.copy(newnode),
placer, table.copy(node or {}),
itemstack, table.copy(pointed_thing)) then
take_item = false
end
end
if take_item then
itemstack:take_item()
end
return itemstack

View File

@ -58,6 +58,22 @@ mapgen.register_shrub("shrub2", "Deciduous Forest Shrub", "2")
--nodes
minetest.register_node("mapgen:dungeon_spawner", {
description = "Dungeon Spawner",
tiles = {"mapgen_dungeon_spawner.png"},
groups = {cracky=1,},
sounds = default.node_sound_stone_defaults(),
on_rightclick = function(pos, node, clicker)
local check_pos = pos
check_pos.y = check_pos.y-1
local node_below = minetest.get_node(check_pos)
if node_below == "default:dirt_with_junglegrass" then
elseif node_below == "default:desert_sand" then
end
minetest.chat_send_player(clicker:get_player_name(), "This node is unfinished")
end,
})
--plants (PLNT01)
minetest.register_node("mapgen:red_ground_flower", {
@ -166,6 +182,14 @@ minetest.register_node("mapgen:willow_leaves", {
tiles = {
"mapgen_willow_leaves.png",
},
drop = {
max_items = 1,
items = {
{items = {"default:willow_sapling",},
rarity = 20,},
{items = {"mapgen:willow_leaves",}},
},
},
groups = {snappy = 1, oddly_breakable_by_hand = 1, flammable = 1, dig_immediate = 1, leaves = 1, leafdecay = 3},
sounds = default.node_sound_leaves_defaults()
})
@ -199,6 +223,14 @@ minetest.register_node("mapgen:baobab_leaves", {
tiles = {
"mapgen_baobab_leaves.png",
},
drop = {
max_items = 1,
items = {
{items = {"default:baobab_sapling",},
rarity = 20,},
{items = {"mapgen:baobab_leaves",}},
},
},
groups = {snappy = 1, oddly_breakable_by_hand = 1, flammable = 1, dig_immediate = 1, leaves = 1, leafdecay = 3},
sounds = default.node_sound_leaves_defaults()
})
@ -242,6 +274,14 @@ minetest.register_node("mapgen:yellow_ipe_leaves", {
tiles = {
"mapgen_yellow_ipe_leaves.png",
},
drop = {
max_items = 1,
items = {
{items = {"default:ipe_sapling",},
rarity = 20,},
{items = {"mapgen:yellow_ipe_leaves",}},
},
},
groups = {snappy = 1, oddly_breakable_by_hand = 1, flammable = 1, dig_immediate = 1, leaves = 1, leafdecay = 3},
sounds = default.node_sound_leaves_defaults()
})
@ -424,6 +464,14 @@ minetest.register_node("mapgen:palm_leaves", {
tiles = {
"mapgen_palmleaves.png",
},
drop = {
max_items = 1,
items = {
{items = {"default:palmtree_sapling",},
rarity = 20,},
{items = {"mapgen:palm_leaves",}},
},
},
groups = {snappy = 1, oddly_breakable_by_hand = 1, flammable = 1, dig_immediate = 1, leaves = 1, leafdecay = 3},
sounds = default.node_sound_leaves_defaults()
})
@ -727,6 +775,14 @@ minetest.register_node("mapgen:bamboo_leaves", {
type = "fixed",
fixed = {-0.4, -0.4, -0.4, 0.4, 0.4, 0.4}
},
drop = {
max_items = 1,
items = {
{items = {"default:bamboo_sapling",},
rarity = 20,},
{items = {"mapgen:bamboo_leaves",}},
},
},
})
minetest.register_node("mapgen:bush", {
@ -1904,7 +1960,7 @@ minetest.register_abm({
interval = 5,
chance = 1,
action = function(pos, node)
if minetest.get_timeofday() <= 0.6 and minetest.get_timeofday() >= 0.2 then
if minetest.get_timeofday() <= 0.6 and minetest.get_timeofday() >= 0.2 and pos.y >= -20 then
return
end
minetest.add_particle({
@ -1928,7 +1984,7 @@ minetest.register_abm({
interval = 5,
chance = 1,
action = function(pos, node)
if minetest.get_timeofday() <= 0.6 and minetest.get_timeofday() >= 0.2 then
if minetest.get_timeofday() <= 0.6 and minetest.get_timeofday() >= 0.2 and pos.y >= -20 then
return
end
local dir = minetest.facedir_to_dir(node.param2)

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 355 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 844 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 610 B

View File

@ -43,7 +43,7 @@ local function rotate_torch(pos)
local n = minetest.get_node(pos)
if n ~= nil then
if n.name == "mines:dummy" then
minetest.set_node(pos, {name="default:torch",param2=1})
minetest.set_node(pos, {name="decoblocks:lantern_wall",param2=1})
end
end
end)

View File

@ -1,4 +1,124 @@
minetest.register_globalstep(function()
for _, player in ipairs(minetest.get_connected_players()) do
if player:get_player_name() ~= "singleplayer" then return end
local item = player:get_wielded_item():get_name()
if item == "default:torch" or item == "decoblocks:lantern" then
local pos = player:getpos()
local item = player:get_wielded_item()
item:add_wear(2000)
pos.y = pos.y+1.2
if minetest.get_node(pos).name == "air" then
minetest.set_node(pos, {name="tools:light"})
end
for i=1,2 do
local remove_node = minetest.find_node_near(pos, 1, {"tools:light"}, false)
if remove_node then
minetest.remove_node(remove_node)
end
end
end
end
return item
end)
minetest.register_node("tools:light", {
drawtype = "airlike",
groups = {not_in_creative_inventory=1},
walkable = false,
pointable = false,
light_source = 10,
})
minetest.register_abm({
nodenames = {"tools:light"},
interval = 1,
chance = 1,
action = function(pos, node)
minetest.remove_node(pos)
end,
})
minetest.register_craftitem("tools:watering_can", {
description = "Watering Can",
inventory_image = "tools_watering_can.png",
liquids_pointable = true,
on_use = function(item, placer, pointed_thing)
local pos = pointed_thing.under
pos.y = pos.y+1
local mg_name = minetest.get_mapgen_setting("mg_name")
local node = minetest.get_node(pos)
if node.name == "default:sapling" then
minetest.log("action", "A sapling grows into a tree at "..
minetest.pos_to_string(pos))
if mg_name == "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 mg_name == "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))
local snow = minetest.find_node_near(pos, 1, {"group:snowy"})
if mg_name == "v6" then
default.grow_pine_tree(pos, snow)
elseif snow then
default.grow_new_snowy_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)
elseif node.name == "default:aspen_sapling" then
minetest.log("action", "An aspen sapling grows into a tree at "..
minetest.pos_to_string(pos))
default.grow_new_aspen_tree(pos)
elseif node.name == "default:bush_sapling" then
minetest.log("action", "A bush sapling grows into a bush at "..
minetest.pos_to_string(pos))
default.grow_bush(pos)
elseif node.name == "default:acacia_bush_sapling" then
minetest.log("action", "An acacia bush sapling grows into a bush at "..
minetest.pos_to_string(pos))
default.grow_acacia_bush(pos)
elseif node.name == "default:palmtree_sapling" then
minetest.log("action", "A palm tree sapling grows into a tree at "..
minetest.pos_to_string(pos))
default.grow_new_palm_tree(pos)
elseif node.name == "default:baobab_sapling" then
minetest.log("action", "A baobab tree sapling grows into a tree at "..
minetest.pos_to_string(pos))
default.grow_new_baobab_tree(pos)
elseif node.name == "default:ipe_sapling" then
minetest.log("action", "A yellow ipe tree sapling grows into a tree at "..
minetest.pos_to_string(pos))
default.grow_new_ipe_tree(pos)
elseif node.name == "default:big_pine_sapling" then
minetest.log("action", "A big pine tree sapling grows into a tree at "..
minetest.pos_to_string(pos))
default.grow_new_big_pine_tree(pos)
elseif node.name == "default:willow_sapling" then
minetest.log("action", "A willow tree sapling grows into a tree at "..
minetest.pos_to_string(pos))
default.grow_new_willow_tree(pos)
elseif node.name == "default:bamboo_sapling" then
minetest.log("action", "A bamboo sapling grows into a tree at "..
minetest.pos_to_string(pos))
default.grow_new_bamboo_tree(pos)
end
end,
})
minetest.register_craftitem("tools:superpick", {
description = "Super Pickaxe",
inventory_image = "default_tool_diamondpick.png^[colorize:red:100",

Binary file not shown.

After

Width:  |  Height:  |  Size: 442 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 B

View File

@ -154,6 +154,7 @@ minetest.register_globalstep(function(dtime)
display_weather = false
end
end
if pos.y <= -20 then display_weather = false end
--apply weather effect
if display_weather then
apply_weather(player, pos, weather.weather)