summaryrefslogtreecommitdiff
path: root/moretrees
diff options
context:
space:
mode:
Diffstat (limited to 'moretrees')
-rw-r--r--moretrees/LICENSE392
-rw-r--r--moretrees/README.md11
-rw-r--r--moretrees/biome_defs.lua188
-rw-r--r--moretrees/crafts.lua151
-rw-r--r--moretrees/default_settings.txt68
-rw-r--r--moretrees/depends.txt6
-rw-r--r--moretrees/init.lua299
-rw-r--r--moretrees/locale/de.txt73
-rw-r--r--moretrees/locale/template.txt73
-rw-r--r--moretrees/node_defs.lua430
-rw-r--r--moretrees/saplings.lua93
-rw-r--r--moretrees/textures/moretrees_acorn.pngbin0 -> 417 bytes
-rw-r--r--moretrees/textures/moretrees_acorn_muffin.pngbin0 -> 782 bytes
-rw-r--r--moretrees/textures/moretrees_acorn_muffin_batter.pngbin0 -> 619 bytes
-rw-r--r--moretrees/textures/moretrees_apple_tree_leaves.pngbin0 -> 351 bytes
-rw-r--r--moretrees/textures/moretrees_apple_tree_sapling.pngbin0 -> 183 bytes
-rw-r--r--moretrees/textures/moretrees_apple_tree_trunk.pngbin0 -> 1066 bytes
-rw-r--r--moretrees/textures/moretrees_apple_tree_trunk_top.pngbin0 -> 503 bytes
-rw-r--r--moretrees/textures/moretrees_apple_tree_wood.pngbin0 -> 464 bytes
-rw-r--r--moretrees/textures/moretrees_beech_leaves.pngbin0 -> 201 bytes
-rw-r--r--moretrees/textures/moretrees_beech_sapling.pngbin0 -> 177 bytes
-rw-r--r--moretrees/textures/moretrees_beech_trunk.pngbin0 -> 980 bytes
-rw-r--r--moretrees/textures/moretrees_beech_trunk_top.pngbin0 -> 926 bytes
-rw-r--r--moretrees/textures/moretrees_beech_wood.pngbin0 -> 175 bytes
-rw-r--r--moretrees/textures/moretrees_birch_leaves.pngbin0 -> 459 bytes
-rw-r--r--moretrees/textures/moretrees_birch_sapling.pngbin0 -> 208 bytes
-rw-r--r--moretrees/textures/moretrees_birch_trunk.pngbin0 -> 975 bytes
-rw-r--r--moretrees/textures/moretrees_birch_trunk_top.pngbin0 -> 811 bytes
-rw-r--r--moretrees/textures/moretrees_birch_wood.pngbin0 -> 1075 bytes
-rw-r--r--moretrees/textures/moretrees_coconut.pngbin0 -> 963 bytes
-rw-r--r--moretrees/textures/moretrees_coconut_milk.pngbin0 -> 227 bytes
-rw-r--r--moretrees/textures/moretrees_coconut_milk_inv.pngbin0 -> 199 bytes
-rw-r--r--moretrees/textures/moretrees_fir_cone.pngbin0 -> 244 bytes
-rw-r--r--moretrees/textures/moretrees_fir_leaves.pngbin0 -> 205 bytes
-rw-r--r--moretrees/textures/moretrees_fir_leaves_bright.pngbin0 -> 205 bytes
-rw-r--r--moretrees/textures/moretrees_fir_nuts.pngbin0 -> 361 bytes
-rw-r--r--moretrees/textures/moretrees_fir_sapling.pngbin0 -> 166 bytes
-rw-r--r--moretrees/textures/moretrees_fir_trunk.pngbin0 -> 753 bytes
-rw-r--r--moretrees/textures/moretrees_fir_trunk_top.pngbin0 -> 924 bytes
-rw-r--r--moretrees/textures/moretrees_fir_wood.pngbin0 -> 1055 bytes
-rw-r--r--moretrees/textures/moretrees_jungletree_leaves_green.pngbin0 -> 201 bytes
-rw-r--r--moretrees/textures/moretrees_jungletree_leaves_red.pngbin0 -> 201 bytes
-rw-r--r--moretrees/textures/moretrees_jungletree_leaves_yellow.pngbin0 -> 201 bytes
-rw-r--r--moretrees/textures/moretrees_oak_leaves.pngbin0 -> 730 bytes
-rw-r--r--moretrees/textures/moretrees_oak_sapling.pngbin0 -> 172 bytes
-rw-r--r--moretrees/textures/moretrees_oak_trunk.pngbin0 -> 998 bytes
-rw-r--r--moretrees/textures/moretrees_oak_trunk_top.pngbin0 -> 519 bytes
-rw-r--r--moretrees/textures/moretrees_oak_wood.pngbin0 -> 618 bytes
-rw-r--r--moretrees/textures/moretrees_palm_leaves.pngbin0 -> 918 bytes
-rw-r--r--moretrees/textures/moretrees_palm_sapling.pngbin0 -> 122 bytes
-rw-r--r--moretrees/textures/moretrees_palm_trunk.pngbin0 -> 295 bytes
-rw-r--r--moretrees/textures/moretrees_palm_trunk_top.pngbin0 -> 400 bytes
-rw-r--r--moretrees/textures/moretrees_palm_wood.pngbin0 -> 598 bytes
-rw-r--r--moretrees/textures/moretrees_pine_cone.pngbin0 -> 315 bytes
-rw-r--r--moretrees/textures/moretrees_pine_nuts.pngbin0 -> 369 bytes
-rw-r--r--moretrees/textures/moretrees_raw_coconut.pngbin0 -> 466 bytes
-rw-r--r--moretrees/textures/moretrees_rubber_tree_leaves.pngbin0 -> 201 bytes
-rw-r--r--moretrees/textures/moretrees_rubber_tree_sapling.pngbin0 -> 151 bytes
-rw-r--r--moretrees/textures/moretrees_rubber_tree_trunk.pngbin0 -> 693 bytes
-rw-r--r--moretrees/textures/moretrees_rubber_tree_trunk_empty.pngbin0 -> 1107 bytes
-rw-r--r--moretrees/textures/moretrees_rubber_tree_trunk_top.pngbin0 -> 534 bytes
-rw-r--r--moretrees/textures/moretrees_rubber_tree_wood.pngbin0 -> 435 bytes
-rw-r--r--moretrees/textures/moretrees_sequoia_leaves.pngbin0 -> 205 bytes
-rw-r--r--moretrees/textures/moretrees_sequoia_sapling.pngbin0 -> 209 bytes
-rw-r--r--moretrees/textures/moretrees_sequoia_trunk.pngbin0 -> 621 bytes
-rw-r--r--moretrees/textures/moretrees_sequoia_trunk_top.pngbin0 -> 594 bytes
-rw-r--r--moretrees/textures/moretrees_sequoia_wood.pngbin0 -> 1037 bytes
-rw-r--r--moretrees/textures/moretrees_spruce_cone.pngbin0 -> 496 bytes
-rw-r--r--moretrees/textures/moretrees_spruce_leaves.pngbin0 -> 205 bytes
-rw-r--r--moretrees/textures/moretrees_spruce_nuts.pngbin0 -> 365 bytes
-rw-r--r--moretrees/textures/moretrees_spruce_sapling.pngbin0 -> 153 bytes
-rw-r--r--moretrees/textures/moretrees_spruce_trunk.pngbin0 -> 753 bytes
-rw-r--r--moretrees/textures/moretrees_spruce_trunk_top.pngbin0 -> 414 bytes
-rw-r--r--moretrees/textures/moretrees_spruce_wood.pngbin0 -> 536 bytes
-rw-r--r--moretrees/textures/moretrees_willow_leaves.pngbin0 -> 409 bytes
-rw-r--r--moretrees/textures/moretrees_willow_sapling.pngbin0 -> 168 bytes
-rw-r--r--moretrees/textures/moretrees_willow_trunk.pngbin0 -> 630 bytes
-rw-r--r--moretrees/textures/moretrees_willow_trunk_top.pngbin0 -> 513 bytes
-rw-r--r--moretrees/textures/moretrees_willow_wood.pngbin0 -> 565 bytes
-rw-r--r--moretrees/tree_biomes.txt34
-rw-r--r--moretrees/tree_models.lua246
81 files changed, 2064 insertions, 0 deletions
diff --git a/moretrees/LICENSE b/moretrees/LICENSE
new file mode 100644
index 0000000..c4742e6
--- /dev/null
+++ b/moretrees/LICENSE
@@ -0,0 +1,392 @@
+Minetest mod moretrees
+======================
+
+All source code:
+ © 2013, Vanessa Ezekowitz <vanessaezekowitz@gmail.com>
+ Published under the terms and conditions of the WTFPL.
+All sapling textures (textures/*_sapling.png):
+ © 2013, Tim Huppertz <mitroman@naturalnet.de>
+ Published under the terms and conditions of CC-BY-SA-3.0 Unported.
+All other textures:
+ © 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
+ Version 2, December 2004
+
+ Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
+
+ Everyone is permitted to copy and distribute verbatim or modified
+ copies of this license document, and changing it is allowed as long
+ as the name is changed.
+
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. You just DO WHAT THE FUCK YOU WANT TO.
+
+This license is commonly known as "WTFPL".
+
+-------------------------------------------------------------------------------
+
+Creative Commons Legal Code
+
+Attribution-ShareAlike 3.0 Unported
+
+ CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
+ LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN
+ ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
+ INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
+ REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR
+ DAMAGES RESULTING FROM ITS USE.
+
+License
+
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE
+COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY
+COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS
+AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE
+TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY
+BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS
+CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND
+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
+
+ Creative Commons is not a party to this License, and makes no warranty
+ whatsoever in connection with the Work. Creative Commons will not be
+ liable to You or any party on any legal theory for any damages
+ whatsoever, including without limitation any general, special,
+ incidental or consequential damages arising in connection to this
+ license. Notwithstanding the foregoing two (2) sentences, if Creative
+ Commons has expressly identified itself as the Licensor hereunder, it
+ shall have all rights and obligations of Licensor.
+
+ Except for the limited purpose of indicating to the public that the
+ Work is licensed under the CCPL, Creative Commons does not authorize
+ the use by either party of the trademark "Creative Commons" or any
+ 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/.
diff --git a/moretrees/README.md b/moretrees/README.md
new file mode 100644
index 0000000..905cefa
--- /dev/null
+++ b/moretrees/README.md
@@ -0,0 +1,11 @@
+More trees!
+
+This mod adds a whole bunch of new types of trees to the game
+
+Much of the code here came from cisoun's conifers mod and bas080's
+jungle trees mod, and big contributions by RealBadAngel.
+
+Brought together into one mod and made L-systems compatible by Vanessa
+Ezekowitz.
+
+Dependencies: <a href="https://forum.minetest.net/viewtopic.php?f=11&t=12999">biome_lib</a> and default
diff --git a/moretrees/biome_defs.lua b/moretrees/biome_defs.lua
new file mode 100644
index 0000000..34d8e4e
--- /dev/null
+++ b/moretrees/biome_defs.lua
@@ -0,0 +1,188 @@
+
+moretrees.beech_biome = {
+ surface = "default:dirt_with_grass",
+ avoid_nodes = moretrees.avoidnodes,
+ avoid_radius = 8,
+ seed_diff = 2,
+ rarity = 50,
+ max_count = 20,
+}
+
+moretrees.palm_biome = {
+ surface = "default:sand",
+ avoid_nodes = moretrees.avoidnodes,
+ avoid_radius = 5,
+ seed_diff = 330,
+ min_elevation = -1,
+ max_elevation = 1,
+ near_nodes = {"default:water_source"},
+ near_nodes_size = 15,
+ near_nodes_count = 10,
+ temp_min = 0.25,
+ temp_max = -0.15,
+ rarity = 50,
+ max_count = 10,
+}
+
+moretrees.apple_tree_biome = {
+ surface = "default:dirt_with_grass",
+ avoid_nodes = moretrees.avoidnodes,
+ avoid_radius = 10,
+ seed_diff = 331,
+ min_elevation = 1,
+ max_elevation = 10,
+ temp_min = 0.1,
+ temp_max = -0.15,
+ rarity = 75,
+ max_count = 5,
+}
+
+moretrees.oak_biome = {
+ surface = "default:dirt_with_grass",
+ avoid_nodes = moretrees.avoidnodes,
+ avoid_radius = 15,
+ seed_diff = 332,
+ min_elevation = 0,
+ max_elevation = 10,
+ temp_min = 0.4,
+ temp_max = 0.2,
+ rarity = 50,
+ max_count = 5,
+}
+
+moretrees.sequoia_biome = {
+ surface = "default:dirt_with_grass",
+ avoid_nodes = moretrees.avoidnodes,
+ avoid_radius = 10,
+ seed_diff = 333,
+ min_elevation = 0,
+ max_elevation = 10,
+ temp_min = 1,
+ temp_max = -0.4,
+ rarity = 90,
+ max_count = 5,
+}
+
+moretrees.birch_biome = {
+ surface = "default:dirt_with_grass",
+ avoid_nodes = moretrees.avoidnodes,
+ avoid_radius = 5,
+ seed_diff = 334,
+ min_elevation = 10,
+ max_elevation = 15,
+ temp_min = 0.9,
+ temp_max = 0.3,
+ rarity = 50,
+ max_count = 10,
+}
+
+moretrees.willow_biome = {
+ surface = "default:dirt_with_grass",
+ avoid_nodes = moretrees.avoidnodes,
+ avoid_radius = 10,
+ seed_diff = 337,
+ min_elevation = -5,
+ max_elevation = 5,
+ near_nodes = {"default:water_source"},
+ near_nodes_size = 15,
+ near_nodes_count = 5,
+ rarity = 75,
+ 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 = {
+ surface = "default:dirt_with_grass",
+ avoid_nodes = moretrees.avoidnodes,
+ avoid_radius = 10,
+ seed_diff = 338,
+ min_elevation = -5,
+ max_elevation = 5,
+ near_nodes = {"default:water_source"},
+ near_nodes_size = 15,
+ near_nodes_count = 10,
+ temp_min = -0.15,
+ rarity = 75,
+ max_count = 10,
+}
+
+moretrees.jungletree_biome = {
+ surface = {
+ "default:dirt",
+ "default:dirt_with_grass",
+ "woodsoils:dirt_with_leaves_1",
+ "woodsoils:grass_with_leaves_1",
+ "woodsoils:grass_with_leaves_2"
+ },
+ avoid_nodes = {"moretrees:jungletree_trunk"},
+ max_count = 12,
+ avoid_radius = 3,
+ rarity = 85,
+ seed_diff = 329,
+ min_elevation = 1,
+ near_nodes = {"default:jungletree"},
+ near_nodes_size = 6,
+ near_nodes_vertical = 2,
+ near_nodes_count = 1,
+ plantlife_limit = -0.9,
+}
+
+moretrees.spruce_biome = {
+ surface = "default:dirt_with_grass",
+ avoid_nodes = moretrees.avoidnodes,
+ avoid_radius = 10,
+ seed_diff = 335,
+ min_elevation = 20,
+ temp_min = 0.9,
+ temp_max = 0.7,
+ rarity = 50,
+ max_count = 5,
+}
+
+moretrees.pine_biome = {
+ surface = "default:dirt_with_grass",
+ avoid_nodes = moretrees.avoidnodes,
+ avoid_radius = 10,
+ seed_diff = 336,
+ near_nodes = {"default:water_source"},
+ near_nodes_size = 15,
+ near_nodes_count = 5,
+ rarity = 50,
+ max_count = 10,
+}
+
+moretrees.fir_biome = {
+ surface = "default:dirt_with_grass",
+ avoid_nodes = moretrees.avoidnodes,
+ avoid_radius = 10,
+ seed_diff = 359,
+ min_elevation = 25,
+ temp_min = 0.9,
+ temp_max = 0.3,
+ rarity = 50,
+ max_count = 10,
+}
+
+moretrees.fir_biome_snow = {
+ surface = {"snow:dirt_with_snow", "snow:snow"},
+ below_nodes = {"default:dirt", "default:dirt_with_grass", "snow:dirt_with_snow"},
+ avoid_nodes = moretrees.avoidnodes,
+ avoid_radius = 10,
+ seed_diff = 359,
+ rarity = 50,
+ max_count = 10,
+ check_air = false,
+ delete_above = true,
+ spawn_replace_node = true
+}
diff --git a/moretrees/crafts.lua b/moretrees/crafts.lua
new file mode 100644
index 0000000..515a097
--- /dev/null
+++ b/moretrees/crafts.lua
@@ -0,0 +1,151 @@
+local S = moretrees.intllib
+
+for i in ipairs(moretrees.treelist) do
+ 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({
+ type = "shapeless",
+ output = "moretrees:"..treename.."_planks 4",
+ recipe = {
+ "moretrees:"..treename.."_trunk"
+ }
+ })
+
+ minetest.register_craft({
+ type = "shapeless",
+ output = "moretrees:"..treename.."_planks 4",
+ recipe = {
+ "moretrees:"..treename.."_trunk_sideways"
+ }
+ })
+
+ minetest.register_craft({
+ type = "fuel",
+ recipe = "moretrees:"..treename.."_sapling",
+ burntime = 10,
+ })
+end
+
+minetest.register_craft({
+ type = "shapeless",
+ output = "moretrees:rubber_tree_planks 4",
+ recipe = {
+ "moretrees:rubber_tree_trunk_empty"
+ }
+})
+
+minetest.register_craft({
+ type = "fuel",
+ recipe = "group:moretrees_leaves",
+ burntime = 1,
+})
+
+-- Food recipes!
+
+minetest.register_craftitem("moretrees:coconut_milk", {
+ description = S("Coconut Milk"),
+ inventory_image = "moretrees_coconut_milk_inv.png",
+ wield_image = "moretrees_coconut_milk.png",
+ on_use = minetest.item_eat(2),
+})
+
+minetest.register_craftitem("moretrees:raw_coconut", {
+ description = S("Raw Coconut"),
+ inventory_image = "moretrees_raw_coconut.png",
+ on_use = minetest.item_eat(4),
+})
+
+minetest.register_craftitem("moretrees:acorn_muffin_batter", {
+ description = S("Acorn Muffin batter"),
+ inventory_image = "moretrees_acorn_muffin_batter.png",
+})
+
+minetest.register_craftitem("moretrees:acorn_muffin", {
+ description = S("Acorn Muffin"),
+ inventory_image = "moretrees_acorn_muffin.png",
+ on_use = minetest.item_eat(4),
+})
+
+minetest.register_craftitem("moretrees:spruce_nuts", {
+ description = S("Roasted Spruce Cone Nuts"),
+ inventory_image = "moretrees_spruce_nuts.png",
+ on_use = minetest.item_eat(1),
+})
+
+minetest.register_craftitem("moretrees:pine_nuts", {
+ description = S("Roasted Pine Cone Nuts"),
+ inventory_image = "moretrees_pine_nuts.png",
+ on_use = minetest.item_eat(1),
+})
+
+minetest.register_craftitem("moretrees:fir_nuts", {
+ description = S("Roasted Fir Cone Nuts"),
+ inventory_image = "moretrees_fir_nuts.png",
+ on_use = minetest.item_eat(1),
+})
+
+for i in ipairs(moretrees.cutting_tools) do
+ local tool = moretrees.cutting_tools[i]
+ minetest.register_craft({
+ type = "shapeless",
+ output = "moretrees:coconut_milk",
+ recipe = {
+ "moretrees:coconut",
+ "vessels:drinking_glass",
+ tool
+ },
+ replacements = {
+ { "moretrees:coconut", "moretrees:raw_coconut" },
+ { tool, tool }
+ }
+ })
+end
+
+minetest.register_craft({
+ type = "shapeless",
+ output = "moretrees:acorn_muffin_batter",
+ recipe = {
+ "moretrees:acorn",
+ "moretrees:acorn",
+ "moretrees:acorn",
+ "moretrees:acorn",
+ "moretrees:coconut_milk",
+ },
+ replacements = {
+ { "moretrees:coconut_milk", "vessels:drinking_glass" }
+ }
+})
+
+minetest.register_craft({
+ type = "cooking",
+ output = "moretrees:acorn_muffin 4",
+ recipe = "moretrees:acorn_muffin_batter",
+})
+
+minetest.register_craft({
+ type = "cooking",
+ output = "moretrees:spruce_nuts 4",
+ recipe = "moretrees:spruce_cone",
+})
+
+minetest.register_craft({
+ type = "cooking",
+ output = "moretrees:pine_nuts 4",
+ recipe = "moretrees:pine_cone",
+})
+
+minetest.register_craft({
+ type = "cooking",
+ output = "moretrees:fir_nuts 4",
+ recipe = "moretrees:fir_cone",
+})
+
+
diff --git a/moretrees/default_settings.txt b/moretrees/default_settings.txt
new file mode 100644
index 0000000..a34ea23
--- /dev/null
+++ b/moretrees/default_settings.txt
@@ -0,0 +1,68 @@
+-- Global configuration variables
+
+-- Enable the various kinds of trees.
+
+moretrees.enable_apple_tree = true
+moretrees.enable_oak = true
+moretrees.enable_sequoia = true
+moretrees.enable_palm = true
+moretrees.enable_pine = true
+moretrees.enable_rubber_tree = true
+moretrees.enable_willow = true
+moretrees.enable_acacia = true
+moretrees.enable_birch = true
+moretrees.enable_spruce = true
+moretrees.enable_jungle_tree = true
+moretrees.enable_fir = true
+moretrees.enable_beech = false
+
+-- 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
+-- delay. This reduces mapgen lag in some situations.
+
+moretrees.spawn_saplings = false
+
+-- 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
+-- will use the default stairs mod in minetest_game, if present
+
+moretrees.enable_stairs = true
+
+-- Set this to true if you want the plantlike drawtype for leaves, which
+-- improves some peoples' framerates without resorting to making leaf nodes opaque.
+-- Affects default leaves and default jungle leaves also.
+
+moretrees.plantlike_leaves = false
+
+-- Enable this if you want moretrees to redefine default apples so that they
+-- fall when leaves decay/are dug.
+
+moretrees.enable_redefine_apple = true
+
+-- Set this to true to enable leaf decay of all trees except the default ones.
+
+moretrees.enable_leafdecay = true
+
+-- various related settings to configure leaf decay.
+
+moretrees.leafdecay_delay = 2
+moretrees.leafdecay_chance = 5
+moretrees.leafdecay_radius = 5
+moretrees.palm_leafdecay_radius = 10
+
+-- Change these settings if you want default trees to be gradually cut down
+-- above the elevation where firs normally generate.
+
+moretrees.firs_remove_default_trees = false
+moretrees.firs_remove_interval = 2
+moretrees.firs_remove_chance = 150
+
+-- Sapling settings
+
+moretrees.sapling_interval = 500
+moretrees.sapling_chance = 20
+
+-- If this variable is set to true, drop leaves out as entities during leaf
+-- decay, rather than just disappearing them.
+
+moretrees.decay_leaves_as_items = false
diff --git a/moretrees/depends.txt b/moretrees/depends.txt
new file mode 100644
index 0000000..c666762
--- /dev/null
+++ b/moretrees/depends.txt
@@ -0,0 +1,6 @@
+default
+biome_lib
+stairs?
+moreblocks?
+intllib?
+
diff --git a/moretrees/init.lua b/moretrees/init.lua
new file mode 100644
index 0000000..d2c5128
--- /dev/null
+++ b/moretrees/init.lua
@@ -0,0 +1,299 @@
+-- More trees! 2013-04-07
+--
+-- This mod adds more types of trees to the game
+--
+-- Some of the node definitions and textures came from cisoun's conifers mod
+-- and bas080's jungle trees mod.
+--
+-- Brought together into one mod and made L-systems compatible by Vanessa
+-- Ezekowitz.
+--
+-- Firs and Jungle tree axioms/rules by Vanessa Ezekowitz, with the
+-- latter having been tweaked by RealBadAngel, most other axioms/rules written
+-- by RealBadAngel.
+--
+-- License: WTFPL for all parts (code and textures, including those copied
+-- from the the old jungletree and conifers mods).
+
+moretrees = {}
+
+-- Read the default config file (and if necessary, copy it to the world folder).
+
+local worldpath=minetest.get_worldpath()
+local modpath=minetest.get_modpath("moretrees")
+
+dofile(modpath.."/default_settings.txt")
+
+if io.open(worldpath.."/moretrees_settings.txt","r") then
+ io.close()
+ dofile(worldpath.."/moretrees_settings.txt")
+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
+
+if minetest.get_modpath("unified_inventory") or not minetest.setting_getbool("creative_mode") then
+ moretrees.expect_infinite_stacks = false
+else
+ moretrees.expect_infinite_stacks = true
+end
+
+-- tables, load other files
+
+moretrees.cutting_tools = {
+ "default:axe_bronze",
+ "default:axe_diamond",
+ "default:axe_mese",
+ "default:axe_steel",
+ "glooptest:axe_alatro",
+ "glooptest:axe_arol",
+ "moreores:axe_mithril",
+ "moreores:axe_silver",
+ "titanium:axe",
+}
+
+dofile(modpath.."/tree_models.lua")
+dofile(modpath.."/node_defs.lua")
+dofile(modpath.."/biome_defs.lua")
+dofile(modpath.."/saplings.lua")
+dofile(modpath.."/crafts.lua")
+
+-- tree spawning setup
+
+if moretrees.spawn_saplings then
+ moretrees.spawn_beech_object = "moretrees:beech_sapling_ongen"
+ moretrees.spawn_apple_tree_object = "moretrees:apple_tree_sapling_ongen"
+ moretrees.spawn_oak_object = "moretrees:oak_sapling_ongen"
+ moretrees.spawn_sequoia_object = "moretrees:sequoia_sapling_ongen"
+ moretrees.spawn_palm_object = "moretrees:palm_sapling_ongen"
+ moretrees.spawn_pine_object = "moretrees:pine_sapling_ongen"
+ moretrees.spawn_rubber_tree_object = "moretrees:rubber_tree_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_spruce_object = "moretrees:spruce_sapling_ongen"
+ moretrees.spawn_jungletree_object = "moretrees:jungletree_sapling_ongen"
+ moretrees.spawn_fir_object = "moretrees:fir_sapling_ongen"
+ moretrees.spawn_fir_snow_object = "snow:sapling_pine"
+else
+ moretrees.spawn_beech_object = moretrees.beech_model
+ moretrees.spawn_apple_tree_object = moretrees.apple_tree_model
+ moretrees.spawn_oak_object = moretrees.oak_model
+ moretrees.spawn_sequoia_object = moretrees.sequoia_model
+ moretrees.spawn_palm_object = moretrees.palm_model
+ moretrees.spawn_pine_object = moretrees.pine_model
+ moretrees.spawn_rubber_tree_object = moretrees.rubber_tree_model
+ moretrees.spawn_willow_object = moretrees.willow_model
+ moretrees.spawn_acacia_object = moretrees.acacia_model
+ moretrees.spawn_birch_object = "moretrees.grow_birch"
+ moretrees.spawn_spruce_object = "moretrees.grow_spruce"
+ moretrees.spawn_jungletree_object = "moretrees.grow_jungletree"
+ moretrees.spawn_fir_object = "moretrees.grow_fir"
+ moretrees.spawn_fir_snow_object = "moretrees.grow_fir_snow"
+end
+
+if moretrees.enable_beech then
+ biome_lib:register_generate_plant(moretrees.beech_biome, moretrees.spawn_beech_object)
+end
+
+if moretrees.enable_apple_tree then
+ biome_lib:register_generate_plant(moretrees.apple_tree_biome, moretrees.spawn_apple_tree_object)
+end
+
+if moretrees.enable_oak then
+ biome_lib:register_generate_plant(moretrees.oak_biome, moretrees.spawn_oak_object)
+end
+
+if moretrees.enable_sequoia then
+ biome_lib:register_generate_plant(moretrees.sequoia_biome, moretrees.spawn_sequoia_object)
+end
+
+if moretrees.enable_palm then
+ biome_lib:register_generate_plant(moretrees.palm_biome, moretrees.spawn_palm_object)
+end
+
+if moretrees.enable_pine then
+ biome_lib:register_generate_plant(moretrees.pine_biome, moretrees.spawn_pine_object)
+end
+
+if moretrees.enable_rubber_tree then
+ biome_lib:register_generate_plant(moretrees.rubber_tree_biome, moretrees.spawn_rubber_tree_object)
+end
+
+if moretrees.enable_willow then
+ biome_lib:register_generate_plant(moretrees.willow_biome, moretrees.spawn_willow_object)
+end
+
+if moretrees.enable_acacia then
+ biome_lib:register_generate_plant(moretrees.acacia_biome, moretrees.spawn_acacia_object)
+end
+
+if moretrees.enable_birch then
+ biome_lib:register_generate_plant(moretrees.birch_biome, moretrees.spawn_birch_object)
+end
+
+if moretrees.enable_spruce then
+ biome_lib:register_generate_plant(moretrees.spruce_biome, moretrees.spawn_spruce_object)
+end
+
+if moretrees.enable_jungle_tree then
+ biome_lib:register_generate_plant(moretrees.jungletree_biome, moretrees.spawn_jungletree_object)
+end
+
+if moretrees.enable_fir then
+ biome_lib:register_generate_plant(moretrees.fir_biome, moretrees.spawn_fir_object)
+ if minetest.get_modpath("snow") then
+ biome_lib:register_generate_plant(moretrees.fir_biome_snow, moretrees.spawn_fir_snow_object)
+ end
+end
+
+-- Code to spawn a birch tree
+
+function moretrees.grow_birch(pos)
+ minetest.remove_node(pos)
+ if math.random(1,2) == 1 then
+ minetest.spawn_tree(pos, moretrees.birch_model1)
+ else
+ minetest.spawn_tree(pos, moretrees.birch_model2)
+ end
+end
+
+-- Code to spawn a spruce tree
+
+function moretrees.grow_spruce(pos)
+ minetest.remove_node(pos)
+ if math.random(1,2) == 1 then
+ minetest.spawn_tree(pos, moretrees.spruce_model1)
+ else
+ minetest.spawn_tree(pos, moretrees.spruce_model2)
+ end
+end
+
+-- Code to spawn jungle trees
+
+moretrees.jt_axiom1 = "FFFA"
+moretrees.jt_rules_a1 = "FFF[&&-FBf[&&&Ff]^^^Ff][&&+FBFf[&&&FFf]^^^Ff][&&---FBFf[&&&Ff]^^^Ff][&&+++FBFf[&&&Ff]^^^Ff]F/A"
+moretrees.jt_rules_b1 = "[-Ff&f][+Ff&f]B"
+
+moretrees.jt_axiom2 = "FFFFFA"
+moretrees.jt_rules_a2 = "FFFFF[&&-FFFBF[&&&FFff]^^^FFf][&&+FFFBFF[&&&FFff]^^^FFf][&&---FFFBFF[&&&FFff]^^^FFf][&&+++FFFBFF[&&&FFff]^^^FFf]FF/A"
+moretrees.jt_rules_b2 = "[-FFf&ff][+FFf&ff]B"
+
+moretrees.ct_rules_a1 = "FF[FF][&&-FBF][&&+FBF][&&---FBF][&&+++FBF]F/A"
+moretrees.ct_rules_b1 = "[-FBf][+FBf]"
+
+moretrees.ct_rules_a2 = "FF[FF][&&-FBF][&&+FBF][&&---FBF][&&+++FBF]F/A"
+moretrees.ct_rules_b2 = "[-fB][+fB]"
+
+function moretrees.grow_jungletree(pos)
+ local r1 = math.random(2)
+ local r2 = math.random(3)
+ if r1 == 1 then
+ moretrees.jungletree_model.leaves2 = "moretrees:jungletree_leaves_red"
+ else
+ moretrees.jungletree_model.leaves2 = "moretrees:jungletree_leaves_yellow"
+ end
+ moretrees.jungletree_model.leaves2_chance = math.random(25, 75)
+
+ if r2 == 1 then
+ moretrees.jungletree_model.trunk_type = "single"
+ moretrees.jungletree_model.iterations = 2
+ moretrees.jungletree_model.axiom = moretrees.jt_axiom1
+ moretrees.jungletree_model.rules_a = moretrees.jt_rules_a1
+ moretrees.jungletree_model.rules_b = moretrees.jt_rules_b1
+ elseif r2 == 2 then
+ moretrees.jungletree_model.trunk_type = "double"
+ moretrees.jungletree_model.iterations = 4
+ moretrees.jungletree_model.axiom = moretrees.jt_axiom2
+ moretrees.jungletree_model.rules_a = moretrees.jt_rules_a2
+ moretrees.jungletree_model.rules_b = moretrees.jt_rules_b2
+ elseif r2 == 3 then
+ moretrees.jungletree_model.trunk_type = "crossed"
+ moretrees.jungletree_model.iterations = 4
+ moretrees.jungletree_model.axiom = moretrees.jt_axiom2
+ moretrees.jungletree_model.rules_a = moretrees.jt_rules_a2
+ moretrees.jungletree_model.rules_b = moretrees.jt_rules_b2
+ end
+
+ minetest.remove_node(pos)
+ 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
+ minetest.remove_node(leaves[leaf])
+ end
+ minetest.spawn_tree(pos, moretrees.jungletree_model)
+end
+
+-- code to spawn fir trees
+
+function moretrees.grow_fir(pos)
+ if math.random(2) == 1 then
+ moretrees.fir_model.leaves="moretrees:fir_leaves"
+ else
+ moretrees.fir_model.leaves="moretrees:fir_leaves_bright"
+ end
+ if math.random(2) == 1 then
+ moretrees.fir_model.rules_a = moretrees.ct_rules_a1
+ moretrees.fir_model.rules_b = moretrees.ct_rules_b1
+ else
+ moretrees.fir_model.rules_a = moretrees.ct_rules_a2
+ moretrees.fir_model.rules_b = moretrees.ct_rules_b2
+ end
+
+ moretrees.fir_model.iterations = 7
+ moretrees.fir_model.random_level = 5
+
+ minetest.remove_node(pos)
+ 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
+ minetest.remove_node(leaves[leaf])
+ end
+ minetest.spawn_tree(pos,moretrees.fir_model)
+end
+
+-- same thing, but a smaller version that grows only in snow biomes
+
+function moretrees.grow_fir_snow(pos)
+ if math.random(2) == 1 then
+ moretrees.fir_model.leaves="moretrees:fir_leaves"
+ else
+ moretrees.fir_model.leaves="moretrees:fir_leaves_bright"
+ end
+ if math.random(2) == 1 then
+ moretrees.fir_model.rules_a = moretrees.ct_rules_a1
+ moretrees.fir_model.rules_b = moretrees.ct_rules_b1
+ else
+ moretrees.fir_model.rules_a = moretrees.ct_rules_a2
+ moretrees.fir_model.rules_b = moretrees.ct_rules_b2
+ end
+
+ moretrees.fir_model.iterations = 2
+ moretrees.fir_model.random_level = 2
+
+ minetest.remove_node(pos)
+ 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
+ minetest.remove_node(leaves[leaf])
+ end
+ minetest.spawn_tree(pos,moretrees.fir_model)
+end
+
+print(S("[Moretrees] Loaded (2013-02-11)"))
diff --git a/moretrees/locale/de.txt b/moretrees/locale/de.txt
new file mode 100644
index 0000000..cab8d6f
--- /dev/null
+++ b/moretrees/locale/de.txt
@@ -0,0 +1,73 @@
+# 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)
diff --git a/moretrees/locale/template.txt b/moretrees/locale/template.txt
new file mode 100644
index 0000000..8c167f5
--- /dev/null
+++ b/moretrees/locale/template.txt
@@ -0,0 +1,73 @@
+# Template
+
+### crafts.lua ###
+Coconut Milk =
+Raw Coconut =
+Acorn Muffin batter =
+Acorn Muffin =
+Roasted Spruce Cone Nuts =
+Roasted Pine Cone Nuts =
+Roasted Fir Cone Nuts =
+
+### 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 =
+Coconut =
+Spruce Cone =
+Pine Cone =
+Fir Cone =
+Jungle Sapling =
+Jungle Tree Leaves (Yellow) =
+Jungle Tree Leaves (Red) =
+Douglas Fir Leaves (Bright) =
+Rubber Tree Trunk (Empty) =
+
+[Moretrees] Loaded (2013-02-11) =
diff --git a/moretrees/node_defs.lua b/moretrees/node_defs.lua
new file mode 100644
index 0000000..8328bef
--- /dev/null
+++ b/moretrees/node_defs.lua
@@ -0,0 +1,430 @@
+local S = moretrees.intllib
+
+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", "coconut", "Coconut", {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 1.0 },
+ {"spruce", "Spruce Tree", "spruce_cone", "Spruce 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" },
+ {"pine", "Pine Tree", "pine_cone", "Pine Cone", {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8, "default_pine_sapling.png" },
+ {"acacia", "Acacia Tree", nil, nil, nil, nil, "default_acacia_sapling.png" },
+}
+
+local dirs1 = { 21, 20, 23, 22, 21 }
+local dirs2 = { 12, 9, 18, 7, 12 }
+local dirs3 = { 14, 11, 16, 5, 14 }
+
+local moretrees_new_leaves_drawtype = "allfaces_optional"
+local moretrees_plantlike_leaves_visual_scale = 1
+
+if moretrees.plantlike_leaves then
+ moretrees_new_leaves_drawtype = "plantlike"
+ moretrees_plantlike_leaves_visual_scale = 1.189
+end
+
+-- redefine default leaves to handle plantlike and/or leaf decay options
+
+if moretrees.plantlike_leaves then
+ minetest.override_item("default:leaves", {
+ inventory_image = minetest.inventorycube("default_leaves.png"),
+ drawtype = "plantlike",
+ visual_scale = 1.189
+ })
+else
+ minetest.override_item("default:leaves", {
+ waving = 1
+ })
+end
+
+-- redefine default jungle leaves for same
+
+if moretrees.plantlike_leaves then
+ minetest.override_item("default:jungleleaves", {
+ inventory_image = minetest.inventorycube("default_jungleleaves.png"),
+ drawtype = "plantlike",
+ visual_scale = 1.189
+ })
+else
+ minetest.override_item("default:jungleleaves", {
+ waving = 1
+ })
+end
+
+for i in ipairs(moretrees.treelist) do
+ local treename = moretrees.treelist[i][1]
+ local treedesc = moretrees.treelist[i][2]
+ local fruit = moretrees.treelist[i][3]
+ local fruitdesc = moretrees.treelist[i][4]
+ local selbox = moretrees.treelist[i][5]
+ local vscale = moretrees.treelist[i][6]
+
+ local saptex = moretrees.treelist[i][7]
+
+ if treename ~= "jungletree" -- the default game provides jungle tree, acacia, and pine trunk/planks nodes.
+ and treename ~= "acacia"
+ and treename ~= "pine" then
+
+ saptex = "moretrees_"..treename.."_sapling.png"
+
+ minetest.register_node("moretrees:"..treename.."_trunk", {
+ description = S(treedesc.." Trunk"),
+ tiles = {
+ "moretrees_"..treename.."_trunk_top.png",
+ "moretrees_"..treename.."_trunk_top.png",
+ "moretrees_"..treename.."_trunk.png"
+ },
+ paramtype2 = "facedir",
+ is_ground_content = true,
+ groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
+ sounds = default.node_sound_wood_defaults(),
+ on_place = minetest.rotate_node,
+ })
+
+ minetest.register_node("moretrees:"..treename.."_planks", {
+ description = S(treedesc.." Planks"),
+ tiles = {"moretrees_"..treename.."_wood.png"},
+ is_ground_content = true,
+ groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
+ sounds = default.node_sound_wood_defaults(),
+ })
+
+ minetest.register_node("moretrees:"..treename.."_sapling", {
+ description = S(treedesc.." Sapling"),
+ drawtype = "plantlike",
+ tiles = {saptex},
+ inventory_image = saptex,
+ paramtype = "light",
+ paramtype2 = "waving",
+ walkable = false,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
+ },
+ groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1,sapling=1},
+ sounds = default.node_sound_defaults(),
+ })
+
+ -- 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
+ end
+
+ local moretrees_leaves_inventory_image = nil
+ local moretrees_new_leaves_waving = nil
+
+ if moretrees.plantlike_leaves then
+ moretrees_leaves_inventory_image = minetest.inventorycube("moretrees_"..treename.."_leaves.png")
+ else
+ moretrees_new_leaves_waving = 1
+ end
+
+ minetest.register_node("moretrees:"..treename.."_leaves", {
+ description = S(treedesc.." Leaves"),
+ drawtype = moretrees_new_leaves_drawtype,
+ waving = moretrees_new_leaves_waving,
+ visual_scale = moretrees_plantlike_leaves_visual_scale,
+ tiles = { "moretrees_"..treename.."_leaves.png" },
+ inventory_image = moretrees_leaves_inventory_image,
+ paramtype = "light",
+ groups = {snappy = 3, flammable = 2, leaves = 1, moretrees_leaves = 1, leafdecay = decay},
+ sounds = default.node_sound_leaves_defaults(),
+
+ drop = {
+ max_items = 1,
+ items = {
+ {items = {"moretrees:"..treename.."_sapling"}, rarity = droprarity },
+ {items = {"moretrees:"..treename.."_leaves"} }
+ }
+ },
+ })
+
+ if moretrees.enable_stairs then
+ if minetest.get_modpath("moreblocks") then
+
+ -- stairsplus:register_all(modname, subname, recipeitem, {fields})
+
+ stairsplus:register_all(
+ "moretrees",
+ treename.."_trunk",
+ "moretrees:"..treename.."_trunk",
+ {
+ groups = { snappy=1, choppy=2, oddly_breakable_by_hand=1, flammable=2, not_in_creative_inventory=1 },
+ tiles = {
+ "moretrees_"..treename.."_trunk_top.png",
+ "moretrees_"..treename.."_trunk_top.png",
+ "moretrees_"..treename.."_trunk.png"
+ },
+ description = S(treedesc.." Trunk"),
+ drop = treename.."_trunk",
+ }
+ )
+
+ stairsplus:register_all(
+ "moretrees",
+ treename.."_planks",
+ "moretrees:"..treename.."_planks",
+ {
+ groups = { snappy=1, choppy=2, oddly_breakable_by_hand=2, flammable=3, not_in_creative_inventory=1 },
+ tiles = { "moretrees_"..treename.."_wood.png" },
+ description = S(treedesc.." Planks"),
+ drop = treename.."_planks",
+ }
+ )
+ elseif minetest.get_modpath("stairs") then
+ stairs.register_stair_and_slab(
+ "moretrees_"..treename.."_trunk",
+ "moretrees:"..treename.."_trunk",
+ { snappy=1, choppy=2, oddly_breakable_by_hand=1, flammable=2 },
+ { "moretrees_"..treename.."_trunk_top.png",
+ "moretrees_"..treename.."_trunk_top.png",
+ "moretrees_"..treename.."_trunk.png"
+ },
+ S(treedesc.." Trunk Stair"),
+ S(treedesc.." Trunk Slab"),
+ default.node_sound_wood_defaults()
+ )
+
+ stairs.register_stair_and_slab(
+ "moretrees_"..treename.."_planks",
+ "moretrees:"..treename.."_planks",
+ { snappy=1, choppy=2, oddly_breakable_by_hand=2, flammable=3 },
+ { "moretrees_"..treename.."_wood.png" },
+ S(treedesc.." Planks Stair"),
+ S(treedesc.." Planks Slab"),
+ default.node_sound_wood_defaults()
+ )
+
+ end
+ end
+ end
+
+ minetest.register_node("moretrees:"..treename.."_sapling_ongen", {
+ description = S(treedesc.." Sapling"),
+ drawtype = "plantlike",
+ tiles = {saptex},
+ inventory_image = saptex,
+ paramtype = "light",
+ paramtype2 = "waving",
+ walkable = false,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
+ },
+ groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1,not_in_creative_inventory=1,sapling=1},
+ sounds = default.node_sound_defaults(),
+ drop = "moretrees:"..treename.."_sapling"
+ })
+
+ if fruit then
+ minetest.register_node("moretrees:"..fruit, {
+ description = S(fruitdesc),
+ drawtype = "plantlike",
+ tiles = { "moretrees_"..fruit..".png" },
+ inventory_image = "moretrees_"..fruit..".png^[transformR180",
+ wield_image = "moretrees_"..fruit..".png^[transformR180",
+ visual_scale = vscale,
+ paramtype = "light",
+ sunlight_propagates = true,
+ walkable = false,
+ selection_box = {
+ type = "fixed",
+ fixed = selbox
+ },
+ groups = {fleshy=3,dig_immediate=3,flammable=2, attached_node=1},
+ sounds = default.node_sound_defaults(),
+ })
+ end
+
+ minetest.register_abm({
+ nodenames = { "moretrees:"..treename.."_trunk_sideways" },
+ interval = 1,
+ chance = 1,
+ action = function(pos, node, active_object_count, active_object_count_wider)
+ local fdir = node.param2 or 0
+ nfdir = dirs2[fdir+1]
+ minetest.add_node(pos, {name = "moretrees:"..treename.."_trunk", param2 = nfdir})
+ end,
+ })
+
+ table.insert(moretrees.avoidnodes, "moretrees:"..treename.."_trunk")
+
+ if moretrees.spawn_saplings then
+ table.insert(moretrees.avoidnodes, "moretrees:"..treename.."_sapling")
+ table.insert(moretrees.avoidnodes, "moretrees:"..treename.."_sapling_ongen")
+ end
+end
+
+-- Extra nodes for jungle trees:
+
+local jungleleaves = {"yellow","red"}
+local jungleleavesnames = {"Yellow", "Red"}
+for color = 1, #jungleleaves do
+ local leave_name = "moretrees:jungletree_leaves_"..jungleleaves[color]
+
+ local moretrees_leaves_inventory_image = nil
+
+ if moretrees.plantlike_leaves then
+ moretrees_leaves_inventory_image = minetest.inventorycube("moretrees_jungletree_leaves_"..jungleleaves[color]..".png")
+ else
+ moretrees_new_leaves_waving = 1
+ end
+
+ minetest.register_node(leave_name, {
+ description = S("Jungle Tree Leaves ("..jungleleavesnames[color]..")"),
+ drawtype = moretrees_new_leaves_drawtype,
+ waving = moretrees_new_leaves_waving,
+ visual_scale = moretrees_plantlike_leaves_visual_scale,
+ tiles = {"moretrees_jungletree_leaves_"..jungleleaves[color]..".png"},
+ inventory_image = moretrees_leaves_inventory_image,
+ paramtype = "light",
+ groups = {snappy = 3, flammable = 2, leaves = 1, moretrees_leaves = 1, leafdecay = moretrees.leafdecay_radius },
+ drop = {
+ max_items = 1,
+ items = {
+ {items = {"default:junglesapling"}, rarity = 100 },
+ {items = {"moretrees:jungletree_leaves_"..jungleleaves[color]} }
+ }
+ },
+ sounds = default.node_sound_leaves_defaults(),
+ })
+end
+
+-- Extra needles for firs
+
+local moretrees_leaves_inventory_image = nil
+
+if moretrees.plantlike_leaves then
+ moretrees_leaves_inventory_image = minetest.inventorycube("moretrees_fir_leaves_bright.png")
+end
+
+minetest.register_node("moretrees:fir_leaves_bright", {
+ drawtype = moretrees_new_leaves_drawtype,
+ waving = moretrees_new_leaves_waving,
+ visual_scale = moretrees_plantlike_leaves_visual_scale,
+ description = S("Douglas Fir Leaves (Bright)"),
+ tiles = { "moretrees_fir_leaves_bright.png" },
+ inventory_image = moretrees_leaves_inventory_image,
+ paramtype = "light",
+ groups = {snappy = 3, flammable = 2, leaves = 1, moretrees_leaves = 1, leafdecay = moretrees.leafdecay_radius },
+ drop = {
+ max_items = 1,
+ items = {
+ {items = {'moretrees:fir_sapling'}, rarity = 100 },
+ {items = {'moretrees:fir_leaves_bright'} }
+ }
+ },
+ sounds = default.node_sound_leaves_defaults()
+})
+
+if moretrees.enable_redefine_apple then
+ local appledef = moretrees.clone_node("default:apple")
+ appledef.groups.attached_node = 1
+ minetest.register_node(":default:apple", appledef)
+end
+
+table.insert(moretrees.avoidnodes, "default:jungletree")
+table.insert(moretrees.avoidnodes, "default:pine_tree")
+table.insert(moretrees.avoidnodes, "default:acacia_tree")
+table.insert(moretrees.avoidnodes, "moretrees:fir_trunk")
+table.insert(moretrees.avoidnodes, "default:tree")
+
+if moretrees.spawn_saplings then
+ table.insert(moretrees.avoidnodes, "snow:sapling_pine")
+ table.insert(moretrees.avoidnodes, "default:junglesapling")
+ table.insert(moretrees.avoidnodes, "default:pine_sapling")
+ table.insert(moretrees.avoidnodes, "default:acacia_sapling")
+end
+
+-- "empty" (tapped) rubber tree nodes
+
+minetest.register_node("moretrees:rubber_tree_trunk_empty", {
+ description = S("Rubber Tree Trunk (Empty)"),
+ tiles = {
+ "moretrees_rubber_tree_trunk_top.png",
+ "moretrees_rubber_tree_trunk_top.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},
+ sounds = default.node_sound_wood_defaults(),
+ paramtype2 = "facedir",
+ on_place = minetest.rotate_node,
+})
+
+minetest.register_abm({
+ nodenames = { "moretrees:rubber_tree_trunk_empty_sideways" },
+ interval = 1,
+ chance = 1,
+ action = function(pos, node, active_object_count, active_object_count_wider)
+ local fdir = node.param2 or 0
+ nfdir = dirs2[fdir+1]
+ minetest.add_node(pos, {name = "moretrees:rubber_tree_trunk_empty", param2 = nfdir})
+ 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
+
+minetest.register_alias("technic:rubber_tree_full", "moretrees:rubber_tree_trunk")
+minetest.register_alias("farming_plus:rubber_tree_full", "moretrees:rubber_tree_trunk")
+minetest.register_alias("farming:rubber_tree_full", "moretrees:rubber_tree_trunk")
+
+minetest.register_alias("technic:rubber_leaves", "moretrees:rubber_tree_leaves")
+minetest.register_alias("farming_plus:rubber_leaves", "moretrees:rubber_tree_leaves")
+minetest.register_alias("farming:rubber_leaves", "moretrees:rubber_tree_leaves")
+
+minetest.register_alias("technic:rubber_tree_sapling", "moretrees:rubber_tree_sapling")
+minetest.register_alias("farming_plus:rubber_sapling", "moretrees:rubber_tree_sapling")
+minetest.register_alias("farming:rubber_sapling", "moretrees:rubber_tree_sapling")
+
+minetest.register_alias("moretrees:conifer_trunk", "moretrees:fir_trunk")
+minetest.register_alias("moretrees:conifer_trunk_sideways", "moretrees:fir_trunk_sideways")
+minetest.register_alias("moretrees:conifer_leaves", "moretrees:fir_leaves")
+minetest.register_alias("moretrees:conifer_leaves_bright", "moretrees:fir_leaves_bright")
+minetest.register_alias("moretrees:conifer_sapling", "moretrees:fir_sapling")
+
+minetest.register_alias("conifers:trunk", "moretrees:fir_trunk")
+minetest.register_alias("conifers:trunk_reversed", "moretrees:fir_trunk_sideways")
+minetest.register_alias("conifers:leaves", "moretrees:fir_leaves")
+minetest.register_alias("conifers:leaves_special", "moretrees:fir_leaves_bright")
+minetest.register_alias("conifers:sapling", "moretrees:fir_sapling")
+
+minetest.register_alias("moretrees:jungletree_sapling", "default:junglesapling")
+minetest.register_alias("moretrees:jungletree_trunk_sideways", "moreblocks:horizontal_jungle_tree")
+minetest.register_alias("moretrees:jungletree_planks", "default:junglewood")
+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_planks", "default:acacia_wood")
+minetest.register_alias("moretrees:acacia_sapling", "default:acacia_sapling")
+minetest.register_alias("moretrees:acacia_leaves", "default:acacia_leaves")
+
+minetest.register_alias("moretrees:pine_trunk", "default:pine_tree")
+minetest.register_alias("moretrees:pine_planks", "default:pine_wood")
+minetest.register_alias("moretrees:pine_sapling", "default:pine_sapling")
+minetest.register_alias("moretrees:pine_leaves", "default:pine_needles")
diff --git a/moretrees/saplings.lua b/moretrees/saplings.lua
new file mode 100644
index 0000000..8004612
--- /dev/null
+++ b/moretrees/saplings.lua
@@ -0,0 +1,93 @@
+-- sapling growth
+
+for i in ipairs(moretrees.treelist) do
+ local treename = moretrees.treelist[i][1]
+ local tree_model = treename.."_model"
+ local tree_biome = treename.."_biome"
+
+ if treename ~= "birch" and treename ~= "spruce" and treename ~= "fir" and treename ~= "jungletree" then
+
+ 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 = moretrees[tree_biome].surface,
+ grow_function = moretrees[tree_model],
+ })
+
+ 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
+
+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"
+})
+
diff --git a/moretrees/textures/moretrees_acorn.png b/moretrees/textures/moretrees_acorn.png
new file mode 100644
index 0000000..dc2ef32
--- /dev/null
+++ b/moretrees/textures/moretrees_acorn.png
Binary files differ
diff --git a/moretrees/textures/moretrees_acorn_muffin.png b/moretrees/textures/moretrees_acorn_muffin.png
new file mode 100644
index 0000000..166ca83
--- /dev/null
+++ b/moretrees/textures/moretrees_acorn_muffin.png
Binary files differ
diff --git a/moretrees/textures/moretrees_acorn_muffin_batter.png b/moretrees/textures/moretrees_acorn_muffin_batter.png
new file mode 100644
index 0000000..b22e749
--- /dev/null
+++ b/moretrees/textures/moretrees_acorn_muffin_batter.png
Binary files differ
diff --git a/moretrees/textures/moretrees_apple_tree_leaves.png b/moretrees/textures/moretrees_apple_tree_leaves.png
new file mode 100644
index 0000000..75ec063
--- /dev/null
+++ b/moretrees/textures/moretrees_apple_tree_leaves.png
Binary files differ
diff --git a/moretrees/textures/moretrees_apple_tree_sapling.png b/moretrees/textures/moretrees_apple_tree_sapling.png
new file mode 100644
index 0000000..04f93fd
--- /dev/null
+++ b/moretrees/textures/moretrees_apple_tree_sapling.png
Binary files differ
diff --git a/moretrees/textures/moretrees_apple_tree_trunk.png b/moretrees/textures/moretrees_apple_tree_trunk.png
new file mode 100644
index 0000000..573fd85
--- /dev/null
+++ b/moretrees/textures/moretrees_apple_tree_trunk.png
Binary files differ
diff --git a/moretrees/textures/moretrees_apple_tree_trunk_top.png b/moretrees/textures/moretrees_apple_tree_trunk_top.png
new file mode 100644
index 0000000..d261753
--- /dev/null
+++ b/moretrees/textures/moretrees_apple_tree_trunk_top.png
Binary files differ
diff --git a/moretrees/textures/moretrees_apple_tree_wood.png b/moretrees/textures/moretrees_apple_tree_wood.png
new file mode 100644
index 0000000..242f3ee
--- /dev/null
+++ b/moretrees/textures/moretrees_apple_tree_wood.png
Binary files differ
diff --git a/moretrees/textures/moretrees_beech_leaves.png b/moretrees/textures/moretrees_beech_leaves.png
new file mode 100644
index 0000000..8463f53
--- /dev/null
+++ b/moretrees/textures/moretrees_beech_leaves.png
Binary files differ
diff --git a/moretrees/textures/moretrees_beech_sapling.png b/moretrees/textures/moretrees_beech_sapling.png
new file mode 100644
index 0000000..ff42cc4
--- /dev/null
+++ b/moretrees/textures/moretrees_beech_sapling.png
Binary files differ
diff --git a/moretrees/textures/moretrees_beech_trunk.png b/moretrees/textures/moretrees_beech_trunk.png
new file mode 100644
index 0000000..06b4ae9
--- /dev/null
+++ b/moretrees/textures/moretrees_beech_trunk.png
Binary files differ
diff --git a/moretrees/textures/moretrees_beech_trunk_top.png b/moretrees/textures/moretrees_beech_trunk_top.png
new file mode 100644
index 0000000..7285985
--- /dev/null
+++ b/moretrees/textures/moretrees_beech_trunk_top.png
Binary files differ
diff --git a/moretrees/textures/moretrees_beech_wood.png b/moretrees/textures/moretrees_beech_wood.png
new file mode 100644
index 0000000..d6e3f9d
--- /dev/null
+++ b/moretrees/textures/moretrees_beech_wood.png
Binary files differ
diff --git a/moretrees/textures/moretrees_birch_leaves.png b/moretrees/textures/moretrees_birch_leaves.png
new file mode 100644
index 0000000..547f133
--- /dev/null
+++ b/moretrees/textures/moretrees_birch_leaves.png
Binary files differ
diff --git a/moretrees/textures/moretrees_birch_sapling.png b/moretrees/textures/moretrees_birch_sapling.png
new file mode 100644
index 0000000..afb03f3
--- /dev/null
+++ b/moretrees/textures/moretrees_birch_sapling.png
Binary files differ
diff --git a/moretrees/textures/moretrees_birch_trunk.png b/moretrees/textures/moretrees_birch_trunk.png
new file mode 100644
index 0000000..2b222f7
--- /dev/null
+++ b/moretrees/textures/moretrees_birch_trunk.png
Binary files differ
diff --git a/moretrees/textures/moretrees_birch_trunk_top.png b/moretrees/textures/moretrees_birch_trunk_top.png
new file mode 100644
index 0000000..6e5b3bb
--- /dev/null
+++ b/moretrees/textures/moretrees_birch_trunk_top.png
Binary files differ
diff --git a/moretrees/textures/moretrees_birch_wood.png b/moretrees/textures/moretrees_birch_wood.png
new file mode 100644
index 0000000..621f8ee
--- /dev/null
+++ b/moretrees/textures/moretrees_birch_wood.png
Binary files differ
diff --git a/moretrees/textures/moretrees_coconut.png b/moretrees/textures/moretrees_coconut.png
new file mode 100644
index 0000000..2107b5f
--- /dev/null
+++ b/moretrees/textures/moretrees_coconut.png
Binary files differ
diff --git a/moretrees/textures/moretrees_coconut_milk.png b/moretrees/textures/moretrees_coconut_milk.png
new file mode 100644
index 0000000..9a54ad8
--- /dev/null
+++ b/moretrees/textures/moretrees_coconut_milk.png
Binary files differ
diff --git a/moretrees/textures/moretrees_coconut_milk_inv.png b/moretrees/textures/moretrees_coconut_milk_inv.png
new file mode 100644
index 0000000..f636578
--- /dev/null
+++ b/moretrees/textures/moretrees_coconut_milk_inv.png
Binary files differ
diff --git a/moretrees/textures/moretrees_fir_cone.png b/moretrees/textures/moretrees_fir_cone.png
new file mode 100644
index 0000000..45eef92
--- /dev/null
+++ b/moretrees/textures/moretrees_fir_cone.png
Binary files differ
diff --git a/moretrees/textures/moretrees_fir_leaves.png b/moretrees/textures/moretrees_fir_leaves.png
new file mode 100644
index 0000000..6643b87
--- /dev/null
+++ b/moretrees/textures/moretrees_fir_leaves.png
Binary files differ
diff --git a/moretrees/textures/moretrees_fir_leaves_bright.png b/moretrees/textures/moretrees_fir_leaves_bright.png
new file mode 100644
index 0000000..e3b2e6f
--- /dev/null
+++ b/moretrees/textures/moretrees_fir_leaves_bright.png
Binary files differ
diff --git a/moretrees/textures/moretrees_fir_nuts.png b/moretrees/textures/moretrees_fir_nuts.png
new file mode 100644
index 0000000..a534149
--- /dev/null
+++ b/moretrees/textures/moretrees_fir_nuts.png
Binary files differ
diff --git a/moretrees/textures/moretrees_fir_sapling.png b/moretrees/textures/moretrees_fir_sapling.png
new file mode 100644
index 0000000..642123c
--- /dev/null
+++ b/moretrees/textures/moretrees_fir_sapling.png
Binary files differ
diff --git a/moretrees/textures/moretrees_fir_trunk.png b/moretrees/textures/moretrees_fir_trunk.png
new file mode 100644
index 0000000..cc0c559
--- /dev/null
+++ b/moretrees/textures/moretrees_fir_trunk.png
Binary files differ
diff --git a/moretrees/textures/moretrees_fir_trunk_top.png b/moretrees/textures/moretrees_fir_trunk_top.png
new file mode 100644
index 0000000..d17decf
--- /dev/null
+++ b/moretrees/textures/moretrees_fir_trunk_top.png
Binary files differ
diff --git a/moretrees/textures/moretrees_fir_wood.png b/moretrees/textures/moretrees_fir_wood.png
new file mode 100644
index 0000000..7f49079
--- /dev/null
+++ b/moretrees/textures/moretrees_fir_wood.png
Binary files differ
diff --git a/moretrees/textures/moretrees_jungletree_leaves_green.png b/moretrees/textures/moretrees_jungletree_leaves_green.png
new file mode 100644
index 0000000..52d4a5a
--- /dev/null
+++ b/moretrees/textures/moretrees_jungletree_leaves_green.png
Binary files differ
diff --git a/moretrees/textures/moretrees_jungletree_leaves_red.png b/moretrees/textures/moretrees_jungletree_leaves_red.png
new file mode 100644
index 0000000..d26593e
--- /dev/null
+++ b/moretrees/textures/moretrees_jungletree_leaves_red.png
Binary files differ
diff --git a/moretrees/textures/moretrees_jungletree_leaves_yellow.png b/moretrees/textures/moretrees_jungletree_leaves_yellow.png
new file mode 100644
index 0000000..d116455
--- /dev/null
+++ b/moretrees/textures/moretrees_jungletree_leaves_yellow.png
Binary files differ
diff --git a/moretrees/textures/moretrees_oak_leaves.png b/moretrees/textures/moretrees_oak_leaves.png
new file mode 100644
index 0000000..aa587c5
--- /dev/null
+++ b/moretrees/textures/moretrees_oak_leaves.png
Binary files differ
diff --git a/moretrees/textures/moretrees_oak_sapling.png b/moretrees/textures/moretrees_oak_sapling.png
new file mode 100644
index 0000000..eef6a72
--- /dev/null
+++ b/moretrees/textures/moretrees_oak_sapling.png
Binary files differ
diff --git a/moretrees/textures/moretrees_oak_trunk.png b/moretrees/textures/moretrees_oak_trunk.png
new file mode 100644
index 0000000..b0ca910
--- /dev/null
+++ b/moretrees/textures/moretrees_oak_trunk.png
Binary files differ
diff --git a/moretrees/textures/moretrees_oak_trunk_top.png b/moretrees/textures/moretrees_oak_trunk_top.png
new file mode 100644
index 0000000..526d302
--- /dev/null
+++ b/moretrees/textures/moretrees_oak_trunk_top.png
Binary files differ
diff --git a/moretrees/textures/moretrees_oak_wood.png b/moretrees/textures/moretrees_oak_wood.png
new file mode 100644
index 0000000..05d02f9
--- /dev/null
+++ b/moretrees/textures/moretrees_oak_wood.png
Binary files differ
diff --git a/moretrees/textures/moretrees_palm_leaves.png b/moretrees/textures/moretrees_palm_leaves.png
new file mode 100644
index 0000000..90b0700
--- /dev/null
+++ b/moretrees/textures/moretrees_palm_leaves.png
Binary files differ
diff --git a/moretrees/textures/moretrees_palm_sapling.png b/moretrees/textures/moretrees_palm_sapling.png
new file mode 100644
index 0000000..aaa3415
--- /dev/null
+++ b/moretrees/textures/moretrees_palm_sapling.png
Binary files differ
diff --git a/moretrees/textures/moretrees_palm_trunk.png b/moretrees/textures/moretrees_palm_trunk.png
new file mode 100644
index 0000000..da255bc
--- /dev/null
+++ b/moretrees/textures/moretrees_palm_trunk.png
Binary files differ
diff --git a/moretrees/textures/moretrees_palm_trunk_top.png b/moretrees/textures/moretrees_palm_trunk_top.png
new file mode 100644
index 0000000..fe07ae3
--- /dev/null
+++ b/moretrees/textures/moretrees_palm_trunk_top.png
Binary files differ
diff --git a/moretrees/textures/moretrees_palm_wood.png b/moretrees/textures/moretrees_palm_wood.png
new file mode 100644
index 0000000..c0c0ed6
--- /dev/null
+++ b/moretrees/textures/moretrees_palm_wood.png
Binary files differ
diff --git a/moretrees/textures/moretrees_pine_cone.png b/moretrees/textures/moretrees_pine_cone.png
new file mode 100644
index 0000000..5e1fae9
--- /dev/null
+++ b/moretrees/textures/moretrees_pine_cone.png
Binary files differ
diff --git a/moretrees/textures/moretrees_pine_nuts.png b/moretrees/textures/moretrees_pine_nuts.png
new file mode 100644
index 0000000..e39f895
--- /dev/null
+++ b/moretrees/textures/moretrees_pine_nuts.png
Binary files differ
diff --git a/moretrees/textures/moretrees_raw_coconut.png b/moretrees/textures/moretrees_raw_coconut.png
new file mode 100644
index 0000000..ca318ed
--- /dev/null
+++ b/moretrees/textures/moretrees_raw_coconut.png
Binary files differ
diff --git a/moretrees/textures/moretrees_rubber_tree_leaves.png b/moretrees/textures/moretrees_rubber_tree_leaves.png
new file mode 100644
index 0000000..e35f51b
--- /dev/null
+++ b/moretrees/textures/moretrees_rubber_tree_leaves.png
Binary files differ
diff --git a/moretrees/textures/moretrees_rubber_tree_sapling.png b/moretrees/textures/moretrees_rubber_tree_sapling.png
new file mode 100644
index 0000000..d2e06d0
--- /dev/null
+++ b/moretrees/textures/moretrees_rubber_tree_sapling.png
Binary files differ
diff --git a/moretrees/textures/moretrees_rubber_tree_trunk.png b/moretrees/textures/moretrees_rubber_tree_trunk.png
new file mode 100644
index 0000000..c5da574
--- /dev/null
+++ b/moretrees/textures/moretrees_rubber_tree_trunk.png
Binary files differ
diff --git a/moretrees/textures/moretrees_rubber_tree_trunk_empty.png b/moretrees/textures/moretrees_rubber_tree_trunk_empty.png
new file mode 100644
index 0000000..55423bc
--- /dev/null
+++ b/moretrees/textures/moretrees_rubber_tree_trunk_empty.png
Binary files differ
diff --git a/moretrees/textures/moretrees_rubber_tree_trunk_top.png b/moretrees/textures/moretrees_rubber_tree_trunk_top.png
new file mode 100644
index 0000000..25b86a9
--- /dev/null
+++ b/moretrees/textures/moretrees_rubber_tree_trunk_top.png
Binary files differ
diff --git a/moretrees/textures/moretrees_rubber_tree_wood.png b/moretrees/textures/moretrees_rubber_tree_wood.png
new file mode 100644
index 0000000..3c83f0e
--- /dev/null
+++ b/moretrees/textures/moretrees_rubber_tree_wood.png
Binary files differ
diff --git a/moretrees/textures/moretrees_sequoia_leaves.png b/moretrees/textures/moretrees_sequoia_leaves.png
new file mode 100644
index 0000000..594c958
--- /dev/null
+++ b/moretrees/textures/moretrees_sequoia_leaves.png
Binary files differ
diff --git a/moretrees/textures/moretrees_sequoia_sapling.png b/moretrees/textures/moretrees_sequoia_sapling.png
new file mode 100644
index 0000000..b11bc0b
--- /dev/null
+++ b/moretrees/textures/moretrees_sequoia_sapling.png
Binary files differ
diff --git a/moretrees/textures/moretrees_sequoia_trunk.png b/moretrees/textures/moretrees_sequoia_trunk.png
new file mode 100644
index 0000000..552cdf5
--- /dev/null
+++ b/moretrees/textures/moretrees_sequoia_trunk.png
Binary files differ
diff --git a/moretrees/textures/moretrees_sequoia_trunk_top.png b/moretrees/textures/moretrees_sequoia_trunk_top.png
new file mode 100644
index 0000000..d1891fd
--- /dev/null
+++ b/moretrees/textures/moretrees_sequoia_trunk_top.png
Binary files differ
diff --git a/moretrees/textures/moretrees_sequoia_wood.png b/moretrees/textures/moretrees_sequoia_wood.png
new file mode 100644
index 0000000..2e43595
--- /dev/null
+++ b/moretrees/textures/moretrees_sequoia_wood.png
Binary files differ
diff --git a/moretrees/textures/moretrees_spruce_cone.png b/moretrees/textures/moretrees_spruce_cone.png
new file mode 100644
index 0000000..1c9da85
--- /dev/null
+++ b/moretrees/textures/moretrees_spruce_cone.png
Binary files differ
diff --git a/moretrees/textures/moretrees_spruce_leaves.png b/moretrees/textures/moretrees_spruce_leaves.png
new file mode 100644
index 0000000..6643b87
--- /dev/null
+++ b/moretrees/textures/moretrees_spruce_leaves.png
Binary files differ
diff --git a/moretrees/textures/moretrees_spruce_nuts.png b/moretrees/textures/moretrees_spruce_nuts.png
new file mode 100644
index 0000000..130c11c
--- /dev/null
+++ b/moretrees/textures/moretrees_spruce_nuts.png
Binary files differ
diff --git a/moretrees/textures/moretrees_spruce_sapling.png b/moretrees/textures/moretrees_spruce_sapling.png
new file mode 100644
index 0000000..0275afb
--- /dev/null
+++ b/moretrees/textures/moretrees_spruce_sapling.png
Binary files differ
diff --git a/moretrees/textures/moretrees_spruce_trunk.png b/moretrees/textures/moretrees_spruce_trunk.png
new file mode 100644
index 0000000..cc0c559
--- /dev/null
+++ b/moretrees/textures/moretrees_spruce_trunk.png
Binary files differ
diff --git a/moretrees/textures/moretrees_spruce_trunk_top.png b/moretrees/textures/moretrees_spruce_trunk_top.png
new file mode 100644
index 0000000..3876c5b
--- /dev/null
+++ b/moretrees/textures/moretrees_spruce_trunk_top.png
Binary files differ
diff --git a/moretrees/textures/moretrees_spruce_wood.png b/moretrees/textures/moretrees_spruce_wood.png
new file mode 100644
index 0000000..47aa326
--- /dev/null
+++ b/moretrees/textures/moretrees_spruce_wood.png
Binary files differ
diff --git a/moretrees/textures/moretrees_willow_leaves.png b/moretrees/textures/moretrees_willow_leaves.png
new file mode 100644
index 0000000..e1d26d9
--- /dev/null
+++ b/moretrees/textures/moretrees_willow_leaves.png
Binary files differ
diff --git a/moretrees/textures/moretrees_willow_sapling.png b/moretrees/textures/moretrees_willow_sapling.png
new file mode 100644
index 0000000..18414de
--- /dev/null
+++ b/moretrees/textures/moretrees_willow_sapling.png
Binary files differ
diff --git a/moretrees/textures/moretrees_willow_trunk.png b/moretrees/textures/moretrees_willow_trunk.png
new file mode 100644
index 0000000..a3bd5f0
--- /dev/null
+++ b/moretrees/textures/moretrees_willow_trunk.png
Binary files differ
diff --git a/moretrees/textures/moretrees_willow_trunk_top.png b/moretrees/textures/moretrees_willow_trunk_top.png
new file mode 100644
index 0000000..c54c182
--- /dev/null
+++ b/moretrees/textures/moretrees_willow_trunk_top.png
Binary files differ
diff --git a/moretrees/textures/moretrees_willow_wood.png b/moretrees/textures/moretrees_willow_wood.png
new file mode 100644
index 0000000..21c5742
--- /dev/null
+++ b/moretrees/textures/moretrees_willow_wood.png
Binary files differ
diff --git a/moretrees/tree_biomes.txt b/moretrees/tree_biomes.txt
new file mode 100644
index 0000000..3e4533c
--- /dev/null
+++ b/moretrees/tree_biomes.txt
@@ -0,0 +1,34 @@
+
+ Elevation Temperature Nearness to Nearby What nodes Perlin Avoid
+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
+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
+palm - 1 to + 1 +15 to +32 water, 15 10 sand 330 5
+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
+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
+spruce above +20 -20 to +10 n/a n/a dirt_with grass 335 10
+pine 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
+acacia n/a n/a n/a n/a dirt_with_grass,
+ desert_sand n/a 15
+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
+
+
+Notes:
+------
+
+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.
+
+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,
+these trees will not grow, due to an engine bug.
diff --git a/moretrees/tree_models.lua b/moretrees/tree_models.lua
new file mode 100644
index 0000000..3443057
--- /dev/null
+++ b/moretrees/tree_models.lua
@@ -0,0 +1,246 @@
+moretrees.beech_model={
+ axiom="FFFFFBFB",
+ rules_a="[&&&GGF[++^Fd][--&Fd]//Fd[+^Fd][--&Fd]]////[&&&GGF[++^Fd][--&Fd]//Fd[+^Fd][--&Fd]]////[&&&GGF[++^Fd][--&Fd]//Fd[+^Fd][--&Fdd]]",
+ rules_b="[&&&F[++^Fd][--&d]//d[+^d][--&d]]////[&&&F[++^Fd][--&d]//d[+^d][--&d]]////[&&&F[++^Fd][--&Fd]//d[+^d][--&d]]",
+ rules_c="/",
+ rules_d="F",
+ trunk="moretrees:beech_trunk",
+ leaves="moretrees:beech_leaves",
+ angle=30,
+ iterations=2,
+ random_level=0,
+ trunk_type="single",
+ thin_branches=true
+}
+
+moretrees.apple_tree_model={
+ axiom="FFFFFAFFBF",
+ rules_a="[&&&FFFFF&&FFFF][&&&++++FFFFF&&FFFF][&&&----FFFFF&&FFFF]",
+ rules_b="[&&&++FFFFF&&FFFF][&&&--FFFFF&&FFFF][&&&------FFFFF&&FFFF]",
+ trunk="moretrees:apple_tree_trunk",
+ leaves="moretrees:apple_tree_leaves",
+ angle=30,
+ iterations=2,
+ random_level=0,
+ trunk_type="single",
+ thin_branches=true,
+ fruit="default:apple",
+ fruit_chance=15,
+}
+
+moretrees.oak_model={
+ axiom="FFFFFFA",
+ rules_a="[&FFBFA]////[&BFFFA]////[&FBFFA]",
+ rules_b="[&FFFA]////[&FFFA]////[&FFFA]",
+ trunk="moretrees:oak_trunk",
+ leaves="moretrees:oak_leaves",
+ angle=30,
+ iterations=5,
+ random_level=2,
+ trunk_type="crossed",
+ thin_branches=false,
+ fruit="moretrees:acorn",
+ fruit_chance=3,
+}
+
+moretrees.sequoia_model={
+ 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_b="[&&&GGF[++^Fdd][--&Fdd]//dd[+^d][--&Fd]]////[&&&GGF[++^Fdd][--&Fdd]//dd[+^d][--&Fd]]////[&&&GGF[++^Fdd][--&Fdd]//dd[+^d][--&Fd]]",
+ rules_c="/",
+ rules_d="F",
+ trunk="moretrees:sequoia_trunk",
+ leaves="moretrees:sequoia_leaves",
+ angle=30,
+ iterations=2,
+ random_level=0,
+ trunk_type="crossed",
+ thin_branches=true
+}
+
+moretrees.birch_model1={
+ axiom="FFFFFdddccA/FFFFFFcA/FFFFFFcB",
+ rules_a="[&&&dddd^^ddddddd][&&&---dddd^^ddddddd][&&&+++dddd^^ddddddd][&&&++++++dddd^^ddddddd]",
+ rules_b="[&&&ddd^^ddddd][&&&---ddd^^ddddd][&&&+++ddd^^ddddd][&&&++++++ddd^^ddddd]",
+ rules_c="/",
+ rules_d="F",
+ trunk="moretrees:birch_trunk",
+ leaves="moretrees:birch_leaves",
+ angle=30,
+ iterations=2,
+ random_level=0,
+ trunk_type="single",
+ thin_branches=true
+}
+
+moretrees.birch_model2={
+ axiom="FFFdddccA/FFFFFccA/FFFFFccB",
+ rules_a="[&&&dFFF^^FFFdd][&&&---dFFF^^FFFdd][&&&+++dFFF^^FFFdd][&&&++++++dFFF^^FFFdd]",
+ rules_b="[&&&dFF^^FFFd][&&&---dFFF^^FFFd][&&&+++dFF^^FFFd][&&&++++++dFF^^FFFd]",
+ rules_c="/",
+ rules_d="F",
+ trunk="moretrees:birch_trunk",
+ leaves="moretrees:birch_leaves",
+ angle=30,
+ iterations=2,
+ random_level=0,
+ trunk_type="single",
+ thin_branches=true
+}
+
+moretrees.palm_model={
+ axiom="FFcccccc&FFFFFddd[^&&&GR][^///&&&GR][^//////&&&GR][^***&&&GR]FA//A//A//A//A//A",
+ rules_a="[&fb&bbb[++f--&ffff&ff][--f++&ffff&ff]&ffff&bbbb&b]",
+ rules_b="f",
+ rules_c="/",
+ rules_d="F",
+ trunk="moretrees:palm_trunk",
+ leaves="moretrees:palm_leaves",
+ angle=30,
+ iterations=2,
+ random_level=0,
+ trunk_type="single",
+ thin_branches=true,
+ fruit="moretrees:coconut",
+ fruit_chance=0
+}
+
+moretrees.spruce_model1={
+ axiom="FFFFFAFFFFFFBFFFFFFCFFFFFFDFFFFFF[&&&F^^FF][&&&++F^^FF][&&&++++F^^FF][&&&++++++F^^FF][&&&--F^^FF][&&&----F^^FF][FFFFf]",
+ rules_a="[&&&FFFFFF^^FFF][&&&++FFFFFF^^FFF][&&&++++FFFFFF^^FFF][&&&++++++FFFFFF^^FFF][&&&--FFFFFF^^FFF][&&&----FFFFFF^^FFF]",
+ rules_b="[&&&FFFFF^^FFF][&&&++FFFFF^^FFF][&&&++++FFFFF^^FFF][&&&++++++FFFFF^^FFF][&&&--FFFFF^^FFF][&&&----FFFFF^^FFF]",
+ rules_c="[&&&FFFF^^FFF][&&&++FFFF^^FFF][&&&++++FFFF^^FFF][&&&++++++FFFF^^FFF][&&&--FFFF^^FFF][&&&----FFFF^^FFF]",
+ rules_d="[&&&FFF^^FFF][&&&++FFF^^FFF][&&&++++FFF^^FFF][&&&++++++FFF^^FFF][&&&--FFF^^FFF][&&&----FFF^^FFF]",
+ trunk="moretrees:spruce_trunk",
+ leaves="moretrees:spruce_leaves",
+ angle=30,
+ iterations=2,
+ random_level=0,
+ trunk_type="crossed",
+ thin_branches=true,
+ fruit="moretrees:spruce_cone",
+ fruit_chance=8
+}
+
+moretrees.spruce_model2={
+ axiom="FFFFFFBFFFFFFCFFFFFFDFFFFFF[&&&F^^FF][&&&++F^^FF][&&&++++F^^FF][&&&++++++F^^FF][&&&--F^^FF][&&&----F^^FF][FFFFf]",
+ rules_b="[&&&FFFFF^^FFF][&&&++FFFFF^^FFF][&&&++++FFFFF^^FFF][&&&++++++FFFFF^^FFF][&&&--FFFFF^^FFF][&&&----FFFFF^^FFF]",
+ rules_c="[&&&FFFF^^FFF][&&&++FFFF^^FFF][&&&++++FFFF^^FFF][&&&++++++FFFF^^FFF][&&&--FFFF^^FFF][&&&----FFFF^^FFF]",
+ rules_d="[&&&FFF^^FFF][&&&++FFF^^FFF][&&&++++FFF^^FFF][&&&++++++FFF^^FFF][&&&--FFF^^FFF][&&&----FFF^^FFF]",
+ trunk="moretrees:spruce_trunk",
+ leaves="moretrees:spruce_leaves",
+ angle=30,
+ iterations=2,
+ random_level=0,
+ trunk_type="crossed",
+ thin_branches=true,
+ fruit="moretrees:spruce_cone",
+ fruit_chance=8
+}
+
+moretrees.pine_model={
+ axiom="FFFFFcccdddB///cFdFB////cFdFB///cFdFB///cFdFA///cFdFA///cFdFB[FF]f",
+ rules_a="[&&&TTTT[++^TFdd][--&TFd]//Tdd[+^Fd][--&Fdd]]",
+ rules_b="[&&&TTT[++^Fdd][--&Fdd]//dd[+^d][--&Fd]]",
+ rules_c="/",
+ rules_d="F",
+ trunk="default:pine_tree",
+ leaves="default:pine_needles",
+ angle=30,
+ iterations=2,
+ random_level=0,
+ trunk_type="single",
+ thin_branches=true,
+ fruit="moretrees:pine_cone",
+ fruit_chance=8
+}
+
+moretrees.willow_model={
+ axiom="FFFFFFFFccA",
+ rules_a="[&FF&FFFF&&F&FFFFFFFdddd][**&FF&FFFF&&F&FFFFFFFdddd][//&FF&FFFF&&F&FFFFFFFdddd][////&FF&FFFF&&F&FFFFFFFdddd][//////&FF&FFFF&&F&FFFFFFFdddd][////////&FF&FFFF&&F&FFFFFFFdddd]",
+ rules_c="/",
+ rules_d="F",
+ trunk="moretrees:willow_trunk",
+ leaves="moretrees:willow_leaves",
+ angle=30,
+ iterations=2,
+ random_level=0,
+ trunk_type="crossed",
+ 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={
+ axiom="FFFFA",
+ rules_a="[&FFBFA]////[&BFFFA]////[&FBFFA]",
+ rules_b="[&FFA]////[&FFA]////[&FFA]",
+ trunk="moretrees:rubber_tree_trunk",
+ leaves="moretrees:rubber_tree_leaves",
+ angle=35,
+ iterations=3,
+ random_level=1,
+ trunk_type="double",
+ thin_branches=true
+}
+
+moretrees.jungletree_model={
+ axiom=nil,
+ rules_a=nil,
+ rules_b=nil,
+ trunk="moretrees:jungletree_trunk",
+ leaves="default:jungleleaves",
+ leaves2=nil,
+ leaves2_chance=nil,
+ angle=45,
+ iterations=nil,
+ random_level=2,
+ trunk_type=nil,
+ thin_branches=true,
+ fruit_chance=15,
+ fruit="vines:vine"
+}
+
+moretrees.fir_model={
+ axiom="FFFAF[&&-F][&&+F][&&---F][&&+++F]Fff",
+ rules_a=nil,
+ rules_b=nil,
+ trunk="moretrees:fir_trunk",
+ leaves=nil,
+ angle=45,
+ iterations=7,
+ random_level=5,
+ trunk_type="single",
+ thin_branches=true,
+ fruit="moretrees:fir_cone",
+ fruit_chance=8
+}