Compare commits
61 Commits
master
...
2021-01-30
Author | SHA1 | Date | |
---|---|---|---|
20770027a6 | |||
06aaee3187 | |||
8c0a83dacb | |||
24bb114a11 | |||
c559ea3aef | |||
3212fae8cf | |||
ea92403fa3 | |||
dd36f8b63e | |||
dc93bb5f16 | |||
e72c539cdc | |||
66fd6724c5 | |||
fa83e1b262 | |||
f94f1bea26 | |||
09f08b50bc | |||
d335eceecc | |||
89bffdecaf | |||
6fd3729669 | |||
25250e6eea | |||
9bc0bc1b68 | |||
d097fd6044 | |||
216acdc6b1 | |||
dde035cb5e | |||
acb534d8d0 | |||
f45ffc09bf | |||
e912fba6c8 | |||
7161cfbdee | |||
a27af10d2e | |||
e474194daf | |||
d521e34758 | |||
109b2009fb | |||
90a2d33707 | |||
61d1c54faf | |||
4e8cfdcd8c | |||
f08f2d46f8 | |||
324155f805 | |||
e5524c007d | |||
ae53dc2e9b | |||
ba2cd3d9b8 | |||
af6d08414b | |||
1c0e3c7215 | |||
aac8386b5a | |||
c9add9b24d | |||
f9d12a9def | |||
82744f4a96 | |||
e5d30fed3d | |||
4e4636d6fe | |||
922058700d | |||
cccfb1953b | |||
f3a740f07e | |||
37e39a9ba7 | |||
3d7bcca134 | |||
2967c107d8 | |||
f83f167d18 | |||
471a11f92d | |||
b00d4f4a18 | |||
5735554d6a | |||
23ac37fc4c | |||
d72574d288 | |||
8aa4888dee | |||
9028366407 | |||
9dd610e0e6 |
30
.luacheckrc
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
std = "lua51+minetest"
|
||||||
|
unused_args = false
|
||||||
|
allow_defined_top = true
|
||||||
|
max_line_length = 999
|
||||||
|
max_comment_line_length = 999
|
||||||
|
|
||||||
|
stds.minetest = {
|
||||||
|
read_globals = {
|
||||||
|
"minetest",
|
||||||
|
"vector",
|
||||||
|
"VoxelManip",
|
||||||
|
"VoxelArea",
|
||||||
|
"PseudoRandom",
|
||||||
|
"ItemStack",
|
||||||
|
"default",
|
||||||
|
table = {
|
||||||
|
fields = {
|
||||||
|
"copy",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"dump",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
read_globals = {
|
||||||
|
"biome_lib",
|
||||||
|
"stairsplus",
|
||||||
|
"stairs",
|
||||||
|
"doors",
|
||||||
|
}
|
955
LICENSE
@ -3,399 +3,618 @@ Minetest mod moretrees
|
|||||||
|
|
||||||
All source code:
|
All source code:
|
||||||
© 2013, Vanessa Ezekowitz <vanessaezekowitz@gmail.com>
|
© 2013, Vanessa Ezekowitz <vanessaezekowitz@gmail.com>
|
||||||
Published under the terms and conditions of the WTFPL.
|
|
||||||
Date & cocos palm code (date_palm.lua, cocos_palm.lua)
|
Date & cocos palm code (date_palm.lua, cocos_palm.lua)
|
||||||
© 2016, Rogier <rogier777@gmail.com>
|
© 2016, Rogier <rogier777@gmail.com>
|
||||||
Published under the terms and conditions of the WTFPL.
|
All date & date palm textures, date-based food, cocos flower & green coconuts,
|
||||||
All date & date palm textures, date-based food, cocos flower & green coconuts:
|
and all poplar textures:
|
||||||
© 2016, Rogier <rogier777@gmail.com>
|
© 2016, Rogier <rogier777@gmail.com>
|
||||||
Published under the terms and conditions of CC-BY-SA-3.0 Unported.
|
|
||||||
- Three of the date palm textures are modifications of existing moretrees textures
|
- Three of the date palm textures are modifications of existing moretrees textures
|
||||||
- The green coconuts are a modification of the brown coconut
|
- The green coconuts are a modification of the brown coconut
|
||||||
- The date cake batter is a modification of the acorn muffin batter
|
- The date cake batter is a modification of the acorn muffin batter
|
||||||
All sapling textures (textures/*_sapling.png):
|
All other sapling textures (textures/*_sapling.png):
|
||||||
© 2013, Tim Huppertz <mitroman@naturalnet.de>
|
© 2013, Tim Huppertz <mitroman@naturalnet.de>
|
||||||
Published under the terms and conditions of CC-BY-SA-3.0 Unported.
|
|
||||||
All other textures:
|
All other textures:
|
||||||
© 2013, Vanessa Ezekowitz <vanessaezekowitz@gmail.com>
|
© 2013, Vanessa Ezekowitz <vanessaezekowitz@gmail.com>
|
||||||
Published under the terms and conditions of CC-BY-SA-3.0 Unported.
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
###############################################################################
|
||||||
|
|
||||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
License for all code: LGPL 3.0
|
||||||
Version 2, December 2004
|
License for all media and all other assets: CC-by-SA 4.0
|
||||||
|
|
||||||
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
|
###############################################################################
|
||||||
|
|
||||||
Everyone is permitted to copy and distribute verbatim or modified
|
GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
copies of this license document, and changing it is allowed as long
|
Version 3, 29 June 2007
|
||||||
as the name is changed.
|
|
||||||
|
|
||||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
0. You just DO WHAT THE FUCK YOU WANT TO.
|
|
||||||
|
|
||||||
This license is commonly known as "WTFPL".
|
This version of the GNU Lesser General Public License incorporates
|
||||||
|
the terms and conditions of version 3 of the GNU General Public
|
||||||
|
License, supplemented by the additional permissions listed below.
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
0. Additional Definitions.
|
||||||
|
|
||||||
Creative Commons Legal Code
|
As used herein, "this License" refers to version 3 of the GNU Lesser
|
||||||
|
General Public License, and the "GNU GPL" refers to version 3 of the GNU
|
||||||
|
General Public License.
|
||||||
|
|
||||||
Attribution-ShareAlike 3.0 Unported
|
"The Library" refers to a covered work governed by this License,
|
||||||
|
other than an Application or a Combined Work as defined below.
|
||||||
|
|
||||||
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
|
An "Application" is any work that makes use of an interface provided
|
||||||
LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN
|
by the Library, but which is not otherwise based on the Library.
|
||||||
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
|
Defining a subclass of a class defined by the Library is deemed a mode
|
||||||
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
|
of using an interface provided by the Library.
|
||||||
REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR
|
|
||||||
DAMAGES RESULTING FROM ITS USE.
|
|
||||||
|
|
||||||
|
A "Combined Work" is a work produced by combining or linking an
|
||||||
|
Application with the Library. The particular version of the Library
|
||||||
|
with which the Combined Work was made is also called the "Linked
|
||||||
|
Version".
|
||||||
|
|
||||||
|
The "Minimal Corresponding Source" for a Combined Work means the
|
||||||
|
Corresponding Source for the Combined Work, excluding any source code
|
||||||
|
for portions of the Combined Work that, considered in isolation, are
|
||||||
|
based on the Application, and not on the Linked Version.
|
||||||
|
|
||||||
|
The "Corresponding Application Code" for a Combined Work means the
|
||||||
|
object code and/or source code for the Application, including any data
|
||||||
|
and utility programs needed for reproducing the Combined Work from the
|
||||||
|
Application, but excluding the System Libraries of the Combined Work.
|
||||||
|
|
||||||
|
1. Exception to Section 3 of the GNU GPL.
|
||||||
|
|
||||||
|
You may convey a covered work under sections 3 and 4 of this License
|
||||||
|
without being bound by section 3 of the GNU GPL.
|
||||||
|
|
||||||
|
2. Conveying Modified Versions.
|
||||||
|
|
||||||
|
If you modify a copy of the Library, and, in your modifications, a
|
||||||
|
facility refers to a function or data to be supplied by an Application
|
||||||
|
that uses the facility (other than as an argument passed when the
|
||||||
|
facility is invoked), then you may convey a copy of the modified
|
||||||
|
version:
|
||||||
|
|
||||||
|
a) under this License, provided that you make a good faith effort to
|
||||||
|
ensure that, in the event an Application does not supply the
|
||||||
|
function or data, the facility still operates, and performs
|
||||||
|
whatever part of its purpose remains meaningful, or
|
||||||
|
|
||||||
|
b) under the GNU GPL, with none of the additional permissions of
|
||||||
|
this License applicable to that copy.
|
||||||
|
|
||||||
|
3. Object Code Incorporating Material from Library Header Files.
|
||||||
|
|
||||||
|
The object code form of an Application may incorporate material from
|
||||||
|
a header file that is part of the Library. You may convey such object
|
||||||
|
code under terms of your choice, provided that, if the incorporated
|
||||||
|
material is not limited to numerical parameters, data structure
|
||||||
|
layouts and accessors, or small macros, inline functions and templates
|
||||||
|
(ten or fewer lines in length), you do both of the following:
|
||||||
|
|
||||||
|
a) Give prominent notice with each copy of the object code that the
|
||||||
|
Library is used in it and that the Library and its use are
|
||||||
|
covered by this License.
|
||||||
|
|
||||||
|
b) Accompany the object code with a copy of the GNU GPL and this license
|
||||||
|
document.
|
||||||
|
|
||||||
|
4. Combined Works.
|
||||||
|
|
||||||
|
You may convey a Combined Work under terms of your choice that,
|
||||||
|
taken together, effectively do not restrict modification of the
|
||||||
|
portions of the Library contained in the Combined Work and reverse
|
||||||
|
engineering for debugging such modifications, if you also do each of
|
||||||
|
the following:
|
||||||
|
|
||||||
|
a) Give prominent notice with each copy of the Combined Work that
|
||||||
|
the Library is used in it and that the Library and its use are
|
||||||
|
covered by this License.
|
||||||
|
|
||||||
|
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||||
|
document.
|
||||||
|
|
||||||
|
c) For a Combined Work that displays copyright notices during
|
||||||
|
execution, include the copyright notice for the Library among
|
||||||
|
these notices, as well as a reference directing the user to the
|
||||||
|
copies of the GNU GPL and this license document.
|
||||||
|
|
||||||
|
d) Do one of the following:
|
||||||
|
|
||||||
|
0) Convey the Minimal Corresponding Source under the terms of this
|
||||||
|
License, and the Corresponding Application Code in a form
|
||||||
|
suitable for, and under terms that permit, the user to
|
||||||
|
recombine or relink the Application with a modified version of
|
||||||
|
the Linked Version to produce a modified Combined Work, in the
|
||||||
|
manner specified by section 6 of the GNU GPL for conveying
|
||||||
|
Corresponding Source.
|
||||||
|
|
||||||
|
1) Use a suitable shared library mechanism for linking with the
|
||||||
|
Library. A suitable mechanism is one that (a) uses at run time
|
||||||
|
a copy of the Library already present on the user's computer
|
||||||
|
system, and (b) will operate properly with a modified version
|
||||||
|
of the Library that is interface-compatible with the Linked
|
||||||
|
Version.
|
||||||
|
|
||||||
|
e) Provide Installation Information, but only if you would otherwise
|
||||||
|
be required to provide such information under section 6 of the
|
||||||
|
GNU GPL, and only to the extent that such information is
|
||||||
|
necessary to install and execute a modified version of the
|
||||||
|
Combined Work produced by recombining or relinking the
|
||||||
|
Application with a modified version of the Linked Version. (If
|
||||||
|
you use option 4d0, the Installation Information must accompany
|
||||||
|
the Minimal Corresponding Source and Corresponding Application
|
||||||
|
Code. If you use option 4d1, you must provide the Installation
|
||||||
|
Information in the manner specified by section 6 of the GNU GPL
|
||||||
|
for conveying Corresponding Source.)
|
||||||
|
|
||||||
|
5. Combined Libraries.
|
||||||
|
|
||||||
|
You may place library facilities that are a work based on the
|
||||||
|
Library side by side in a single library together with other library
|
||||||
|
facilities that are not Applications and are not covered by this
|
||||||
|
License, and convey such a combined library under terms of your
|
||||||
|
choice, if you do both of the following:
|
||||||
|
|
||||||
|
a) Accompany the combined library with a copy of the same work based
|
||||||
|
on the Library, uncombined with any other library facilities,
|
||||||
|
conveyed under the terms of this License.
|
||||||
|
|
||||||
|
b) Give prominent notice with the combined library that part of it
|
||||||
|
is a work based on the Library, and explaining where to find the
|
||||||
|
accompanying uncombined form of the same work.
|
||||||
|
|
||||||
|
6. Revised Versions of the GNU Lesser General Public License.
|
||||||
|
|
||||||
|
The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the GNU Lesser General Public License from time to time. Such new
|
||||||
|
versions will be similar in spirit to the present version, but may
|
||||||
|
differ in detail to address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the
|
||||||
|
Library as you received it specifies that a certain numbered version
|
||||||
|
of the GNU Lesser General Public License "or any later version"
|
||||||
|
applies to it, you have the option of following the terms and
|
||||||
|
conditions either of that published version or of any later version
|
||||||
|
published by the Free Software Foundation. If the Library as you
|
||||||
|
received it does not specify a version number of the GNU Lesser
|
||||||
|
General Public License, you may choose any version of the GNU Lesser
|
||||||
|
General Public License ever published by the Free Software Foundation.
|
||||||
|
|
||||||
|
If the Library as you received it specifies that a proxy can decide
|
||||||
|
whether future versions of the GNU Lesser General Public License shall
|
||||||
|
apply, that proxy's public statement of acceptance of any version is
|
||||||
|
permanent authorization for you to choose that version for the
|
||||||
|
Library.
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Attribution-ShareAlike 4.0 International
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
|
||||||
|
Creative Commons Corporation ("Creative Commons") is not a law firm and
|
||||||
|
does not provide legal services or legal advice. Distribution of
|
||||||
|
Creative Commons public licenses does not create a lawyer-client or
|
||||||
|
other relationship. Creative Commons makes its licenses and related
|
||||||
|
information available on an "as-is" basis. Creative Commons gives no
|
||||||
|
warranties regarding its licenses, any material licensed under their
|
||||||
|
terms and conditions, or any related information. Creative Commons
|
||||||
|
disclaims all liability for damages resulting from their use to the
|
||||||
|
fullest extent possible.
|
||||||
|
|
||||||
|
Using Creative Commons Public Licenses
|
||||||
|
|
||||||
|
Creative Commons public licenses provide a standard set of terms and
|
||||||
|
conditions that creators and other rights holders may use to share
|
||||||
|
original works of authorship and other material subject to copyright
|
||||||
|
and certain other rights specified in the public license below. The
|
||||||
|
following considerations are for informational purposes only, are not
|
||||||
|
exhaustive, and do not form part of our licenses.
|
||||||
|
|
||||||
|
Considerations for licensors: Our public licenses are
|
||||||
|
intended for use by those authorized to give the public
|
||||||
|
permission to use material in ways otherwise restricted by
|
||||||
|
copyright and certain other rights. Our licenses are
|
||||||
|
irrevocable. Licensors should read and understand the terms
|
||||||
|
and conditions of the license they choose before applying it.
|
||||||
|
Licensors should also secure all rights necessary before
|
||||||
|
applying our licenses so that the public can reuse the
|
||||||
|
material as expected. Licensors should clearly mark any
|
||||||
|
material not subject to the license. This includes other CC-
|
||||||
|
licensed material, or material used under an exception or
|
||||||
|
limitation to copyright. More considerations for licensors:
|
||||||
|
wiki.creativecommons.org/Considerations_for_licensors
|
||||||
|
|
||||||
|
Considerations for the public: By using one of our public
|
||||||
|
licenses, a licensor grants the public permission to use the
|
||||||
|
licensed material under specified terms and conditions. If
|
||||||
|
the licensor's permission is not necessary for any reason--for
|
||||||
|
example, because of any applicable exception or limitation to
|
||||||
|
copyright--then that use is not regulated by the license. Our
|
||||||
|
licenses grant only permissions under copyright and certain
|
||||||
|
other rights that a licensor has authority to grant. Use of
|
||||||
|
the licensed material may still be restricted for other
|
||||||
|
reasons, including because others have copyright or other
|
||||||
|
rights in the material. A licensor may make special requests,
|
||||||
|
such as asking that all changes be marked or described.
|
||||||
|
Although not required by our licenses, you are encouraged to
|
||||||
|
respect those requests where reasonable. More considerations
|
||||||
|
for the public:
|
||||||
|
wiki.creativecommons.org/Considerations_for_licensees
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
|
||||||
|
Creative Commons Attribution-ShareAlike 4.0 International Public
|
||||||
License
|
License
|
||||||
|
|
||||||
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE
|
By exercising the Licensed Rights (defined below), You accept and agree
|
||||||
COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY
|
to be bound by the terms and conditions of this Creative Commons
|
||||||
COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS
|
Attribution-ShareAlike 4.0 International Public License ("Public
|
||||||
AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
|
License"). To the extent this Public License may be interpreted as a
|
||||||
|
contract, You are granted the Licensed Rights in consideration of Your
|
||||||
BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE
|
acceptance of these terms and conditions, and the Licensor grants You
|
||||||
TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY
|
such rights in consideration of benefits the Licensor receives from
|
||||||
BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS
|
making the Licensed Material available under these terms and
|
||||||
CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND
|
conditions.
|
||||||
CONDITIONS.
|
|
||||||
|
|
||||||
1. Definitions
|
|
||||||
|
|
||||||
a. "Adaptation" means a work based upon the Work, or upon the Work and
|
|
||||||
other pre-existing works, such as a translation, adaptation,
|
|
||||||
derivative work, arrangement of music or other alterations of a
|
|
||||||
literary or artistic work, or phonogram or performance and includes
|
|
||||||
cinematographic adaptations or any other form in which the Work may be
|
|
||||||
recast, transformed, or adapted including in any form recognizably
|
|
||||||
derived from the original, except that a work that constitutes a
|
|
||||||
Collection will not be considered an Adaptation for the purpose of
|
|
||||||
this License. For the avoidance of doubt, where the Work is a musical
|
|
||||||
work, performance or phonogram, the synchronization of the Work in
|
|
||||||
timed-relation with a moving image ("synching") will be considered an
|
|
||||||
Adaptation for the purpose of this License.
|
|
||||||
b. "Collection" means a collection of literary or artistic works, such as
|
|
||||||
encyclopedias and anthologies, or performances, phonograms or
|
|
||||||
broadcasts, or other works or subject matter other than works listed
|
|
||||||
in Section 1(f) below, which, by reason of the selection and
|
|
||||||
arrangement of their contents, constitute intellectual creations, in
|
|
||||||
which the Work is included in its entirety in unmodified form along
|
|
||||||
with one or more other contributions, each constituting separate and
|
|
||||||
independent works in themselves, which together are assembled into a
|
|
||||||
collective whole. A work that constitutes a Collection will not be
|
|
||||||
considered an Adaptation (as defined below) for the purposes of this
|
|
||||||
License.
|
|
||||||
c. "Creative Commons Compatible License" means a license that is listed
|
|
||||||
at http://creativecommons.org/compatiblelicenses that has been
|
|
||||||
approved by Creative Commons as being essentially equivalent to this
|
|
||||||
License, including, at a minimum, because that license: (i) contains
|
|
||||||
terms that have the same purpose, meaning and effect as the License
|
|
||||||
Elements of this License; and, (ii) explicitly permits the relicensing
|
|
||||||
of adaptations of works made available under that license under this
|
|
||||||
License or a Creative Commons jurisdiction license with the same
|
|
||||||
License Elements as this License.
|
|
||||||
d. "Distribute" means to make available to the public the original and
|
|
||||||
copies of the Work or Adaptation, as appropriate, through sale or
|
|
||||||
other transfer of ownership.
|
|
||||||
e. "License Elements" means the following high-level license attributes
|
|
||||||
as selected by Licensor and indicated in the title of this License:
|
|
||||||
Attribution, ShareAlike.
|
|
||||||
f. "Licensor" means the individual, individuals, entity or entities that
|
|
||||||
offer(s) the Work under the terms of this License.
|
|
||||||
g. "Original Author" means, in the case of a literary or artistic work,
|
|
||||||
the individual, individuals, entity or entities who created the Work
|
|
||||||
or if no individual or entity can be identified, the publisher; and in
|
|
||||||
addition (i) in the case of a performance the actors, singers,
|
|
||||||
musicians, dancers, and other persons who act, sing, deliver, declaim,
|
|
||||||
play in, interpret or otherwise perform literary or artistic works or
|
|
||||||
expressions of folklore; (ii) in the case of a phonogram the producer
|
|
||||||
being the person or legal entity who first fixes the sounds of a
|
|
||||||
performance or other sounds; and, (iii) in the case of broadcasts, the
|
|
||||||
organization that transmits the broadcast.
|
|
||||||
h. "Work" means the literary and/or artistic work offered under the terms
|
|
||||||
of this License including without limitation any production in the
|
|
||||||
literary, scientific and artistic domain, whatever may be the mode or
|
|
||||||
form of its expression including digital form, such as a book,
|
|
||||||
pamphlet and other writing; a lecture, address, sermon or other work
|
|
||||||
of the same nature; a dramatic or dramatico-musical work; a
|
|
||||||
choreographic work or entertainment in dumb show; a musical
|
|
||||||
composition with or without words; a cinematographic work to which are
|
|
||||||
assimilated works expressed by a process analogous to cinematography;
|
|
||||||
a work of drawing, painting, architecture, sculpture, engraving or
|
|
||||||
lithography; a photographic work to which are assimilated works
|
|
||||||
expressed by a process analogous to photography; a work of applied
|
|
||||||
art; an illustration, map, plan, sketch or three-dimensional work
|
|
||||||
relative to geography, topography, architecture or science; a
|
|
||||||
performance; a broadcast; a phonogram; a compilation of data to the
|
|
||||||
extent it is protected as a copyrightable work; or a work performed by
|
|
||||||
a variety or circus performer to the extent it is not otherwise
|
|
||||||
considered a literary or artistic work.
|
|
||||||
i. "You" means an individual or entity exercising rights under this
|
|
||||||
License who has not previously violated the terms of this License with
|
|
||||||
respect to the Work, or who has received express permission from the
|
|
||||||
Licensor to exercise rights under this License despite a previous
|
|
||||||
violation.
|
|
||||||
j. "Publicly Perform" means to perform public recitations of the Work and
|
|
||||||
to communicate to the public those public recitations, by any means or
|
|
||||||
process, including by wire or wireless means or public digital
|
|
||||||
performances; to make available to the public Works in such a way that
|
|
||||||
members of the public may access these Works from a place and at a
|
|
||||||
place individually chosen by them; to perform the Work to the public
|
|
||||||
by any means or process and the communication to the public of the
|
|
||||||
performances of the Work, including by public digital performance; to
|
|
||||||
broadcast and rebroadcast the Work by any means including signs,
|
|
||||||
sounds or images.
|
|
||||||
k. "Reproduce" means to make copies of the Work by any means including
|
|
||||||
without limitation by sound or visual recordings and the right of
|
|
||||||
fixation and reproducing fixations of the Work, including storage of a
|
|
||||||
protected performance or phonogram in digital form or other electronic
|
|
||||||
medium.
|
|
||||||
|
|
||||||
2. Fair Dealing Rights. Nothing in this License is intended to reduce,
|
|
||||||
limit, or restrict any uses free from copyright or rights arising from
|
|
||||||
limitations or exceptions that are provided for in connection with the
|
|
||||||
copyright protection under copyright law or other applicable laws.
|
|
||||||
|
|
||||||
3. License Grant. Subject to the terms and conditions of this License,
|
|
||||||
Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
|
|
||||||
perpetual (for the duration of the applicable copyright) license to
|
|
||||||
exercise the rights in the Work as stated below:
|
|
||||||
|
|
||||||
a. to Reproduce the Work, to incorporate the Work into one or more
|
|
||||||
Collections, and to Reproduce the Work as incorporated in the
|
|
||||||
Collections;
|
|
||||||
b. to create and Reproduce Adaptations provided that any such Adaptation,
|
|
||||||
including any translation in any medium, takes reasonable steps to
|
|
||||||
clearly label, demarcate or otherwise identify that changes were made
|
|
||||||
to the original Work. For example, a translation could be marked "The
|
|
||||||
original work was translated from English to Spanish," or a
|
|
||||||
modification could indicate "The original work has been modified.";
|
|
||||||
c. to Distribute and Publicly Perform the Work including as incorporated
|
|
||||||
in Collections; and,
|
|
||||||
d. to Distribute and Publicly Perform Adaptations.
|
|
||||||
e. For the avoidance of doubt:
|
|
||||||
|
|
||||||
i. Non-waivable Compulsory License Schemes. In those jurisdictions in
|
|
||||||
which the right to collect royalties through any statutory or
|
|
||||||
compulsory licensing scheme cannot be waived, the Licensor
|
|
||||||
reserves the exclusive right to collect such royalties for any
|
|
||||||
exercise by You of the rights granted under this License;
|
|
||||||
ii. Waivable Compulsory License Schemes. In those jurisdictions in
|
|
||||||
which the right to collect royalties through any statutory or
|
|
||||||
compulsory licensing scheme can be waived, the Licensor waives the
|
|
||||||
exclusive right to collect such royalties for any exercise by You
|
|
||||||
of the rights granted under this License; and,
|
|
||||||
iii. Voluntary License Schemes. The Licensor waives the right to
|
|
||||||
collect royalties, whether individually or, in the event that the
|
|
||||||
Licensor is a member of a collecting society that administers
|
|
||||||
voluntary licensing schemes, via that society, from any exercise
|
|
||||||
by You of the rights granted under this License.
|
|
||||||
|
|
||||||
The above rights may be exercised in all media and formats whether now
|
|
||||||
known or hereafter devised. The above rights include the right to make
|
|
||||||
such modifications as are technically necessary to exercise the rights in
|
|
||||||
other media and formats. Subject to Section 8(f), all rights not expressly
|
|
||||||
granted by Licensor are hereby reserved.
|
|
||||||
|
|
||||||
4. Restrictions. The license granted in Section 3 above is expressly made
|
|
||||||
subject to and limited by the following restrictions:
|
|
||||||
|
|
||||||
a. You may Distribute or Publicly Perform the Work only under the terms
|
|
||||||
of this License. You must include a copy of, or the Uniform Resource
|
|
||||||
Identifier (URI) for, this License with every copy of the Work You
|
|
||||||
Distribute or Publicly Perform. You may not offer or impose any terms
|
|
||||||
on the Work that restrict the terms of this License or the ability of
|
|
||||||
the recipient of the Work to exercise the rights granted to that
|
|
||||||
recipient under the terms of the License. You may not sublicense the
|
|
||||||
Work. You must keep intact all notices that refer to this License and
|
|
||||||
to the disclaimer of warranties with every copy of the Work You
|
|
||||||
Distribute or Publicly Perform. When You Distribute or Publicly
|
|
||||||
Perform the Work, You may not impose any effective technological
|
|
||||||
measures on the Work that restrict the ability of a recipient of the
|
|
||||||
Work from You to exercise the rights granted to that recipient under
|
|
||||||
the terms of the License. This Section 4(a) applies to the Work as
|
|
||||||
incorporated in a Collection, but this does not require the Collection
|
|
||||||
apart from the Work itself to be made subject to the terms of this
|
|
||||||
License. If You create a Collection, upon notice from any Licensor You
|
|
||||||
must, to the extent practicable, remove from the Collection any credit
|
|
||||||
as required by Section 4(c), as requested. If You create an
|
|
||||||
Adaptation, upon notice from any Licensor You must, to the extent
|
|
||||||
practicable, remove from the Adaptation any credit as required by
|
|
||||||
Section 4(c), as requested.
|
|
||||||
b. You may Distribute or Publicly Perform an Adaptation only under the
|
|
||||||
terms of: (i) this License; (ii) a later version of this License with
|
|
||||||
the same License Elements as this License; (iii) a Creative Commons
|
|
||||||
jurisdiction license (either this or a later license version) that
|
|
||||||
contains the same License Elements as this License (e.g.,
|
|
||||||
Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible
|
|
||||||
License. If you license the Adaptation under one of the licenses
|
|
||||||
mentioned in (iv), you must comply with the terms of that license. If
|
|
||||||
you license the Adaptation under the terms of any of the licenses
|
|
||||||
mentioned in (i), (ii) or (iii) (the "Applicable License"), you must
|
|
||||||
comply with the terms of the Applicable License generally and the
|
|
||||||
following provisions: (I) You must include a copy of, or the URI for,
|
|
||||||
the Applicable License with every copy of each Adaptation You
|
|
||||||
Distribute or Publicly Perform; (II) You may not offer or impose any
|
|
||||||
terms on the Adaptation that restrict the terms of the Applicable
|
|
||||||
License or the ability of the recipient of the Adaptation to exercise
|
|
||||||
the rights granted to that recipient under the terms of the Applicable
|
|
||||||
License; (III) You must keep intact all notices that refer to the
|
|
||||||
Applicable License and to the disclaimer of warranties with every copy
|
|
||||||
of the Work as included in the Adaptation You Distribute or Publicly
|
|
||||||
Perform; (IV) when You Distribute or Publicly Perform the Adaptation,
|
|
||||||
You may not impose any effective technological measures on the
|
|
||||||
Adaptation that restrict the ability of a recipient of the Adaptation
|
|
||||||
from You to exercise the rights granted to that recipient under the
|
|
||||||
terms of the Applicable License. This Section 4(b) applies to the
|
|
||||||
Adaptation as incorporated in a Collection, but this does not require
|
|
||||||
the Collection apart from the Adaptation itself to be made subject to
|
|
||||||
the terms of the Applicable License.
|
|
||||||
c. If You Distribute, or Publicly Perform the Work or any Adaptations or
|
|
||||||
Collections, You must, unless a request has been made pursuant to
|
|
||||||
Section 4(a), keep intact all copyright notices for the Work and
|
|
||||||
provide, reasonable to the medium or means You are utilizing: (i) the
|
|
||||||
name of the Original Author (or pseudonym, if applicable) if supplied,
|
|
||||||
and/or if the Original Author and/or Licensor designate another party
|
|
||||||
or parties (e.g., a sponsor institute, publishing entity, journal) for
|
|
||||||
attribution ("Attribution Parties") in Licensor's copyright notice,
|
|
||||||
terms of service or by other reasonable means, the name of such party
|
|
||||||
or parties; (ii) the title of the Work if supplied; (iii) to the
|
|
||||||
extent reasonably practicable, the URI, if any, that Licensor
|
|
||||||
specifies to be associated with the Work, unless such URI does not
|
|
||||||
refer to the copyright notice or licensing information for the Work;
|
|
||||||
and (iv) , consistent with Ssection 3(b), in the case of an
|
|
||||||
Adaptation, a credit identifying the use of the Work in the Adaptation
|
|
||||||
(e.g., "French translation of the Work by Original Author," or
|
|
||||||
"Screenplay based on original Work by Original Author"). The credit
|
|
||||||
required by this Section 4(c) may be implemented in any reasonable
|
|
||||||
manner; provided, however, that in the case of a Adaptation or
|
|
||||||
Collection, at a minimum such credit will appear, if a credit for all
|
|
||||||
contributing authors of the Adaptation or Collection appears, then as
|
|
||||||
part of these credits and in a manner at least as prominent as the
|
|
||||||
credits for the other contributing authors. For the avoidance of
|
|
||||||
doubt, You may only use the credit required by this Section for the
|
|
||||||
purpose of attribution in the manner set out above and, by exercising
|
|
||||||
Your rights under this License, You may not implicitly or explicitly
|
|
||||||
assert or imply any connection with, sponsorship or endorsement by the
|
|
||||||
Original Author, Licensor and/or Attribution Parties, as appropriate,
|
|
||||||
of You or Your use of the Work, without the separate, express prior
|
|
||||||
written permission of the Original Author, Licensor and/or Attribution
|
|
||||||
Parties.
|
|
||||||
d. Except as otherwise agreed in writing by the Licensor or as may be
|
|
||||||
otherwise permitted by applicable law, if You Reproduce, Distribute or
|
|
||||||
Publicly Perform the Work either by itself or as part of any
|
|
||||||
Adaptations or Collections, You must not distort, mutilate, modify or
|
|
||||||
take other derogatory action in relation to the Work which would be
|
|
||||||
prejudicial to the Original Author's honor or reputation. Licensor
|
|
||||||
agrees that in those jurisdictions (e.g. Japan), in which any exercise
|
|
||||||
of the right granted in Section 3(b) of this License (the right to
|
|
||||||
make Adaptations) would be deemed to be a distortion, mutilation,
|
|
||||||
modification or other derogatory action prejudicial to the Original
|
|
||||||
Author's honor and reputation, the Licensor will waive or not assert,
|
|
||||||
as appropriate, this Section, to the fullest extent permitted by the
|
|
||||||
applicable national law, to enable You to reasonably exercise Your
|
|
||||||
right under Section 3(b) of this License (right to make Adaptations)
|
|
||||||
but not otherwise.
|
|
||||||
|
|
||||||
5. Representations, Warranties and Disclaimer
|
|
||||||
|
|
||||||
UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR
|
|
||||||
OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY
|
|
||||||
KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE,
|
|
||||||
INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF
|
|
||||||
LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS,
|
|
||||||
WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION
|
|
||||||
OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
|
|
||||||
|
|
||||||
6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE
|
|
||||||
LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR
|
|
||||||
ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES
|
|
||||||
ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS
|
|
||||||
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
|
||||||
|
|
||||||
7. Termination
|
|
||||||
|
|
||||||
a. This License and the rights granted hereunder will terminate
|
|
||||||
automatically upon any breach by You of the terms of this License.
|
|
||||||
Individuals or entities who have received Adaptations or Collections
|
|
||||||
from You under this License, however, will not have their licenses
|
|
||||||
terminated provided such individuals or entities remain in full
|
|
||||||
compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will
|
|
||||||
survive any termination of this License.
|
|
||||||
b. Subject to the above terms and conditions, the license granted here is
|
|
||||||
perpetual (for the duration of the applicable copyright in the Work).
|
|
||||||
Notwithstanding the above, Licensor reserves the right to release the
|
|
||||||
Work under different license terms or to stop distributing the Work at
|
|
||||||
any time; provided, however that any such election will not serve to
|
|
||||||
withdraw this License (or any other license that has been, or is
|
|
||||||
required to be, granted under the terms of this License), and this
|
|
||||||
License will continue in full force and effect unless terminated as
|
|
||||||
stated above.
|
|
||||||
|
|
||||||
8. Miscellaneous
|
|
||||||
|
|
||||||
a. Each time You Distribute or Publicly Perform the Work or a Collection,
|
|
||||||
the Licensor offers to the recipient a license to the Work on the same
|
|
||||||
terms and conditions as the license granted to You under this License.
|
|
||||||
b. Each time You Distribute or Publicly Perform an Adaptation, Licensor
|
|
||||||
offers to the recipient a license to the original Work on the same
|
|
||||||
terms and conditions as the license granted to You under this License.
|
|
||||||
c. If any provision of this License is invalid or unenforceable under
|
|
||||||
applicable law, it shall not affect the validity or enforceability of
|
|
||||||
the remainder of the terms of this License, and without further action
|
|
||||||
by the parties to this agreement, such provision shall be reformed to
|
|
||||||
the minimum extent necessary to make such provision valid and
|
|
||||||
enforceable.
|
|
||||||
d. No term or provision of this License shall be deemed waived and no
|
|
||||||
breach consented to unless such waiver or consent shall be in writing
|
|
||||||
and signed by the party to be charged with such waiver or consent.
|
|
||||||
e. This License constitutes the entire agreement between the parties with
|
|
||||||
respect to the Work licensed here. There are no understandings,
|
|
||||||
agreements or representations with respect to the Work not specified
|
|
||||||
here. Licensor shall not be bound by any additional provisions that
|
|
||||||
may appear in any communication from You. This License may not be
|
|
||||||
modified without the mutual written agreement of the Licensor and You.
|
|
||||||
f. The rights granted under, and the subject matter referenced, in this
|
|
||||||
License were drafted utilizing the terminology of the Berne Convention
|
|
||||||
for the Protection of Literary and Artistic Works (as amended on
|
|
||||||
September 28, 1979), the Rome Convention of 1961, the WIPO Copyright
|
|
||||||
Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996
|
|
||||||
and the Universal Copyright Convention (as revised on July 24, 1971).
|
|
||||||
These rights and subject matter take effect in the relevant
|
|
||||||
jurisdiction in which the License terms are sought to be enforced
|
|
||||||
according to the corresponding provisions of the implementation of
|
|
||||||
those treaty provisions in the applicable national law. If the
|
|
||||||
standard suite of rights granted under applicable copyright law
|
|
||||||
includes additional rights not granted under this License, such
|
|
||||||
additional rights are deemed to be included in the License; this
|
|
||||||
License is not intended to restrict the license of any rights under
|
|
||||||
applicable law.
|
|
||||||
|
|
||||||
|
|
||||||
Creative Commons Notice
|
Section 1 -- Definitions.
|
||||||
|
|
||||||
Creative Commons is not a party to this License, and makes no warranty
|
a. Adapted Material means material subject to Copyright and Similar
|
||||||
whatsoever in connection with the Work. Creative Commons will not be
|
Rights that is derived from or based upon the Licensed Material
|
||||||
liable to You or any party on any legal theory for any damages
|
and in which the Licensed Material is translated, altered,
|
||||||
whatsoever, including without limitation any general, special,
|
arranged, transformed, or otherwise modified in a manner requiring
|
||||||
incidental or consequential damages arising in connection to this
|
permission under the Copyright and Similar Rights held by the
|
||||||
license. Notwithstanding the foregoing two (2) sentences, if Creative
|
Licensor. For purposes of this Public License, where the Licensed
|
||||||
Commons has expressly identified itself as the Licensor hereunder, it
|
Material is a musical work, performance, or sound recording,
|
||||||
shall have all rights and obligations of Licensor.
|
Adapted Material is always produced where the Licensed Material is
|
||||||
|
synched in timed relation with a moving image.
|
||||||
|
|
||||||
Except for the limited purpose of indicating to the public that the
|
b. Adapter's License means the license You apply to Your Copyright
|
||||||
Work is licensed under the CCPL, Creative Commons does not authorize
|
and Similar Rights in Your contributions to Adapted Material in
|
||||||
the use by either party of the trademark "Creative Commons" or any
|
accordance with the terms and conditions of this Public License.
|
||||||
related trademark or logo of Creative Commons without the prior
|
|
||||||
written consent of Creative Commons. Any permitted use will be in
|
|
||||||
compliance with Creative Commons' then-current trademark usage
|
|
||||||
guidelines, as may be published on its website or otherwise made
|
|
||||||
available upon request from time to time. For the avoidance of doubt,
|
|
||||||
this trademark restriction does not form part of the License.
|
|
||||||
|
|
||||||
Creative Commons may be contacted at http://creativecommons.org/.
|
c. BY-SA Compatible License means a license listed at
|
||||||
|
creativecommons.org/compatiblelicenses, approved by Creative
|
||||||
|
Commons as essentially the equivalent of this Public License.
|
||||||
|
|
||||||
|
d. Copyright and Similar Rights means copyright and/or similar rights
|
||||||
|
closely related to copyright including, without limitation,
|
||||||
|
performance, broadcast, sound recording, and Sui Generis Database
|
||||||
|
Rights, without regard to how the rights are labeled or
|
||||||
|
categorized. For purposes of this Public License, the rights
|
||||||
|
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||||
|
Rights.
|
||||||
|
|
||||||
|
e. Effective Technological Measures means those measures that, in the
|
||||||
|
absence of proper authority, may not be circumvented under laws
|
||||||
|
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||||
|
Treaty adopted on December 20, 1996, and/or similar international
|
||||||
|
agreements.
|
||||||
|
|
||||||
|
f. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||||
|
any other exception or limitation to Copyright and Similar Rights
|
||||||
|
that applies to Your use of the Licensed Material.
|
||||||
|
|
||||||
|
g. License Elements means the license attributes listed in the name
|
||||||
|
of a Creative Commons Public License. The License Elements of this
|
||||||
|
Public License are Attribution and ShareAlike.
|
||||||
|
|
||||||
|
h. Licensed Material means the artistic or literary work, database,
|
||||||
|
or other material to which the Licensor applied this Public
|
||||||
|
License.
|
||||||
|
|
||||||
|
i. Licensed Rights means the rights granted to You subject to the
|
||||||
|
terms and conditions of this Public License, which are limited to
|
||||||
|
all Copyright and Similar Rights that apply to Your use of the
|
||||||
|
Licensed Material and that the Licensor has authority to license.
|
||||||
|
|
||||||
|
j. Licensor means the individual(s) or entity(ies) granting rights
|
||||||
|
under this Public License.
|
||||||
|
|
||||||
|
k. Share means to provide material to the public by any means or
|
||||||
|
process that requires permission under the Licensed Rights, such
|
||||||
|
as reproduction, public display, public performance, distribution,
|
||||||
|
dissemination, communication, or importation, and to make material
|
||||||
|
available to the public including in ways that members of the
|
||||||
|
public may access the material from a place and at a time
|
||||||
|
individually chosen by them.
|
||||||
|
|
||||||
|
l. Sui Generis Database Rights means rights other than copyright
|
||||||
|
resulting from Directive 96/9/EC of the European Parliament and of
|
||||||
|
the Council of 11 March 1996 on the legal protection of databases,
|
||||||
|
as amended and/or succeeded, as well as other essentially
|
||||||
|
equivalent rights anywhere in the world.
|
||||||
|
|
||||||
|
m. You means the individual or entity exercising the Licensed Rights
|
||||||
|
under this Public License. Your has a corresponding meaning.
|
||||||
|
|
||||||
|
|
||||||
|
Section 2 -- Scope.
|
||||||
|
|
||||||
|
a. License grant.
|
||||||
|
|
||||||
|
1. Subject to the terms and conditions of this Public License,
|
||||||
|
the Licensor hereby grants You a worldwide, royalty-free,
|
||||||
|
non-sublicensable, non-exclusive, irrevocable license to
|
||||||
|
exercise the Licensed Rights in the Licensed Material to:
|
||||||
|
|
||||||
|
a. reproduce and Share the Licensed Material, in whole or
|
||||||
|
in part; and
|
||||||
|
|
||||||
|
b. produce, reproduce, and Share Adapted Material.
|
||||||
|
|
||||||
|
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||||
|
Exceptions and Limitations apply to Your use, this Public
|
||||||
|
License does not apply, and You do not need to comply with
|
||||||
|
its terms and conditions.
|
||||||
|
|
||||||
|
3. Term. The term of this Public License is specified in Section
|
||||||
|
6(a).
|
||||||
|
|
||||||
|
4. Media and formats; technical modifications allowed. The
|
||||||
|
Licensor authorizes You to exercise the Licensed Rights in
|
||||||
|
all media and formats whether now known or hereafter created,
|
||||||
|
and to make technical modifications necessary to do so. The
|
||||||
|
Licensor waives and/or agrees not to assert any right or
|
||||||
|
authority to forbid You from making technical modifications
|
||||||
|
necessary to exercise the Licensed Rights, including
|
||||||
|
technical modifications necessary to circumvent Effective
|
||||||
|
Technological Measures. For purposes of this Public License,
|
||||||
|
simply making modifications authorized by this Section 2(a)
|
||||||
|
(4) never produces Adapted Material.
|
||||||
|
|
||||||
|
5. Downstream recipients.
|
||||||
|
|
||||||
|
a. Offer from the Licensor -- Licensed Material. Every
|
||||||
|
recipient of the Licensed Material automatically
|
||||||
|
receives an offer from the Licensor to exercise the
|
||||||
|
Licensed Rights under the terms and conditions of this
|
||||||
|
Public License.
|
||||||
|
|
||||||
|
b. Additional offer from the Licensor -- Adapted Material.
|
||||||
|
Every recipient of Adapted Material from You
|
||||||
|
automatically receives an offer from the Licensor to
|
||||||
|
exercise the Licensed Rights in the Adapted Material
|
||||||
|
under the conditions of the Adapter's License You apply.
|
||||||
|
|
||||||
|
c. No downstream restrictions. You may not offer or impose
|
||||||
|
any additional or different terms or conditions on, or
|
||||||
|
apply any Effective Technological Measures to, the
|
||||||
|
Licensed Material if doing so restricts exercise of the
|
||||||
|
Licensed Rights by any recipient of the Licensed
|
||||||
|
Material.
|
||||||
|
|
||||||
|
6. No endorsement. Nothing in this Public License constitutes or
|
||||||
|
may be construed as permission to assert or imply that You
|
||||||
|
are, or that Your use of the Licensed Material is, connected
|
||||||
|
with, or sponsored, endorsed, or granted official status by,
|
||||||
|
the Licensor or others designated to receive attribution as
|
||||||
|
provided in Section 3(a)(1)(A)(i).
|
||||||
|
|
||||||
|
b. Other rights.
|
||||||
|
|
||||||
|
1. Moral rights, such as the right of integrity, are not
|
||||||
|
licensed under this Public License, nor are publicity,
|
||||||
|
privacy, and/or other similar personality rights; however, to
|
||||||
|
the extent possible, the Licensor waives and/or agrees not to
|
||||||
|
assert any such rights held by the Licensor to the limited
|
||||||
|
extent necessary to allow You to exercise the Licensed
|
||||||
|
Rights, but not otherwise.
|
||||||
|
|
||||||
|
2. Patent and trademark rights are not licensed under this
|
||||||
|
Public License.
|
||||||
|
|
||||||
|
3. To the extent possible, the Licensor waives any right to
|
||||||
|
collect royalties from You for the exercise of the Licensed
|
||||||
|
Rights, whether directly or through a collecting society
|
||||||
|
under any voluntary or waivable statutory or compulsory
|
||||||
|
licensing scheme. In all other cases the Licensor expressly
|
||||||
|
reserves any right to collect such royalties.
|
||||||
|
|
||||||
|
|
||||||
|
Section 3 -- License Conditions.
|
||||||
|
|
||||||
|
Your exercise of the Licensed Rights is expressly made subject to the
|
||||||
|
following conditions.
|
||||||
|
|
||||||
|
a. Attribution.
|
||||||
|
|
||||||
|
1. If You Share the Licensed Material (including in modified
|
||||||
|
form), You must:
|
||||||
|
|
||||||
|
a. retain the following if it is supplied by the Licensor
|
||||||
|
with the Licensed Material:
|
||||||
|
|
||||||
|
i. identification of the creator(s) of the Licensed
|
||||||
|
Material and any others designated to receive
|
||||||
|
attribution, in any reasonable manner requested by
|
||||||
|
the Licensor (including by pseudonym if
|
||||||
|
designated);
|
||||||
|
|
||||||
|
ii. a copyright notice;
|
||||||
|
|
||||||
|
iii. a notice that refers to this Public License;
|
||||||
|
|
||||||
|
iv. a notice that refers to the disclaimer of
|
||||||
|
warranties;
|
||||||
|
|
||||||
|
v. a URI or hyperlink to the Licensed Material to the
|
||||||
|
extent reasonably practicable;
|
||||||
|
|
||||||
|
b. indicate if You modified the Licensed Material and
|
||||||
|
retain an indication of any previous modifications; and
|
||||||
|
|
||||||
|
c. indicate the Licensed Material is licensed under this
|
||||||
|
Public License, and include the text of, or the URI or
|
||||||
|
hyperlink to, this Public License.
|
||||||
|
|
||||||
|
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||||
|
reasonable manner based on the medium, means, and context in
|
||||||
|
which You Share the Licensed Material. For example, it may be
|
||||||
|
reasonable to satisfy the conditions by providing a URI or
|
||||||
|
hyperlink to a resource that includes the required
|
||||||
|
information.
|
||||||
|
|
||||||
|
3. If requested by the Licensor, You must remove any of the
|
||||||
|
information required by Section 3(a)(1)(A) to the extent
|
||||||
|
reasonably practicable.
|
||||||
|
|
||||||
|
b. ShareAlike.
|
||||||
|
|
||||||
|
In addition to the conditions in Section 3(a), if You Share
|
||||||
|
Adapted Material You produce, the following conditions also apply.
|
||||||
|
|
||||||
|
1. The Adapter's License You apply must be a Creative Commons
|
||||||
|
license with the same License Elements, this version or
|
||||||
|
later, or a BY-SA Compatible License.
|
||||||
|
|
||||||
|
2. You must include the text of, or the URI or hyperlink to, the
|
||||||
|
Adapter's License You apply. You may satisfy this condition
|
||||||
|
in any reasonable manner based on the medium, means, and
|
||||||
|
context in which You Share Adapted Material.
|
||||||
|
|
||||||
|
3. You may not offer or impose any additional or different terms
|
||||||
|
or conditions on, or apply any Effective Technological
|
||||||
|
Measures to, Adapted Material that restrict exercise of the
|
||||||
|
rights granted under the Adapter's License You apply.
|
||||||
|
|
||||||
|
|
||||||
|
Section 4 -- Sui Generis Database Rights.
|
||||||
|
|
||||||
|
Where the Licensed Rights include Sui Generis Database Rights that
|
||||||
|
apply to Your use of the Licensed Material:
|
||||||
|
|
||||||
|
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||||
|
to extract, reuse, reproduce, and Share all or a substantial
|
||||||
|
portion of the contents of the database;
|
||||||
|
|
||||||
|
b. if You include all or a substantial portion of the database
|
||||||
|
contents in a database in which You have Sui Generis Database
|
||||||
|
Rights, then the database in which You have Sui Generis Database
|
||||||
|
Rights (but not its individual contents) is Adapted Material,
|
||||||
|
|
||||||
|
including for purposes of Section 3(b); and
|
||||||
|
c. You must comply with the conditions in Section 3(a) if You Share
|
||||||
|
all or a substantial portion of the contents of the database.
|
||||||
|
|
||||||
|
For the avoidance of doubt, this Section 4 supplements and does not
|
||||||
|
replace Your obligations under this Public License where the Licensed
|
||||||
|
Rights include other Copyright and Similar Rights.
|
||||||
|
|
||||||
|
|
||||||
|
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
||||||
|
|
||||||
|
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
||||||
|
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
||||||
|
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
||||||
|
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
||||||
|
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
||||||
|
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
||||||
|
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
||||||
|
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
||||||
|
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||||
|
|
||||||
|
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
||||||
|
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
||||||
|
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
||||||
|
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
||||||
|
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
||||||
|
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
||||||
|
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
|
||||||
|
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
||||||
|
|
||||||
|
c. The disclaimer of warranties and limitation of liability provided
|
||||||
|
above shall be interpreted in a manner that, to the extent
|
||||||
|
possible, most closely approximates an absolute disclaimer and
|
||||||
|
waiver of all liability.
|
||||||
|
|
||||||
|
|
||||||
|
Section 6 -- Term and Termination.
|
||||||
|
|
||||||
|
a. This Public License applies for the term of the Copyright and
|
||||||
|
Similar Rights licensed here. However, if You fail to comply with
|
||||||
|
this Public License, then Your rights under this Public License
|
||||||
|
terminate automatically.
|
||||||
|
|
||||||
|
b. Where Your right to use the Licensed Material has terminated under
|
||||||
|
Section 6(a), it reinstates:
|
||||||
|
|
||||||
|
1. automatically as of the date the violation is cured, provided
|
||||||
|
it is cured within 30 days of Your discovery of the
|
||||||
|
violation; or
|
||||||
|
|
||||||
|
2. upon express reinstatement by the Licensor.
|
||||||
|
|
||||||
|
For the avoidance of doubt, this Section 6(b) does not affect any
|
||||||
|
right the Licensor may have to seek remedies for Your violations
|
||||||
|
of this Public License.
|
||||||
|
|
||||||
|
c. For the avoidance of doubt, the Licensor may also offer the
|
||||||
|
Licensed Material under separate terms or conditions or stop
|
||||||
|
distributing the Licensed Material at any time; however, doing so
|
||||||
|
will not terminate this Public License.
|
||||||
|
|
||||||
|
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
||||||
|
License.
|
||||||
|
|
||||||
|
|
||||||
|
Section 7 -- Other Terms and Conditions.
|
||||||
|
|
||||||
|
a. The Licensor shall not be bound by any additional or different
|
||||||
|
terms or conditions communicated by You unless expressly agreed.
|
||||||
|
|
||||||
|
b. Any arrangements, understandings, or agreements regarding the
|
||||||
|
Licensed Material not stated herein are separate from and
|
||||||
|
independent of the terms and conditions of this Public License.
|
||||||
|
|
||||||
|
|
||||||
|
Section 8 -- Interpretation.
|
||||||
|
|
||||||
|
a. For the avoidance of doubt, this Public License does not, and
|
||||||
|
shall not be interpreted to, reduce, limit, restrict, or impose
|
||||||
|
conditions on any use of the Licensed Material that could lawfully
|
||||||
|
be made without permission under this Public License.
|
||||||
|
|
||||||
|
b. To the extent possible, if any provision of this Public License is
|
||||||
|
deemed unenforceable, it shall be automatically reformed to the
|
||||||
|
minimum extent necessary to make it enforceable. If the provision
|
||||||
|
cannot be reformed, it shall be severed from this Public License
|
||||||
|
without affecting the enforceability of the remaining terms and
|
||||||
|
conditions.
|
||||||
|
|
||||||
|
c. No term or condition of this Public License will be waived and no
|
||||||
|
failure to comply consented to unless expressly agreed to by the
|
||||||
|
Licensor.
|
||||||
|
|
||||||
|
d. Nothing in this Public License constitutes or may be interpreted
|
||||||
|
as a limitation upon, or waiver of, any privileges and immunities
|
||||||
|
that apply to the Licensor or You, including from the legal
|
||||||
|
processes of any jurisdiction or authority.
|
||||||
|
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
|
||||||
|
Creative Commons is not a party to its public
|
||||||
|
licenses. Notwithstanding, Creative Commons may elect to apply one of
|
||||||
|
its public licenses to material it publishes and in those instances
|
||||||
|
will be considered the “Licensor.” The text of the Creative Commons
|
||||||
|
public licenses is dedicated to the public domain under the CC0 Public
|
||||||
|
Domain Dedication. Except for the limited purpose of indicating that
|
||||||
|
material is shared under a Creative Commons public license or as
|
||||||
|
otherwise permitted by the Creative Commons policies published at
|
||||||
|
creativecommons.org/policies, Creative Commons does not authorize the
|
||||||
|
use of the trademark "Creative Commons" or any other trademark or logo
|
||||||
|
of Creative Commons without its prior written consent including,
|
||||||
|
without limitation, in connection with any unauthorized modifications
|
||||||
|
to any of its public licenses or any other arrangements,
|
||||||
|
understandings, or agreements concerning use of licensed material. For
|
||||||
|
the avoidance of doubt, this paragraph does not form part of the
|
||||||
|
public licenses.
|
||||||
|
|
||||||
|
Creative Commons may be contacted at creativecommons.org.
|
||||||
|
104
biome_defs.lua
@ -124,18 +124,6 @@ moretrees.willow_biome = {
|
|||||||
max_count = 5,
|
max_count = 5,
|
||||||
}
|
}
|
||||||
|
|
||||||
moretrees.acacia_biome = {
|
|
||||||
surface = { "default:dirt_with_grass", "default:dirt_with_dry_grass", "default:desert_sand" },
|
|
||||||
avoid_nodes = moretrees.avoidnodes,
|
|
||||||
avoid_radius = 15,
|
|
||||||
seed_diff = 1,
|
|
||||||
rarity = 50,
|
|
||||||
max_count = 15,
|
|
||||||
plantlife_limit = -1,
|
|
||||||
humidity_min = 0.3,
|
|
||||||
humidity_max = 0,
|
|
||||||
}
|
|
||||||
|
|
||||||
moretrees.rubber_tree_biome = {
|
moretrees.rubber_tree_biome = {
|
||||||
surface = "default:dirt_with_grass",
|
surface = "default:dirt_with_grass",
|
||||||
avoid_nodes = moretrees.avoidnodes,
|
avoid_nodes = moretrees.avoidnodes,
|
||||||
@ -189,6 +177,7 @@ moretrees.cedar_biome = {
|
|||||||
avoid_nodes = moretrees.avoidnodes,
|
avoid_nodes = moretrees.avoidnodes,
|
||||||
avoid_radius = 10,
|
avoid_radius = 10,
|
||||||
seed_diff = 336,
|
seed_diff = 336,
|
||||||
|
min_elevation = 0, --Added to solve an issue where cedar trees would sometimes spawn deep underground
|
||||||
near_nodes = {"default:water_source"},
|
near_nodes = {"default:water_source"},
|
||||||
near_nodes_size = 15,
|
near_nodes_size = 15,
|
||||||
near_nodes_count = 5,
|
near_nodes_count = 5,
|
||||||
@ -196,6 +185,97 @@ moretrees.cedar_biome = {
|
|||||||
max_count = 10,
|
max_count = 10,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-- Poplar requires a lot of water.
|
||||||
|
moretrees.poplar_biome = {
|
||||||
|
surface = "default:dirt_with_grass",
|
||||||
|
avoid_nodes = moretrees.avoidnodes,
|
||||||
|
avoid_radius = 6,
|
||||||
|
seed_diff = 341,
|
||||||
|
min_elevation = 0,
|
||||||
|
max_elevation = 50,
|
||||||
|
near_nodes = {"default:water_source"},
|
||||||
|
near_nodes_size = 15,
|
||||||
|
near_nodes_vertical = 5,
|
||||||
|
near_nodes_count = 1,
|
||||||
|
humidity_min = -0.7,
|
||||||
|
humidity_max = -1,
|
||||||
|
rarity = 50,
|
||||||
|
max_count = 15,
|
||||||
|
}
|
||||||
|
|
||||||
|
-- The humidity requirement it quite restrictive (apparently).
|
||||||
|
-- Spawn an occasional poplar elsewhere.
|
||||||
|
moretrees.poplar_biome_2 = {
|
||||||
|
surface = "default:dirt_with_grass",
|
||||||
|
avoid_nodes = moretrees.avoidnodes,
|
||||||
|
avoid_radius = 6,
|
||||||
|
seed_diff = 341,
|
||||||
|
min_elevation = 0,
|
||||||
|
max_elevation = 50,
|
||||||
|
near_nodes = {"default:water_source"},
|
||||||
|
near_nodes_size = 15,
|
||||||
|
near_nodes_vertical = 4,
|
||||||
|
near_nodes_count = 10,
|
||||||
|
humidity_min = 0.1,
|
||||||
|
humidity_max = -0.6,
|
||||||
|
rarity = 50,
|
||||||
|
max_count = 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Subterranean lakes provide enough water for poplars to grow
|
||||||
|
moretrees.poplar_biome_3 = {
|
||||||
|
surface = "default:dirt_with_grass",
|
||||||
|
avoid_nodes = moretrees.avoidnodes,
|
||||||
|
avoid_radius = 6,
|
||||||
|
seed_diff = 342,
|
||||||
|
min_elevation = 0,
|
||||||
|
max_elevation = 50,
|
||||||
|
near_nodes = {"default:water_source"},
|
||||||
|
near_nodes_size = 1,
|
||||||
|
near_nodes_vertical = 25,
|
||||||
|
near_nodes_count = 1,
|
||||||
|
humidity_min = -0.5,
|
||||||
|
humidity_max = -1,
|
||||||
|
rarity = 0,
|
||||||
|
max_count = 30,
|
||||||
|
}
|
||||||
|
|
||||||
|
moretrees.poplar_small_biome = {
|
||||||
|
surface = "default:dirt_with_grass",
|
||||||
|
avoid_nodes = moretrees.avoidnodes,
|
||||||
|
avoid_radius = 4,
|
||||||
|
seed_diff = 343,
|
||||||
|
min_elevation = 0,
|
||||||
|
max_elevation = 50,
|
||||||
|
near_nodes = {"default:water_source"},
|
||||||
|
near_nodes_size = 10,
|
||||||
|
near_nodes_vertical = 5,
|
||||||
|
near_nodes_count = 1,
|
||||||
|
humidity_min = -0.7,
|
||||||
|
humidity_max = -1,
|
||||||
|
rarity = 50,
|
||||||
|
max_count = 10,
|
||||||
|
}
|
||||||
|
|
||||||
|
moretrees.poplar_small_biome_2 = {
|
||||||
|
surface = "default:dirt_with_grass",
|
||||||
|
avoid_nodes = moretrees.avoidnodes,
|
||||||
|
avoid_radius = 4,
|
||||||
|
seed_diff = 343,
|
||||||
|
min_elevation = 0,
|
||||||
|
max_elevation = 50,
|
||||||
|
near_nodes = {"default:water_source"},
|
||||||
|
near_nodes_size = 10,
|
||||||
|
near_nodes_vertical = 4,
|
||||||
|
near_nodes_count = 5,
|
||||||
|
humidity_min = 0.1,
|
||||||
|
humidity_max = -0.6,
|
||||||
|
rarity = 50,
|
||||||
|
max_count = 3,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
moretrees.fir_biome = {
|
moretrees.fir_biome = {
|
||||||
surface = "default:dirt_with_grass",
|
surface = "default:dirt_with_grass",
|
||||||
avoid_nodes = moretrees.avoidnodes,
|
avoid_nodes = moretrees.avoidnodes,
|
||||||
|
102
cocos_palm.lua
@ -1,6 +1,6 @@
|
|||||||
local S = moretrees.intllib
|
|
||||||
|
|
||||||
-- © 2016, Rogier <rogier777@gmail.com>
|
-- © 2016, Rogier <rogier777@gmail.com>
|
||||||
|
-- Translation support
|
||||||
|
local S = minetest.get_translator("moretrees")
|
||||||
|
|
||||||
-- Some constants
|
-- Some constants
|
||||||
|
|
||||||
@ -23,12 +23,16 @@ end
|
|||||||
ftrunk.drop = "moretrees:palm_trunk"
|
ftrunk.drop = "moretrees:palm_trunk"
|
||||||
gftrunk.drop = "moretrees:palm_trunk"
|
gftrunk.drop = "moretrees:palm_trunk"
|
||||||
ftrunk.after_destruct = function(pos, oldnode)
|
ftrunk.after_destruct = function(pos, oldnode)
|
||||||
local coconuts = 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}, {"group:moretrees_coconut"})
|
local coconuts = 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},
|
||||||
|
{"group:moretrees_coconut"}
|
||||||
|
)
|
||||||
for _,coconutpos in pairs(coconuts) do
|
for _,coconutpos in pairs(coconuts) do
|
||||||
-- minetest.dig_node(coconutpos) does not cause nearby coconuts to be dropped :-( ...
|
-- minetest.dig_node(coconutpos) does not cause nearby coconuts to be dropped :-( ...
|
||||||
--minetest.dig_node(coconutpos)
|
--minetest.dig_node(coconutpos)
|
||||||
local items = minetest.get_node_drops(minetest.get_node(coconutpos).name)
|
local items = minetest.get_node_drops(minetest.get_node(coconutpos).name)
|
||||||
minetest.remove_node(coconutpos)
|
minetest.swap_node(coconutpos, biome_lib.air)
|
||||||
for _, itemname in pairs(items) do
|
for _, itemname in pairs(items) do
|
||||||
minetest.add_item(coconutpos, itemname)
|
minetest.add_item(coconutpos, itemname)
|
||||||
end
|
end
|
||||||
@ -46,7 +50,11 @@ local coconut_regrow_abm_spec = {
|
|||||||
interval = moretrees.coconut_flower_interval,
|
interval = moretrees.coconut_flower_interval,
|
||||||
chance = moretrees.coconut_flower_chance,
|
chance = moretrees.coconut_flower_chance,
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||||
local coconuts = 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}, "group:moretrees_coconut")
|
local coconuts = 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},
|
||||||
|
"group:moretrees_coconut"
|
||||||
|
)
|
||||||
-- Expected growth interval increases exponentially with number of coconuts already hanging.
|
-- Expected growth interval increases exponentially with number of coconuts already hanging.
|
||||||
-- Also: if more coconuts are hanging, the chance of picking an empty spot decreases as well...
|
-- Also: if more coconuts are hanging, the chance of picking an empty spot decreases as well...
|
||||||
if math.random(2^#coconuts) <= 2 then
|
if math.random(2^#coconuts) <= 2 then
|
||||||
@ -56,7 +64,7 @@ local coconut_regrow_abm_spec = {
|
|||||||
local coconutpos = {x=pos.x+dx, y=pos.y, z=pos.z+dz}
|
local coconutpos = {x=pos.x+dx, y=pos.y, z=pos.z+dz}
|
||||||
local coconutnode = minetest.get_node(coconutpos)
|
local coconutnode = minetest.get_node(coconutpos)
|
||||||
if coconutnode.name == "air" then
|
if coconutnode.name == "air" then
|
||||||
minetest.set_node(coconutpos, {name="moretrees:coconut_0"})
|
minetest.swap_node(coconutpos, {name="moretrees:coconut_0"})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -76,16 +84,19 @@ minetest.register_abm({
|
|||||||
chance = 1,
|
chance = 1,
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||||
minetest.swap_node(pos, {name="moretrees:palm_fruit_trunk"})
|
minetest.swap_node(pos, {name="moretrees:palm_fruit_trunk"})
|
||||||
local poslist = 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}, "air")
|
local poslist = 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},
|
||||||
|
"air"
|
||||||
|
)
|
||||||
local genlist = {}
|
local genlist = {}
|
||||||
for k,v in pairs(poslist) do
|
for k,v in pairs(poslist) do
|
||||||
genlist[k] = {x = math.random(100), pos = v}
|
genlist[k] = {x = math.random(100), pos = v}
|
||||||
end
|
end
|
||||||
table.sort(genlist, function(a, b) return a.x < b.x; end)
|
table.sort(genlist, function(a, b) return a.x < b.x; end)
|
||||||
local gen
|
|
||||||
local count = 0
|
local count = 0
|
||||||
for _,gen in pairs(genlist) do
|
for _, gen in pairs(genlist) do
|
||||||
minetest.set_node(gen.pos, {name = "moretrees:coconut_3"})
|
minetest.swap_node(gen.pos, {name = "moretrees:coconut_3"})
|
||||||
count = count + 1
|
count = count + 1
|
||||||
if count == 4 then
|
if count == 4 then
|
||||||
break
|
break
|
||||||
@ -109,13 +120,14 @@ local coconut_growfn = function(pos, elapsed)
|
|||||||
-- Drop coconuts (i.e. remove them), so that new coconuts can grow.
|
-- Drop coconuts (i.e. remove them), so that new coconuts can grow.
|
||||||
-- Coconuts will drop as items with a small chance
|
-- Coconuts will drop as items with a small chance
|
||||||
if math.random(coconut_drop_ichance) == 1 then
|
if math.random(coconut_drop_ichance) == 1 then
|
||||||
if moretrees.coconut_item_drop_ichance > 0 and math.random(moretrees.coconut_item_drop_ichance) == 1 then
|
if moretrees.coconut_item_drop_ichance > 0
|
||||||
|
and math.random(moretrees.coconut_item_drop_ichance) == 1 then
|
||||||
local items = minetest.get_node_drops(minetest.get_node(pos).name)
|
local items = minetest.get_node_drops(minetest.get_node(pos).name)
|
||||||
for _, itemname in pairs(items) do
|
for _, itemname in pairs(items) do
|
||||||
minetest.add_item(pos, itemname)
|
minetest.add_item(pos, itemname)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
minetest.remove_node(pos)
|
minetest.swap_node(pos, biome_lib.air)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
-- Grow coconuts to the next stage
|
-- Grow coconuts to the next stage
|
||||||
@ -190,57 +202,97 @@ if moretrees.coconuts_convert_existing_palms then
|
|||||||
local leaves
|
local leaves
|
||||||
local coconuts
|
local coconuts
|
||||||
-- One regular trunk must be adjacent to the coconut
|
-- One regular trunk must be adjacent to the coconut
|
||||||
trunks = 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}, "moretrees:palm_trunk")
|
trunks = 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},
|
||||||
|
"moretrees:palm_trunk"
|
||||||
|
)
|
||||||
if #trunks ~= 1 then
|
if #trunks ~= 1 then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local tpos = trunks[1]
|
local tpos = trunks[1]
|
||||||
-- 1 or 2 other trunks must be one level below to the trunk being converted.
|
-- 1 or 2 other trunks must be one level below to the trunk being converted.
|
||||||
trunks = minetest.find_nodes_in_area({x=tpos.x-1, y=tpos.y-1, z=tpos.z-1}, {x=tpos.x+1, y=tpos.y-1, z=tpos.z+1}, "moretrees:palm_trunk")
|
trunks = minetest.find_nodes_in_area(
|
||||||
|
{x=tpos.x-1, y=tpos.y-1, z=tpos.z-1},
|
||||||
|
{x=tpos.x+1, y=tpos.y-1, z=tpos.z+1},
|
||||||
|
"moretrees:palm_trunk"
|
||||||
|
)
|
||||||
if #trunks < 1 or #trunks > 2 then
|
if #trunks < 1 or #trunks > 2 then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
-- 1 or 2 other trunks must be two levels below to the trunk being converted.
|
-- 1 or 2 other trunks must be two levels below to the trunk being converted.
|
||||||
trunks = minetest.find_nodes_in_area({x=tpos.x-1, y=tpos.y-2, z=tpos.z-1}, {x=tpos.x+1, y=tpos.y-2, z=tpos.z+1}, "moretrees:palm_trunk")
|
trunks = minetest.find_nodes_in_area(
|
||||||
|
{x=tpos.x-1, y=tpos.y-2, z=tpos.z-1},
|
||||||
|
{x=tpos.x+1, y=tpos.y-2, z=tpos.z+1},
|
||||||
|
"moretrees:palm_trunk"
|
||||||
|
)
|
||||||
if #trunks < 1 or #trunks > 2 then
|
if #trunks < 1 or #trunks > 2 then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
-- 1 or 2 trunks must at the level of the trunk being converted.
|
-- 1 or 2 trunks must at the level of the trunk being converted.
|
||||||
cvtrunks = minetest.find_nodes_in_area({x=tpos.x-1, y=tpos.y, z=tpos.z-1}, {x=tpos.x+1, y=tpos.y, z=tpos.z+1}, "moretrees:palm_trunk")
|
cvtrunks = minetest.find_nodes_in_area(
|
||||||
|
{x=tpos.x-1, y=tpos.y, z=tpos.z-1},
|
||||||
|
{x=tpos.x+1, y=tpos.y, z=tpos.z+1},
|
||||||
|
"moretrees:palm_trunk"
|
||||||
|
)
|
||||||
if #cvtrunks < 1 or #cvtrunks > 2 then
|
if #cvtrunks < 1 or #cvtrunks > 2 then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
-- No trunks may be one level above the trunk being converted.
|
-- No trunks may be one level above the trunk being converted.
|
||||||
trunks = minetest.find_nodes_in_area({x=tpos.x-1, y=tpos.y+1, z=tpos.z-1}, {x=tpos.x+1, y=tpos.y+1, z=tpos.z+1}, "moretrees:palm_trunk")
|
trunks = minetest.find_nodes_in_area(
|
||||||
|
{x=tpos.x-1, y=tpos.y+1, z=tpos.z-1},
|
||||||
|
{x=tpos.x+1, y=tpos.y+1, z=tpos.z+1},
|
||||||
|
"moretrees:palm_trunk"
|
||||||
|
)
|
||||||
if #trunks ~= 0 then
|
if #trunks ~= 0 then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
-- Leaves must be one level above the trunk being converted.
|
-- Leaves must be one level above the trunk being converted.
|
||||||
leaves = minetest.find_nodes_in_area({x=tpos.x-1, y=tpos.y+1, z=tpos.z-1}, {x=tpos.x+1, y=tpos.y+1, z=tpos.z+1}, "moretrees:palm_leaves")
|
leaves = minetest.find_nodes_in_area(
|
||||||
|
{x=tpos.x-1, y=tpos.y+1, z=tpos.z-1},
|
||||||
|
{x=tpos.x+1, y=tpos.y+1, z=tpos.z+1},
|
||||||
|
"moretrees:palm_leaves"
|
||||||
|
)
|
||||||
if #leaves == 0 then
|
if #leaves == 0 then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
-- Leaves must be two levels above the trunk being converted.
|
-- Leaves must be two levels above the trunk being converted.
|
||||||
leaves = minetest.find_nodes_in_area({x=tpos.x-1, y=tpos.y+2, z=tpos.z-1}, {x=tpos.x+1, y=tpos.y+2, z=tpos.z+1}, "moretrees:palm_leaves")
|
leaves = minetest.find_nodes_in_area(
|
||||||
|
{x=tpos.x-1, y=tpos.y+2, z=tpos.z-1},
|
||||||
|
{x=tpos.x+1, y=tpos.y+2, z=tpos.z+1},
|
||||||
|
"moretrees:palm_leaves"
|
||||||
|
)
|
||||||
if #leaves == 0 then
|
if #leaves == 0 then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
-- No cocos fruit trunk may already be adjacent to the coconut
|
-- No cocos fruit trunk may already be adjacent to the coconut
|
||||||
trunks = 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}, "moretrees:palm_fruit_trunk")
|
trunks = 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},
|
||||||
|
"moretrees:palm_fruit_trunk"
|
||||||
|
)
|
||||||
if #trunks ~= 0 then
|
if #trunks ~= 0 then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
-- No cocos fruit trunk may be adjacent to or below the trunk being converted.
|
-- No cocos fruit trunk may be adjacent to or below the trunk being converted.
|
||||||
trunks = minetest.find_nodes_in_area({x=tpos.x-1, y=tpos.y-2, z=tpos.z-1}, {x=tpos.x+1, y=tpos.y, z=tpos.z+1}, "moretrees:palm_fruit_trunk")
|
trunks = minetest.find_nodes_in_area(
|
||||||
|
{x=tpos.x-1, y=tpos.y-2, z=tpos.z-1},
|
||||||
|
{x=tpos.x+1, y=tpos.y, z=tpos.z+1},
|
||||||
|
"moretrees:palm_fruit_trunk"
|
||||||
|
)
|
||||||
if #trunks ~= 0 then
|
if #trunks ~= 0 then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
-- Convert trunk and all coconuts nearby. Maybe convert 2 trunks, just in case...
|
-- Convert trunk and all coconuts nearby. Maybe convert 2 trunks, just in case...
|
||||||
for _, tpos in pairs(cvtrunks) do
|
for _, tpos_1 in pairs(cvtrunks) do
|
||||||
minetest.swap_node(tpos, {name = "moretrees:palm_fruit_trunk"})
|
minetest.swap_node(tpos_1, {name = "moretrees:palm_fruit_trunk"})
|
||||||
coconuts = minetest.find_nodes_in_area({x=tpos.x-1, y=tpos.y, z=tpos.z-1}, {x=tpos.x+1, y=tpos.y, z=tpos.z+1}, "moretrees:coconut")
|
coconuts = minetest.find_nodes_in_area(
|
||||||
|
{x=tpos_1.x-1, y=tpos_1.y, z=tpos_1.z-1},
|
||||||
|
{x=tpos_1.x+1, y=tpos_1.y, z=tpos_1.z+1},
|
||||||
|
"moretrees:coconut"
|
||||||
|
)
|
||||||
for _, coconutpos in pairs(coconuts) do
|
for _, coconutpos in pairs(coconuts) do
|
||||||
minetest.set_node(coconutpos, {name = "moretrees:coconut_3"})
|
minetest.swap_node(coconutpos, {name = "moretrees:coconut_3"})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
75
crafts.lua
@ -1,16 +1,8 @@
|
|||||||
local S = moretrees.intllib
|
local S = minetest.get_translator("moretrees")
|
||||||
|
|
||||||
for i in ipairs(moretrees.treelist) do
|
for i in ipairs(moretrees.treelist) do
|
||||||
local treename = moretrees.treelist[i][1]
|
local treename = moretrees.treelist[i][1]
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = "moretrees:"..treename.."_trunk 2",
|
|
||||||
recipe = {
|
|
||||||
{"moretrees:"..treename.."_trunk_sideways"},
|
|
||||||
{"moretrees:"..treename.."_trunk_sideways"}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
type = "shapeless",
|
type = "shapeless",
|
||||||
output = "moretrees:"..treename.."_planks 4",
|
output = "moretrees:"..treename.."_planks 4",
|
||||||
@ -19,14 +11,6 @@ for i in ipairs(moretrees.treelist) do
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "shapeless",
|
|
||||||
output = "moretrees:"..treename.."_planks 4",
|
|
||||||
recipe = {
|
|
||||||
"moretrees:"..treename.."_trunk_sideways"
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
type = "fuel",
|
type = "fuel",
|
||||||
recipe = "moretrees:"..treename.."_sapling",
|
recipe = "moretrees:"..treename.."_sapling",
|
||||||
@ -54,7 +38,8 @@ minetest.register_craftitem("moretrees:coconut_milk", {
|
|||||||
description = S("Coconut Milk"),
|
description = S("Coconut Milk"),
|
||||||
inventory_image = "moretrees_coconut_milk_inv.png",
|
inventory_image = "moretrees_coconut_milk_inv.png",
|
||||||
wield_image = "moretrees_coconut_milk.png",
|
wield_image = "moretrees_coconut_milk.png",
|
||||||
on_use = minetest.item_eat(2),
|
on_use = minetest.item_eat(2, "vessels:drinking_glass"),
|
||||||
|
groups = {vessel = 1},
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craftitem("moretrees:raw_coconut", {
|
minetest.register_craftitem("moretrees:raw_coconut", {
|
||||||
@ -133,11 +118,63 @@ for i in ipairs(moretrees.cutting_tools) do
|
|||||||
},
|
},
|
||||||
replacements = {
|
replacements = {
|
||||||
{ "moretrees:coconut", "moretrees:raw_coconut" },
|
{ "moretrees:coconut", "moretrees:raw_coconut" },
|
||||||
{ tool, tool }
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- give tool back with wear preserved
|
||||||
|
minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv)
|
||||||
|
if (itemstack:get_name() == "moretrees:coconut_milk") then
|
||||||
|
for i, j in pairs(old_craft_grid) do
|
||||||
|
-- find tool used to do the craft
|
||||||
|
local ocg_name = j:get_name()
|
||||||
|
if ((ocg_name ~= "") and (ocg_name ~= "moretrees:coconut") and (ocg_name ~= "vessels:drinking_glass")) then
|
||||||
|
-- abort if using cutting board
|
||||||
|
if minetest.get_item_group(ocg_name, "food_cutting_board") == 1 then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
-- create a new tool and set wear
|
||||||
|
local t = ItemStack(ocg_name)
|
||||||
|
local w = j:get_wear()
|
||||||
|
-- works if tool used is an axe
|
||||||
|
local uses = j:get_tool_capabilities().groupcaps.choppy.uses or 0
|
||||||
|
if (w == 0 and uses ~= 0) then
|
||||||
|
-- tool has never been used
|
||||||
|
-- use tool once
|
||||||
|
t:set_wear(65535/(9*(uses - 1)))
|
||||||
|
else
|
||||||
|
-- set wear back
|
||||||
|
t:set_wear(w)
|
||||||
|
-- use tool once
|
||||||
|
if (uses ~= 0) then
|
||||||
|
t:add_wear(65535/(9*(uses - 1)))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- add to craft inventory
|
||||||
|
craft_inv:add_item("craft", t)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- coconut milk using food_cutting_board from farming redo
|
||||||
|
if minetest.registered_items["farming:cutting_board"] then
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "shapeless",
|
||||||
|
output = "moretrees:coconut_milk",
|
||||||
|
recipe = {
|
||||||
|
"moretrees:coconut",
|
||||||
|
"vessels:drinking_glass",
|
||||||
|
"group:food_cutting_board",
|
||||||
|
},
|
||||||
|
replacements = {
|
||||||
|
{ "moretrees:coconut", "moretrees:raw_coconut" },
|
||||||
|
{ "group:food_cutting_board", "farming:cutting_board" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
type = "shapeless",
|
type = "shapeless",
|
||||||
output = "moretrees:date_nut_snack",
|
output = "moretrees:date_nut_snack",
|
||||||
|
107
date_palm.lua
@ -10,9 +10,8 @@
|
|||||||
-- (e.g. eaten by birds, ...), and a small fraction will drop as items.
|
-- (e.g. eaten by birds, ...), and a small fraction will drop as items.
|
||||||
|
|
||||||
-- © 2016, Rogier <rogier777@gmail.com>
|
-- © 2016, Rogier <rogier777@gmail.com>
|
||||||
-- License: WTFPL
|
|
||||||
|
|
||||||
local S = moretrees.intllib
|
local S = minetest.get_translator("moretrees")
|
||||||
|
|
||||||
-- Some constants
|
-- Some constants
|
||||||
|
|
||||||
@ -22,6 +21,15 @@ local flowers_wither_ichance = 3
|
|||||||
|
|
||||||
-- implementation
|
-- implementation
|
||||||
|
|
||||||
|
local dates_regrow_prob
|
||||||
|
if moretrees.dates_regrow_unpollinated_percent <= 0 then
|
||||||
|
dates_regrow_prob = 0
|
||||||
|
elseif moretrees.dates_regrow_unpollinated_percent >= 100 then
|
||||||
|
dates_regrow_prob = 1
|
||||||
|
else
|
||||||
|
dates_regrow_prob = 1 - math.pow(moretrees.dates_regrow_unpollinated_percent/100, 1/flowers_wither_ichance)
|
||||||
|
end
|
||||||
|
|
||||||
-- Make the date palm fruit trunk a real trunk (it is generated as a fruit)
|
-- Make the date palm fruit trunk a real trunk (it is generated as a fruit)
|
||||||
local trunk = minetest.registered_nodes["moretrees:date_palm_trunk"]
|
local trunk = minetest.registered_nodes["moretrees:date_palm_trunk"]
|
||||||
local ftrunk = {}
|
local ftrunk = {}
|
||||||
@ -36,11 +44,15 @@ for k,v in pairs(trunk.tiles) do
|
|||||||
end
|
end
|
||||||
ftrunk.drop = "moretrees:date_palm_trunk"
|
ftrunk.drop = "moretrees:date_palm_trunk"
|
||||||
ftrunk.after_destruct = function(pos, oldnode)
|
ftrunk.after_destruct = function(pos, oldnode)
|
||||||
local dates = minetest.find_nodes_in_area({x=pos.x-2, y=pos.y, z=pos.z-2}, {x=pos.x+2, y=pos.y, z=pos.z+2}, {"group:moretrees_dates"})
|
local dates = minetest.find_nodes_in_area(
|
||||||
|
{x=pos.x-2, y=pos.y, z=pos.z-2},
|
||||||
|
{x=pos.x+2, y=pos.y, z=pos.z+2},
|
||||||
|
{"group:moretrees_dates"}
|
||||||
|
)
|
||||||
for _,datespos in pairs(dates) do
|
for _,datespos in pairs(dates) do
|
||||||
-- minetest.dig_node(datespos) does not cause nearby dates to be dropped :-( ...
|
-- minetest.dig_node(datespos) does not cause nearby dates to be dropped :-( ...
|
||||||
local items = minetest.get_node_drops(minetest.get_node(datespos).name)
|
local items = minetest.get_node_drops(minetest.get_node(datespos).name)
|
||||||
minetest.remove_node(datespos)
|
minetest.swap_node(datespos, biome_lib.air)
|
||||||
for _, itemname in pairs(items) do
|
for _, itemname in pairs(items) do
|
||||||
minetest.add_item(datespos, itemname)
|
minetest.add_item(datespos, itemname)
|
||||||
end
|
end
|
||||||
@ -83,15 +95,15 @@ local date_regrow_abm_spec = {
|
|||||||
local datenode = minetest.get_node(datepos)
|
local datenode = minetest.get_node(datepos)
|
||||||
if datenode.name == "air" then
|
if datenode.name == "air" then
|
||||||
if node.name == "moretrees:date_palm_ffruit_trunk" then
|
if node.name == "moretrees:date_palm_ffruit_trunk" then
|
||||||
minetest.set_node(datepos, {name="moretrees:dates_f0"})
|
minetest.swap_node(datepos, {name="moretrees:dates_f0"})
|
||||||
else
|
else
|
||||||
minetest.set_node(datepos, {name="moretrees:dates_m0"})
|
minetest.swap_node(datepos, {name="moretrees:dates_m0"})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
if moretrees.dates_regrow then
|
if moretrees.dates_regrow_pollinated or moretrees.dates_regrow_unpollinated_percent > 0 then
|
||||||
minetest.register_abm(date_regrow_abm_spec)
|
minetest.register_abm(date_regrow_abm_spec)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -112,24 +124,31 @@ minetest.register_abm({
|
|||||||
type = "m"
|
type = "m"
|
||||||
minetest.swap_node(pos, {name="moretrees:date_palm_mfruit_trunk"})
|
minetest.swap_node(pos, {name="moretrees:date_palm_mfruit_trunk"})
|
||||||
end
|
end
|
||||||
local dates1 = 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}, "air")
|
local dates1 = minetest.find_nodes_in_area(
|
||||||
local genpos
|
{x=pos.x-1, y=pos.y, z=pos.z-1},
|
||||||
|
{x=pos.x+1, y=pos.y, z=pos.z+1},
|
||||||
|
"air"
|
||||||
|
)
|
||||||
for _,genpos in pairs(dates1) do
|
for _,genpos in pairs(dates1) do
|
||||||
if math.random(100) <= 20 then
|
if math.random(100) <= 20 then
|
||||||
if type == "m" then
|
if type == "m" then
|
||||||
minetest.set_node(genpos, {name = "moretrees:dates_n"})
|
minetest.swap_node(genpos, {name = "moretrees:dates_n"})
|
||||||
else
|
else
|
||||||
minetest.set_node(genpos, {name = "moretrees:dates_f4"})
|
minetest.swap_node(genpos, {name = "moretrees:dates_f4"})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
local dates2 = minetest.find_nodes_in_area({x=pos.x-2, y=pos.y, z=pos.z-2}, {x=pos.x+2, y=pos.y, z=pos.z+2}, "air")
|
local dates2 = minetest.find_nodes_in_area(
|
||||||
|
{x=pos.x-2, y=pos.y, z=pos.z-2},
|
||||||
|
{x=pos.x+2, y=pos.y, z=pos.z+2},
|
||||||
|
"air"
|
||||||
|
)
|
||||||
for _,genpos in pairs(dates2) do
|
for _,genpos in pairs(dates2) do
|
||||||
if math.random(100) <= 5 then
|
if math.random(100) <= 5 then
|
||||||
if type == "m" then
|
if type == "m" then
|
||||||
minetest.set_node(genpos, {name = "moretrees:dates_n"})
|
minetest.swap_node(genpos, {name = "moretrees:dates_n"})
|
||||||
else
|
else
|
||||||
minetest.set_node(genpos, {name = "moretrees:dates_f4"})
|
minetest.swap_node(genpos, {name = "moretrees:dates_f4"})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -187,7 +206,7 @@ local function find_fruit_trunks_near(ftpos, sect)
|
|||||||
local r = moretrees.dates_pollination_distance + 2 * math.sqrt(2)
|
local r = moretrees.dates_pollination_distance + 2 * math.sqrt(2)
|
||||||
local sect_hr = math.floor(r / 3 + 0.9999)
|
local sect_hr = math.floor(r / 3 + 0.9999)
|
||||||
local sect_vr = math.floor(r / 2 + 0.9999)
|
local sect_vr = math.floor(r / 2 + 0.9999)
|
||||||
local t0us = core.get_us_time()
|
local t0us = minetest.get_us_time()
|
||||||
local t0s = os.time()
|
local t0s = os.time()
|
||||||
|
|
||||||
-- Compute elapsed time since last search.
|
-- Compute elapsed time since last search.
|
||||||
@ -214,13 +233,18 @@ local function find_fruit_trunks_near(ftpos, sect)
|
|||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local basevec = { x = ftpos.x + 2 * sect.x * sect_hr,
|
||||||
|
y = ftpos.y,
|
||||||
|
z = ftpos.z + 2 * sect.z * sect_hr}
|
||||||
|
-- find_nodes_in_area is limited to 82^3, make sure to not overrun it
|
||||||
|
local sizevec = { x = sect_hr, y = sect_vr, z = sect_hr }
|
||||||
|
if sect_hr * sect_hr * sect_vr > 41^3 then
|
||||||
|
sizevec = vector.apply(sizevec, function(a) return math.min(a, 41) end)
|
||||||
|
end
|
||||||
|
|
||||||
local all_palms = minetest.find_nodes_in_area(
|
local all_palms = minetest.find_nodes_in_area(
|
||||||
{ x = ftpos.x + 2 * sect.x * sect_hr - sect_hr,
|
vector.subtract(basevec, sizevec),
|
||||||
y = ftpos.y - sect_vr,
|
vector.add(basevec, sizevec),
|
||||||
z = ftpos.z + 2 * sect.z * sect_hr - sect_hr },
|
|
||||||
{ x = ftpos.x + 2 * sect.x * sect_hr + sect_hr,
|
|
||||||
y = ftpos.y + sect_vr,
|
|
||||||
z = ftpos.z + 2 * sect.z * sect_hr + sect_hr },
|
|
||||||
{"moretrees:date_palm_mfruit_trunk", "moretrees:date_palm_ffruit_trunk"})
|
{"moretrees:date_palm_mfruit_trunk", "moretrees:date_palm_ffruit_trunk"})
|
||||||
|
|
||||||
-- Collect different palms in separate lists.
|
-- Collect different palms in separate lists.
|
||||||
@ -253,7 +277,7 @@ local function find_fruit_trunks_near(ftpos, sect)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Update search statistics
|
-- Update search statistics
|
||||||
local t1us = core.get_us_time()
|
local t1us = minetest.get_us_time()
|
||||||
if t1us < t0us then
|
if t1us < t0us then
|
||||||
-- Wraparound. Assume the search lasted less than 2^32 microseconds (~71 min)
|
-- Wraparound. Assume the search lasted less than 2^32 microseconds (~71 min)
|
||||||
-- (so no need to apply another correction)
|
-- (so no need to apply another correction)
|
||||||
@ -276,11 +300,11 @@ end
|
|||||||
local function dates_print_search_stats(log)
|
local function dates_print_search_stats(log)
|
||||||
local stats
|
local stats
|
||||||
if sect_search_stats.count > 0 then
|
if sect_search_stats.count > 0 then
|
||||||
stats = string.format("Male date tree searching stats: count: %d/%d: average: %d µs (%d..%d)",
|
stats = string.format("Male date tree searching stats: searches: %d/%d: average: %d µs (%d..%d)",
|
||||||
sect_search_stats.count, sect_search_stats.count + sect_search_stats.skip,
|
sect_search_stats.count, sect_search_stats.count + sect_search_stats.skip,
|
||||||
sect_search_stats.sum/sect_search_stats.count, sect_search_stats.min, sect_search_stats.max)
|
sect_search_stats.sum/sect_search_stats.count, sect_search_stats.min, sect_search_stats.max)
|
||||||
else
|
else
|
||||||
stats = string.format("Male date tree searching stats: (not yet available)")
|
stats = string.format("Male date tree searching stats: searches: 0/0: average: (no searches yet)")
|
||||||
end
|
end
|
||||||
if log then
|
if log then
|
||||||
minetest.log("action", "[moretrees] " .. stats)
|
minetest.log("action", "[moretrees] " .. stats)
|
||||||
@ -293,7 +317,7 @@ minetest.register_chatcommand("dates_stats", {
|
|||||||
params = "|chat|log|reset",
|
params = "|chat|log|reset",
|
||||||
privs = { server = true },
|
privs = { server = true },
|
||||||
func = function(name, param)
|
func = function(name, param)
|
||||||
param = string.lower(string.trim(param))
|
param = string.lower(param:gsub("%s+", ""))
|
||||||
if param == "" or param == "chat" then
|
if param == "" or param == "chat" then
|
||||||
return dates_print_search_stats(false)
|
return dates_print_search_stats(false)
|
||||||
elseif param == "log" then
|
elseif param == "log" then
|
||||||
@ -513,20 +537,24 @@ end
|
|||||||
local dates_growfn = function(pos, elapsed)
|
local dates_growfn = function(pos, elapsed)
|
||||||
local node = minetest.get_node(pos)
|
local node = minetest.get_node(pos)
|
||||||
local delay = moretrees.dates_grow_interval
|
local delay = moretrees.dates_grow_interval
|
||||||
local r = moretrees.dates_pollination_distance
|
|
||||||
local action
|
local action
|
||||||
if not node then
|
if not node then
|
||||||
return
|
return
|
||||||
elseif not moretrees.dates_regrow then
|
elseif not moretrees.dates_regrow_pollinated and dates_regrow_prob == 0 then
|
||||||
|
-- Regrowing of dates is disabled.
|
||||||
if string.find(node.name, "moretrees:dates_f") then
|
if string.find(node.name, "moretrees:dates_f") then
|
||||||
minetest.swap_node(pos, {name="moretrees:dates_f4"})
|
minetest.swap_node(pos, {name="moretrees:dates_f4"})
|
||||||
elseif string.find(node.name, "moretrees:dates_m") then
|
elseif string.find(node.name, "moretrees:dates_m") then
|
||||||
minetest.swap_node(pos, {name="moretrees:dates_n"})
|
minetest.swap_node(pos, {name="moretrees:dates_n"})
|
||||||
else
|
else
|
||||||
minetest.remove_node(pos)
|
minetest.swap_node(pos, biome_lib.air)
|
||||||
end
|
end
|
||||||
return
|
return
|
||||||
elseif node.name == "moretrees:dates_f0" and find_male_blossom(pos) then
|
elseif node.name == "moretrees:dates_f0" and math.random(100) <= 100 * dates_regrow_prob then
|
||||||
|
-- Dates grow unpollinated
|
||||||
|
minetest.swap_node(pos, {name="moretrees:dates_f1"})
|
||||||
|
action = "nopollinate"
|
||||||
|
elseif node.name == "moretrees:dates_f0" and moretrees.dates_regrow_pollinated and find_male_blossom(pos) then
|
||||||
-- Pollinate flowers
|
-- Pollinate flowers
|
||||||
minetest.swap_node(pos, {name="moretrees:dates_f1"})
|
minetest.swap_node(pos, {name="moretrees:dates_f1"})
|
||||||
action = "pollinate"
|
action = "pollinate"
|
||||||
@ -559,7 +587,7 @@ local dates_growfn = function(pos, elapsed)
|
|||||||
elseif string.match(node.name, "n$") then
|
elseif string.match(node.name, "n$") then
|
||||||
-- Remove stems.
|
-- Remove stems.
|
||||||
if math.random(stems_drop_ichance) == 1 then
|
if math.random(stems_drop_ichance) == 1 then
|
||||||
minetest.remove_node(pos)
|
minetest.swap_node(pos, biome_lib.air)
|
||||||
return "stemdrop"
|
return "stemdrop"
|
||||||
end
|
end
|
||||||
action = "nostemdrop"
|
action = "nostemdrop"
|
||||||
@ -576,15 +604,16 @@ local dates_growfn = function(pos, elapsed)
|
|||||||
return action
|
return action
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--[[
|
||||||
-- Alternate growth function for dates.
|
-- Alternate growth function for dates.
|
||||||
-- It calls the primary growth function, but also measures CPU time consumed.
|
-- It calls the primary growth function, but also measures CPU time consumed.
|
||||||
-- Use this function to analyze date growing performance.
|
-- Use this function to analyze date growing performance.
|
||||||
local stat = {}
|
local stat = {}
|
||||||
stat.count = 0
|
stat.count = 0
|
||||||
local dates_growfn_profiling = function(pos, elapsed)
|
local dates_growfn_profiling = function(pos, elapsed)
|
||||||
local t0 = core.get_us_time()
|
local t0 = minetest.get_us_time()
|
||||||
local action = dates_growfn(pos, elapsed)
|
local action = dates_growfn(pos, elapsed)
|
||||||
local t1 = core.get_us_time()
|
local t1 = minetest.get_us_time()
|
||||||
if t1 < t0 then
|
if t1 < t0 then
|
||||||
t1 = t1 + 2^32
|
t1 = t1 + 2^32
|
||||||
end
|
end
|
||||||
@ -614,13 +643,13 @@ local dates_growfn_profiling = function(pos, elapsed)
|
|||||||
local sum = 0
|
local sum = 0
|
||||||
local count = 0
|
local count = 0
|
||||||
if sect_search_stats.count > 0 and stat.pollinate and stat.pollinate.count > 0 then
|
if sect_search_stats.count > 0 and stat.pollinate and stat.pollinate.count > 0 then
|
||||||
print(string.format("\t%-10s: %6d (%4.1f%%): %6dus (%d..%d)",
|
print(string.format("\t%-12s: %6d (%4.1f%%): %6dus (%d..%d)",
|
||||||
"search", sect_search_stats.count,
|
"search", sect_search_stats.count,
|
||||||
100*sect_search_stats.count/stat.pollinate.count,
|
100*sect_search_stats.count/stat.pollinate.count,
|
||||||
sect_search_stats.sum/sect_search_stats.count,
|
sect_search_stats.sum/sect_search_stats.count,
|
||||||
sect_search_stats.min, sect_search_stats.max))
|
sect_search_stats.min, sect_search_stats.max))
|
||||||
else
|
else
|
||||||
print(string.format("\t%-10s: %6d (%4.1f%%): %6dus (%d..%d)",
|
print(string.format("\t%-12s: %6d (%4.1f%%): %6dus (%d..%d)",
|
||||||
"search", sect_search_stats.count,
|
"search", sect_search_stats.count,
|
||||||
0, 0, 0, 0))
|
0, 0, 0, 0))
|
||||||
end
|
end
|
||||||
@ -628,16 +657,17 @@ local dates_growfn_profiling = function(pos, elapsed)
|
|||||||
if action ~= "count" then
|
if action ~= "count" then
|
||||||
count = count + data.count
|
count = count + data.count
|
||||||
sum = sum + data.sum
|
sum = sum + data.sum
|
||||||
print(string.format("\t%-10s: %6d (%4.1f%%): %6dus (%d..%d)",
|
print(string.format("\t%-12s: %6d (%4.1f%%): %6dus (%d..%d)",
|
||||||
action, data.count,
|
action, data.count,
|
||||||
100*data.count/stat.count, data.sum/data.count,
|
100*data.count/stat.count, data.sum/data.count,
|
||||||
data.min, data.max))
|
data.min, data.max))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
print(string.format("\t%-10s: %6d ( 100%%): %6dus",
|
print(string.format("\t%-12s: %6d ( 100%%): %6dus",
|
||||||
"TOTAL", count, sum/count))
|
"TOTAL", count, sum/count))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
--]]
|
||||||
|
|
||||||
-- Register dates
|
-- Register dates
|
||||||
|
|
||||||
@ -696,14 +726,15 @@ for _,suffix in ipairs({"f0", "f1", "f2", "f3", "f4", "m0", "fn", "n"}) do
|
|||||||
fixed = {-0.3, -0.3, -0.3, 0.3, 3.5, 0.3}
|
fixed = {-0.3, -0.3, -0.3, 0.3, 3.5, 0.3}
|
||||||
},
|
},
|
||||||
on_timer = dates_growfn,
|
on_timer = dates_growfn,
|
||||||
on_construct = moretrees.dates_regrow and dates_starttimer,
|
on_construct = (moretrees.dates_regrow_pollinated or moretrees.dates_regrow_unpollinated_percent > 0)
|
||||||
|
and dates_starttimer,
|
||||||
|
|
||||||
}
|
}
|
||||||
minetest.register_node("moretrees:dates_"..suffix, datedef)
|
minetest.register_node("moretrees:dates_"..suffix, datedef)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- If regrowing was previously disabled, but is enabled now, make sure timers are started for existing dates
|
-- If regrowing was previously disabled, but is enabled now, make sure timers are started for existing dates
|
||||||
if moretrees.dates_regrow then
|
if moretrees.dates_regrow_pollinated or moretrees.dates_regrow_unpollinated_percent > 0 then
|
||||||
local spec = {
|
local spec = {
|
||||||
name = "moretrees:restart_dates_regrow_timer",
|
name = "moretrees:restart_dates_regrow_timer",
|
||||||
nodenames = "group:moretrees_dates",
|
nodenames = "group:moretrees_dates",
|
||||||
|
@ -10,26 +10,31 @@ moretrees.enable_date_palm = true
|
|||||||
moretrees.enable_cedar = true
|
moretrees.enable_cedar = true
|
||||||
moretrees.enable_rubber_tree = true
|
moretrees.enable_rubber_tree = true
|
||||||
moretrees.enable_willow = true
|
moretrees.enable_willow = true
|
||||||
moretrees.enable_acacia = true
|
|
||||||
moretrees.enable_birch = true
|
moretrees.enable_birch = true
|
||||||
moretrees.enable_spruce = true
|
moretrees.enable_spruce = true
|
||||||
moretrees.enable_jungle_tree = true
|
moretrees.enable_jungle_tree = true
|
||||||
moretrees.enable_fir = true
|
moretrees.enable_fir = true
|
||||||
|
moretrees.enable_poplar = true
|
||||||
moretrees.enable_beech = false
|
moretrees.enable_beech = false
|
||||||
|
|
||||||
-- set this to true to make moretrees spawn saplings at mapgen time instead
|
-- set this to true to make moretrees spawn saplings at mapgen time instead
|
||||||
-- of fully-grown trees, which will grow into full trees after a very short
|
-- of fully-grown trees, which will grow into full trees after a very short
|
||||||
-- delay. This reduces mapgen lag in some situations.
|
-- delay. This reduces mapgen lag in some situations, and fixes situations
|
||||||
|
-- where the mapgen conflicts with the tree generator.
|
||||||
|
|
||||||
moretrees.spawn_saplings = false
|
moretrees.spawn_saplings = true
|
||||||
|
|
||||||
-- Set this to true to allow defining stairs/slabs/etc. If Moreblocks is
|
-- Set this to true to allow defining stairs/slabs/etc. If Moreblocks is
|
||||||
-- installed, this will use that mod's Stairs Plus component. Otherwise, it
|
-- installed, this will use that mod's Stairs Plus component. Otherwise, it
|
||||||
-- will use the default stairs mod in minetest_game, if present
|
-- will use the default stairs mod in minetest_game, if present
|
||||||
|
|
||||||
moretrees.enable_stairs = true
|
moretrees.enable_stairs = true
|
||||||
|
|
||||||
-- Set this to true if you want the plantlike drawtype for leaves, which
|
-- If this variable is set to true, register fences for moretrees wood
|
||||||
|
|
||||||
|
moretrees.enable_fences = false
|
||||||
|
|
||||||
|
-- Set this to true if you want the plantlike drawtype for leaves, which
|
||||||
-- improves some peoples' framerates without resorting to making leaf nodes opaque.
|
-- improves some peoples' framerates without resorting to making leaf nodes opaque.
|
||||||
-- Affects default leaves and default jungle leaves also.
|
-- Affects default leaves and default jungle leaves also.
|
||||||
|
|
||||||
@ -75,7 +80,29 @@ moretrees.coconut_item_drop_ichance = 10 -- inverse probability of ripe coconu
|
|||||||
|
|
||||||
-- Date palm settings
|
-- Date palm settings
|
||||||
|
|
||||||
moretrees.dates_regrow = true
|
-- Suggested configuration alternatives:
|
||||||
|
-- - Dates grow only when pollinated:
|
||||||
|
-- - Set dates_regrow_pollinated to true
|
||||||
|
-- - Set dates_regrow_unpollinated_percent to 0
|
||||||
|
-- - Dates grow without pollination. Pollination disabled:
|
||||||
|
-- - Set dates_regrow_pollinated to false
|
||||||
|
-- - Set dates_regrow_unpollinated_percent to some larger positive value, e.g. 95
|
||||||
|
-- - Dates grow, but more and faster if male flowers are nearby
|
||||||
|
-- - Set dates_regrow_pollinated to true
|
||||||
|
-- - Set dates_regrow_unpollinated_percent to some small positive value, e.g. 33
|
||||||
|
-- - Optional but recommended: Reduce the pollination distance, e.g. to 30
|
||||||
|
|
||||||
|
-- Note that it should not be necessary to disable pollination for performance
|
||||||
|
-- reasons. A lot of effort has gone into ensuring that date growing will not cause lag.
|
||||||
|
--
|
||||||
|
-- If lag is suspected, use the chat command '/dates_stats' to obtain the male dates
|
||||||
|
-- search time, as well as the counts of total number of searches requested and the
|
||||||
|
-- number of searches actually performed.
|
||||||
|
|
||||||
|
moretrees.dates_regrow_pollinated = true -- Enable pollination. If enabled, male trees are required for dates to grow.
|
||||||
|
-- If disabled, dates_regrow_unpollinated_percent must be non-zero for dates to regrow.
|
||||||
|
moretrees.dates_regrow_unpollinated_percent = 0 -- Percentage of female dates becoming dates without being pollinated.
|
||||||
|
-- If 0, dates_regrow_pollinated must be enabled for dates to grow.
|
||||||
moretrees.dates_female_percent = 57 -- Ratio of female to male trees - tune this to improve # of generated trees that actually bear fruit
|
moretrees.dates_female_percent = 57 -- Ratio of female to male trees - tune this to improve # of generated trees that actually bear fruit
|
||||||
-- ~57% gives near optimal results for groups of 3 random trees, while it is only slightly suboptimal
|
-- ~57% gives near optimal results for groups of 3 random trees, while it is only slightly suboptimal
|
||||||
-- for groups of 2 and 4 random trees (~2% less fruit than optimal).
|
-- for groups of 2 and 4 random trees (~2% less fruit than optimal).
|
||||||
@ -83,7 +110,7 @@ moretrees.dates_female_percent = 57 -- Ratio of female to male trees - tune th
|
|||||||
-- So 57% is optimal for small groups of trees. As larger groups have more female palms anyway, a
|
-- So 57% is optimal for small groups of trees. As larger groups have more female palms anyway, a
|
||||||
-- less than optimal proportion of female to male trees is not a problem.
|
-- less than optimal proportion of female to male trees is not a problem.
|
||||||
moretrees.dates_pollination_distance = 120
|
moretrees.dates_pollination_distance = 120
|
||||||
moretrees.dates_blossom_search_time_treshold = 1000 -- If average male blossom search time exceeds this, start limiting the search load.
|
moretrees.dates_blossom_search_time_treshold = 1000 -- If average male blossom search time (in microseconds) exceeds this, start limiting the search load.
|
||||||
moretrees.dates_blossom_search_iload = 10 -- Inverse fraction of CPU time that male blossom searching search may consume.
|
moretrees.dates_blossom_search_iload = 10 -- Inverse fraction of CPU time that male blossom searching search may consume.
|
||||||
-- As searching a large area (radius: dates_pollination_distance/3 per attempt) can cause lag,
|
-- As searching a large area (radius: dates_pollination_distance/3 per attempt) can cause lag,
|
||||||
-- this limits the search frequency server-wide so that the impact on server lag is minimised
|
-- this limits the search frequency server-wide so that the impact on server lag is minimised
|
||||||
@ -99,8 +126,8 @@ moretrees.dates_item_drop_ichance = 10 -- inverse probability of ripe dates dr
|
|||||||
|
|
||||||
-- Sapling settings
|
-- Sapling settings
|
||||||
|
|
||||||
moretrees.sapling_interval = 500
|
moretrees.sapling_interval = 100
|
||||||
moretrees.sapling_chance = 20
|
moretrees.sapling_chance = 5
|
||||||
|
|
||||||
-- If this variable is set to true, drop leaves out as entities during leaf
|
-- If this variable is set to true, drop leaves out as entities during leaf
|
||||||
-- decay, rather than just disappearing them.
|
-- decay, rather than just disappearing them.
|
||||||
|
@ -1,8 +0,0 @@
|
|||||||
default
|
|
||||||
biome_lib
|
|
||||||
vessels
|
|
||||||
stairs?
|
|
||||||
moreblocks?
|
|
||||||
intllib?
|
|
||||||
farming?
|
|
||||||
|
|
@ -1 +0,0 @@
|
|||||||
This mod adds a whole bunch of new types of trees to the game
|
|
101
init.lua
@ -2,21 +2,54 @@
|
|||||||
--
|
--
|
||||||
-- This mod adds more types of trees to the game
|
-- This mod adds more types of trees to the game
|
||||||
--
|
--
|
||||||
-- Some of the node definitions and textures came from cisoun's conifers mod
|
-- Some of the node definitions and textures came from cisoun's conifers mod
|
||||||
-- and bas080's jungle trees mod.
|
-- and bas080's jungle trees mod.
|
||||||
--
|
--
|
||||||
-- Brought together into one mod and made L-systems compatible by Vanessa
|
-- Brought together into one mod and made L-systems compatible by Vanessa
|
||||||
-- Ezekowitz.
|
-- Ezekowitz.
|
||||||
--
|
--
|
||||||
-- Firs and Jungle tree axioms/rules by Vanessa Ezekowitz, with the
|
-- Firs and Jungle tree axioms/rules by Vanessa Dannenberg, with the
|
||||||
-- latter having been tweaked by RealBadAngel, most other axioms/rules written
|
-- latter having been tweaked by RealBadAngel, most other axioms/rules written
|
||||||
-- by RealBadAngel.
|
-- by RealBadAngel.
|
||||||
--
|
--
|
||||||
-- License: WTFPL for all parts (code and textures, including those copied
|
|
||||||
-- from the the old jungletree and conifers mods).
|
|
||||||
|
|
||||||
moretrees = {}
|
moretrees = {}
|
||||||
|
|
||||||
|
minetest.override_item("default:sapling", {
|
||||||
|
description = "Sapling"
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.override_item("default:tree", {
|
||||||
|
description = "Tree"
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.override_item("default:wood", {
|
||||||
|
description = "Wooden Planks"
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.override_item("default:leaves", {
|
||||||
|
description = "Leaves"
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.override_item("default:fence_wood", {
|
||||||
|
description = "Wooden Fence"
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.override_item("default:fence_rail_wood", {
|
||||||
|
description = "Wooden Fence Rail"
|
||||||
|
})
|
||||||
|
|
||||||
|
if minetest.get_modpath("doors") then
|
||||||
|
minetest.override_item("doors:gate_wood_closed", {
|
||||||
|
description = "Wooden Fence Gate"
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.override_item("doors:gate_wood_open", {
|
||||||
|
description = "Wooden Fence Gate"
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
-- Read the default config file (and if necessary, copy it to the world folder).
|
-- Read the default config file (and if necessary, copy it to the world folder).
|
||||||
|
|
||||||
local worldpath=minetest.get_worldpath()
|
local worldpath=minetest.get_worldpath()
|
||||||
@ -29,29 +62,11 @@ if io.open(worldpath.."/moretrees_settings.txt","r") then
|
|||||||
dofile(worldpath.."/moretrees_settings.txt")
|
dofile(worldpath.."/moretrees_settings.txt")
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Boilerplate to support localized strings if intllib mod is installed.
|
|
||||||
local S
|
|
||||||
if minetest.get_modpath("intllib") then
|
|
||||||
S = intllib.Getter()
|
|
||||||
else
|
|
||||||
S = function(s) return s end
|
|
||||||
end
|
|
||||||
moretrees.intllib = S
|
|
||||||
|
|
||||||
-- clone node
|
|
||||||
|
|
||||||
function moretrees.clone_node(name)
|
|
||||||
local node2 = {}
|
|
||||||
local node = minetest.registered_nodes[name]
|
|
||||||
for k,v in pairs(node) do
|
|
||||||
node2[k]=v
|
|
||||||
end
|
|
||||||
return node2
|
|
||||||
end
|
|
||||||
|
|
||||||
-- infinite stacks checking
|
-- infinite stacks checking
|
||||||
|
|
||||||
if minetest.get_modpath("unified_inventory") or not minetest.setting_getbool("creative_mode") then
|
if minetest.get_modpath("unified_inventory") or not
|
||||||
|
minetest.settings:get_bool("creative_mode") then
|
||||||
moretrees.expect_infinite_stacks = false
|
moretrees.expect_infinite_stacks = false
|
||||||
else
|
else
|
||||||
moretrees.expect_infinite_stacks = true
|
moretrees.expect_infinite_stacks = true
|
||||||
@ -91,12 +106,13 @@ if moretrees.spawn_saplings then
|
|||||||
moretrees.spawn_cedar_object = "moretrees:cedar_sapling_ongen"
|
moretrees.spawn_cedar_object = "moretrees:cedar_sapling_ongen"
|
||||||
moretrees.spawn_rubber_tree_object = "moretrees:rubber_tree_sapling_ongen"
|
moretrees.spawn_rubber_tree_object = "moretrees:rubber_tree_sapling_ongen"
|
||||||
moretrees.spawn_willow_object = "moretrees:willow_sapling_ongen"
|
moretrees.spawn_willow_object = "moretrees:willow_sapling_ongen"
|
||||||
moretrees.spawn_acacia_object = "moretrees:acacia_sapling_ongen"
|
|
||||||
moretrees.spawn_birch_object = "moretrees:birch_sapling_ongen"
|
moretrees.spawn_birch_object = "moretrees:birch_sapling_ongen"
|
||||||
moretrees.spawn_spruce_object = "moretrees:spruce_sapling_ongen"
|
moretrees.spawn_spruce_object = "moretrees:spruce_sapling_ongen"
|
||||||
moretrees.spawn_jungletree_object = "moretrees:jungletree_sapling_ongen"
|
moretrees.spawn_jungletree_object = "moretrees:jungletree_sapling_ongen"
|
||||||
moretrees.spawn_fir_object = "moretrees:fir_sapling_ongen"
|
moretrees.spawn_fir_object = "moretrees:fir_sapling_ongen"
|
||||||
moretrees.spawn_fir_snow_object = "snow:sapling_pine"
|
moretrees.spawn_fir_snow_object = "snow:sapling_pine"
|
||||||
|
moretrees.spawn_poplar_object = "moretrees:poplar_sapling_ongen"
|
||||||
|
moretrees.spawn_poplar_small_object = "moretrees:poplar_small_sapling_ongen"
|
||||||
else
|
else
|
||||||
moretrees.spawn_beech_object = moretrees.beech_model
|
moretrees.spawn_beech_object = moretrees.beech_model
|
||||||
moretrees.spawn_apple_tree_object = moretrees.apple_tree_model
|
moretrees.spawn_apple_tree_object = moretrees.apple_tree_model
|
||||||
@ -107,12 +123,13 @@ else
|
|||||||
moretrees.spawn_cedar_object = moretrees.cedar_model
|
moretrees.spawn_cedar_object = moretrees.cedar_model
|
||||||
moretrees.spawn_rubber_tree_object = moretrees.rubber_tree_model
|
moretrees.spawn_rubber_tree_object = moretrees.rubber_tree_model
|
||||||
moretrees.spawn_willow_object = moretrees.willow_model
|
moretrees.spawn_willow_object = moretrees.willow_model
|
||||||
moretrees.spawn_acacia_object = moretrees.acacia_model
|
|
||||||
moretrees.spawn_birch_object = "moretrees.grow_birch"
|
moretrees.spawn_birch_object = "moretrees.grow_birch"
|
||||||
moretrees.spawn_spruce_object = "moretrees.grow_spruce"
|
moretrees.spawn_spruce_object = "moretrees.grow_spruce"
|
||||||
moretrees.spawn_jungletree_object = "moretrees.grow_jungletree"
|
moretrees.spawn_jungletree_object = "moretrees.grow_jungletree"
|
||||||
moretrees.spawn_fir_object = "moretrees.grow_fir"
|
moretrees.spawn_fir_object = "moretrees.grow_fir"
|
||||||
moretrees.spawn_fir_snow_object = "moretrees.grow_fir_snow"
|
moretrees.spawn_fir_snow_object = "moretrees.grow_fir_snow"
|
||||||
|
moretrees.spawn_poplar_object = moretrees.poplar_model
|
||||||
|
moretrees.spawn_poplar_small_object = moretrees.poplar_small_model
|
||||||
end
|
end
|
||||||
|
|
||||||
if moretrees.enable_beech then
|
if moretrees.enable_beech then
|
||||||
@ -152,10 +169,6 @@ if moretrees.enable_willow then
|
|||||||
biome_lib:register_generate_plant(moretrees.willow_biome, moretrees.spawn_willow_object)
|
biome_lib:register_generate_plant(moretrees.willow_biome, moretrees.spawn_willow_object)
|
||||||
end
|
end
|
||||||
|
|
||||||
if moretrees.enable_acacia then
|
|
||||||
biome_lib:register_generate_plant(moretrees.acacia_biome, moretrees.spawn_acacia_object)
|
|
||||||
end
|
|
||||||
|
|
||||||
if moretrees.enable_birch then
|
if moretrees.enable_birch then
|
||||||
biome_lib:register_generate_plant(moretrees.birch_biome, moretrees.spawn_birch_object)
|
biome_lib:register_generate_plant(moretrees.birch_biome, moretrees.spawn_birch_object)
|
||||||
end
|
end
|
||||||
@ -175,10 +188,18 @@ if moretrees.enable_fir then
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if moretrees.enable_poplar then
|
||||||
|
biome_lib:register_generate_plant(moretrees.poplar_biome, moretrees.spawn_poplar_object)
|
||||||
|
biome_lib:register_generate_plant(moretrees.poplar_biome_2, moretrees.spawn_poplar_object)
|
||||||
|
biome_lib:register_generate_plant(moretrees.poplar_biome_3, moretrees.spawn_poplar_object)
|
||||||
|
biome_lib:register_generate_plant(moretrees.poplar_small_biome, moretrees.spawn_poplar_small_object)
|
||||||
|
biome_lib:register_generate_plant(moretrees.poplar_small_biome_2, moretrees.spawn_poplar_small_object)
|
||||||
|
end
|
||||||
|
|
||||||
-- Code to spawn a birch tree
|
-- Code to spawn a birch tree
|
||||||
|
|
||||||
function moretrees.grow_birch(pos)
|
function moretrees.grow_birch(pos)
|
||||||
minetest.remove_node(pos)
|
minetest.swap_node(pos, biome_lib.air)
|
||||||
if math.random(1,2) == 1 then
|
if math.random(1,2) == 1 then
|
||||||
minetest.spawn_tree(pos, moretrees.birch_model1)
|
minetest.spawn_tree(pos, moretrees.birch_model1)
|
||||||
else
|
else
|
||||||
@ -189,7 +210,7 @@ end
|
|||||||
-- Code to spawn a spruce tree
|
-- Code to spawn a spruce tree
|
||||||
|
|
||||||
function moretrees.grow_spruce(pos)
|
function moretrees.grow_spruce(pos)
|
||||||
minetest.remove_node(pos)
|
minetest.swap_node(pos, biome_lib.air)
|
||||||
if math.random(1,2) == 1 then
|
if math.random(1,2) == 1 then
|
||||||
minetest.spawn_tree(pos, moretrees.spruce_model1)
|
minetest.spawn_tree(pos, moretrees.spruce_model1)
|
||||||
else
|
else
|
||||||
@ -218,7 +239,7 @@ function moretrees.grow_jungletree(pos)
|
|||||||
local r2 = math.random(3)
|
local r2 = math.random(3)
|
||||||
if r1 == 1 then
|
if r1 == 1 then
|
||||||
moretrees.jungletree_model.leaves2 = "moretrees:jungletree_leaves_red"
|
moretrees.jungletree_model.leaves2 = "moretrees:jungletree_leaves_red"
|
||||||
else
|
else
|
||||||
moretrees.jungletree_model.leaves2 = "moretrees:jungletree_leaves_yellow"
|
moretrees.jungletree_model.leaves2 = "moretrees:jungletree_leaves_yellow"
|
||||||
end
|
end
|
||||||
moretrees.jungletree_model.leaves2_chance = math.random(25, 75)
|
moretrees.jungletree_model.leaves2_chance = math.random(25, 75)
|
||||||
@ -243,10 +264,10 @@ function moretrees.grow_jungletree(pos)
|
|||||||
moretrees.jungletree_model.rules_b = moretrees.jt_rules_b2
|
moretrees.jungletree_model.rules_b = moretrees.jt_rules_b2
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.remove_node(pos)
|
minetest.swap_node(pos, biome_lib.air)
|
||||||
local leaves = minetest.find_nodes_in_area({x = pos.x-1, y = pos.y, z = pos.z-1}, {x = pos.x+1, y = pos.y+10, z = pos.z+1}, "default:leaves")
|
local leaves = minetest.find_nodes_in_area({x = pos.x-1, y = pos.y, z = pos.z-1}, {x = pos.x+1, y = pos.y+10, z = pos.z+1}, "default:leaves")
|
||||||
for leaf in ipairs(leaves) do
|
for leaf in ipairs(leaves) do
|
||||||
minetest.remove_node(leaves[leaf])
|
minetest.swap_node(leaves[leaf], biome_lib.air)
|
||||||
end
|
end
|
||||||
minetest.spawn_tree(pos, moretrees.jungletree_model)
|
minetest.spawn_tree(pos, moretrees.jungletree_model)
|
||||||
end
|
end
|
||||||
@ -270,10 +291,10 @@ function moretrees.grow_fir(pos)
|
|||||||
moretrees.fir_model.iterations = 7
|
moretrees.fir_model.iterations = 7
|
||||||
moretrees.fir_model.random_level = 5
|
moretrees.fir_model.random_level = 5
|
||||||
|
|
||||||
minetest.remove_node(pos)
|
minetest.swap_node(pos, biome_lib.air)
|
||||||
local leaves = minetest.find_nodes_in_area({x = pos.x, y = pos.y, z = pos.z}, {x = pos.x, y = pos.y+5, z = pos.z}, "default:leaves")
|
local leaves = minetest.find_nodes_in_area({x = pos.x, y = pos.y, z = pos.z}, {x = pos.x, y = pos.y+5, z = pos.z}, "default:leaves")
|
||||||
for leaf in ipairs(leaves) do
|
for leaf in ipairs(leaves) do
|
||||||
minetest.remove_node(leaves[leaf])
|
minetest.swap_node(leaves[leaf], biome_lib.air)
|
||||||
end
|
end
|
||||||
minetest.spawn_tree(pos,moretrees.fir_model)
|
minetest.spawn_tree(pos,moretrees.fir_model)
|
||||||
end
|
end
|
||||||
@ -297,12 +318,12 @@ function moretrees.grow_fir_snow(pos)
|
|||||||
moretrees.fir_model.iterations = 2
|
moretrees.fir_model.iterations = 2
|
||||||
moretrees.fir_model.random_level = 2
|
moretrees.fir_model.random_level = 2
|
||||||
|
|
||||||
minetest.remove_node(pos)
|
minetest.swap_node(pos, biome_lib.air)
|
||||||
local leaves = minetest.find_nodes_in_area({x = pos.x, y = pos.y, z = pos.z}, {x = pos.x, y = pos.y+5, z = pos.z}, "default:leaves")
|
local leaves = minetest.find_nodes_in_area({x = pos.x, y = pos.y, z = pos.z}, {x = pos.x, y = pos.y+5, z = pos.z}, "default:leaves")
|
||||||
for leaf in ipairs(leaves) do
|
for leaf in ipairs(leaves) do
|
||||||
minetest.remove_node(leaves[leaf])
|
minetest.swap_node(leaves[leaf], biome_lib.air)
|
||||||
end
|
end
|
||||||
minetest.spawn_tree(pos,moretrees.fir_model)
|
minetest.spawn_tree(pos,moretrees.fir_model)
|
||||||
end
|
end
|
||||||
|
|
||||||
print(S("[Moretrees] Loaded (2013-02-11)"))
|
print("[Moretrees] Loaded (2013-02-11)")
|
||||||
|
@ -1,73 +0,0 @@
|
|||||||
# Translation by Xanthin
|
|
||||||
|
|
||||||
### crafts.lua ###
|
|
||||||
Coconut Milk = Kokosnussmilch
|
|
||||||
Raw Coconut = Kokosnussfleisch
|
|
||||||
Acorn Muffin batter = Eichelmuffinteig
|
|
||||||
Acorn Muffin = Eichelmuffin
|
|
||||||
Roasted Spruce Cone Nuts = Geroestete Fichtenzapfen
|
|
||||||
Roasted Pine Cone Nuts = Geroestete Kiefernzapfen
|
|
||||||
Roasted Fir Cone Nuts = Geroestete Tannenzapfen
|
|
||||||
|
|
||||||
### node_defs.lua ###
|
|
||||||
Beech Tree Trunk = Buchenstamm
|
|
||||||
Apple Tree Trunk = Apfelbaumstamm
|
|
||||||
Oak Tree Trunk = Eichenstamm
|
|
||||||
Giant Sequoia Trunk = Riesenmammutbaumstamm
|
|
||||||
Birch Tree Trunk = Birkenstamm
|
|
||||||
Palm Tree Trunk = Palmenstamm
|
|
||||||
Spruce Tree Trunk = Fichtenstamm
|
|
||||||
Pine Tree Trunk = Kiefernstamm
|
|
||||||
Willow Tree Trunk = Weidenstamm
|
|
||||||
Rubber Tree Trunk = Gummibaumstamm
|
|
||||||
Jungle Tree Trunk = Tropenbaumstamm
|
|
||||||
Douglas Fir Trunk = Douglasienstamm
|
|
||||||
Beech Tree Planks = Buchebretter
|
|
||||||
Apple Tree Planks = Apfelbaumbretter
|
|
||||||
Oak Tree Planks = Eichenbretter
|
|
||||||
Giant Sequoia Planks = Riesenmammutbaumbretter
|
|
||||||
Birch Tree Planks = Birkebretter
|
|
||||||
Palm Tree Planks = Palmenbretter
|
|
||||||
Spruce Tree Planks = Fichtenbretter
|
|
||||||
Pine Tree Planks = Kiefernbretter
|
|
||||||
Willow Tree Planks = Weidenbretter
|
|
||||||
Rubber Tree Planks = Gummibaumbretter
|
|
||||||
Jungle Tree Planks = Tropenholzbretter
|
|
||||||
Douglas Fir Planks = Douglasienbretter
|
|
||||||
Beech Tree Sapling = Buchesetzling
|
|
||||||
Apple Tree Sapling = Apfelbaumsetzling
|
|
||||||
Oak Tree Sapling = Eichensetzling
|
|
||||||
Giant Sequoia Sapling = Riesenmammutbaumsetzling
|
|
||||||
Birch Tree Sapling = Birkensetzling
|
|
||||||
Palm Tree Sapling = Palmensetzling
|
|
||||||
Spruce Tree Sapling = Fichtensetzling
|
|
||||||
Pine Tree Sapling = Kiefernsetzling
|
|
||||||
Willow Tree Sapling = Weidensetzling
|
|
||||||
Rubber Tree Sapling = Gummibaumsetzling
|
|
||||||
Jungle Tree Sapling = Tropenbaumsetzling
|
|
||||||
Douglas Fir Sapling = Douglasiensetzling
|
|
||||||
Beech Tree Leaves = Buchenlaub
|
|
||||||
Apple Tree Leaves = Apfelbaumlaub
|
|
||||||
Oak Tree Leaves = Eichenlaub
|
|
||||||
Giant Sequoia Leaves = Riesenmammutbaumlaub
|
|
||||||
Birch Tree Leaves = Birkenlaub
|
|
||||||
Palm Tree Leaves = Palmenlaub
|
|
||||||
Spruce Tree Leaves = Fichtennadeln
|
|
||||||
Pine Tree Leaves = Kiefernnadeln
|
|
||||||
Willow Tree Leaves = Weidenlaub
|
|
||||||
Rubber Tree Leaves = Gummibaumlaub
|
|
||||||
Jungle Tree Leaves = Tropenbaumlaub
|
|
||||||
Douglas Fir Leaves = Douglasiennadeln
|
|
||||||
|
|
||||||
Acorn = Eichel
|
|
||||||
Coconut = Kokosnuss
|
|
||||||
Spruce Cone = Fichtenzapfen
|
|
||||||
Pine Cone = Kiefernzapfen
|
|
||||||
Fir Cone = Tannenzapfen
|
|
||||||
Jungle Sapling = Tropenbaumsetzling
|
|
||||||
Jungle Tree Leaves (Yellow) = Tropenbaumlaub (gelb)
|
|
||||||
Jungle Tree Leaves (Red) = Tropenbaumlaub (rot)
|
|
||||||
Douglas Fir Leaves (Bright) = Douglasiennadeln (breit)
|
|
||||||
Rubber Tree Trunk (Empty) = Gummibaumstamm (leer)
|
|
||||||
|
|
||||||
[Moretrees] Loaded (2013-02-11) = [Moretrees] geladen (2013-02-11)
|
|
211
locale/moretrees.de.tr
Normal file
@ -0,0 +1,211 @@
|
|||||||
|
# textdomain: moretrees
|
||||||
|
# Translation by Xanthin and heavygale
|
||||||
|
|
||||||
|
|
||||||
|
### cocos_palm.lua ###
|
||||||
|
|
||||||
|
Coconut=Kokosnuss
|
||||||
|
Coconut Flower=Kokosnussblüte
|
||||||
|
|
||||||
|
### crafts.lua ###
|
||||||
|
|
||||||
|
Acorn Muffin=Eichelmuffin
|
||||||
|
Acorn Muffin batter=Eichelmuffinteig
|
||||||
|
Coconut Milk=Kokosnussmilch
|
||||||
|
Date=Dattel
|
||||||
|
Date & nut snack=Dattel & Nuss-Snack
|
||||||
|
Date-nut cake=Dattelnusskuchen
|
||||||
|
Date-nut cake batter=Dattelnuss-Kuchenteig
|
||||||
|
Date-nut energy bar=Dattelnuss-Energieriegel
|
||||||
|
Raw Coconut=Kokosnussfleisch
|
||||||
|
Roasted Cedar Cone Nuts=Geröstete Zedernzapfenkerne
|
||||||
|
Roasted Fir Cone Nuts=Geroestete Tannenzapfenkerne
|
||||||
|
Roasted Spruce Cone Nuts=Geroestete Fichtenzapfenkerne
|
||||||
|
|
||||||
|
### date_palm.lua ###
|
||||||
|
|
||||||
|
Date Flowers=Dattelblüten
|
||||||
|
Date Stem=Dattelstamm
|
||||||
|
Dates=Datteln
|
||||||
|
|
||||||
|
### node_defs.lua ###
|
||||||
|
|
||||||
|
@1 (fast growth)=@1 (schnelles Wachstum)
|
||||||
|
Acorn=Eichel
|
||||||
|
Apple Tree=Apfelbaum
|
||||||
|
Apple Tree Fence=Apfelbaum-Zaun
|
||||||
|
Apple Tree Fence Gate=Apfelbaum-Tor
|
||||||
|
Apple Tree Fence Rail=Apfelbaum-Schiene
|
||||||
|
Apple Tree Leaves=Apfelbaumlaub
|
||||||
|
Apple Tree Planks=Apfelbaumbretter
|
||||||
|
Apple Tree Planks Slab=Apfelbaumplatte
|
||||||
|
Apple Tree Planks Stair=Apfelbaumstufe
|
||||||
|
Apple Tree Sapling=Apfelbaumsetzling
|
||||||
|
Apple Tree Trunk=Apfelbaumstamm
|
||||||
|
Apple Tree Trunk Slab=Apfelbaumstammplatte
|
||||||
|
Apple Tree Trunk Stair=Apfelbaumstammstufe
|
||||||
|
Beech Tree=Buche
|
||||||
|
Beech Tree Fence=Buchenholz-Zaun
|
||||||
|
Beech Tree Fence Gate=Buchenholz-Tor
|
||||||
|
Beech Tree Fence Rail=Buchenholz-Schiene
|
||||||
|
Beech Tree Leaves=Buchenlaub
|
||||||
|
Beech Tree Planks=Buchenholzbretter
|
||||||
|
Beech Tree Planks Slab=Buchenholzplatte
|
||||||
|
Beech Tree Planks Stair=Buchenholzstufe
|
||||||
|
Beech Tree Sapling=Buchesetzling
|
||||||
|
Beech Tree Trunk=Buchenstamm
|
||||||
|
Beech Tree Trunk Slab=Buchenstammplatte
|
||||||
|
Beech Tree Trunk Stair=Buchenstammstufe
|
||||||
|
Birch Tree=Birke
|
||||||
|
Birch Tree Fence=Birkenholz-Zaun
|
||||||
|
Birch Tree Fence Gate=Birkenholz-Tor
|
||||||
|
Birch Tree Fence Rail=Birkenholz-Schiene
|
||||||
|
Birch Tree Leaves=Birkenlaub
|
||||||
|
Birch Tree Planks=Birkebretter
|
||||||
|
Birch Tree Planks Slab=Birkenholzplatte
|
||||||
|
Birch Tree Planks Stair=Birkeholzstufe
|
||||||
|
Birch Tree Sapling=Birkensetzling
|
||||||
|
Birch Tree Trunk=Birkenstamm
|
||||||
|
Birch Tree Trunk Slab=Birkenstammplatte
|
||||||
|
Birch Tree Trunk Stair=Birkenstammstufe
|
||||||
|
Cedar Cone=Zedernzapfen
|
||||||
|
Cedar Tree=Zeder
|
||||||
|
Cedar Tree Fence=Zedernholz-Zaun
|
||||||
|
Cedar Tree Fence Gate=Zedernholz-Tor
|
||||||
|
Cedar Tree Fence Rail=Zedernholz-Schiene
|
||||||
|
Cedar Tree Leaves=Zederblätter
|
||||||
|
Cedar Tree Planks=Zedernholzbretter
|
||||||
|
Cedar Tree Planks Slab=Zedernholzplatte
|
||||||
|
Cedar Tree Planks Stair=Zedernholzstufe
|
||||||
|
Cedar Tree Sapling=Zedersetzling
|
||||||
|
Cedar Tree Trunk=Zederstamm
|
||||||
|
Cedar Tree Trunk Slab=Zederstammplatte
|
||||||
|
Cedar Tree Trunk Stair=Zederstamm Stufe
|
||||||
|
Date Palm Tree=Dattelpalme
|
||||||
|
Date Palm Tree Fence=Dattelpalmen-Zaun
|
||||||
|
Date Palm Tree Fence Gate=Dattelpalmen-Tor
|
||||||
|
Date Palm Tree Fence Rail=Dattelpalmen-Schiene
|
||||||
|
Date Palm Tree Leaves=Dattelpalmenblätter
|
||||||
|
Date Palm Tree Planks=Dattelpalmenbretter
|
||||||
|
Date Palm Tree Planks Slab=Dattelpalmenplatte
|
||||||
|
Date Palm Tree Planks Stair=Dattelpalmenstufe
|
||||||
|
Date Palm Tree Sapling=Dattelpalmensetzling
|
||||||
|
Date Palm Tree Trunk=Dattelpalmenstamm
|
||||||
|
Date Palm Tree Trunk Slab=Dattelpalmenstammplatte
|
||||||
|
Date Palm Tree Trunk Stair=Dattelpalmenstammstufe
|
||||||
|
Douglas Fir=Douglasie
|
||||||
|
Douglas Fir Fence=Douglasien-Zaun
|
||||||
|
Douglas Fir Fence Gate=Douglasien-Tor
|
||||||
|
Douglas Fir Fence Rail=Douglasien-Schiene
|
||||||
|
Douglas Fir Leaves=Douglasiennadeln
|
||||||
|
Douglas Fir Leaves (Bright)=Douglasiennadeln (breit)
|
||||||
|
Douglas Fir Planks=Douglasienbretter
|
||||||
|
Douglas Fir Planks Slab=Douglasienplatte
|
||||||
|
Douglas Fir Planks Stair=Douglasienstufe
|
||||||
|
Douglas Fir Sapling=Douglasiensetzling
|
||||||
|
Douglas Fir Trunk=Douglasienstamm
|
||||||
|
Douglas Fir Trunk Slab=Douglasienstammplatte
|
||||||
|
Douglas Fir Trunk Stair=Douglasienstammstufe
|
||||||
|
Fir Cone=Tannenzapfen
|
||||||
|
Giant Sequoia=Riesenmammutbaum
|
||||||
|
Giant Sequoia Fence=Riesenmammutbaum-Zaun
|
||||||
|
Giant Sequoia Fence Gate=Riesenmammutbaum-Tor
|
||||||
|
Giant Sequoia Fence Rail=Riesenmammutbaum-Schiene
|
||||||
|
Giant Sequoia Leaves=Riesenmammutbaumlaub
|
||||||
|
Giant Sequoia Planks=Riesenmammutbaumbretter
|
||||||
|
Giant Sequoia Planks Slab=Riesenmammutbaumplatte
|
||||||
|
Giant Sequoia Planks Stair=Riesenmammutbaumstufe
|
||||||
|
Giant Sequoia Sapling=Riesenmammutbaumsetzling
|
||||||
|
Giant Sequoia Trunk=Riesenmammutbaumstamm
|
||||||
|
Giant Sequoia Trunk Slab=Riesenmammutbaumstammplatte
|
||||||
|
Giant Sequoia Trunk Stair=Riesenmammutbaumstammstufe
|
||||||
|
Jungle Tree=Tropenbaum
|
||||||
|
Jungle Tree Fence=Tropenbaum-Zaun
|
||||||
|
Jungle Tree Fence Gate=Tropenbaum-Tor
|
||||||
|
Jungle Tree Fence Rail=Tropenbaum-Schiene
|
||||||
|
Jungle Tree Leaves=Tropenbaumlaub
|
||||||
|
Jungle Tree Leaves (@1)=Tropenbaumlaub (@1)
|
||||||
|
Jungle Tree Planks=Tropenholzbretter
|
||||||
|
Jungle Tree Planks Slab=Tropenholzplatte
|
||||||
|
Jungle Tree Planks Stair=Tropenholzstufe
|
||||||
|
Jungle Tree Sapling=Tropenbaumsetzling
|
||||||
|
Jungle Tree Trunk=Tropenbaumstamm
|
||||||
|
Jungle Tree Trunk Slab=Tropenbaumstammplatte
|
||||||
|
Jungle Tree Trunk Stair=Tropenbaumstammstufe
|
||||||
|
Oak Tree=Eiche
|
||||||
|
Oak Tree Fence=Eichenholz-Zaun
|
||||||
|
Oak Tree Fence Gate=Eichenholz-Tor
|
||||||
|
Oak Tree Fence Rail=Eichenholz-Schiene
|
||||||
|
Oak Tree Leaves=Eichenlaub
|
||||||
|
Oak Tree Planks=Eichenbretter
|
||||||
|
Oak Tree Planks Slab=Eichenholzplatte
|
||||||
|
Oak Tree Planks Stair=Eichenholzstufe
|
||||||
|
Oak Tree Sapling=Eichensetzling
|
||||||
|
Oak Tree Trunk=Eichenstamm
|
||||||
|
Oak Tree Trunk Slab=Eichenstammplatte
|
||||||
|
Oak Tree Trunk Stair=Eichenstammstufe
|
||||||
|
Palm Tree=Palme
|
||||||
|
Palm Tree Fence=Plamenholz-Zaun
|
||||||
|
Palm Tree Fence Gate=Plamenholz-Tor
|
||||||
|
Palm Tree Fence Rail=Plamenholz-Schiene
|
||||||
|
Palm Tree Leaves=Palmenlaub
|
||||||
|
Palm Tree Planks=Palmenbretter
|
||||||
|
Palm Tree Planks Slab=Plamenholzplatte
|
||||||
|
Palm Tree Planks Stair=Plamenholzstufe
|
||||||
|
Palm Tree Sapling=Palmensetzling
|
||||||
|
Palm Tree Trunk=Palmenstamm
|
||||||
|
Palm Tree Trunk Slab=Palmenstammplatte
|
||||||
|
Palm Tree Trunk Stair=Palmenstammstufe
|
||||||
|
Poplar Tree=Pappel
|
||||||
|
Poplar Tree Fence=Pappelholz-Zaun
|
||||||
|
Poplar Tree Fence Gate=Pappelholz-Tor
|
||||||
|
Poplar Tree Fence Rail=Pappelholz-Schiene
|
||||||
|
Poplar Tree Leaves=Pappelblätter
|
||||||
|
Poplar Tree Planks=Pappelholzbretter
|
||||||
|
Poplar Tree Planks Slab=Pappelholzsplatte
|
||||||
|
Poplar Tree Planks Stair=Pappelholzstufe
|
||||||
|
Poplar Tree Sapling=Pappelsetzling
|
||||||
|
Poplar Tree Trunk=Pappelstamm
|
||||||
|
Poplar Tree Trunk Slab=Pappelstammplatte
|
||||||
|
Poplar Tree Trunk Stair=Pappelstammstufe
|
||||||
|
Red=rot
|
||||||
|
Rubber Tree=Gummibaum
|
||||||
|
Rubber Tree Fence=Gummibaum-Zaun
|
||||||
|
Rubber Tree Fence Gate=Gummibaum-Tor
|
||||||
|
Rubber Tree Fence Rail=Gummibaum-Schiene
|
||||||
|
Rubber Tree Leaves=Gummibaumlaub
|
||||||
|
Rubber Tree Planks=Gummibaumbretter
|
||||||
|
Rubber Tree Planks Slab=Gummibaumplatte
|
||||||
|
Rubber Tree Planks Stair=Gummibaumstufe
|
||||||
|
Rubber Tree Sapling=Gummibaumsetzling
|
||||||
|
Rubber Tree Trunk=Gummibaumstamm
|
||||||
|
Rubber Tree Trunk (Empty)=Gummibaumstamm (leer)
|
||||||
|
Rubber Tree Trunk Slab=Gummibaumstammplatte
|
||||||
|
Rubber Tree Trunk Stair=Gummibaumstammstufe
|
||||||
|
Small poplar Tree Sapling=Kleiner Pappelsetzling
|
||||||
|
Spruce Cone=Fichtenzapfen
|
||||||
|
Spruce Tree=Fichte
|
||||||
|
Spruce Tree Fence=Fichtenholz-Zaun
|
||||||
|
Spruce Tree Fence Gate=Fichtenholz-Zaun
|
||||||
|
Spruce Tree Fence Rail=Fichtenholz-Schiene
|
||||||
|
Spruce Tree Leaves=Fichtennadeln
|
||||||
|
Spruce Tree Planks=Fichtenbretter
|
||||||
|
Spruce Tree Planks Slab=Fichtenholzplatte
|
||||||
|
Spruce Tree Planks Stair=Fichtenholzstufe
|
||||||
|
Spruce Tree Sapling=Fichtensetzling
|
||||||
|
Spruce Tree Trunk=Fichtenstamm
|
||||||
|
Spruce Tree Trunk Slab=Fichtenstammplatte
|
||||||
|
Spruce Tree Trunk Stair=Fichtenstammstufe
|
||||||
|
Willow Tree=Weide
|
||||||
|
Willow Tree Fence=Weidenholz-Zaun
|
||||||
|
Willow Tree Fence Gate=Weidenholz-Tor
|
||||||
|
Willow Tree Fence Rail=Weidenholz-Schiene
|
||||||
|
Willow Tree Leaves=Weidenlaub
|
||||||
|
Willow Tree Planks=Weidenbretter
|
||||||
|
Willow Tree Planks Slab=Weidenholzplatte
|
||||||
|
Willow Tree Planks Stair=Weidenholzstufe
|
||||||
|
Willow Tree Sapling=Weidensetzling
|
||||||
|
Willow Tree Trunk=Weidenstamm
|
||||||
|
Willow Tree Trunk Slab=Weidenstammplatte
|
||||||
|
Willow Tree Trunk Stair=Weidenstammstufe
|
||||||
|
Yellow=gelb
|
211
locale/moretrees.es.tr
Normal file
@ -0,0 +1,211 @@
|
|||||||
|
# textdomain: moretrees
|
||||||
|
# Translation by Carlos Barraza
|
||||||
|
|
||||||
|
|
||||||
|
### cocos_palm.lua ###
|
||||||
|
|
||||||
|
Coconut=Coco
|
||||||
|
Coconut Flower=
|
||||||
|
|
||||||
|
### crafts.lua ###
|
||||||
|
|
||||||
|
Acorn Muffin=Mollete de Bellota
|
||||||
|
Acorn Muffin batter= Masa de Mollete de Bellota
|
||||||
|
Coconut Milk=Leche de Coco
|
||||||
|
Date=Datilera
|
||||||
|
Date & nut snack=Datilera y Nueces
|
||||||
|
Date-nut cake=Pastel de Datilera
|
||||||
|
Date-nut cake batter=Pasta de torta de Datilera
|
||||||
|
Date-nut energy bar=Barra energetica de Datilera
|
||||||
|
Raw Coconut=Coco crudo
|
||||||
|
Roasted Cedar Cone Nuts=Coco de Alamo Tostado
|
||||||
|
Roasted Fir Cone Nuts=Cono de Abeto Tostado
|
||||||
|
Roasted Spruce Cone Nuts=Cono de Picea Tostado
|
||||||
|
|
||||||
|
### date_palm.lua ###
|
||||||
|
|
||||||
|
Date Flowers=Flores de Datilera
|
||||||
|
Date Stem=Tallo de Datilera
|
||||||
|
Dates=Datilera
|
||||||
|
|
||||||
|
### node_defs.lua ###
|
||||||
|
|
||||||
|
@1 (fast growth)=
|
||||||
|
Acorn=Bellota
|
||||||
|
Apple Tree=
|
||||||
|
Apple Tree Fence=
|
||||||
|
Apple Tree Fence Gate=
|
||||||
|
Apple Tree Fence Rail=
|
||||||
|
Apple Tree Leaves=Hojas de Arbol de Manzana
|
||||||
|
Apple Tree Planks=Madera de Arbol de Manzana
|
||||||
|
Apple Tree Planks Slab=
|
||||||
|
Apple Tree Planks Stair=
|
||||||
|
Apple Tree Sapling=Retoño de Arbol de Manzana
|
||||||
|
Apple Tree Trunk=Tronco de Arbol de Manzana
|
||||||
|
Apple Tree Trunk Slab=
|
||||||
|
Apple Tree Trunk Stair=
|
||||||
|
Beech Tree=
|
||||||
|
Beech Tree Fence=
|
||||||
|
Beech Tree Fence Gate=
|
||||||
|
Beech Tree Fence Rail=
|
||||||
|
Beech Tree Leaves=Hojas de Arbol de Haya
|
||||||
|
Beech Tree Planks=Madera de Arbol de Haya
|
||||||
|
Beech Tree Planks Slab=
|
||||||
|
Beech Tree Planks Stair=
|
||||||
|
Beech Tree Sapling=Retoño de Arbol de Haya
|
||||||
|
Beech Tree Trunk=Tronco de Arbol de Haya
|
||||||
|
Beech Tree Trunk Slab=
|
||||||
|
Beech Tree Trunk Stair=
|
||||||
|
Birch Tree=
|
||||||
|
Birch Tree Fence=
|
||||||
|
Birch Tree Fence Gate=
|
||||||
|
Birch Tree Fence Rail=
|
||||||
|
Birch Tree Leaves=Hojas de Arbol de Abedul
|
||||||
|
Birch Tree Planks=Madera de Arbol de Abedul
|
||||||
|
Birch Tree Planks Slab=
|
||||||
|
Birch Tree Planks Stair=
|
||||||
|
Birch Tree Sapling=Retoño de Arbol de Abedul
|
||||||
|
Birch Tree Trunk=Tronco de Arbol de Abedul
|
||||||
|
Birch Tree Trunk Slab=
|
||||||
|
Birch Tree Trunk Stair=
|
||||||
|
Cedar Cone=Coco de Alamo
|
||||||
|
Cedar Tree=
|
||||||
|
Cedar Tree Fence=
|
||||||
|
Cedar Tree Fence Gate=
|
||||||
|
Cedar Tree Fence Rail=
|
||||||
|
Cedar Tree Leaves=Hojas de Arbol de Cedro
|
||||||
|
Cedar Tree Planks=Madera de Arbol de Cedro
|
||||||
|
Cedar Tree Planks Slab=
|
||||||
|
Cedar Tree Planks Stair=
|
||||||
|
Cedar Tree Sapling=Retoño de Arbol de Cedro
|
||||||
|
Cedar Tree Trunk=Tronco de Arbol de Cedro
|
||||||
|
Cedar Tree Trunk Slab=
|
||||||
|
Cedar Tree Trunk Stair=
|
||||||
|
Date Palm Tree=
|
||||||
|
Date Palm Tree Fence=
|
||||||
|
Date Palm Tree Fence Gate=
|
||||||
|
Date Palm Tree Fence Rail=
|
||||||
|
Date Palm Tree Leaves=
|
||||||
|
Date Palm Tree Planks=Madera de Palmera Datilera
|
||||||
|
Date Palm Tree Planks Slab=
|
||||||
|
Date Palm Tree Planks Stair=
|
||||||
|
Date Palm Tree Sapling=
|
||||||
|
Date Palm Tree Trunk=Tronco de Palmera Datilera
|
||||||
|
Date Palm Tree Trunk Slab=
|
||||||
|
Date Palm Tree Trunk Stair=
|
||||||
|
Douglas Fir=
|
||||||
|
Douglas Fir Fence=
|
||||||
|
Douglas Fir Fence Gate=
|
||||||
|
Douglas Fir Fence Rail=
|
||||||
|
Douglas Fir Leaves=Hojas de Arbol de Abeto de Douglas
|
||||||
|
Douglas Fir Leaves (Bright)=Hojas de Arbol de Abeto de Douglas (Brillante)
|
||||||
|
Douglas Fir Planks=Madera de Arbol de Abeto de Douglas
|
||||||
|
Douglas Fir Planks Slab=
|
||||||
|
Douglas Fir Planks Stair=
|
||||||
|
Douglas Fir Sapling=Retoño de Arbol de Abeto de Douglas
|
||||||
|
Douglas Fir Trunk=Tronco de Arbol de Abeto de Douglas
|
||||||
|
Douglas Fir Trunk Slab=
|
||||||
|
Douglas Fir Trunk Stair=
|
||||||
|
Fir Cone=Coco de Abeto
|
||||||
|
Giant Sequoia=
|
||||||
|
Giant Sequoia Fence=
|
||||||
|
Giant Sequoia Fence Gate=
|
||||||
|
Giant Sequoia Fence Rail=
|
||||||
|
Giant Sequoia Leaves=Hojas de Sequoia Gigante
|
||||||
|
Giant Sequoia Planks=Madera de Sequoia Gigante
|
||||||
|
Giant Sequoia Planks Slab=
|
||||||
|
Giant Sequoia Planks Stair=
|
||||||
|
Giant Sequoia Sapling=Retoño de Arbol de Sequoia Gigante
|
||||||
|
Giant Sequoia Trunk=Tronco de Sequoia Gigante
|
||||||
|
Giant Sequoia Trunk Slab=
|
||||||
|
Giant Sequoia Trunk Stair=
|
||||||
|
Jungle Tree=Tronco de Arbol de Arbol de la Selva
|
||||||
|
Jungle Tree Fence=
|
||||||
|
Jungle Tree Fence Gate=
|
||||||
|
Jungle Tree Fence Rail=
|
||||||
|
Jungle Tree Leaves=Hojas de Arbol de la Selva
|
||||||
|
Jungle Tree Leaves (@1)=Hojas de Arbol de la Selva (@1)
|
||||||
|
Jungle Tree Planks=
|
||||||
|
Jungle Tree Planks Slab=
|
||||||
|
Jungle Tree Planks Stair=
|
||||||
|
Jungle Tree Sapling=
|
||||||
|
Jungle Tree Trunk=
|
||||||
|
Jungle Tree Trunk Slab=
|
||||||
|
Jungle Tree Trunk Stair=
|
||||||
|
Oak Tree=
|
||||||
|
Oak Tree Fence=
|
||||||
|
Oak Tree Fence Gate=
|
||||||
|
Oak Tree Fence Rail=
|
||||||
|
Oak Tree Leaves=Hojas de Arbol de Roble
|
||||||
|
Oak Tree Planks=Madera de Arbol de Roble
|
||||||
|
Oak Tree Planks Slab=
|
||||||
|
Oak Tree Planks Stair=
|
||||||
|
Oak Tree Sapling=Retoño de Arbol de Roble
|
||||||
|
Oak Tree Trunk=Tronco de Arbol de Roble
|
||||||
|
Oak Tree Trunk Slab=
|
||||||
|
Oak Tree Trunk Stair=
|
||||||
|
Palm Tree=
|
||||||
|
Palm Tree Fence=
|
||||||
|
Palm Tree Fence Gate=
|
||||||
|
Palm Tree Fence Rail=
|
||||||
|
Palm Tree Leaves=Hojas de Palmera
|
||||||
|
Palm Tree Planks=Madera de Palmera
|
||||||
|
Palm Tree Planks Slab=
|
||||||
|
Palm Tree Planks Stair=
|
||||||
|
Palm Tree Sapling=Retoño de Palmera
|
||||||
|
Palm Tree Trunk=Tronco de Palmera
|
||||||
|
Palm Tree Trunk Slab=
|
||||||
|
Palm Tree Trunk Stair=
|
||||||
|
Poplar Tree=
|
||||||
|
Poplar Tree Fence=
|
||||||
|
Poplar Tree Fence Gate=
|
||||||
|
Poplar Tree Fence Rail=
|
||||||
|
Poplar Tree Leaves=Hojas de Arbol de Alamo
|
||||||
|
Poplar Tree Planks=Madera de Arbol de Alamo
|
||||||
|
Poplar Tree Planks Slab=
|
||||||
|
Poplar Tree Planks Stair=
|
||||||
|
Poplar Tree Sapling=Retoño de Arbol de Alamo
|
||||||
|
Poplar Tree Trunk=Tronco de Arbol de Alamo
|
||||||
|
Poplar Tree Trunk Slab=
|
||||||
|
Poplar Tree Trunk Stair=
|
||||||
|
Red=Roja
|
||||||
|
Rubber Tree=
|
||||||
|
Rubber Tree Fence=
|
||||||
|
Rubber Tree Fence Gate=
|
||||||
|
Rubber Tree Fence Rail=
|
||||||
|
Rubber Tree Leaves=Hojas de Arbol de Arbol de Goma
|
||||||
|
Rubber Tree Planks=Madera de Arbol de Arbol de Goma
|
||||||
|
Rubber Tree Planks Slab=
|
||||||
|
Rubber Tree Planks Stair=
|
||||||
|
Rubber Tree Sapling=Retoño de Arbol de Arbol de Goma
|
||||||
|
Rubber Tree Trunk=Tronco de Arbol de Arbol de Goma
|
||||||
|
Rubber Tree Trunk (Empty)=Tronco de Arbol de Goma (Vacio)
|
||||||
|
Rubber Tree Trunk Slab=
|
||||||
|
Rubber Tree Trunk Stair=
|
||||||
|
Small poplar Tree Sapling=
|
||||||
|
Spruce Cone=Coco de Picea
|
||||||
|
Spruce Tree=
|
||||||
|
Spruce Tree Fence=
|
||||||
|
Spruce Tree Fence Gate=
|
||||||
|
Spruce Tree Fence Rail=
|
||||||
|
Spruce Tree Leaves=Hojas de Arbol de Abeto
|
||||||
|
Spruce Tree Planks=Madera de Arbol de Abeto
|
||||||
|
Spruce Tree Planks Slab=
|
||||||
|
Spruce Tree Planks Stair=
|
||||||
|
Spruce Tree Sapling=Retoño de Arbol de Abeto
|
||||||
|
Spruce Tree Trunk=Tronco de Arbol de Abeto
|
||||||
|
Spruce Tree Trunk Slab=
|
||||||
|
Spruce Tree Trunk Stair=
|
||||||
|
Willow Tree=
|
||||||
|
Willow Tree Fence=
|
||||||
|
Willow Tree Fence Gate=
|
||||||
|
Willow Tree Fence Rail=
|
||||||
|
Willow Tree Leaves=Hojas de Arbol de Sauce
|
||||||
|
Willow Tree Planks=Madera de Arbol de Sauce
|
||||||
|
Willow Tree Planks Slab=
|
||||||
|
Willow Tree Planks Stair=
|
||||||
|
Willow Tree Sapling=Retoño de Arbol de Sauce
|
||||||
|
Willow Tree Trunk=Tronco de Arbol de Sauce
|
||||||
|
Willow Tree Trunk Slab=
|
||||||
|
Willow Tree Trunk Stair=
|
||||||
|
Yellow=Amarilla
|
211
locale/moretrees.fr.tr
Normal file
@ -0,0 +1,211 @@
|
|||||||
|
# textdomain: moretrees
|
||||||
|
# Translation by Yoan31 and Louis Royer
|
||||||
|
|
||||||
|
|
||||||
|
### cocos_palm.lua ###
|
||||||
|
|
||||||
|
Coconut=Noix de coco
|
||||||
|
Coconut Flower=Fleur de coco
|
||||||
|
|
||||||
|
### crafts.lua ###
|
||||||
|
|
||||||
|
Acorn Muffin=Muffins au gland
|
||||||
|
Acorn Muffin batter=Pate à muffins au Gland
|
||||||
|
Coconut Milk=Lait de coco
|
||||||
|
Date=Datte
|
||||||
|
Date & nut snack=Collation aux dattes et aux noix
|
||||||
|
Date-nut cake=Gâteau datte-noix
|
||||||
|
Date-nut cake batter=Pâte à gâteau datte-noix
|
||||||
|
Date-nut energy bar=Barre énergétique datte-noix
|
||||||
|
Raw Coconut=Noix de coco crue
|
||||||
|
Roasted Cedar Cone Nuts=Noix de pomme de pin roties
|
||||||
|
Roasted Fir Cone Nuts=Noix de cône de sapin roties
|
||||||
|
Roasted Spruce Cone Nuts=Noix de cône de sapin roties
|
||||||
|
|
||||||
|
### date_palm.lua ###
|
||||||
|
|
||||||
|
Date Flowers=Fleurs de datte
|
||||||
|
Date Stem=Tige de datte
|
||||||
|
Dates=Dattes
|
||||||
|
|
||||||
|
### node_defs.lua ###
|
||||||
|
|
||||||
|
@1 (fast growth)=@1 (croissance rapide)
|
||||||
|
Acorn=Gland
|
||||||
|
Apple Tree=Pommier
|
||||||
|
Apple Tree Fence=Barrière en bois de pommier
|
||||||
|
Apple Tree Fence Gate=Porte de clôture en bois de pommier
|
||||||
|
Apple Tree Fence Rail=Clôture en bois de pommier
|
||||||
|
Apple Tree Leaves=Feuilles de pommier
|
||||||
|
Apple Tree Planks=Planches de pommier
|
||||||
|
Apple Tree Planks Slab=Dalle en bois de pommier
|
||||||
|
Apple Tree Planks Stair=Escaliers en bois de pommier
|
||||||
|
Apple Tree Sapling=Pousse d'arbre de pommier
|
||||||
|
Apple Tree Trunk=Tronc d'arbre de pommier
|
||||||
|
Apple Tree Trunk Slab=Dalle en tronc de pommier
|
||||||
|
Apple Tree Trunk Stair=Escalier en tronc de pommier
|
||||||
|
Beech Tree=Hêtre
|
||||||
|
Beech Tree Fence=Barrière en bois de hêtre
|
||||||
|
Beech Tree Fence Gate=Porte de clôture en bois de hêtre
|
||||||
|
Beech Tree Fence Rail=Clôture en bois de hêtre
|
||||||
|
Beech Tree Leaves=Feuilles de hêtre
|
||||||
|
Beech Tree Planks=Planches de hêtre
|
||||||
|
Beech Tree Planks Slab=Dalle en bois de hêtre
|
||||||
|
Beech Tree Planks Stair=Escalier en bois de hêtre
|
||||||
|
Beech Tree Sapling=Pousse d'arbre de hêtre
|
||||||
|
Beech Tree Trunk=Tronc d'arbre de hêtre
|
||||||
|
Beech Tree Trunk Slab=Dalle en tronc de hêtre
|
||||||
|
Beech Tree Trunk Stair=Escalier en tronc de hêtre
|
||||||
|
Birch Tree=Bouleau
|
||||||
|
Birch Tree Fence=Barrière en bois de bouleau
|
||||||
|
Birch Tree Fence Gate=Porte de clôture en bois de bouleau
|
||||||
|
Birch Tree Fence Rail=Clôture en bois de bouleau
|
||||||
|
Birch Tree Leaves=Feuilles de bouleau
|
||||||
|
Birch Tree Planks=Planches d'arbre de bouleau
|
||||||
|
Birch Tree Planks Slab=Dalle en bois de bouleau
|
||||||
|
Birch Tree Planks Stair=Escalier en bois de bouleau
|
||||||
|
Birch Tree Sapling=Pousse d'arbre de bouleau
|
||||||
|
Birch Tree Trunk=Tronc d'arbre de bouleau
|
||||||
|
Birch Tree Trunk Slab=Dalle en tronc de bouleau
|
||||||
|
Birch Tree Trunk Stair=Escalier en tronc de bouleau
|
||||||
|
Cedar Cone=Pomme de pin
|
||||||
|
Cedar Tree=Pin
|
||||||
|
Cedar Tree Fence=Barrière en bois de pin
|
||||||
|
Cedar Tree Fence Gate=Porte de clôture en bois de pin
|
||||||
|
Cedar Tree Fence Rail=Clôture en bois de pin
|
||||||
|
Cedar Tree Leaves=Feuilles de pin
|
||||||
|
Cedar Tree Planks=Planches d'arbre de pin
|
||||||
|
Cedar Tree Planks Slab=Dalle en bois de pin
|
||||||
|
Cedar Tree Planks Stair=Escalier en bois de pin
|
||||||
|
Cedar Tree Sapling=Pousse d'arbre de pin
|
||||||
|
Cedar Tree Trunk=Tronc d'arbre de pin
|
||||||
|
Cedar Tree Trunk Slab=Dalle en tronc de pin
|
||||||
|
Cedar Tree Trunk Stair=Escalier en tronc de pin
|
||||||
|
Date Palm Tree=Dattier
|
||||||
|
Date Palm Tree Fence=Barrière en bois de dattier
|
||||||
|
Date Palm Tree Fence Gate=Porte de clôture en bois de dattier
|
||||||
|
Date Palm Tree Fence Rail=Clôture en bois de dattier
|
||||||
|
Date Palm Tree Leaves=Feuille de dattier
|
||||||
|
Date Palm Tree Planks=Planches de dattier
|
||||||
|
Date Palm Tree Planks Slab=Dalle en bois de dattier
|
||||||
|
Date Palm Tree Planks Stair=Escalier en bois de dattier
|
||||||
|
Date Palm Tree Sapling=Pousse de dattier
|
||||||
|
Date Palm Tree Trunk=Tronc de dattier
|
||||||
|
Date Palm Tree Trunk Slab=Dalle en tronc de dattier
|
||||||
|
Date Palm Tree Trunk Stair=Escalier en tronc de dattier
|
||||||
|
Douglas Fir=Sapin de Douglas
|
||||||
|
Douglas Fir Fence=Barrière en bois de sapin de Douglas
|
||||||
|
Douglas Fir Fence Gate=Porte de clôture en bois de sapin de Douglas
|
||||||
|
Douglas Fir Fence Rail=Clôture en bois de sapin de Douglas
|
||||||
|
Douglas Fir Leaves=Feuilles de sapin de Douglas
|
||||||
|
Douglas Fir Leaves (Bright)=Feuille de sapin de Douglas (brillant)
|
||||||
|
Douglas Fir Planks=Planches de sapin de Douglas
|
||||||
|
Douglas Fir Planks Slab=Dalle en bois de sapin de Douglas
|
||||||
|
Douglas Fir Planks Stair=Escalier en bois de sapin de Douglas
|
||||||
|
Douglas Fir Sapling=Pousse de sapin de Douglas
|
||||||
|
Douglas Fir Trunk=Tronc de sapin de Douglas
|
||||||
|
Douglas Fir Trunk Slab=Dalle en tronc de sapin de Douglas
|
||||||
|
Douglas Fir Trunk Stair=Escalier en tronc de sapin de Douglas
|
||||||
|
Fir Cone=Pomme de sapin
|
||||||
|
Giant Sequoia=Séquoia géant
|
||||||
|
Giant Sequoia Fence=Barrière en bois de séquoia géant
|
||||||
|
Giant Sequoia Fence Gate=Porte de clôture en bois de séquoia géant
|
||||||
|
Giant Sequoia Fence Rail=Clôture en bois de séquoia géant
|
||||||
|
Giant Sequoia Leaves=Feuilles de séquoia géant
|
||||||
|
Giant Sequoia Planks=Planches de séquoia géant
|
||||||
|
Giant Sequoia Planks Slab=Dalle en bois de séquoia géant
|
||||||
|
Giant Sequoia Planks Stair=Escalier en bois de séquoia géant
|
||||||
|
Giant Sequoia Sapling=Pousse de séquoia géant
|
||||||
|
Giant Sequoia Trunk=Tronc de séquoia géant
|
||||||
|
Giant Sequoia Trunk Slab=Dalle en tronc de séquoia géant
|
||||||
|
Giant Sequoia Trunk Stair=Escalier en tronc de séquoia géant
|
||||||
|
Jungle Tree=Arbre de la jungle
|
||||||
|
Jungle Tree Fence=Barrière en bois d'arbre de la jungle
|
||||||
|
Jungle Tree Fence Gate=Porte de clôture en bois d'arbre de la jungle
|
||||||
|
Jungle Tree Fence Rail=Clôture en bois d'arbre de la jungle
|
||||||
|
Jungle Tree Leaves=Feuilles d'arbre de la jungle
|
||||||
|
Jungle Tree Leaves (@1)=Feuilles d'arbre de la jungle (@1)
|
||||||
|
Jungle Tree Planks=Planches d'arbre de la jungle
|
||||||
|
Jungle Tree Planks Slab=Dalle en bois d'arbre de la jungle
|
||||||
|
Jungle Tree Planks Stair=Escalier en bois d'arbre de la jungle
|
||||||
|
Jungle Tree Sapling=Pousse d'arbre de la jungle
|
||||||
|
Jungle Tree Trunk=Tronc d'arbre de la jungle
|
||||||
|
Jungle Tree Trunk Slab=Dalle en tronc d'arbre de la jungle
|
||||||
|
Jungle Tree Trunk Stair=Escalier en tronc d'arbre de la jungle
|
||||||
|
Oak Tree=Chêne
|
||||||
|
Oak Tree Fence=Barrière en bois de chêne
|
||||||
|
Oak Tree Fence Gate=Porte de clôture en bois de chêne
|
||||||
|
Oak Tree Fence Rail=Clôture en bois de chêne
|
||||||
|
Oak Tree Leaves=Feuilles de chêne
|
||||||
|
Oak Tree Planks=Planches de chêne
|
||||||
|
Oak Tree Planks Slab=Dalle en bois de chêne
|
||||||
|
Oak Tree Planks Stair=Escalier en bois de chêne
|
||||||
|
Oak Tree Sapling=Pousse d'arbre de chêne
|
||||||
|
Oak Tree Trunk=Tronc d'arbre de chêne
|
||||||
|
Oak Tree Trunk Slab=Dalle en tronc de chêne
|
||||||
|
Oak Tree Trunk Stair=Escalier en tronc de chêne
|
||||||
|
Palm Tree=Palmier
|
||||||
|
Palm Tree Fence=Barrière en bois de palmier
|
||||||
|
Palm Tree Fence Gate=Porte de clôture en bois de palmier
|
||||||
|
Palm Tree Fence Rail=Clôture en bois de palmier
|
||||||
|
Palm Tree Leaves=Feuilles de palmier
|
||||||
|
Palm Tree Planks=Planches de palmier
|
||||||
|
Palm Tree Planks Slab=Dalle en bois de palmier
|
||||||
|
Palm Tree Planks Stair=Escalier en bois de palmier
|
||||||
|
Palm Tree Sapling=Pousse d'arbre de palmier
|
||||||
|
Palm Tree Trunk=Tronc d'arbre de palmier
|
||||||
|
Palm Tree Trunk Slab=Dalle en tronc de palmier
|
||||||
|
Palm Tree Trunk Stair=Escalier en tronc de palmier
|
||||||
|
Poplar Tree=Peuplier
|
||||||
|
Poplar Tree Fence=Barrière en bois de peuplier
|
||||||
|
Poplar Tree Fence Gate=Porte de clôture en bois de peuplier
|
||||||
|
Poplar Tree Fence Rail=Clôture en bois de peuplier
|
||||||
|
Poplar Tree Leaves=Feuilles de peuplier
|
||||||
|
Poplar Tree Planks=Plances de peuplier
|
||||||
|
Poplar Tree Planks Slab=Dalle en bois de peuplier
|
||||||
|
Poplar Tree Planks Stair=Escalier en bois de peuplier
|
||||||
|
Poplar Tree Sapling=Pousse de peuplier
|
||||||
|
Poplar Tree Trunk=Tronc de peuplier
|
||||||
|
Poplar Tree Trunk Slab=Dalle en tronc de peuplier
|
||||||
|
Poplar Tree Trunk Stair=Escalier en tronc de peuplier
|
||||||
|
Red=rouge
|
||||||
|
Rubber Tree=Arbre à caoutchouc
|
||||||
|
Rubber Tree Fence=Barrière en bois d'arbre à caoutchouc
|
||||||
|
Rubber Tree Fence Gate=Porte de clôture en bois d'arbre à caoutchouc
|
||||||
|
Rubber Tree Fence Rail=Clôture en bois d'arbre à caoutchouc
|
||||||
|
Rubber Tree Leaves=Feuilles d'arbre à caoutchouc
|
||||||
|
Rubber Tree Planks=Planches d'arbre à caoutchouc
|
||||||
|
Rubber Tree Planks Slab=Dalle en bois d'arbre à caoutchouc
|
||||||
|
Rubber Tree Planks Stair=Escalier en bois d'arbre à caoutchouc
|
||||||
|
Rubber Tree Sapling=Pousse d'arbre à caoutchouc
|
||||||
|
Rubber Tree Trunk=Tronc d'arbre a caoutchouc
|
||||||
|
Rubber Tree Trunk (Empty)=Tronc d'arbre à caoutchouc (vide)
|
||||||
|
Rubber Tree Trunk Slab=Dalle en tronc d'arbre à caoutchouc
|
||||||
|
Rubber Tree Trunk Stair=Escalier en tronc d'arbre à caoutchouc
|
||||||
|
Small poplar Tree Sapling=Pousse de petit peuplier
|
||||||
|
Spruce Cone=Cône de sapin
|
||||||
|
Spruce Tree=Épicéa
|
||||||
|
Spruce Tree Fence=Barrière en bois d'épicéa
|
||||||
|
Spruce Tree Fence Gate=Porte de clôture en bois d'épicéa
|
||||||
|
Spruce Tree Fence Rail=Clôture en bois d'épicéa
|
||||||
|
Spruce Tree Leaves=Feuilles d'épicéa
|
||||||
|
Spruce Tree Planks=Planches d'arbre d'épicéa
|
||||||
|
Spruce Tree Planks Slab=Dalle en bois d'épicéa
|
||||||
|
Spruce Tree Planks Stair=Escalier en bois d'épicéa
|
||||||
|
Spruce Tree Sapling=Pousse d'arbre d'épicéa
|
||||||
|
Spruce Tree Trunk=Tronc d'arbre d'épicéa
|
||||||
|
Spruce Tree Trunk Slab=Dalle en tronc d'épicéa
|
||||||
|
Spruce Tree Trunk Stair=Escalier en tronc d'épicéa
|
||||||
|
Willow Tree=Saule
|
||||||
|
Willow Tree Fence=Barrière en bois de saule
|
||||||
|
Willow Tree Fence Gate=Porte de clôture en bois de saule
|
||||||
|
Willow Tree Fence Rail=Clôture en bois de saule
|
||||||
|
Willow Tree Leaves=Feuilles de saule
|
||||||
|
Willow Tree Planks=Planches de saule
|
||||||
|
Willow Tree Planks Slab=Dalle en bois de saule
|
||||||
|
Willow Tree Planks Stair=Escalier en bois de saule
|
||||||
|
Willow Tree Sapling=Pousse de saule
|
||||||
|
Willow Tree Trunk=Tronc d'arbre de saule
|
||||||
|
Willow Tree Trunk Slab=Dalle en tronc de saule
|
||||||
|
Willow Tree Trunk Stair=Escalier en tronc de saule
|
||||||
|
Yellow=jaune
|
@ -1,73 +1,210 @@
|
|||||||
# Template
|
# textdomain: moretrees
|
||||||
|
|
||||||
|
|
||||||
|
### cocos_palm.lua ###
|
||||||
|
|
||||||
|
Coconut=
|
||||||
|
Coconut Flower=
|
||||||
|
|
||||||
### crafts.lua ###
|
### crafts.lua ###
|
||||||
Coconut Milk =
|
|
||||||
Raw Coconut =
|
Acorn Muffin=
|
||||||
Acorn Muffin batter =
|
Acorn Muffin batter=
|
||||||
Acorn Muffin =
|
Coconut Milk=
|
||||||
Roasted Spruce Cone Nuts =
|
Date=
|
||||||
Roasted Pine Cone Nuts =
|
Date & nut snack=
|
||||||
Roasted Fir Cone Nuts =
|
Date-nut cake=
|
||||||
|
Date-nut cake batter=
|
||||||
|
Date-nut energy bar=
|
||||||
|
Raw Coconut=
|
||||||
|
Roasted Cedar Cone Nuts=
|
||||||
|
Roasted Fir Cone Nuts=
|
||||||
|
Roasted Spruce Cone Nuts=
|
||||||
|
|
||||||
|
### date_palm.lua ###
|
||||||
|
|
||||||
|
Date Flowers=
|
||||||
|
Date Stem=
|
||||||
|
Dates=
|
||||||
|
|
||||||
### node_defs.lua ###
|
### node_defs.lua ###
|
||||||
Beech Tree Trunk =
|
|
||||||
Apple Tree Trunk =
|
|
||||||
Oak Tree Trunk =
|
|
||||||
Giant Sequoia Trunk =
|
|
||||||
Birch Tree Trunk =
|
|
||||||
Palm Tree Trunk =
|
|
||||||
Spruce Tree Trunk =
|
|
||||||
Pine Tree Trunk =
|
|
||||||
Willow Tree Trunk =
|
|
||||||
Rubber Tree Trunk =
|
|
||||||
Jungle Tree Trunk =
|
|
||||||
Douglas Fir Trunk =
|
|
||||||
Beech Tree Planks =
|
|
||||||
Apple Tree Planks =
|
|
||||||
Oak Tree Planks =
|
|
||||||
Giant Sequoia Planks =
|
|
||||||
Birch Tree Planks =
|
|
||||||
Palm Tree Planks =
|
|
||||||
Spruce Tree Planks =
|
|
||||||
Pine Tree Planks =
|
|
||||||
Willow Tree Planks =
|
|
||||||
Rubber Tree Planks =
|
|
||||||
Jungle Tree Planks =
|
|
||||||
Douglas Fir Planks =
|
|
||||||
Beech Tree Sapling =
|
|
||||||
Apple Tree Sapling =
|
|
||||||
Oak Tree Sapling =
|
|
||||||
Giant Sequoia Sapling =
|
|
||||||
Birch Tree Sapling =
|
|
||||||
Palm Tree Sapling =
|
|
||||||
Spruce Tree Sapling =
|
|
||||||
Pine Tree Sapling =
|
|
||||||
Willow Tree Sapling =
|
|
||||||
Rubber Tree Sapling =
|
|
||||||
Jungle Tree Sapling =
|
|
||||||
Douglas Fir Sapling =
|
|
||||||
Beech Tree Leaves =
|
|
||||||
Apple Tree Leaves =
|
|
||||||
Oak Tree Leaves =
|
|
||||||
Giant Sequoia Leaves =
|
|
||||||
Birch Tree Leaves =
|
|
||||||
Palm Tree Leaves =
|
|
||||||
Spruce Tree Leaves =
|
|
||||||
Pine Tree Leaves =
|
|
||||||
Willow Tree Leaves =
|
|
||||||
Rubber Tree Leaves =
|
|
||||||
Jungle Tree Leaves =
|
|
||||||
Douglas Fir Leaves =
|
|
||||||
|
|
||||||
Acorn =
|
@1 (fast growth)=
|
||||||
Coconut =
|
Acorn=
|
||||||
Spruce Cone =
|
Apple Tree=
|
||||||
Pine Cone =
|
Apple Tree Fence=
|
||||||
Fir Cone =
|
Apple Tree Fence Gate=
|
||||||
Jungle Sapling =
|
Apple Tree Fence Rail=
|
||||||
Jungle Tree Leaves (Yellow) =
|
Apple Tree Leaves=
|
||||||
Jungle Tree Leaves (Red) =
|
Apple Tree Planks=
|
||||||
Douglas Fir Leaves (Bright) =
|
Apple Tree Planks Slab=
|
||||||
Rubber Tree Trunk (Empty) =
|
Apple Tree Planks Stair=
|
||||||
|
Apple Tree Sapling=
|
||||||
[Moretrees] Loaded (2013-02-11) =
|
Apple Tree Trunk=
|
||||||
|
Apple Tree Trunk Slab=
|
||||||
|
Apple Tree Trunk Stair=
|
||||||
|
Beech Tree=
|
||||||
|
Beech Tree Fence=
|
||||||
|
Beech Tree Fence Gate=
|
||||||
|
Beech Tree Fence Rail=
|
||||||
|
Beech Tree Leaves=
|
||||||
|
Beech Tree Planks=
|
||||||
|
Beech Tree Planks Slab=
|
||||||
|
Beech Tree Planks Stair=
|
||||||
|
Beech Tree Sapling=
|
||||||
|
Beech Tree Trunk=
|
||||||
|
Beech Tree Trunk Slab=
|
||||||
|
Beech Tree Trunk Stair=
|
||||||
|
Birch Tree=
|
||||||
|
Birch Tree Fence=
|
||||||
|
Birch Tree Fence Gate=
|
||||||
|
Birch Tree Fence Rail=
|
||||||
|
Birch Tree Leaves=
|
||||||
|
Birch Tree Planks=
|
||||||
|
Birch Tree Planks Slab=
|
||||||
|
Birch Tree Planks Stair=
|
||||||
|
Birch Tree Sapling=
|
||||||
|
Birch Tree Trunk=
|
||||||
|
Birch Tree Trunk Slab=
|
||||||
|
Birch Tree Trunk Stair=
|
||||||
|
Cedar Cone=
|
||||||
|
Cedar Tree=
|
||||||
|
Cedar Tree Fence=
|
||||||
|
Cedar Tree Fence Gate=
|
||||||
|
Cedar Tree Fence Rail=
|
||||||
|
Cedar Tree Leaves=
|
||||||
|
Cedar Tree Planks=
|
||||||
|
Cedar Tree Planks Slab=
|
||||||
|
Cedar Tree Planks Stair=
|
||||||
|
Cedar Tree Sapling=
|
||||||
|
Cedar Tree Trunk=
|
||||||
|
Cedar Tree Trunk Slab=
|
||||||
|
Cedar Tree Trunk Stair=
|
||||||
|
Date Palm Tree=
|
||||||
|
Date Palm Tree Fence=
|
||||||
|
Date Palm Tree Fence Gate=
|
||||||
|
Date Palm Tree Fence Rail=
|
||||||
|
Date Palm Tree Leaves=
|
||||||
|
Date Palm Tree Planks=
|
||||||
|
Date Palm Tree Planks Slab=
|
||||||
|
Date Palm Tree Planks Stair=
|
||||||
|
Date Palm Tree Sapling=
|
||||||
|
Date Palm Tree Trunk=
|
||||||
|
Date Palm Tree Trunk Slab=
|
||||||
|
Date Palm Tree Trunk Stair=
|
||||||
|
Douglas Fir=
|
||||||
|
Douglas Fir Fence=
|
||||||
|
Douglas Fir Fence Gate=
|
||||||
|
Douglas Fir Fence Rail=
|
||||||
|
Douglas Fir Leaves=
|
||||||
|
Douglas Fir Leaves (Bright)=
|
||||||
|
Douglas Fir Planks=
|
||||||
|
Douglas Fir Planks Slab=
|
||||||
|
Douglas Fir Planks Stair=
|
||||||
|
Douglas Fir Sapling=
|
||||||
|
Douglas Fir Trunk=
|
||||||
|
Douglas Fir Trunk Slab=
|
||||||
|
Douglas Fir Trunk Stair=
|
||||||
|
Fir Cone=
|
||||||
|
Giant Sequoia=
|
||||||
|
Giant Sequoia Fence=
|
||||||
|
Giant Sequoia Fence Gate=
|
||||||
|
Giant Sequoia Fence Rail=
|
||||||
|
Giant Sequoia Leaves=
|
||||||
|
Giant Sequoia Planks=
|
||||||
|
Giant Sequoia Planks Slab=
|
||||||
|
Giant Sequoia Planks Stair=
|
||||||
|
Giant Sequoia Sapling=
|
||||||
|
Giant Sequoia Trunk=
|
||||||
|
Giant Sequoia Trunk Slab=
|
||||||
|
Giant Sequoia Trunk Stair=
|
||||||
|
Jungle Tree=
|
||||||
|
Jungle Tree Fence=
|
||||||
|
Jungle Tree Fence Gate=
|
||||||
|
Jungle Tree Fence Rail=
|
||||||
|
Jungle Tree Leaves=
|
||||||
|
Jungle Tree Leaves (@1)=
|
||||||
|
Jungle Tree Planks=
|
||||||
|
Jungle Tree Planks Slab=
|
||||||
|
Jungle Tree Planks Stair=
|
||||||
|
Jungle Tree Sapling=
|
||||||
|
Jungle Tree Trunk=
|
||||||
|
Jungle Tree Trunk Slab=
|
||||||
|
Jungle Tree Trunk Stair=
|
||||||
|
Oak Tree=
|
||||||
|
Oak Tree Fence=
|
||||||
|
Oak Tree Fence Gate=
|
||||||
|
Oak Tree Fence Rail=
|
||||||
|
Oak Tree Leaves=
|
||||||
|
Oak Tree Planks=
|
||||||
|
Oak Tree Planks Slab=
|
||||||
|
Oak Tree Planks Stair=
|
||||||
|
Oak Tree Sapling=
|
||||||
|
Oak Tree Trunk=
|
||||||
|
Oak Tree Trunk Slab=
|
||||||
|
Oak Tree Trunk Stair=
|
||||||
|
Palm Tree=
|
||||||
|
Palm Tree Fence=
|
||||||
|
Palm Tree Fence Gate=
|
||||||
|
Palm Tree Fence Rail=
|
||||||
|
Palm Tree Leaves=
|
||||||
|
Palm Tree Planks=
|
||||||
|
Palm Tree Planks Slab=
|
||||||
|
Palm Tree Planks Stair=
|
||||||
|
Palm Tree Sapling=
|
||||||
|
Palm Tree Trunk=
|
||||||
|
Palm Tree Trunk Slab=
|
||||||
|
Palm Tree Trunk Stair=
|
||||||
|
Poplar Tree=
|
||||||
|
Poplar Tree Fence=
|
||||||
|
Poplar Tree Fence Gate=
|
||||||
|
Poplar Tree Fence Rail=
|
||||||
|
Poplar Tree Leaves=
|
||||||
|
Poplar Tree Planks=
|
||||||
|
Poplar Tree Planks Slab=
|
||||||
|
Poplar Tree Planks Stair=
|
||||||
|
Poplar Tree Sapling=
|
||||||
|
Poplar Tree Trunk=
|
||||||
|
Poplar Tree Trunk Slab=
|
||||||
|
Poplar Tree Trunk Stair=
|
||||||
|
Red=
|
||||||
|
Rubber Tree=
|
||||||
|
Rubber Tree Fence=
|
||||||
|
Rubber Tree Fence Gate=
|
||||||
|
Rubber Tree Fence Rail=
|
||||||
|
Rubber Tree Leaves=
|
||||||
|
Rubber Tree Planks=
|
||||||
|
Rubber Tree Planks Slab=
|
||||||
|
Rubber Tree Planks Stair=
|
||||||
|
Rubber Tree Sapling=
|
||||||
|
Rubber Tree Trunk=
|
||||||
|
Rubber Tree Trunk (Empty)=
|
||||||
|
Rubber Tree Trunk Slab=
|
||||||
|
Rubber Tree Trunk Stair=
|
||||||
|
Small poplar Tree Sapling=
|
||||||
|
Spruce Cone=
|
||||||
|
Spruce Tree=
|
||||||
|
Spruce Tree Fence=
|
||||||
|
Spruce Tree Fence Gate=
|
||||||
|
Spruce Tree Fence Rail=
|
||||||
|
Spruce Tree Leaves=
|
||||||
|
Spruce Tree Planks=
|
||||||
|
Spruce Tree Planks Slab=
|
||||||
|
Spruce Tree Planks Stair=
|
||||||
|
Spruce Tree Sapling=
|
||||||
|
Spruce Tree Trunk=
|
||||||
|
Spruce Tree Trunk Slab=
|
||||||
|
Spruce Tree Trunk Stair=
|
||||||
|
Willow Tree=
|
||||||
|
Willow Tree Fence=
|
||||||
|
Willow Tree Fence Gate=
|
||||||
|
Willow Tree Fence Rail=
|
||||||
|
Willow Tree Leaves=
|
||||||
|
Willow Tree Planks=
|
||||||
|
Willow Tree Planks Slab=
|
||||||
|
Willow Tree Planks Stair=
|
||||||
|
Willow Tree Sapling=
|
||||||
|
Willow Tree Trunk=
|
||||||
|
Willow Tree Trunk Slab=
|
||||||
|
Willow Tree Trunk Stair=
|
||||||
|
Yellow=
|
||||||
|
3
mod.conf
@ -1 +1,4 @@
|
|||||||
name = moretrees
|
name = moretrees
|
||||||
|
depends = default, biome_lib, vessels
|
||||||
|
optional_depends = doors, stairs, moreblocks, farming
|
||||||
|
min_minetest_version = 5.2.0
|
||||||
|
486
node_defs.lua
@ -1,35 +1,224 @@
|
|||||||
local S = moretrees.intllib
|
local S = minetest.get_translator("moretrees")
|
||||||
|
|
||||||
moretrees.avoidnodes = {}
|
moretrees.avoidnodes = {}
|
||||||
|
|
||||||
moretrees.treelist = {
|
|
||||||
{"beech", "Beech Tree"},
|
|
||||||
{"apple_tree", "Apple Tree"},
|
|
||||||
{"oak", "Oak Tree", "acorn", "Acorn", {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8 },
|
|
||||||
{"sequoia", "Giant Sequoia"},
|
|
||||||
{"birch", "Birch Tree"},
|
|
||||||
{"palm", "Palm Tree", "palm_fruit_trunk_gen", "Palm Tree", {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 1.0 },
|
|
||||||
{"date_palm", "Date Palm Tree", "date_palm_fruit_trunk", "Date Palm Tree", {0, 0, 0, 0, 0, 0}, 0.0 },
|
|
||||||
{"spruce", "Spruce Tree", "spruce_cone", "Spruce Cone", {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8 },
|
|
||||||
{"cedar", "Cedar Tree", "cedar_cone", "Cedar Cone", {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8 },
|
|
||||||
{"willow", "Willow Tree"},
|
|
||||||
{"rubber_tree", "Rubber Tree"},
|
|
||||||
{"fir", "Douglas Fir", "fir_cone", "Fir Cone", {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8 },
|
|
||||||
|
|
||||||
{"jungletree", "Jungle Tree", nil, nil, nil, nil, "default_junglesapling.png" },
|
moretrees.treelist = {
|
||||||
{"acacia", "Acacia Tree", nil, nil, nil, nil, "default_acacia_sapling.png" },
|
{"beech", S("Beech Tree")},
|
||||||
|
{"apple_tree", S("Apple Tree")},
|
||||||
|
{"oak", S("Oak Tree"), "acorn", S("Acorn"), {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8 },
|
||||||
|
{"sequoia", S("Giant Sequoia")},
|
||||||
|
{"birch", S("Birch Tree")},
|
||||||
|
{"palm", S("Palm Tree"), "palm_fruit_trunk_gen", S("Palm Tree"), {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 1.0 },
|
||||||
|
{"date_palm", S("Date Palm Tree"), "date_palm_fruit_trunk", S("Date Palm Tree"), {0, 0, 0, 0, 0, 0}, 0.0 },
|
||||||
|
{"spruce", S("Spruce Tree"), "spruce_cone", S("Spruce Cone"), {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8 },
|
||||||
|
{"cedar", S("Cedar Tree"), "cedar_cone", S("Cedar Cone"), {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8 },
|
||||||
|
{"poplar", S("Poplar Tree")},
|
||||||
|
{"poplar_small", S("Poplar Tree")},
|
||||||
|
{"willow", S("Willow Tree")},
|
||||||
|
{"rubber_tree", S("Rubber Tree")},
|
||||||
|
{"fir", S("Douglas Fir"), "fir_cone", S("Fir Cone"), {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8 },
|
||||||
|
{"jungletree", S("Jungle Tree"), nil, nil, nil, nil, "default_junglesapling.png" },
|
||||||
}
|
}
|
||||||
|
|
||||||
local dirs1 = { 21, 20, 23, 22, 21 }
|
moretrees.treedesc = {
|
||||||
|
beech = {
|
||||||
|
trunk = S("Beech Tree Trunk"),
|
||||||
|
planks = S("Beech Tree Planks"),
|
||||||
|
sapling = S("Beech Tree Sapling"),
|
||||||
|
leaves = S("Beech Tree Leaves"),
|
||||||
|
trunk_stair = S("Beech Tree Trunk Stair"),
|
||||||
|
trunk_slab = S("Beech Tree Trunk Slab"),
|
||||||
|
planks_stair = S("Beech Tree Planks Stair"),
|
||||||
|
planks_slab = S("Beech Tree Planks Slab"),
|
||||||
|
fence = S("Beech Tree Fence"),
|
||||||
|
fence_rail = S("Beech Tree Fence Rail"),
|
||||||
|
fence_gate = S("Beech Tree Fence Gate"),
|
||||||
|
},
|
||||||
|
apple_tree = {
|
||||||
|
trunk = S("Apple Tree Trunk"),
|
||||||
|
planks = S("Apple Tree Planks"),
|
||||||
|
sapling = S("Apple Tree Sapling"),
|
||||||
|
leaves = S("Apple Tree Leaves"),
|
||||||
|
trunk_stair = S("Apple Tree Trunk Stair"),
|
||||||
|
trunk_slab = S("Apple Tree Trunk Slab"),
|
||||||
|
planks_stair = S("Apple Tree Planks Stair"),
|
||||||
|
planks_slab = S("Apple Tree Planks Slab"),
|
||||||
|
fence = S("Apple Tree Fence"),
|
||||||
|
fence_rail = S("Apple Tree Fence Rail"),
|
||||||
|
fence_gate = S("Apple Tree Fence Gate"),
|
||||||
|
},
|
||||||
|
oak = {
|
||||||
|
trunk = S("Oak Tree Trunk"),
|
||||||
|
planks = S("Oak Tree Planks"),
|
||||||
|
sapling = S("Oak Tree Sapling"),
|
||||||
|
leaves = S("Oak Tree Leaves"),
|
||||||
|
trunk_stair = S("Oak Tree Trunk Stair"),
|
||||||
|
trunk_slab = S("Oak Tree Trunk Slab"),
|
||||||
|
planks_stair = S("Oak Tree Planks Stair"),
|
||||||
|
planks_slab = S("Oak Tree Planks Slab"),
|
||||||
|
fence = S("Oak Tree Fence"),
|
||||||
|
fence_rail = S("Oak Tree Fence Rail"),
|
||||||
|
fence_gate = S("Oak Tree Fence Gate"),
|
||||||
|
},
|
||||||
|
sequoia = {
|
||||||
|
trunk = S("Giant Sequoia Trunk"),
|
||||||
|
planks = S("Giant Sequoia Planks"),
|
||||||
|
sapling = S("Giant Sequoia Sapling"),
|
||||||
|
leaves = S("Giant Sequoia Leaves"),
|
||||||
|
trunk_stair = S("Giant Sequoia Trunk Stair"),
|
||||||
|
trunk_slab = S("Giant Sequoia Trunk Slab"),
|
||||||
|
planks_stair = S("Giant Sequoia Planks Stair"),
|
||||||
|
planks_slab = S("Giant Sequoia Planks Slab"),
|
||||||
|
fence = S("Giant Sequoia Fence"),
|
||||||
|
fence_rail = S("Giant Sequoia Fence Rail"),
|
||||||
|
fence_gate = S("Giant Sequoia Fence Gate"),
|
||||||
|
},
|
||||||
|
birch = {
|
||||||
|
trunk = S("Birch Tree Trunk"),
|
||||||
|
planks = S("Birch Tree Planks"),
|
||||||
|
sapling = S("Birch Tree Sapling"),
|
||||||
|
leaves = S("Birch Tree Leaves"),
|
||||||
|
trunk_stair = S("Birch Tree Trunk Stair"),
|
||||||
|
trunk_slab = S("Birch Tree Trunk Slab"),
|
||||||
|
planks_stair = S("Birch Tree Planks Stair"),
|
||||||
|
planks_slab = S("Birch Tree Planks Slab"),
|
||||||
|
fence = S("Birch Tree Fence"),
|
||||||
|
fence_rail = S("Birch Tree Fence Rail"),
|
||||||
|
fence_gate = S("Birch Tree Fence Gate"),
|
||||||
|
},
|
||||||
|
palm = {
|
||||||
|
trunk = S("Palm Tree Trunk"),
|
||||||
|
planks = S("Palm Tree Planks"),
|
||||||
|
sapling = S("Palm Tree Sapling"),
|
||||||
|
leaves = S("Palm Tree Leaves"),
|
||||||
|
trunk_stair = S("Palm Tree Trunk Stair"),
|
||||||
|
trunk_slab = S("Palm Tree Trunk Slab"),
|
||||||
|
planks_stair = S("Palm Tree Planks Stair"),
|
||||||
|
planks_slab = S("Palm Tree Planks Slab"),
|
||||||
|
fence = S("Palm Tree Fence"),
|
||||||
|
fence_rail = S("Palm Tree Fence Rail"),
|
||||||
|
fence_gate = S("Palm Tree Fence Gate"),
|
||||||
|
},
|
||||||
|
date_palm = {
|
||||||
|
trunk = S("Date Palm Tree Trunk"),
|
||||||
|
planks = S("Date Palm Tree Planks"),
|
||||||
|
sapling = S("Date Palm Tree Sapling"),
|
||||||
|
leaves = S("Date Palm Tree Leaves"),
|
||||||
|
trunk_stair = S("Date Palm Tree Trunk Stair"),
|
||||||
|
trunk_slab = S("Date Palm Tree Trunk Slab"),
|
||||||
|
planks_stair = S("Date Palm Tree Planks Stair"),
|
||||||
|
planks_slab = S("Date Palm Tree Planks Slab"),
|
||||||
|
fence = S("Date Palm Tree Fence"),
|
||||||
|
fence_rail = S("Date Palm Tree Fence Rail"),
|
||||||
|
fence_gate = S("Date Palm Tree Fence Gate"),
|
||||||
|
},
|
||||||
|
spruce = {
|
||||||
|
trunk = S("Spruce Tree Trunk"),
|
||||||
|
planks = S("Spruce Tree Planks"),
|
||||||
|
sapling = S("Spruce Tree Sapling"),
|
||||||
|
leaves = S("Spruce Tree Leaves"),
|
||||||
|
trunk_stair = S("Spruce Tree Trunk Stair"),
|
||||||
|
trunk_slab = S("Spruce Tree Trunk Slab"),
|
||||||
|
planks_stair = S("Spruce Tree Planks Stair"),
|
||||||
|
planks_slab = S("Spruce Tree Planks Slab"),
|
||||||
|
fence = S("Spruce Tree Fence"),
|
||||||
|
fence_rail = S("Spruce Tree Fence Rail"),
|
||||||
|
fence_gate = S("Spruce Tree Fence Gate"),
|
||||||
|
},
|
||||||
|
cedar = {
|
||||||
|
trunk = S("Cedar Tree Trunk"),
|
||||||
|
planks = S("Cedar Tree Planks"),
|
||||||
|
sapling = S("Cedar Tree Sapling"),
|
||||||
|
leaves = S("Cedar Tree Leaves"),
|
||||||
|
trunk_stair = S("Cedar Tree Trunk Stair"),
|
||||||
|
trunk_slab = S("Cedar Tree Trunk Slab"),
|
||||||
|
planks_stair = S("Cedar Tree Planks Stair"),
|
||||||
|
planks_slab = S("Cedar Tree Planks Slab"),
|
||||||
|
fence = S("Cedar Tree Fence"),
|
||||||
|
fence_rail = S("Cedar Tree Fence Rail"),
|
||||||
|
fence_gate = S("Cedar Tree Fence Gate"),
|
||||||
|
},
|
||||||
|
poplar = {
|
||||||
|
trunk = S("Poplar Tree Trunk"),
|
||||||
|
planks = S("Poplar Tree Planks"),
|
||||||
|
sapling = S("Poplar Tree Sapling"),
|
||||||
|
leaves = S("Poplar Tree Leaves"),
|
||||||
|
trunk_stair = S("Poplar Tree Trunk Stair"),
|
||||||
|
trunk_slab = S("Poplar Tree Trunk Slab"),
|
||||||
|
planks_stair = S("Poplar Tree Planks Stair"),
|
||||||
|
planks_slab = S("Poplar Tree Planks Slab"),
|
||||||
|
fence = S("Poplar Tree Fence"),
|
||||||
|
fence_rail = S("Poplar Tree Fence Rail"),
|
||||||
|
fence_gate = S("Poplar Tree Fence Gate"),
|
||||||
|
},
|
||||||
|
poplar_small = {
|
||||||
|
sapling = S("Small poplar Tree Sapling"),
|
||||||
|
},
|
||||||
|
willow = {
|
||||||
|
trunk = S("Willow Tree Trunk"),
|
||||||
|
planks = S("Willow Tree Planks"),
|
||||||
|
sapling = S("Willow Tree Sapling"),
|
||||||
|
leaves = S("Willow Tree Leaves"),
|
||||||
|
trunk_stair = S("Willow Tree Trunk Stair"),
|
||||||
|
trunk_slab = S("Willow Tree Trunk Slab"),
|
||||||
|
planks_stair = S("Willow Tree Planks Stair"),
|
||||||
|
planks_slab = S("Willow Tree Planks Slab"),
|
||||||
|
fence = S("Willow Tree Fence"),
|
||||||
|
fence_rail = S("Willow Tree Fence Rail"),
|
||||||
|
fence_gate = S("Willow Tree Fence Gate"),
|
||||||
|
},
|
||||||
|
rubber_tree = {
|
||||||
|
trunk = S("Rubber Tree Trunk"),
|
||||||
|
planks = S("Rubber Tree Planks"),
|
||||||
|
sapling = S("Rubber Tree Sapling"),
|
||||||
|
leaves = S("Rubber Tree Leaves"),
|
||||||
|
trunk_stair = S("Rubber Tree Trunk Stair"),
|
||||||
|
trunk_slab = S("Rubber Tree Trunk Slab"),
|
||||||
|
planks_stair = S("Rubber Tree Planks Stair"),
|
||||||
|
planks_slab = S("Rubber Tree Planks Slab"),
|
||||||
|
fence = S("Rubber Tree Fence"),
|
||||||
|
fence_rail = S("Rubber Tree Fence Rail"),
|
||||||
|
fence_gate = S("Rubber Tree Fence Gate"),
|
||||||
|
},
|
||||||
|
fir = {
|
||||||
|
trunk = S("Douglas Fir Trunk"),
|
||||||
|
planks = S("Douglas Fir Planks"),
|
||||||
|
sapling = S("Douglas Fir Sapling"),
|
||||||
|
leaves = S("Douglas Fir Leaves"),
|
||||||
|
trunk_stair = S("Douglas Fir Trunk Stair"),
|
||||||
|
trunk_slab = S("Douglas Fir Trunk Slab"),
|
||||||
|
planks_stair = S("Douglas Fir Planks Stair"),
|
||||||
|
planks_slab = S("Douglas Fir Planks Slab"),
|
||||||
|
fence = S("Douglas Fir Fence"),
|
||||||
|
fence_rail = S("Douglas Fir Fence Rail"),
|
||||||
|
fence_gate = S("Douglas Fir Fence Gate"),
|
||||||
|
},
|
||||||
|
jungletree = {
|
||||||
|
trunk = S("Jungle Tree Trunk"),
|
||||||
|
planks = S("Jungle Tree Planks"),
|
||||||
|
sapling = S("Jungle Tree Sapling"),
|
||||||
|
leaves = S("Jungle Tree Leaves"),
|
||||||
|
trunk_stair = S("Jungle Tree Trunk Stair"),
|
||||||
|
trunk_slab = S("Jungle Tree Trunk Slab"),
|
||||||
|
planks_stair = S("Jungle Tree Planks Stair"),
|
||||||
|
planks_slab = S("Jungle Tree Planks Slab"),
|
||||||
|
fence = S("Jungle Tree Fence"),
|
||||||
|
fence_rail = S("Jungle Tree Fence Rail"),
|
||||||
|
fence_gate = S("Jungle Tree Fence Gate"),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-- local dirs1 = { 21, 20, 23, 22, 21 }
|
||||||
local dirs2 = { 12, 9, 18, 7, 12 }
|
local dirs2 = { 12, 9, 18, 7, 12 }
|
||||||
local dirs3 = { 14, 11, 16, 5, 14 }
|
-- local dirs3 = { 14, 11, 16, 5, 14 }
|
||||||
|
|
||||||
local moretrees_new_leaves_drawtype = "allfaces_optional"
|
local moretrees_new_leaves_drawtype = "allfaces_optional"
|
||||||
local moretrees_plantlike_leaves_visual_scale = 1
|
local moretrees_plantlike_leaves_visual_scale = 1
|
||||||
|
|
||||||
if moretrees.plantlike_leaves then
|
if moretrees.plantlike_leaves then
|
||||||
moretrees_new_leaves_drawtype = "plantlike"
|
moretrees_new_leaves_drawtype = "plantlike"
|
||||||
moretrees_plantlike_leaves_visual_scale = 1.189
|
moretrees_plantlike_leaves_visual_scale = math.sqrt(2)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- redefine default leaves to handle plantlike and/or leaf decay options
|
-- redefine default leaves to handle plantlike and/or leaf decay options
|
||||||
@ -38,11 +227,7 @@ if moretrees.plantlike_leaves then
|
|||||||
minetest.override_item("default:leaves", {
|
minetest.override_item("default:leaves", {
|
||||||
inventory_image = minetest.inventorycube("default_leaves.png"),
|
inventory_image = minetest.inventorycube("default_leaves.png"),
|
||||||
drawtype = "plantlike",
|
drawtype = "plantlike",
|
||||||
visual_scale = 1.189
|
visual_scale = math.sqrt(2)
|
||||||
})
|
|
||||||
else
|
|
||||||
minetest.override_item("default:leaves", {
|
|
||||||
waving = 1
|
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -52,17 +237,12 @@ if moretrees.plantlike_leaves then
|
|||||||
minetest.override_item("default:jungleleaves", {
|
minetest.override_item("default:jungleleaves", {
|
||||||
inventory_image = minetest.inventorycube("default_jungleleaves.png"),
|
inventory_image = minetest.inventorycube("default_jungleleaves.png"),
|
||||||
drawtype = "plantlike",
|
drawtype = "plantlike",
|
||||||
visual_scale = 1.189
|
visual_scale = math.sqrt(2)
|
||||||
})
|
|
||||||
else
|
|
||||||
minetest.override_item("default:jungleleaves", {
|
|
||||||
waving = 1
|
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
for i in ipairs(moretrees.treelist) do
|
for i in ipairs(moretrees.treelist) do
|
||||||
local treename = moretrees.treelist[i][1]
|
local treename = moretrees.treelist[i][1]
|
||||||
local treedesc = moretrees.treelist[i][2]
|
|
||||||
local fruit = moretrees.treelist[i][3]
|
local fruit = moretrees.treelist[i][3]
|
||||||
local fruitdesc = moretrees.treelist[i][4]
|
local fruitdesc = moretrees.treelist[i][4]
|
||||||
local selbox = moretrees.treelist[i][5]
|
local selbox = moretrees.treelist[i][5]
|
||||||
@ -70,63 +250,76 @@ for i in ipairs(moretrees.treelist) do
|
|||||||
|
|
||||||
local saptex = moretrees.treelist[i][7]
|
local saptex = moretrees.treelist[i][7]
|
||||||
|
|
||||||
if treename ~= "jungletree" -- the default game provides jungle tree, acacia, and pine trunk/planks nodes.
|
-- player will get a sapling with 1/100 chance
|
||||||
and treename ~= "acacia"
|
-- player will get leaves only if he/she gets no saplings,
|
||||||
|
-- this is because max_items is 1
|
||||||
|
|
||||||
|
local droprarity = 100
|
||||||
|
local decay = moretrees.leafdecay_radius
|
||||||
|
|
||||||
|
if treename == "palm" then
|
||||||
|
droprarity = 20
|
||||||
|
decay = moretrees.palm_leafdecay_radius
|
||||||
|
elseif treename == "date_palm" then
|
||||||
|
decay = moretrees.palm_leafdecay_radius
|
||||||
|
end
|
||||||
|
|
||||||
|
if treename ~= "jungletree" -- the default game provides jungle tree and pine trunk/planks nodes.
|
||||||
|
and treename ~= "poplar_small"
|
||||||
and treename ~= "pine" then
|
and treename ~= "pine" then
|
||||||
|
|
||||||
saptex = "moretrees_"..treename.."_sapling.png"
|
saptex = "moretrees_"..treename.."_sapling.png"
|
||||||
|
|
||||||
minetest.register_node("moretrees:"..treename.."_trunk", {
|
minetest.register_node("moretrees:"..treename.."_trunk", {
|
||||||
description = S(treedesc.." Trunk"),
|
description = moretrees.treedesc[treename].trunk,
|
||||||
tiles = {
|
tiles = {
|
||||||
"moretrees_"..treename.."_trunk_top.png",
|
"moretrees_"..treename.."_trunk_top.png",
|
||||||
"moretrees_"..treename.."_trunk_top.png",
|
"moretrees_"..treename.."_trunk_top.png",
|
||||||
"moretrees_"..treename.."_trunk.png"
|
"moretrees_"..treename.."_trunk.png"
|
||||||
},
|
},
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
is_ground_content = true,
|
is_ground_content = false,
|
||||||
groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
|
groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
|
||||||
sounds = default.node_sound_wood_defaults(),
|
sounds = default.node_sound_wood_defaults(),
|
||||||
on_place = minetest.rotate_node,
|
on_place = minetest.rotate_node,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("moretrees:"..treename.."_planks", {
|
minetest.register_node("moretrees:"..treename.."_planks", {
|
||||||
description = S(treedesc.." Planks"),
|
description = moretrees.treedesc[treename].planks,
|
||||||
tiles = {"moretrees_"..treename.."_wood.png"},
|
tiles = {"moretrees_"..treename.."_wood.png"},
|
||||||
is_ground_content = true,
|
is_ground_content = false,
|
||||||
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
|
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
|
||||||
sounds = default.node_sound_wood_defaults(),
|
sounds = default.node_sound_wood_defaults(),
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("moretrees:"..treename.."_sapling", {
|
minetest.register_node("moretrees:"..treename.."_sapling", {
|
||||||
description = S(treedesc.." Sapling"),
|
description = moretrees.treedesc[treename].sapling,
|
||||||
drawtype = "plantlike",
|
drawtype = "plantlike",
|
||||||
tiles = {saptex},
|
tiles = {saptex},
|
||||||
inventory_image = saptex,
|
inventory_image = saptex,
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "waving",
|
paramtype2 = "waving",
|
||||||
walkable = false,
|
walkable = false,
|
||||||
|
is_ground_content = true,
|
||||||
selection_box = {
|
selection_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
|
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_defaults(),
|
sounds = default.node_sound_defaults(),
|
||||||
|
on_place = function(itemstack, placer, pointed_thing)
|
||||||
|
itemstack = default.sapling_on_place(itemstack, placer, pointed_thing,
|
||||||
|
"moretrees:" ..treename.. "_sapling",
|
||||||
|
-- minp, maxp to be checked, relative to sapling pos
|
||||||
|
-- minp_relative.y = 1 because sapling pos has been checked
|
||||||
|
{x = -3, y = 1, z = -3},
|
||||||
|
{x = 3, y = 6, z = 3},
|
||||||
|
-- maximum interval of interior volume check
|
||||||
|
4)
|
||||||
|
|
||||||
|
return itemstack
|
||||||
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
-- player will get a sapling with 1/100 chance
|
|
||||||
-- player will get leaves only if he/she gets no saplings,
|
|
||||||
-- this is because max_items is 1
|
|
||||||
|
|
||||||
local droprarity = 100
|
|
||||||
local decay = moretrees.leafdecay_radius
|
|
||||||
|
|
||||||
if treename == "palm" then
|
|
||||||
droprarity = 20
|
|
||||||
decay = moretrees.palm_leafdecay_radius
|
|
||||||
elseif treename == "date_palm" then
|
|
||||||
decay = moretrees.palm_leafdecay_radius
|
|
||||||
end
|
|
||||||
|
|
||||||
local moretrees_leaves_inventory_image = nil
|
local moretrees_leaves_inventory_image = nil
|
||||||
local moretrees_new_leaves_waving = nil
|
local moretrees_new_leaves_waving = nil
|
||||||
@ -138,14 +331,15 @@ for i in ipairs(moretrees.treelist) do
|
|||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_node("moretrees:"..treename.."_leaves", {
|
minetest.register_node("moretrees:"..treename.."_leaves", {
|
||||||
description = S(treedesc.." Leaves"),
|
description = moretrees.treedesc[treename].leaves,
|
||||||
drawtype = moretrees_new_leaves_drawtype,
|
drawtype = moretrees_new_leaves_drawtype,
|
||||||
waving = moretrees_new_leaves_waving,
|
waving = moretrees_new_leaves_waving,
|
||||||
visual_scale = moretrees_plantlike_leaves_visual_scale,
|
visual_scale = moretrees_plantlike_leaves_visual_scale,
|
||||||
tiles = { "moretrees_"..treename.."_leaves.png" },
|
tiles = { "moretrees_"..treename.."_leaves.png" },
|
||||||
inventory_image = moretrees_leaves_inventory_image,
|
inventory_image = moretrees_leaves_inventory_image,
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
groups = {snappy = 3, flammable = 2, leaves = 1, moretrees_leaves = 1, leafdecay = decay},
|
is_ground_content = false,
|
||||||
|
groups = {snappy = 3, flammable = 2, leaves = 1, moretrees_leaves = 1, leafdecay = 1},
|
||||||
sounds = default.node_sound_leaves_defaults(),
|
sounds = default.node_sound_leaves_defaults(),
|
||||||
|
|
||||||
drop = {
|
drop = {
|
||||||
@ -165,7 +359,7 @@ for i in ipairs(moretrees.treelist) do
|
|||||||
stairsplus:register_all(
|
stairsplus:register_all(
|
||||||
"moretrees",
|
"moretrees",
|
||||||
treename.."_trunk",
|
treename.."_trunk",
|
||||||
"moretrees:"..treename.."_trunk",
|
"moretrees:"..treename.."_trunk",
|
||||||
{
|
{
|
||||||
groups = { snappy=1, choppy=2, oddly_breakable_by_hand=1, flammable=2, not_in_creative_inventory=1 },
|
groups = { snappy=1, choppy=2, oddly_breakable_by_hand=1, flammable=2, not_in_creative_inventory=1 },
|
||||||
tiles = {
|
tiles = {
|
||||||
@ -173,7 +367,7 @@ for i in ipairs(moretrees.treelist) do
|
|||||||
"moretrees_"..treename.."_trunk_top.png",
|
"moretrees_"..treename.."_trunk_top.png",
|
||||||
"moretrees_"..treename.."_trunk.png"
|
"moretrees_"..treename.."_trunk.png"
|
||||||
},
|
},
|
||||||
description = S(treedesc.." Trunk"),
|
description = moretrees.treedesc[treename].trunk,
|
||||||
drop = treename.."_trunk",
|
drop = treename.."_trunk",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@ -185,7 +379,7 @@ for i in ipairs(moretrees.treelist) do
|
|||||||
{
|
{
|
||||||
groups = { snappy=1, choppy=2, oddly_breakable_by_hand=2, flammable=3, not_in_creative_inventory=1 },
|
groups = { snappy=1, choppy=2, oddly_breakable_by_hand=2, flammable=3, not_in_creative_inventory=1 },
|
||||||
tiles = { "moretrees_"..treename.."_wood.png" },
|
tiles = { "moretrees_"..treename.."_wood.png" },
|
||||||
description = S(treedesc.." Planks"),
|
description = moretrees.treedesc[treename].planks,
|
||||||
drop = treename.."_planks",
|
drop = treename.."_planks",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@ -198,8 +392,8 @@ for i in ipairs(moretrees.treelist) do
|
|||||||
"moretrees_"..treename.."_trunk_top.png",
|
"moretrees_"..treename.."_trunk_top.png",
|
||||||
"moretrees_"..treename.."_trunk.png"
|
"moretrees_"..treename.."_trunk.png"
|
||||||
},
|
},
|
||||||
S(treedesc.." Trunk Stair"),
|
moretrees.treedesc[treename].trunk_stair,
|
||||||
S(treedesc.." Trunk Slab"),
|
moretrees.treedesc[treename].trunk_slab,
|
||||||
default.node_sound_wood_defaults()
|
default.node_sound_wood_defaults()
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -208,35 +402,85 @@ for i in ipairs(moretrees.treelist) do
|
|||||||
"moretrees:"..treename.."_planks",
|
"moretrees:"..treename.."_planks",
|
||||||
{ snappy=1, choppy=2, oddly_breakable_by_hand=2, flammable=3 },
|
{ snappy=1, choppy=2, oddly_breakable_by_hand=2, flammable=3 },
|
||||||
{ "moretrees_"..treename.."_wood.png" },
|
{ "moretrees_"..treename.."_wood.png" },
|
||||||
S(treedesc.." Planks Stair"),
|
moretrees.treedesc[treename].planks_stair,
|
||||||
S(treedesc.." Planks Slab"),
|
moretrees.treedesc[treename].planks_slab,
|
||||||
default.node_sound_wood_defaults()
|
default.node_sound_wood_defaults()
|
||||||
)
|
)
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if moretrees.enable_fences then
|
||||||
|
local planks_name = "moretrees:" .. treename .. "_planks"
|
||||||
|
local planks_tile = "moretrees_" .. treename .. "_wood.png"
|
||||||
|
default.register_fence("moretrees:" .. treename .. "_fence", {
|
||||||
|
description = moretrees.treedesc[treename].fence,
|
||||||
|
texture = planks_tile,
|
||||||
|
inventory_image = "default_fence_overlay.png^" .. planks_tile ..
|
||||||
|
"^default_fence_overlay.png^[makealpha:255,126,126",
|
||||||
|
wield_image = "default_fence_overlay.png^" .. planks_tile ..
|
||||||
|
"^default_fence_overlay.png^[makealpha:255,126,126",
|
||||||
|
material = planks_name,
|
||||||
|
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
|
||||||
|
sounds = default.node_sound_wood_defaults()
|
||||||
|
})
|
||||||
|
default.register_fence_rail("moretrees:" .. treename .. "_fence_rail", {
|
||||||
|
description = moretrees.treedesc[treename].fence_rail,
|
||||||
|
texture = planks_tile,
|
||||||
|
inventory_image = "default_fence_rail_overlay.png^" .. planks_tile ..
|
||||||
|
"^default_fence_rail_overlay.png^[makealpha:255,126,126",
|
||||||
|
wield_image = "default_fence_rail_overlay.png^" .. planks_tile ..
|
||||||
|
"^default_fence_rail_overlay.png^[makealpha:255,126,126",
|
||||||
|
material = planks_name,
|
||||||
|
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
|
||||||
|
sounds = default.node_sound_wood_defaults()
|
||||||
|
})
|
||||||
|
if minetest.global_exists("doors") then
|
||||||
|
doors.register_fencegate("moretrees:" .. treename .. "_gate", {
|
||||||
|
description = moretrees.treedesc[treename].fence_gate,
|
||||||
|
texture = planks_tile,
|
||||||
|
material = planks_name,
|
||||||
|
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_node("moretrees:"..treename.."_sapling_ongen", {
|
minetest.register_node("moretrees:"..treename.."_sapling_ongen", {
|
||||||
description = S(treedesc.." Sapling"),
|
description = S("@1 (fast growth)", moretrees.treedesc[treename].sapling),
|
||||||
drawtype = "plantlike",
|
drawtype = "plantlike",
|
||||||
tiles = {saptex},
|
tiles = {saptex},
|
||||||
inventory_image = saptex,
|
inventory_image = saptex,
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "waving",
|
paramtype2 = "waving",
|
||||||
walkable = false,
|
walkable = false,
|
||||||
|
is_ground_content = true,
|
||||||
selection_box = {
|
selection_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
|
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
|
||||||
},
|
},
|
||||||
groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1,not_in_creative_inventory=1,sapling=1},
|
groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1,sapling=1},
|
||||||
sounds = default.node_sound_defaults(),
|
sounds = default.node_sound_defaults(),
|
||||||
drop = "moretrees:"..treename.."_sapling"
|
drop = "moretrees:"..treename.."_sapling",
|
||||||
|
on_place = function(itemstack, placer, pointed_thing)
|
||||||
|
itemstack = default.sapling_on_place(itemstack, placer, pointed_thing,
|
||||||
|
"moretrees:" ..treename.. "_sapling_ongen",
|
||||||
|
-- minp, maxp to be checked, relative to sapling pos
|
||||||
|
-- minp_relative.y = 1 because sapling pos has been checked
|
||||||
|
{x = -3, y = 1, z = -3},
|
||||||
|
{x = 3, y = 6, z = 3},
|
||||||
|
-- maximum interval of interior volume check
|
||||||
|
4)
|
||||||
|
|
||||||
|
return itemstack
|
||||||
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
local fruitname = nil
|
||||||
if fruit then
|
if fruit then
|
||||||
minetest.register_node("moretrees:"..fruit, {
|
fruitname = "moretrees:"..fruit
|
||||||
description = S(fruitdesc),
|
minetest.register_node(fruitname, {
|
||||||
|
description = fruitdesc,
|
||||||
drawtype = "plantlike",
|
drawtype = "plantlike",
|
||||||
tiles = { "moretrees_"..fruit..".png" },
|
tiles = { "moretrees_"..fruit..".png" },
|
||||||
inventory_image = "moretrees_"..fruit..".png^[transformR180",
|
inventory_image = "moretrees_"..fruit..".png^[transformR180",
|
||||||
@ -244,23 +488,34 @@ for i in ipairs(moretrees.treelist) do
|
|||||||
visual_scale = vscale,
|
visual_scale = vscale,
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
|
is_ground_content = false,
|
||||||
walkable = false,
|
walkable = false,
|
||||||
selection_box = {
|
selection_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = selbox
|
fixed = selbox
|
||||||
},
|
},
|
||||||
groups = {fleshy=3,dig_immediate=3,flammable=2, attached_node=1},
|
groups = {fleshy=3,dig_immediate=3,flammable=2, attached_node=1, leafdecay = 1, leafdecay_drop = 1},
|
||||||
sounds = default.node_sound_defaults(),
|
sounds = default.node_sound_defaults(),
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if treename ~= "jungletree"
|
||||||
|
and treename ~= "poplar_small"
|
||||||
|
and treename ~= "pine" then
|
||||||
|
default.register_leafdecay({
|
||||||
|
trunks = { "moretrees:"..treename.."_trunk" },
|
||||||
|
leaves = { "moretrees:"..treename.."_leaves", fruitname },
|
||||||
|
radius = decay,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
minetest.register_abm({
|
minetest.register_abm({
|
||||||
nodenames = { "moretrees:"..treename.."_trunk_sideways" },
|
nodenames = { "moretrees:"..treename.."_trunk_sideways" },
|
||||||
interval = 1,
|
interval = 1,
|
||||||
chance = 1,
|
chance = 1,
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||||
local fdir = node.param2 or 0
|
local fdir = node.param2 or 0
|
||||||
nfdir = dirs2[fdir+1]
|
local nfdir = dirs2[fdir+1]
|
||||||
minetest.add_node(pos, {name = "moretrees:"..treename.."_trunk", param2 = nfdir})
|
minetest.add_node(pos, {name = "moretrees:"..treename.."_trunk", param2 = nfdir})
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
@ -273,10 +528,49 @@ for i in ipairs(moretrees.treelist) do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Add small poplar saplings
|
||||||
|
|
||||||
|
local poplar_sapling = minetest.registered_nodes["moretrees:poplar_sapling"]
|
||||||
|
local poplar_sapling_ongen = minetest.registered_nodes["moretrees:poplar_sapling_ongen"]
|
||||||
|
local poplar_small_sapling = {}
|
||||||
|
local poplar_small_sapling_ongen = {}
|
||||||
|
for k,v in pairs(poplar_sapling) do
|
||||||
|
poplar_small_sapling[k] = v
|
||||||
|
end
|
||||||
|
for k,v in pairs(poplar_sapling_ongen) do
|
||||||
|
poplar_small_sapling_ongen[k] = v
|
||||||
|
end
|
||||||
|
poplar_small_sapling.tiles = {"moretrees_poplar_small_sapling.png"}
|
||||||
|
poplar_small_sapling.inventory_image = "moretrees_poplar_small_sapling.png"
|
||||||
|
poplar_small_sapling.is_ground_content = true
|
||||||
|
poplar_small_sapling_ongen.tiles_ongen = {"moretrees_poplar_small_sapling.png"}
|
||||||
|
poplar_small_sapling_ongen.inventory_image_ongen = "moretrees_poplar_small_sapling.png"
|
||||||
|
poplar_small_sapling_ongen.drop = "moretrees:poplar_small_sapling"
|
||||||
|
poplar_small_sapling_ongen.is_ground_content = true
|
||||||
|
|
||||||
|
minetest.register_node("moretrees:poplar_small_sapling", poplar_small_sapling)
|
||||||
|
minetest.register_node("moretrees:poplar_small_sapling_ongen", poplar_small_sapling_ongen)
|
||||||
|
if moretrees.spawn_saplings then
|
||||||
|
table.insert(moretrees.avoidnodes, "moretrees:poplar_sapling")
|
||||||
|
table.insert(moretrees.avoidnodes, "moretrees:poplar_small_sapling_ongen")
|
||||||
|
end
|
||||||
|
|
||||||
|
local poplar_leaves_drop = minetest.registered_nodes["moretrees:poplar_leaves"].drop
|
||||||
|
minetest.override_item("moretrees:poplar_leaves", {
|
||||||
|
drop = {
|
||||||
|
max_items = poplar_leaves_drop.maxitems,
|
||||||
|
items = {
|
||||||
|
{items = {"moretrees:poplar_sapling"}, rarity = 1.33 * poplar_leaves_drop.items[1].rarity },
|
||||||
|
{items = {"moretrees:poplar_small_sapling"}, rarity = 1.33 * poplar_leaves_drop.items[1].rarity },
|
||||||
|
{items = {"moretrees:poplar_leaves"} }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
-- Extra nodes for jungle trees:
|
-- Extra nodes for jungle trees:
|
||||||
|
|
||||||
local jungleleaves = {"yellow","red"}
|
local jungleleaves = {"yellow","red"}
|
||||||
local jungleleavesnames = {"Yellow", "Red"}
|
local jungleleavesnames = {S("Yellow"), S("Red")}
|
||||||
for color = 1, #jungleleaves do
|
for color = 1, #jungleleaves do
|
||||||
local leave_name = "moretrees:jungletree_leaves_"..jungleleaves[color]
|
local leave_name = "moretrees:jungletree_leaves_"..jungleleaves[color]
|
||||||
|
|
||||||
@ -289,14 +583,15 @@ for color = 1, #jungleleaves do
|
|||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_node(leave_name, {
|
minetest.register_node(leave_name, {
|
||||||
description = S("Jungle Tree Leaves ("..jungleleavesnames[color]..")"),
|
description = S("Jungle Tree Leaves (@1)", jungleleavesnames[color]),
|
||||||
drawtype = moretrees_new_leaves_drawtype,
|
drawtype = moretrees_new_leaves_drawtype,
|
||||||
waving = moretrees_new_leaves_waving,
|
waving = moretrees_new_leaves_waving,
|
||||||
visual_scale = moretrees_plantlike_leaves_visual_scale,
|
visual_scale = moretrees_plantlike_leaves_visual_scale,
|
||||||
tiles = {"moretrees_jungletree_leaves_"..jungleleaves[color]..".png"},
|
tiles = {"moretrees_jungletree_leaves_"..jungleleaves[color]..".png"},
|
||||||
inventory_image = moretrees_leaves_inventory_image,
|
inventory_image = moretrees_leaves_inventory_image,
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
groups = {snappy = 3, flammable = 2, leaves = 1, moretrees_leaves = 1, leafdecay = moretrees.leafdecay_radius },
|
is_ground_content = false,
|
||||||
|
groups = {snappy = 3, flammable = 2, leaves = 1, moretrees_leaves = 1, leafdecay = 3 },
|
||||||
drop = {
|
drop = {
|
||||||
max_items = 1,
|
max_items = 1,
|
||||||
items = {
|
items = {
|
||||||
@ -308,6 +603,19 @@ for color = 1, #jungleleaves do
|
|||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- To get Moretrees to generate its own jungle trees among the default mapgen
|
||||||
|
-- we need our own copy of that node, which moretrees will match against.
|
||||||
|
|
||||||
|
local jungle_tree = table.copy(minetest.registered_nodes["default:jungletree"])
|
||||||
|
jungle_tree.drop = "default:jungletree"
|
||||||
|
minetest.register_node("moretrees:jungletree_trunk", jungle_tree)
|
||||||
|
|
||||||
|
default.register_leafdecay({
|
||||||
|
trunks = { "default:jungletree", "moretrees:jungletree_trunk" },
|
||||||
|
leaves = { "default:jungleleaves", "moretrees:jungletree_leaves_yellow", "moretrees:jungletree_leaves_red" },
|
||||||
|
radius = moretrees.leafdecay_radius,
|
||||||
|
})
|
||||||
|
|
||||||
-- Extra needles for firs
|
-- Extra needles for firs
|
||||||
|
|
||||||
local moretrees_leaves_inventory_image = nil
|
local moretrees_leaves_inventory_image = nil
|
||||||
@ -324,7 +632,8 @@ minetest.register_node("moretrees:fir_leaves_bright", {
|
|||||||
tiles = { "moretrees_fir_leaves_bright.png" },
|
tiles = { "moretrees_fir_leaves_bright.png" },
|
||||||
inventory_image = moretrees_leaves_inventory_image,
|
inventory_image = moretrees_leaves_inventory_image,
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
groups = {snappy = 3, flammable = 2, leaves = 1, moretrees_leaves = 1, leafdecay = moretrees.leafdecay_radius },
|
is_ground_content = false,
|
||||||
|
groups = {snappy = 3, flammable = 2, leaves = 1, moretrees_leaves = 1, leafdecay = 3 },
|
||||||
drop = {
|
drop = {
|
||||||
max_items = 1,
|
max_items = 1,
|
||||||
items = {
|
items = {
|
||||||
@ -335,8 +644,15 @@ minetest.register_node("moretrees:fir_leaves_bright", {
|
|||||||
sounds = default.node_sound_leaves_defaults()
|
sounds = default.node_sound_leaves_defaults()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
default.register_leafdecay({
|
||||||
|
trunks = { "moretrees:fir_trunk" },
|
||||||
|
leaves = { "moretrees:fir_leaves", "moretrees:fir_leaves_bright" },
|
||||||
|
radius = moretrees.leafdecay_radius,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
if moretrees.enable_redefine_apple then
|
if moretrees.enable_redefine_apple then
|
||||||
local appledef = moretrees.clone_node("default:apple")
|
local appledef = table.copy(minetest.registered_nodes["default:apple"])
|
||||||
appledef.groups.attached_node = 1
|
appledef.groups.attached_node = 1
|
||||||
minetest.register_node(":default:apple", appledef)
|
minetest.register_node(":default:apple", appledef)
|
||||||
end
|
end
|
||||||
@ -348,10 +664,9 @@ table.insert(moretrees.avoidnodes, "moretrees:fir_trunk")
|
|||||||
table.insert(moretrees.avoidnodes, "default:tree")
|
table.insert(moretrees.avoidnodes, "default:tree")
|
||||||
|
|
||||||
if moretrees.spawn_saplings then
|
if moretrees.spawn_saplings then
|
||||||
table.insert(moretrees.avoidnodes, "snow:sapling_pine")
|
table.insert(moretrees.avoidnodes, "snow:sapling_pine")
|
||||||
table.insert(moretrees.avoidnodes, "default:junglesapling")
|
table.insert(moretrees.avoidnodes, "default:junglesapling")
|
||||||
table.insert(moretrees.avoidnodes, "default:pine_sapling")
|
table.insert(moretrees.avoidnodes, "default:pine_sapling")
|
||||||
table.insert(moretrees.avoidnodes, "default:acacia_sapling")
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- "empty" (tapped) rubber tree nodes
|
-- "empty" (tapped) rubber tree nodes
|
||||||
@ -363,10 +678,10 @@ minetest.register_node("moretrees:rubber_tree_trunk_empty", {
|
|||||||
"moretrees_rubber_tree_trunk_top.png",
|
"moretrees_rubber_tree_trunk_top.png",
|
||||||
"moretrees_rubber_tree_trunk_empty.png"
|
"moretrees_rubber_tree_trunk_empty.png"
|
||||||
},
|
},
|
||||||
is_ground_content = true,
|
|
||||||
groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
|
groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
|
||||||
sounds = default.node_sound_wood_defaults(),
|
sounds = default.node_sound_wood_defaults(),
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
|
is_ground_content = false,
|
||||||
on_place = minetest.rotate_node,
|
on_place = minetest.rotate_node,
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -376,17 +691,11 @@ minetest.register_abm({
|
|||||||
chance = 1,
|
chance = 1,
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||||
local fdir = node.param2 or 0
|
local fdir = node.param2 or 0
|
||||||
nfdir = dirs2[fdir+1]
|
local nfdir = dirs2[fdir+1]
|
||||||
minetest.add_node(pos, {name = "moretrees:rubber_tree_trunk_empty", param2 = nfdir})
|
minetest.add_node(pos, {name = "moretrees:rubber_tree_trunk_empty", param2 = nfdir})
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
-- To get Moretrees to generate its own jungle trees among the default mapgen
|
|
||||||
-- we need our own copy of that node, which moretrees will match against.
|
|
||||||
|
|
||||||
local jungle_tree = moretrees.clone_node("default:jungletree")
|
|
||||||
minetest.register_node("moretrees:jungletree_trunk", jungle_tree)
|
|
||||||
|
|
||||||
-- For compatibility with old nodes, recently-changed nodes, and default nodes
|
-- For compatibility with old nodes, recently-changed nodes, and default nodes
|
||||||
|
|
||||||
minetest.register_alias("technic:rubber_tree_full", "moretrees:rubber_tree_trunk")
|
minetest.register_alias("technic:rubber_tree_full", "moretrees:rubber_tree_trunk")
|
||||||
@ -418,10 +727,6 @@ minetest.register_alias("moretrees:jungletree_trunk_sideways", "moreblocks:horiz
|
|||||||
minetest.register_alias("moretrees:jungletree_planks", "default:junglewood")
|
minetest.register_alias("moretrees:jungletree_planks", "default:junglewood")
|
||||||
minetest.register_alias("moretrees:jungletree_leaves_green", "default:jungleleaves")
|
minetest.register_alias("moretrees:jungletree_leaves_green", "default:jungleleaves")
|
||||||
|
|
||||||
minetest.register_alias("jungletree:leaves_green", "default:jungleleaves")
|
|
||||||
minetest.register_alias("jungletree:leaves_red", "moretrees:jungletree_leaves_red")
|
|
||||||
minetest.register_alias("jungletree:leaves_yellow", "moretrees:jungletree_leaves_yellow")
|
|
||||||
|
|
||||||
minetest.register_alias("moretrees:acacia_trunk", "default:acacia_tree")
|
minetest.register_alias("moretrees:acacia_trunk", "default:acacia_tree")
|
||||||
minetest.register_alias("moretrees:acacia_planks", "default:acacia_wood")
|
minetest.register_alias("moretrees:acacia_planks", "default:acacia_wood")
|
||||||
minetest.register_alias("moretrees:acacia_sapling", "default:acacia_sapling")
|
minetest.register_alias("moretrees:acacia_sapling", "default:acacia_sapling")
|
||||||
@ -433,5 +738,6 @@ minetest.register_alias("moretrees:pine_sapling", "moretrees:cedar_sapling")
|
|||||||
minetest.register_alias("moretrees:pine_leaves", "moretrees:cedar_leaves")
|
minetest.register_alias("moretrees:pine_leaves", "moretrees:cedar_leaves")
|
||||||
minetest.register_alias("moretrees:pine_cone", "moretrees:cedar_cone")
|
minetest.register_alias("moretrees:pine_cone", "moretrees:cedar_cone")
|
||||||
minetest.register_alias("moretrees:pine_nuts", "moretrees:cedar_nuts")
|
minetest.register_alias("moretrees:pine_nuts", "moretrees:cedar_nuts")
|
||||||
|
minetest.register_alias("moretrees:pine_sapling_ongen", "moretrees:cedar_sapling_ongen")
|
||||||
|
|
||||||
minetest.register_alias("moretrees:dates", "moretrees:dates_f4")
|
minetest.register_alias("moretrees:dates", "moretrees:dates_f4")
|
||||||
|
159
saplings.lua
@ -1,93 +1,84 @@
|
|||||||
-- sapling growth
|
-- sapling growth
|
||||||
|
-- these tables only affect hand-placed saplings
|
||||||
|
-- mapgen-placed always use their biome def settings, which are much more
|
||||||
|
-- limited, in the interest of speed.
|
||||||
|
|
||||||
|
local dirt_surfaces = {
|
||||||
|
set = true,
|
||||||
|
["default:dirt"] = true,
|
||||||
|
["default:dirt_with_grass"] = true,
|
||||||
|
["default:dirt_with_dry_grass"] = true,
|
||||||
|
["default:dirt_with_coniferous_litter"] = true,
|
||||||
|
["default:dirt_with_rainforest_litter"] = true,
|
||||||
|
["woodsoils:dirt_with_leaves_1"] = true,
|
||||||
|
["woodsoils:dirt_with_leaves_2"] = true,
|
||||||
|
["woodsoils:grass_with_leaves_1"] = true,
|
||||||
|
["woodsoils:grass_with_leaves_2"] = true
|
||||||
|
}
|
||||||
|
|
||||||
|
local conifer_surfaces = {
|
||||||
|
set = true,
|
||||||
|
["default:dirt"] = true,
|
||||||
|
["default:dirt_with_grass"] = true,
|
||||||
|
["default:dirt_with_dry_grass"] = true,
|
||||||
|
["default:dirt_with_coniferous_litter"] = true,
|
||||||
|
["default:dirt_with_rainforest_litter"] = true,
|
||||||
|
["woodsoils:dirt_with_leaves_1"] = true,
|
||||||
|
["woodsoils:dirt_with_leaves_2"] = true,
|
||||||
|
["woodsoils:grass_with_leaves_1"] = true,
|
||||||
|
["woodsoils:grass_with_leaves_2"] = true,
|
||||||
|
["default:dirt_with_snow"] = true
|
||||||
|
}
|
||||||
|
|
||||||
|
local sand_surfaces = {
|
||||||
|
set = true,
|
||||||
|
["default:sand"] = true,
|
||||||
|
["default:desert_sand"] = true,
|
||||||
|
["cottages:loam"] = true,
|
||||||
|
-- note, no silver sand here.
|
||||||
|
-- too cold for a palm, too... well... sandy for anything else.
|
||||||
|
}
|
||||||
|
|
||||||
for i in ipairs(moretrees.treelist) do
|
for i in ipairs(moretrees.treelist) do
|
||||||
local treename = moretrees.treelist[i][1]
|
local treename = moretrees.treelist[i][1]
|
||||||
local tree_model = treename.."_model"
|
local tree_model = treename.."_model"
|
||||||
local tree_biome = treename.."_biome"
|
local tree_biome = treename.."_biome"
|
||||||
|
local surfaces
|
||||||
|
local grow_function = moretrees[tree_model]
|
||||||
|
|
||||||
if treename ~= "birch" and treename ~= "spruce" and treename ~= "fir" and treename ~= "jungletree" then
|
if treename == "spruce"
|
||||||
|
or treename == "fir"
|
||||||
biome_lib:dbg(dump(moretrees[tree_biome].surface))
|
or treename == "cedar"
|
||||||
biome_lib:grow_plants({
|
or treename == "pine" then
|
||||||
grow_delay = moretrees.sapling_interval,
|
surfaces = conifer_surfaces
|
||||||
grow_chance = moretrees.sapling_chance,
|
elseif string.find(treename, "palm") then
|
||||||
grow_plant = "moretrees:"..treename.."_sapling",
|
surfaces = sand_surfaces
|
||||||
grow_nodes = moretrees[tree_biome].surface,
|
else
|
||||||
grow_function = moretrees[tree_model],
|
surfaces = dirt_surfaces
|
||||||
})
|
|
||||||
|
|
||||||
biome_lib:grow_plants({
|
|
||||||
grow_delay = 2,
|
|
||||||
grow_chance = 30,
|
|
||||||
grow_plant = "moretrees:"..treename.."_sapling_ongen",
|
|
||||||
grow_nodes = moretrees[tree_biome].surface,
|
|
||||||
grow_function = moretrees[tree_model],
|
|
||||||
})
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if treename == "spruce"
|
||||||
|
or treename == "fir"
|
||||||
|
or treename == "birch"
|
||||||
|
or treename == "jungletree" then
|
||||||
|
grow_function = "moretrees.grow_"..treename
|
||||||
|
end
|
||||||
|
|
||||||
|
biome_lib:dbg(dump(moretrees[tree_biome].surface))
|
||||||
|
|
||||||
|
biome_lib:grow_plants({
|
||||||
|
grow_delay = moretrees.sapling_interval,
|
||||||
|
grow_chance = moretrees.sapling_chance,
|
||||||
|
grow_plant = "moretrees:"..treename.."_sapling",
|
||||||
|
grow_nodes = surfaces,
|
||||||
|
grow_function = grow_function,
|
||||||
|
})
|
||||||
|
|
||||||
|
biome_lib:grow_plants({
|
||||||
|
grow_delay = 2,
|
||||||
|
grow_chance = 1,
|
||||||
|
grow_plant = "moretrees:"..treename.."_sapling_ongen",
|
||||||
|
grow_nodes = surfaces,
|
||||||
|
grow_function = grow_function,
|
||||||
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
biome_lib:grow_plants({
|
|
||||||
grow_delay = moretrees.sapling_interval,
|
|
||||||
grow_chance = moretrees.sapling_chance,
|
|
||||||
grow_plant = "moretrees:birch_sapling",
|
|
||||||
grow_nodes = moretrees.birch_biome.surface,
|
|
||||||
grow_function = "moretrees.grow_birch"
|
|
||||||
})
|
|
||||||
|
|
||||||
biome_lib:grow_plants({
|
|
||||||
grow_delay = 2,
|
|
||||||
grow_chance = 30,
|
|
||||||
grow_plant = "moretrees:birch_sapling_ongen",
|
|
||||||
grow_nodes = moretrees.birch_biome.surface,
|
|
||||||
grow_function = "moretrees.grow_birch"
|
|
||||||
})
|
|
||||||
|
|
||||||
biome_lib:grow_plants({
|
|
||||||
grow_delay = moretrees.sapling_interval,
|
|
||||||
grow_chance = moretrees.sapling_chance,
|
|
||||||
grow_plant = "moretrees:spruce_sapling",
|
|
||||||
grow_nodes = moretrees.spruce_biome.surface,
|
|
||||||
grow_function = "moretrees.grow_spruce"
|
|
||||||
})
|
|
||||||
|
|
||||||
biome_lib:grow_plants({
|
|
||||||
grow_delay = 2,
|
|
||||||
grow_chance = 30,
|
|
||||||
grow_plant = "moretrees:spruce_sapling_ongen",
|
|
||||||
grow_nodes = moretrees.spruce_biome.surface,
|
|
||||||
grow_function = "moretrees.grow_spruce"
|
|
||||||
})
|
|
||||||
|
|
||||||
biome_lib:grow_plants({
|
|
||||||
grow_delay = moretrees.sapling_interval,
|
|
||||||
grow_chance = moretrees.sapling_chance,
|
|
||||||
grow_plant = "moretrees:fir_sapling",
|
|
||||||
grow_nodes = moretrees.fir_biome.surface,
|
|
||||||
grow_function = "moretrees.grow_fir"
|
|
||||||
})
|
|
||||||
|
|
||||||
biome_lib:grow_plants({
|
|
||||||
grow_delay = 2,
|
|
||||||
grow_chance = 30,
|
|
||||||
grow_plant = "moretrees:fir_sapling_ongen",
|
|
||||||
grow_nodes = moretrees.fir_biome.surface,
|
|
||||||
grow_function = "moretrees.grow_fir"
|
|
||||||
})
|
|
||||||
|
|
||||||
biome_lib:grow_plants({
|
|
||||||
grow_delay = moretrees.sapling_interval,
|
|
||||||
grow_chance = moretrees.sapling_chance,
|
|
||||||
grow_plant = "default:junglesapling",
|
|
||||||
grow_nodes = moretrees.jungletree_biome.surface,
|
|
||||||
grow_function = "moretrees.grow_jungletree"
|
|
||||||
})
|
|
||||||
|
|
||||||
biome_lib:grow_plants({
|
|
||||||
grow_delay = 2,
|
|
||||||
grow_chance = 30,
|
|
||||||
grow_plant = "moretrees:jungletree_sapling_ongen",
|
|
||||||
grow_nodes = moretrees.jungletree_biome.surface,
|
|
||||||
grow_function = "moretrees.grow_jungletree"
|
|
||||||
})
|
|
||||||
|
|
||||||
|
168
screenshot.lua
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
-- Usage:
|
||||||
|
-- - Create a new world
|
||||||
|
-- - Set world mapgen: v6
|
||||||
|
-- - Set world seed: 2625051331357512570
|
||||||
|
-- - Enable the moretrees mod
|
||||||
|
-- - Edit the moretrees source
|
||||||
|
-- - Disable all trees in default_settings.lua
|
||||||
|
-- - Recommended: make saplings grow fast in default_settings.lua:
|
||||||
|
-- sapling_interval = 5
|
||||||
|
-- sapling_chance = 1
|
||||||
|
-- - Apply the patch below to moretrees
|
||||||
|
-- (so that jungle trees are always large, and differently-colored):
|
||||||
|
-- use 'git apply --ignore-space-change'
|
||||||
|
-- - Make sure this file (you are reading) will be loaded when minetest starts !
|
||||||
|
-- (e.g. add 'dofile(modpath.."/screenshot.lua")' to init.lua)
|
||||||
|
-- - Start minetest
|
||||||
|
-- - Goto 700,y,-280 (approximately)
|
||||||
|
-- - Make sure the world is loaded between x = 650 .. 780 and z = -350 .. -180
|
||||||
|
-- - Give the chat command '/make-scene'
|
||||||
|
-- - Wait & walk/fly around until all trees have grown
|
||||||
|
-- - goto the platform at 780, 30, -277
|
||||||
|
-- - Set the viewing range to 300, with fog enabled
|
||||||
|
-- - Take a screenshot.
|
||||||
|
|
||||||
|
-- Patch to apply to moretrees
|
||||||
|
--[[
|
||||||
|
diff --git a/init.lua b/init.lua
|
||||||
|
index 8189ffd..afd4644 100644
|
||||||
|
--- a/init.lua
|
||||||
|
+++ b/init.lua
|
||||||
|
@@ -225,9 +225,12 @@ moretrees.ct_rules_b1 = "[-FBf][+FBf]"
|
||||||
|
moretrees.ct_rules_a2 = "FF[FF][&&-FBF][&&+FBF][&&---FBF][&&+++FBF]F/A"
|
||||||
|
moretrees.ct_rules_b2 = "[-fB][+fB]"
|
||||||
|
|
||||||
|
+local jleaves = 1
|
||||||
|
function moretrees.grow_jungletree(pos)
|
||||||
|
local r1 = math.random(2)
|
||||||
|
local r2 = math.random(3)
|
||||||
|
+ r1 = jleaves
|
||||||
|
+ jleaves = jleaves % 2 + 1
|
||||||
|
if r1 == 1 then
|
||||||
|
moretrees.jungletree_model.leaves2 = "moretrees:jungletree_leaves_red"
|
||||||
|
else
|
||||||
|
@@ -235,6 +238,7 @@ function moretrees.grow_jungletree(pos)
|
||||||
|
end
|
||||||
|
moretrees.jungletree_model.leaves2_chance = math.random(25, 75)
|
||||||
|
|
||||||
|
+ r2=3
|
||||||
|
if r2 == 1 then
|
||||||
|
moretrees.jungletree_model.trunk_type = "single"
|
||||||
|
moretrees.jungletree_model.iterations = 2
|
||||||
|
]]
|
||||||
|
|
||||||
|
|
||||||
|
minetest.register_chatcommand("make-scene", {
|
||||||
|
func = function()
|
||||||
|
minetest.place_node({x=780, y=30, z=-277}, {name="default:obsidian"})
|
||||||
|
minetest.place_node({x=780, y=30, z=-278}, {name="default:obsidian"})
|
||||||
|
minetest.place_node({x=781, y=30, z=-277}, {name="default:obsidian"})
|
||||||
|
minetest.place_node({x=781, y=30, z=-278}, {name="default:obsidian"})
|
||||||
|
minetest.place_node({x=781, y=30, z=-276}, {name="default:obsidian"})
|
||||||
|
minetest.place_node({x=780, y=30, z=-276}, {name="default:obsidian"})
|
||||||
|
|
||||||
|
for z = -360, -300 do
|
||||||
|
local dy=2
|
||||||
|
for x = 630 + (-z - 360)/3, 660 + (-z - 300)/3 do
|
||||||
|
for y = 5, 22 do
|
||||||
|
minetest.place_node({x=x, y=y, z=z}, {name="default:desert_stone"})
|
||||||
|
end
|
||||||
|
for y = 23, 25 + dy do
|
||||||
|
minetest.place_node({x=x, y=y, z=z}, {name="default:desert_sand"})
|
||||||
|
end
|
||||||
|
dy = 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.place_node({x=717, y=2, z=-298}, {name = "moretrees:palm_sapling"})
|
||||||
|
minetest.place_node({x=713, y=2, z=-302}, {name = "moretrees:palm_sapling"})
|
||||||
|
minetest.place_node({x=713, y=2, z=-307}, {name = "moretrees:palm_sapling"})
|
||||||
|
minetest.place_node({x=717, y=2, z=-318}, {name = "moretrees:palm_sapling"})
|
||||||
|
minetest.place_node({x=723, y=2, z=-320}, {name = "moretrees:palm_sapling"})
|
||||||
|
|
||||||
|
minetest.place_node({x=645, y=26, z=-314}, {name="moretrees:date_palm_sapling"})
|
||||||
|
minetest.place_node({x=653, y=26, z=-322}, {name="moretrees:date_palm_sapling"})
|
||||||
|
minetest.place_node({x=649, y=26, z=-334}, {name="moretrees:date_palm_sapling"})
|
||||||
|
minetest.place_node({x=662, y=26, z=-342}, {name="moretrees:date_palm_sapling"})
|
||||||
|
|
||||||
|
minetest.place_node({x=672, y=5, z=-305}, {name="moretrees:oak_sapling"})
|
||||||
|
minetest.place_node({x=690, y=6, z=-322}, {name="moretrees:oak_sapling"})
|
||||||
|
minetest.place_node({x=695, y=7, z=-335}, {name="moretrees:oak_sapling"})
|
||||||
|
minetest.place_node({x=699, y=4, z=-301}, {name="moretrees:oak_sapling"})
|
||||||
|
|
||||||
|
minetest.place_node({x=751, y=5, z=-254}, {name="moretrees:apple_tree_sapling"})
|
||||||
|
minetest.place_node({x=729, y=3, z=-275}, {name="moretrees:apple_tree_sapling"})
|
||||||
|
minetest.place_node({x=747, y=4, z=-270}, {name="moretrees:apple_tree_sapling"})
|
||||||
|
|
||||||
|
minetest.place_node({x=671, y=5, z=-283}, {name="default:junglesapling"})
|
||||||
|
minetest.place_node({x=680, y=4, z=-287}, {name="default:junglesapling"})
|
||||||
|
minetest.place_node({x=702, y=4, z=-288}, {name="default:junglesapling"})
|
||||||
|
|
||||||
|
minetest.place_node({x=646, y=12, z=-199}, {name="moretrees:spruce_sapling"})
|
||||||
|
minetest.place_node({x=644, y=14, z=-177}, {name="moretrees:spruce_sapling"})
|
||||||
|
minetest.place_node({x=678, y=9, z=-211}, {name="moretrees:spruce_sapling"})
|
||||||
|
minetest.place_node({x=663, y=10, z=-215}, {name="moretrees:spruce_sapling"})
|
||||||
|
|
||||||
|
minetest.place_node({x=637, y=3, z=-263}, {name="moretrees:sequoia_sapling"})
|
||||||
|
minetest.place_node({x=625, y=3, z=-250}, {name="moretrees:sequoia_sapling"})
|
||||||
|
minetest.place_node({x=616, y=3, z=-233}, {name="moretrees:sequoia_sapling"})
|
||||||
|
minetest.place_node({x=635, y=3, z=-276}, {name="moretrees:sequoia_sapling"})
|
||||||
|
minetest.place_node({x=681, y=11, z=-260}, {name="moretrees:sequoia_sapling"})
|
||||||
|
minetest.place_node({x=682, y=10, z=-247}, {name="moretrees:sequoia_sapling"})
|
||||||
|
|
||||||
|
minetest.place_node({x=737, y=7, z=-195}, {name="moretrees:cedar_sapling"})
|
||||||
|
minetest.place_node({x=720, y=8, z=-189}, {name="moretrees:cedar_sapling"})
|
||||||
|
minetest.place_node({x=704, y=7, z=-187}, {name="moretrees:cedar_sapling"})
|
||||||
|
|
||||||
|
minetest.place_node({x=731, y=2, z=-227}, {name="moretrees:poplar_sapling"})
|
||||||
|
minetest.place_node({x=721, y=2, z=-233}, {name="moretrees:poplar_sapling"})
|
||||||
|
minetest.place_node({x=712, y=1, z=-237}, {name="moretrees:poplar_sapling"})
|
||||||
|
minetest.place_node({x=743, y=3, z=-228}, {name="moretrees:poplar_small_sapling"})
|
||||||
|
minetest.place_node({x=750, y=3, z=-230}, {name="moretrees:poplar_small_sapling"})
|
||||||
|
minetest.place_node({x=731, y=5, z=-233}, {name="moretrees:poplar_small_sapling"})
|
||||||
|
|
||||||
|
minetest.place_node({x=702, y=2, z=-274}, {name="moretrees:birch_sapling"})
|
||||||
|
minetest.place_node({x=697, y=2, z=-271}, {name="moretrees:birch_sapling"})
|
||||||
|
minetest.place_node({x=696, y=2, z=-264}, {name="moretrees:birch_sapling"})
|
||||||
|
minetest.place_node({x=710, y=2, z=-265}, {name="moretrees:birch_sapling"})
|
||||||
|
|
||||||
|
minetest.place_node({x=707, y=8, z=-247}, {name="moretrees:fir_sapling"})
|
||||||
|
minetest.place_node({x=699, y=10, z=-254}, {name="moretrees:fir_sapling"})
|
||||||
|
minetest.place_node({x=729, y=5, z=-261}, {name="moretrees:fir_sapling"})
|
||||||
|
minetest.place_node({x=732, y=5, z=-252}, {name="moretrees:fir_sapling"})
|
||||||
|
minetest.place_node({x=741, y=4, z=-262}, {name="moretrees:fir_sapling"})
|
||||||
|
|
||||||
|
minetest.place_node({x=751, y=2, z=-286}, {name="moretrees:willow_sapling"})
|
||||||
|
|
||||||
|
minetest.place_node({x=760, y=5, z=-223}, {name="moretrees:rubber_tree_sapling"})
|
||||||
|
minetest.place_node({x=762, y=5, z=-230}, {name="moretrees:rubber_tree_sapling"})
|
||||||
|
minetest.place_node({x=766, y=5, z=-243}, {name="moretrees:rubber_tree_sapling"})
|
||||||
|
minetest.place_node({x=764, y=6, z=-252}, {name="moretrees:rubber_tree_sapling"})
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
|
--[[
|
||||||
|
The following is a search/replace command suitable for vi (/vim) or sed, to convert minetest log
|
||||||
|
messages to equivalent lua commands:
|
||||||
|
|
||||||
|
s/.*\(\(moretrees\|default\)[^ ]*\) at (\([-0-9]\+\),\([-0-9]\+\),\([-0-9]\+\)).*/\t\tminetest.place_node({x=\3, y=\4, z=\5}, {name="\1"})/
|
||||||
|
|
||||||
|
E.g. a minetest log line of the following kind:
|
||||||
|
2016-07-03 11:30:50: ACTION[Server]: singleplayer places node moretrees:rubber_tree_sapling at (760,5,-223)
|
||||||
|
Becomes:
|
||||||
|
minetest.place_node({x=760, y=5, z=-223}, {name="moretrees:rubber_tree_sapling"})
|
||||||
|
(Except that the example log line above has an extra space added, so it won't be converted)
|
||||||
|
|
||||||
|
vi/vim users: Add the minetest log lines to this file, then enter the following command, with
|
||||||
|
<expression> replaced with the search/replace expression above.
|
||||||
|
:%<expression>
|
||||||
|
|
||||||
|
sed users: Add the minetest log lines to this file, then execute the following command at the shell
|
||||||
|
prompt with <expression> replaced by the search/replace expression above. Don't forget the
|
||||||
|
single-quotes.
|
||||||
|
sed '<expression>' < screenshot.lua > screenshot-new.lua
|
||||||
|
|
||||||
|
Windows users: You're probably out of luck. And the effort of doing such a thing is probably
|
||||||
|
larger anyway than the effort of copying an existing line and typing things manually.
|
||||||
|
]]
|
||||||
|
|
BIN
screenshot.png
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 101 KiB |
BIN
textures/moretrees_poplar_leaves.png
Normal file
After Width: | Height: | Size: 563 B |
BIN
textures/moretrees_poplar_sapling.png
Normal file
After Width: | Height: | Size: 447 B |
BIN
textures/moretrees_poplar_small_sapling.png
Normal file
After Width: | Height: | Size: 347 B |
BIN
textures/moretrees_poplar_trunk-1.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
textures/moretrees_poplar_trunk.png
Normal file
After Width: | Height: | Size: 980 B |
BIN
textures/moretrees_poplar_trunk_top.png
Normal file
After Width: | Height: | Size: 751 B |
BIN
textures/moretrees_poplar_wood.png
Normal file
After Width: | Height: | Size: 726 B |
@ -1,25 +1,24 @@
|
|||||||
|
|
||||||
Elevation Temperature Nearness to Nearby What nodes Perlin Avoid
|
Elevation Temperature Nearness to Nearby What nodes Perlin Avoid
|
||||||
Tree type (m) (approx., °C) some node water to spawn on seed diff radius
|
Tree type (m) (approx., °C) some node water to spawn on seed diff radius
|
||||||
-----------------------------------------------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------------------------------------
|
||||||
jungle tree - 5 to +10 above +15 water, 20 10 dirt_with_grass 329 5
|
jungle tree - 5 to +10 above +15 water, 20 10 dirt_with_grass 329 5
|
||||||
fir above +25 -20 to +10 n/a n/a dirt_with_grass 359 8
|
fir above +25 -20 to +10 n/a n/a dirt_with_grass 359 8
|
||||||
firs on snow above +15 -20 to +10 n/a n/a snow:snow 359 8
|
firs on snow above +15 -20 to +10 n/a n/a snow:snow 359 8
|
||||||
palm - 1 to + 1 +15 to +32 water, 15 10 sand 330 5
|
palm - 1 to + 1 +15 to +32 water, 15 10 sand 330 5
|
||||||
date palm - 1 to +10 above +39 water, 20h,20v 100 desert_sand 339 10
|
date palm - 1 to +10 above +39 water, 20h,20v 100 desert_sand 339 10
|
||||||
date palm +11 to +30 above +39 water, 1h,30v 1 desert_sand 340 10
|
date palm +11 to +30 above +39 water, 1h,30v 1 desert_sand 340 10
|
||||||
apple + 1 to +10 +23 to +32 n/a n/a dirt_with grass 331 15
|
apple + 1 to +10 +23 to +32 n/a n/a dirt_with grass 331 15
|
||||||
oak 0 to +10 + 4 to +16 n/a n/a dirt_with grass 332 15
|
oak 0 to +10 + 4 to +16 n/a n/a dirt_with grass 332 15
|
||||||
sequoia 0 to +10 -30 to +50 n/a n/a dirt_with grass 333 10
|
sequoia 0 to +10 -30 to +50 n/a n/a dirt_with grass 333 10
|
||||||
birch +10 to +15 -20 to +10 n/a n/a dirt_with grass 334 5
|
birch +10 to +15 -20 to +10 n/a n/a dirt_with grass 334 5
|
||||||
spruce above +20 -20 to +10 n/a n/a dirt_with grass 335 10
|
spruce above +20 -20 to +10 n/a n/a dirt_with grass 335 10
|
||||||
cedar n/a n/a water, 15 5 dirt_with grass 336 10
|
cedar n/a n/a water, 15 5 dirt_with grass 336 10
|
||||||
willow - 5 to + 5 n/a water, 15 5 dirt_with grass 337 20
|
willow - 5 to + 5 n/a water, 15 5 dirt_with grass 337 20
|
||||||
acacia n/a n/a n/a n/a dirt_with_grass,
|
rubber - 5 to + 5 above +32 water, 15 10 dirt_with_grass 338 20
|
||||||
desert_sand n/a 15
|
poplar n/a -10 to +26 water, 15h,5v 1 dirt_with_grass 341,342,343 10
|
||||||
rubber - 5 to + 5 above +32 water, 15 10 dirt_with_grass 338 20
|
|
||||||
|
|
||||||
beech n/a n/a n/a n/a dirt_with_grass 2 10
|
beech n/a n/a n/a n/a dirt_with_grass 2 10
|
||||||
|
|
||||||
|
|
||||||
Notes:
|
Notes:
|
||||||
@ -28,10 +27,6 @@ Notes:
|
|||||||
Beech trees are meant to replace default trees, but are themselves disabled by default. They grow in the same areas
|
Beech trees are meant to replace default trees, but are themselves disabled by default. They grow in the same areas
|
||||||
as the default ones do, and under the same conditions.
|
as the default ones do, and under the same conditions.
|
||||||
|
|
||||||
Acacia trees depend on humidity as their primary control, and they don't use the fertile ground option. They grow near
|
|
||||||
the edges of a desert biome, occasionally into the grass beyond, and anywhere else on desert sand or dirt with grass,
|
|
||||||
where the humidity is low (but not bone dry).
|
|
||||||
|
|
||||||
Fir trees appear in a snow biome only with older versions of SPlizard's Snow Biomes mod. In more recent versions,
|
Fir trees appear in a snow biome only with older versions of SPlizard's Snow Biomes mod. In more recent versions,
|
||||||
these trees will not grow, due to an engine bug.
|
these trees will not grow, due to an engine bug.
|
||||||
|
|
||||||
|
@ -43,6 +43,36 @@ moretrees.oak_model={
|
|||||||
fruit_chance=3,
|
fruit_chance=3,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
moretrees.poplar_model={
|
||||||
|
axiom="TTTaaBCCCCCCCCCCCcccBBB[[f]&&G++f++Gf++Gf++Gf++G--]G[[f]&&G++f++Gf++Gf++Gf++G--]Gff",
|
||||||
|
rules_a="T",
|
||||||
|
rules_b="[[T]&&G++f++ff++ff++ff++f--]G",
|
||||||
|
rules_c="[[T]&&G++f++ff++ff++ff++f--G++[d]G[d]G++G[d]G[d]G[d]G++G[d]G[d]G[d]G++G[d]G[d]G[d]G++G[d]G]G",
|
||||||
|
rules_d="f",
|
||||||
|
trunk="moretrees:poplar_trunk",
|
||||||
|
leaves="moretrees:poplar_leaves",
|
||||||
|
angle=45,
|
||||||
|
iterations=0,
|
||||||
|
random_level=0,
|
||||||
|
trunk_type="single",
|
||||||
|
thin_branches=false,
|
||||||
|
}
|
||||||
|
|
||||||
|
moretrees.poplar_small_model={
|
||||||
|
axiom="TT[T]BCCCCccBBff",
|
||||||
|
rules_a="T",
|
||||||
|
rules_b="[[f]&&G++f++Gf++Gf++Gf++G--]G",
|
||||||
|
rules_c="[[T]&&G++f++[d]Gf++[d]Gf++[d]Gf++[d]G--]G",
|
||||||
|
rules_d="f",
|
||||||
|
trunk="moretrees:poplar_trunk",
|
||||||
|
leaves="moretrees:poplar_leaves",
|
||||||
|
angle=45,
|
||||||
|
iterations=0,
|
||||||
|
random_level=0,
|
||||||
|
trunk_type="single",
|
||||||
|
thin_branches=false,
|
||||||
|
}
|
||||||
|
|
||||||
moretrees.sequoia_model={
|
moretrees.sequoia_model={
|
||||||
axiom="FFFFFFFFFFddccA///cccFddcFA///ddFcFA/cFFddFcdBddd/A/ccdcddd/ccAddddcFBcccAccFdFcFBcccc/BFdFFcFFdcccc/B",
|
axiom="FFFFFFFFFFddccA///cccFddcFA///ddFcFA/cFFddFcdBddd/A/ccdcddd/ccAddddcFBcccAccFdFcFBcccc/BFdFFcFFdcccc/B",
|
||||||
rules_a="[&&&GGF[++^FFdd][--&Fddd]//Fdd[+^Fd][--&Fdd]]////[&&&GGF[++^FFdd][--&Fddd]//Fdd[+^Fd][--&Fdd]]////[&&&GGF[++^FFdd][--&Fddd]//Fdd[+^Fd][--&Fdd]]",
|
rules_a="[&&&GGF[++^FFdd][--&Fddd]//Fdd[+^Fd][--&Fdd]]////[&&&GGF[++^FFdd][--&Fddd]//Fdd[+^Fd][--&Fdd]]////[&&&GGF[++^FFdd][--&Fddd]//Fdd[+^Fd][--&Fdd]]",
|
||||||
@ -199,37 +229,6 @@ moretrees.willow_model={
|
|||||||
thin_branches=true
|
thin_branches=true
|
||||||
}
|
}
|
||||||
|
|
||||||
moretrees.acacia_model={
|
|
||||||
axiom="FFFFFFccccA",
|
|
||||||
rules_a = "[B]//[B]//[B]//[B]",
|
|
||||||
rules_b = "&TTTT&TT^^G&&----GGGGGG++GGG++" -- line up with the "canvas" edge
|
|
||||||
.."fffffffGG++G++" -- first layer, drawn in a zig-zag raster pattern
|
|
||||||
.."Gffffffff--G--"
|
|
||||||
.."ffffffffG++G++"
|
|
||||||
.."fffffffff--G--"
|
|
||||||
.."fffffffff++G++"
|
|
||||||
.."fffffffff--G--"
|
|
||||||
.."ffffffffG++G++"
|
|
||||||
.."Gffffffff--G--"
|
|
||||||
.."fffffffGG"
|
|
||||||
.."^^G&&----GGGGGGG++GGGGGG++" -- re-align to second layer canvas edge
|
|
||||||
.."ffffGGG++G++" -- second layer
|
|
||||||
.."GGfffff--G--"
|
|
||||||
.."ffffffG++G++"
|
|
||||||
.."fffffff--G--"
|
|
||||||
.."ffffffG++G++"
|
|
||||||
.."GGfffff--G--"
|
|
||||||
.."ffffGGG",
|
|
||||||
rules_c = "/",
|
|
||||||
trunk="default:acacia_tree",
|
|
||||||
leaves="default:acacia_leaves",
|
|
||||||
angle=45,
|
|
||||||
iterations=3,
|
|
||||||
random_level=0,
|
|
||||||
trunk_type="single",
|
|
||||||
thin_branches=true,
|
|
||||||
}
|
|
||||||
|
|
||||||
moretrees.rubber_tree_model={
|
moretrees.rubber_tree_model={
|
||||||
axiom="FFFFA",
|
axiom="FFFFA",
|
||||||
rules_a="[&FFBFA]////[&BFFFA]////[&FBFFA]",
|
rules_a="[&FFBFA]////[&BFFFA]////[&FBFFA]",
|
||||||
|