Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
M
minetest_game
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Illuna-Minetest
minetest_game
Commits
9fdbc1f4
Commit
9fdbc1f4
authored
11 years ago
by
BlockMen
Browse files
Options
Downloads
Patches
Plain Diff
Fix tree growing and jungle sapling growth rate
parent
1d4eb43f
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
mods/default/functions.lua
+43
-0
43 additions, 0 deletions
mods/default/functions.lua
mods/default/init.lua
+1
-0
1 addition, 0 deletions
mods/default/init.lua
mods/default/nodes.lua
+0
-187
0 additions, 187 deletions
mods/default/nodes.lua
mods/default/trees.lua
+150
-0
150 additions, 0 deletions
mods/default/trees.lua
with
194 additions
and
187 deletions
mods/default/functions.lua
+
43
−
0
View file @
9fdbc1f4
...
...
@@ -126,6 +126,49 @@ function on_punchnode(p, node)
end
minetest
.
register_on_punchnode
(
on_punchnode
)
--
-- Grow trees
--
minetest
.
register_abm
({
nodenames
=
{
"default:sapling"
},
interval
=
10
,
chance
=
50
,
action
=
function
(
pos
,
node
)
local
is_soil
=
minetest
.
registered_nodes
[
minetest
.
get_node
({
x
=
pos
.
x
,
y
=
pos
.
y
-
1
,
z
=
pos
.
z
}).
name
].
groups
.
soil
if
is_soil
==
nil
or
is_soil
==
0
then
return
end
print
(
"A sapling grows into a tree at "
..
minetest
.
pos_to_string
(
pos
))
local
vm
=
minetest
.
get_voxel_manip
()
local
minp
,
maxp
=
vm
:
read_from_map
({
x
=
pos
.
x
-
16
,
y
=
pos
.
y
,
z
=
pos
.
z
-
16
},
{
x
=
pos
.
x
+
16
,
y
=
pos
.
y
+
16
,
z
=
pos
.
z
+
16
})
local
a
=
VoxelArea
:
new
{
MinEdge
=
minp
,
MaxEdge
=
maxp
}
local
data
=
vm
:
get_data
()
default
.
grow_tree
(
data
,
a
,
pos
,
math.random
(
1
,
4
)
==
1
,
math.random
(
1
,
100000
))
vm
:
set_data
(
data
)
vm
:
write_to_map
(
data
)
vm
:
update_map
()
end
})
minetest
.
register_abm
({
nodenames
=
{
"default:junglesapling"
},
interval
=
10
,
chance
=
50
,
action
=
function
(
pos
,
node
)
local
is_soil
=
minetest
.
registered_nodes
[
minetest
.
get_node
({
x
=
pos
.
x
,
y
=
pos
.
y
-
1
,
z
=
pos
.
z
}).
name
].
groups
.
soil
if
is_soil
==
nil
or
is_soil
==
0
then
return
end
print
(
"A jungle sapling grows into a tree at "
..
minetest
.
pos_to_string
(
pos
))
local
vm
=
minetest
.
get_voxel_manip
()
local
minp
,
maxp
=
vm
:
read_from_map
({
x
=
pos
.
x
-
16
,
y
=
pos
.
y
-
1
,
z
=
pos
.
z
-
16
},
{
x
=
pos
.
x
+
16
,
y
=
pos
.
y
+
16
,
z
=
pos
.
z
+
16
})
local
a
=
VoxelArea
:
new
{
MinEdge
=
minp
,
MaxEdge
=
maxp
}
local
data
=
vm
:
get_data
()
default
.
grow_jungletree
(
data
,
a
,
pos
,
math.random
(
1
,
100000
))
vm
:
set_data
(
data
)
vm
:
write_to_map
(
data
)
vm
:
update_map
()
end
})
--
-- Lavacooling
--
...
...
This diff is collapsed.
Click to expand it.
mods/default/init.lua
+
1
−
0
View file @
9fdbc1f4
...
...
@@ -19,3 +19,4 @@ dofile(minetest.get_modpath("default").."/craftitems.lua")
dofile
(
minetest
.
get_modpath
(
"default"
)
..
"/crafting.lua"
)
dofile
(
minetest
.
get_modpath
(
"default"
)
..
"/mapgen.lua"
)
dofile
(
minetest
.
get_modpath
(
"default"
)
..
"/player.lua"
)
dofile
(
minetest
.
get_modpath
(
"default"
)
..
"/trees.lua"
)
This diff is collapsed.
Click to expand it.
mods/default/nodes.lua
+
0
−
187
View file @
9fdbc1f4
...
...
@@ -287,193 +287,6 @@ minetest.register_node("default:junglesapling", {
sounds
=
default
.
node_sound_leaves_defaults
(),
})
local
c_air
=
minetest
.
get_content_id
(
"air"
)
local
c_ignore
=
minetest
.
get_content_id
(
"ignore"
)
local
c_tree
=
minetest
.
get_content_id
(
"default:tree"
)
local
c_leaves
=
minetest
.
get_content_id
(
"default:leaves"
)
local
c_apple
=
minetest
.
get_content_id
(
"default:apple"
)
function
default
.
grow_tree
(
data
,
a
,
pos
,
is_apple_tree
,
seed
)
--[[
NOTE: Tree-placing code is currently duplicated in the engine
and in games that have saplings; both are deprecated but not
replaced yet
]]
--
local
pr
=
PseudoRandom
(
seed
)
local
th
=
pr
:
next
(
4
,
5
)
local
x
,
y
,
z
=
pos
.
x
,
pos
.
y
,
pos
.
z
for
yy
=
y
,
y
+
th
-
1
do
local
vi
=
a
:
index
(
x
,
yy
,
z
)
if
a
:
contains
(
x
,
yy
,
z
)
and
(
data
[
vi
]
==
c_air
or
yy
==
y
)
then
data
[
vi
]
=
c_tree
end
end
y
=
y
+
th
-
1
-- (x, y, z) is now last piece of trunk
local
leaves_a
=
VoxelArea
:
new
{
MinEdge
=
{
x
=-
2
,
y
=-
1
,
z
=-
2
},
MaxEdge
=
{
x
=
2
,
y
=
2
,
z
=
2
}}
local
leaves_buffer
=
{}
-- Force leaves near the trunk
local
d
=
1
for
xi
=
-
d
,
d
do
for
yi
=
-
d
,
d
do
for
zi
=
-
d
,
d
do
leaves_buffer
[
leaves_a
:
index
(
xi
,
yi
,
zi
)]
=
true
end
end
end
-- Add leaves randomly
for
iii
=
1
,
8
do
local
d
=
1
local
xx
=
pr
:
next
(
leaves_a
.
MinEdge
.
x
,
leaves_a
.
MaxEdge
.
x
-
d
)
local
yy
=
pr
:
next
(
leaves_a
.
MinEdge
.
y
,
leaves_a
.
MaxEdge
.
y
-
d
)
local
zz
=
pr
:
next
(
leaves_a
.
MinEdge
.
z
,
leaves_a
.
MaxEdge
.
z
-
d
)
for
xi
=
0
,
d
do
for
yi
=
0
,
d
do
for
zi
=
0
,
d
do
leaves_buffer
[
leaves_a
:
index
(
xx
+
xi
,
yy
+
yi
,
zz
+
zi
)]
=
true
end
end
end
end
-- Add the leaves
for
xi
=
leaves_a
.
MinEdge
.
x
,
leaves_a
.
MaxEdge
.
x
do
for
yi
=
leaves_a
.
MinEdge
.
y
,
leaves_a
.
MaxEdge
.
y
do
for
zi
=
leaves_a
.
MinEdge
.
z
,
leaves_a
.
MaxEdge
.
z
do
if
a
:
contains
(
x
+
xi
,
y
+
yi
,
z
+
zi
)
then
local
vi
=
a
:
index
(
x
+
xi
,
y
+
yi
,
z
+
zi
)
if
data
[
vi
]
==
c_air
or
data
[
vi
]
==
c_ignore
then
if
leaves_buffer
[
leaves_a
:
index
(
xi
,
yi
,
zi
)]
then
if
is_apple_tree
and
pr
:
next
(
1
,
100
)
<=
10
then
data
[
vi
]
=
c_apple
else
data
[
vi
]
=
c_leaves
end
end
end
end
end
end
end
end
minetest
.
register_abm
({
nodenames
=
{
"default:sapling"
},
interval
=
10
,
chance
=
50
,
action
=
function
(
pos
,
node
)
local
is_soil
=
minetest
.
registered_nodes
[
minetest
.
get_node
({
x
=
pos
.
x
,
y
=
pos
.
y
-
1
,
z
=
pos
.
z
}).
name
].
groups
.
soil
if
is_soil
==
nil
or
is_soil
==
0
then
return
end
print
(
"A sapling grows into a tree at "
..
minetest
.
pos_to_string
(
pos
))
local
vm
=
minetest
.
get_voxel_manip
()
local
minp
,
maxp
=
vm
:
read_from_map
({
x
=
pos
.
x
-
16
,
y
=
pos
.
y
,
z
=
pos
.
z
-
16
},
{
x
=
pos
.
x
+
16
,
y
=
pos
.
y
+
16
,
z
=
pos
.
z
+
16
})
local
a
=
VoxelArea
:
new
{
MinEdge
=
minp
,
MaxEdge
=
maxp
}
local
data
=
vm
:
get_data
()
default
.
grow_tree
(
data
,
a
,
pos
,
math.random
(
1
,
4
)
==
1
,
math.random
(
1
,
100000
))
vm
:
set_data
(
data
)
vm
:
write_to_map
(
data
)
vm
:
update_map
()
end
})
local
c_jungletree
=
minetest
.
get_content_id
(
"default:jungletree"
)
local
c_jungleleaves
=
minetest
.
get_content_id
(
"default:jungleleaves"
)
function
default
.
grow_jungletree
(
data
,
a
,
pos
,
seed
)
--[[
NOTE: Tree-placing code is currently duplicated in the engine
and in games that have saplings; both are deprecated but not
replaced yet
]]
--
local
pr
=
PseudoRandom
(
seed
)
local
x
,
y
,
z
=
pos
.
x
,
pos
.
y
,
pos
.
z
for
xi
=
-
1
,
1
do
for
zi
=
-
1
,
1
do
if
pr
:
next
(
1
,
3
)
>=
2
then
local
vi1
=
a
:
index
(
x
+
xi
,
y
,
z
+
zi
)
local
vi2
=
a
:
index
(
x
+
xi
,
y
-
1
,
z
+
zi
)
if
a
:
contains
(
x
+
xi
,
y
-
1
,
z
+
zi
)
and
data
[
vi2
]
==
c_air
then
data
[
vi2
]
=
c_jungletree
elseif
a
:
contains
(
x
+
xi
,
y
,
z
+
zi
)
and
data
[
vi1
]
==
c_air
then
data
[
vi1
]
=
c_jungletree
end
end
end
end
local
th
=
pr
:
next
(
8
,
12
)
for
yy
=
y
,
y
+
th
-
1
do
local
vi
=
a
:
index
(
x
,
yy
,
z
)
if
a
:
contains
(
x
,
yy
,
z
)
and
(
data
[
vi
]
==
c_air
or
yy
==
y
)
then
data
[
vi
]
=
c_jungletree
end
end
y
=
y
+
th
-
1
-- (x, y, z) is now last piece of trunk
local
leaves_a
=
VoxelArea
:
new
{
MinEdge
=
{
x
=-
3
,
y
=-
2
,
z
=-
3
},
MaxEdge
=
{
x
=
3
,
y
=
2
,
z
=
3
}}
local
leaves_buffer
=
{}
-- Force leaves near the trunk
local
d
=
1
for
xi
=
-
d
,
d
do
for
yi
=
-
d
,
d
do
for
zi
=
-
d
,
d
do
leaves_buffer
[
leaves_a
:
index
(
xi
,
yi
,
zi
)]
=
true
end
end
end
-- Add leaves randomly
for
iii
=
1
,
30
do
local
d
=
1
local
xx
=
pr
:
next
(
leaves_a
.
MinEdge
.
x
,
leaves_a
.
MaxEdge
.
x
-
d
)
local
yy
=
pr
:
next
(
leaves_a
.
MinEdge
.
y
,
leaves_a
.
MaxEdge
.
y
-
d
)
local
zz
=
pr
:
next
(
leaves_a
.
MinEdge
.
z
,
leaves_a
.
MaxEdge
.
z
-
d
)
for
xi
=
0
,
d
do
for
yi
=
0
,
d
do
for
zi
=
0
,
d
do
leaves_buffer
[
leaves_a
:
index
(
xx
+
xi
,
yy
+
yi
,
zz
+
zi
)]
=
true
end
end
end
end
-- Add the leaves
for
xi
=
leaves_a
.
MinEdge
.
x
,
leaves_a
.
MaxEdge
.
x
do
for
yi
=
leaves_a
.
MinEdge
.
y
,
leaves_a
.
MaxEdge
.
y
do
for
zi
=
leaves_a
.
MinEdge
.
z
,
leaves_a
.
MaxEdge
.
z
do
if
a
:
contains
(
x
+
xi
,
y
+
yi
,
z
+
zi
)
then
local
vi
=
a
:
index
(
x
+
xi
,
y
+
yi
,
z
+
zi
)
if
data
[
vi
]
==
c_air
or
data
[
vi
]
==
c_ignore
then
if
leaves_buffer
[
leaves_a
:
index
(
xi
,
yi
,
zi
)]
then
data
[
vi
]
=
c_jungleleaves
end
end
end
end
end
end
end
minetest
.
register_abm
({
nodenames
=
{
"default:junglesapling"
},
interval
=
1
,
chance
=
1
,
action
=
function
(
pos
,
node
)
local
is_soil
=
minetest
.
registered_nodes
[
minetest
.
get_node
({
x
=
pos
.
x
,
y
=
pos
.
y
-
1
,
z
=
pos
.
z
}).
name
].
groups
.
soil
if
is_soil
==
nil
or
is_soil
==
0
then
return
end
print
(
"A jungle sapling grows into a tree at "
..
minetest
.
pos_to_string
(
pos
))
local
vm
=
minetest
.
get_voxel_manip
()
local
minp
,
maxp
=
vm
:
read_from_map
({
x
=
pos
.
x
-
16
,
y
=
pos
.
y
-
1
,
z
=
pos
.
z
-
16
},
{
x
=
pos
.
x
+
16
,
y
=
pos
.
y
+
16
,
z
=
pos
.
z
+
16
})
local
a
=
VoxelArea
:
new
{
MinEdge
=
minp
,
MaxEdge
=
maxp
}
local
data
=
vm
:
get_data
()
default
.
grow_jungletree
(
data
,
a
,
pos
,
math.random
(
1
,
100000
))
vm
:
set_data
(
data
)
vm
:
write_to_map
(
data
)
vm
:
update_map
()
end
})
minetest
.
register_node
(
"default:junglegrass"
,
{
description
=
"Jungle Grass"
,
drawtype
=
"plantlike"
,
...
...
This diff is collapsed.
Click to expand it.
mods/default/trees.lua
0 → 100644
+
150
−
0
View file @
9fdbc1f4
local
c_air
=
minetest
.
get_content_id
(
"air"
)
local
c_ignore
=
minetest
.
get_content_id
(
"ignore"
)
local
c_tree
=
minetest
.
get_content_id
(
"default:tree"
)
local
c_leaves
=
minetest
.
get_content_id
(
"default:leaves"
)
local
c_apple
=
minetest
.
get_content_id
(
"default:apple"
)
function
default
.
grow_tree
(
data
,
a
,
pos
,
is_apple_tree
,
seed
)
--[[
NOTE: Tree-placing code is currently duplicated in the engine
and in games that have saplings; both are deprecated but not
replaced yet
]]
--
local
pr
=
PseudoRandom
(
seed
)
local
th
=
pr
:
next
(
4
,
5
)
local
x
,
y
,
z
=
pos
.
x
,
pos
.
y
,
pos
.
z
for
yy
=
y
,
y
+
th
-
1
do
local
vi
=
a
:
index
(
x
,
yy
,
z
)
if
a
:
contains
(
x
,
yy
,
z
)
and
(
data
[
vi
]
==
c_air
or
yy
==
y
)
then
data
[
vi
]
=
c_tree
end
end
y
=
y
+
th
-
1
-- (x, y, z) is now last piece of trunk
local
leaves_a
=
VoxelArea
:
new
{
MinEdge
=
{
x
=-
2
,
y
=-
1
,
z
=-
2
},
MaxEdge
=
{
x
=
2
,
y
=
2
,
z
=
2
}}
local
leaves_buffer
=
{}
-- Force leaves near the trunk
local
d
=
1
for
xi
=
-
d
,
d
do
for
yi
=
-
d
,
d
do
for
zi
=
-
d
,
d
do
leaves_buffer
[
leaves_a
:
index
(
xi
,
yi
,
zi
)]
=
true
end
end
end
-- Add leaves randomly
for
iii
=
1
,
8
do
local
d
=
1
local
xx
=
pr
:
next
(
leaves_a
.
MinEdge
.
x
,
leaves_a
.
MaxEdge
.
x
-
d
)
local
yy
=
pr
:
next
(
leaves_a
.
MinEdge
.
y
,
leaves_a
.
MaxEdge
.
y
-
d
)
local
zz
=
pr
:
next
(
leaves_a
.
MinEdge
.
z
,
leaves_a
.
MaxEdge
.
z
-
d
)
for
xi
=
0
,
d
do
for
yi
=
0
,
d
do
for
zi
=
0
,
d
do
leaves_buffer
[
leaves_a
:
index
(
xx
+
xi
,
yy
+
yi
,
zz
+
zi
)]
=
true
end
end
end
end
-- Add the leaves
for
xi
=
leaves_a
.
MinEdge
.
x
,
leaves_a
.
MaxEdge
.
x
do
for
yi
=
leaves_a
.
MinEdge
.
y
,
leaves_a
.
MaxEdge
.
y
do
for
zi
=
leaves_a
.
MinEdge
.
z
,
leaves_a
.
MaxEdge
.
z
do
if
a
:
contains
(
x
+
xi
,
y
+
yi
,
z
+
zi
)
then
local
vi
=
a
:
index
(
x
+
xi
,
y
+
yi
,
z
+
zi
)
if
data
[
vi
]
==
c_air
or
data
[
vi
]
==
c_ignore
then
if
leaves_buffer
[
leaves_a
:
index
(
xi
,
yi
,
zi
)]
then
if
is_apple_tree
and
pr
:
next
(
1
,
100
)
<=
10
then
data
[
vi
]
=
c_apple
else
data
[
vi
]
=
c_leaves
end
end
end
end
end
end
end
end
local
c_jungletree
=
minetest
.
get_content_id
(
"default:jungletree"
)
local
c_jungleleaves
=
minetest
.
get_content_id
(
"default:jungleleaves"
)
function
default
.
grow_jungletree
(
data
,
a
,
pos
,
seed
)
--[[
NOTE: Tree-placing code is currently duplicated in the engine
and in games that have saplings; both are deprecated but not
replaced yet
]]
--
local
pr
=
PseudoRandom
(
seed
)
local
x
,
y
,
z
=
pos
.
x
,
pos
.
y
,
pos
.
z
for
xi
=
-
1
,
1
do
for
zi
=
-
1
,
1
do
if
pr
:
next
(
1
,
3
)
>=
2
then
local
vi1
=
a
:
index
(
x
+
xi
,
y
,
z
+
zi
)
local
vi2
=
a
:
index
(
x
+
xi
,
y
-
1
,
z
+
zi
)
if
a
:
contains
(
x
+
xi
,
y
-
1
,
z
+
zi
)
and
data
[
vi2
]
==
c_air
then
data
[
vi2
]
=
c_jungletree
elseif
a
:
contains
(
x
+
xi
,
y
,
z
+
zi
)
and
data
[
vi1
]
==
c_air
then
data
[
vi1
]
=
c_jungletree
end
end
end
end
local
th
=
pr
:
next
(
8
,
12
)
for
yy
=
y
,
y
+
th
-
1
do
local
vi
=
a
:
index
(
x
,
yy
,
z
)
if
a
:
contains
(
x
,
yy
,
z
)
and
(
data
[
vi
]
==
c_air
or
yy
==
y
)
then
data
[
vi
]
=
c_jungletree
end
end
y
=
y
+
th
-
1
-- (x, y, z) is now last piece of trunk
local
leaves_a
=
VoxelArea
:
new
{
MinEdge
=
{
x
=-
3
,
y
=-
2
,
z
=-
3
},
MaxEdge
=
{
x
=
3
,
y
=
2
,
z
=
3
}}
local
leaves_buffer
=
{}
-- Force leaves near the trunk
local
d
=
1
for
xi
=
-
d
,
d
do
for
yi
=
-
d
,
d
do
for
zi
=
-
d
,
d
do
leaves_buffer
[
leaves_a
:
index
(
xi
,
yi
,
zi
)]
=
true
end
end
end
-- Add leaves randomly
for
iii
=
1
,
30
do
local
d
=
1
local
xx
=
pr
:
next
(
leaves_a
.
MinEdge
.
x
,
leaves_a
.
MaxEdge
.
x
-
d
)
local
yy
=
pr
:
next
(
leaves_a
.
MinEdge
.
y
,
leaves_a
.
MaxEdge
.
y
-
d
)
local
zz
=
pr
:
next
(
leaves_a
.
MinEdge
.
z
,
leaves_a
.
MaxEdge
.
z
-
d
)
for
xi
=
0
,
d
do
for
yi
=
0
,
d
do
for
zi
=
0
,
d
do
leaves_buffer
[
leaves_a
:
index
(
xx
+
xi
,
yy
+
yi
,
zz
+
zi
)]
=
true
end
end
end
end
-- Add the leaves
for
xi
=
leaves_a
.
MinEdge
.
x
,
leaves_a
.
MaxEdge
.
x
do
for
yi
=
leaves_a
.
MinEdge
.
y
,
leaves_a
.
MaxEdge
.
y
do
for
zi
=
leaves_a
.
MinEdge
.
z
,
leaves_a
.
MaxEdge
.
z
do
if
a
:
contains
(
x
+
xi
,
y
+
yi
,
z
+
zi
)
then
local
vi
=
a
:
index
(
x
+
xi
,
y
+
yi
,
z
+
zi
)
if
data
[
vi
]
==
c_air
or
data
[
vi
]
==
c_ignore
then
if
leaves_buffer
[
leaves_a
:
index
(
xi
,
yi
,
zi
)]
then
data
[
vi
]
=
c_jungleleaves
end
end
end
end
end
end
end
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment