write something there
21
mods/plantlife_modpack/.luacheckrc
Normal file
|
@ -0,0 +1,21 @@
|
|||
unused_args = false
|
||||
allow_defined_top = true
|
||||
max_line_length = 185
|
||||
|
||||
exclude_files = {".luacheckrc"}
|
||||
|
||||
globals = {
|
||||
"biome_lib",
|
||||
"bushes_classic",
|
||||
}
|
||||
|
||||
read_globals = {
|
||||
table = {fields = {"copy"}},
|
||||
|
||||
"minetest", "ItemStack",
|
||||
"vector",
|
||||
|
||||
"default",
|
||||
"moretrees",
|
||||
"dump",
|
||||
}
|
603
mods/plantlife_modpack/LICENSE
Normal file
|
@ -0,0 +1,603 @@
|
|||
License for code: LGPL 3.0
|
||||
License for media and all other assets: CC-by-SA 4.0
|
||||
|
||||
These licenses apply to all modules and components in this modpack,
|
||||
unless otherwise stated.
|
||||
|
||||
###############################################################################
|
||||
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
|
||||
This version of the GNU Lesser General Public License incorporates
|
||||
the terms and conditions of version 3 of the GNU General Public
|
||||
License, supplemented by the additional permissions listed below.
|
||||
|
||||
0. Additional Definitions.
|
||||
|
||||
As used herein, "this License" refers to version 3 of the GNU Lesser
|
||||
General Public License, and the "GNU GPL" refers to version 3 of the GNU
|
||||
General Public License.
|
||||
|
||||
"The Library" refers to a covered work governed by this License,
|
||||
other than an Application or a Combined Work as defined below.
|
||||
|
||||
An "Application" is any work that makes use of an interface provided
|
||||
by the Library, but which is not otherwise based on the Library.
|
||||
Defining a subclass of a class defined by the Library is deemed a mode
|
||||
of using an interface provided by the Library.
|
||||
|
||||
A "Combined Work" is a work produced by combining or linking an
|
||||
Application with the Library. The particular version of the Library
|
||||
with which the Combined Work was made is also called the "Linked
|
||||
Version".
|
||||
|
||||
The "Minimal Corresponding Source" for a Combined Work means the
|
||||
Corresponding Source for the Combined Work, excluding any source code
|
||||
for portions of the Combined Work that, considered in isolation, are
|
||||
based on the Application, and not on the Linked Version.
|
||||
|
||||
The "Corresponding Application Code" for a Combined Work means the
|
||||
object code and/or source code for the Application, including any data
|
||||
and utility programs needed for reproducing the Combined Work from the
|
||||
Application, but excluding the System Libraries of the Combined Work.
|
||||
|
||||
1. Exception to Section 3 of the GNU GPL.
|
||||
|
||||
You may convey a covered work under sections 3 and 4 of this License
|
||||
without being bound by section 3 of the GNU GPL.
|
||||
|
||||
2. Conveying Modified Versions.
|
||||
|
||||
If you modify a copy of the Library, and, in your modifications, a
|
||||
facility refers to a function or data to be supplied by an Application
|
||||
that uses the facility (other than as an argument passed when the
|
||||
facility is invoked), then you may convey a copy of the modified
|
||||
version:
|
||||
|
||||
a) under this License, provided that you make a good faith effort to
|
||||
ensure that, in the event an Application does not supply the
|
||||
function or data, the facility still operates, and performs
|
||||
whatever part of its purpose remains meaningful, or
|
||||
|
||||
b) under the GNU GPL, with none of the additional permissions of
|
||||
this License applicable to that copy.
|
||||
|
||||
3. Object Code Incorporating Material from Library Header Files.
|
||||
|
||||
The object code form of an Application may incorporate material from
|
||||
a header file that is part of the Library. You may convey such object
|
||||
code under terms of your choice, provided that, if the incorporated
|
||||
material is not limited to numerical parameters, data structure
|
||||
layouts and accessors, or small macros, inline functions and templates
|
||||
(ten or fewer lines in length), you do both of the following:
|
||||
|
||||
a) Give prominent notice with each copy of the object code that the
|
||||
Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the object code with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
4. Combined Works.
|
||||
|
||||
You may convey a Combined Work under terms of your choice that,
|
||||
taken together, effectively do not restrict modification of the
|
||||
portions of the Library contained in the Combined Work and reverse
|
||||
engineering for debugging such modifications, if you also do each of
|
||||
the following:
|
||||
|
||||
a) Give prominent notice with each copy of the Combined Work that
|
||||
the Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
c) For a Combined Work that displays copyright notices during
|
||||
execution, include the copyright notice for the Library among
|
||||
these notices, as well as a reference directing the user to the
|
||||
copies of the GNU GPL and this license document.
|
||||
|
||||
d) Do one of the following:
|
||||
|
||||
0) Convey the Minimal Corresponding Source under the terms of this
|
||||
License, and the Corresponding Application Code in a form
|
||||
suitable for, and under terms that permit, the user to
|
||||
recombine or relink the Application with a modified version of
|
||||
the Linked Version to produce a modified Combined Work, in the
|
||||
manner specified by section 6 of the GNU GPL for conveying
|
||||
Corresponding Source.
|
||||
|
||||
1) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (a) uses at run time
|
||||
a copy of the Library already present on the user's computer
|
||||
system, and (b) will operate properly with a modified version
|
||||
of the Library that is interface-compatible with the Linked
|
||||
Version.
|
||||
|
||||
e) Provide Installation Information, but only if you would otherwise
|
||||
be required to provide such information under section 6 of the
|
||||
GNU GPL, and only to the extent that such information is
|
||||
necessary to install and execute a modified version of the
|
||||
Combined Work produced by recombining or relinking the
|
||||
Application with a modified version of the Linked Version. (If
|
||||
you use option 4d0, the Installation Information must accompany
|
||||
the Minimal Corresponding Source and Corresponding Application
|
||||
Code. If you use option 4d1, you must provide the Installation
|
||||
Information in the manner specified by section 6 of the GNU GPL
|
||||
for conveying Corresponding Source.)
|
||||
|
||||
5. Combined Libraries.
|
||||
|
||||
You may place library facilities that are a work based on the
|
||||
Library side by side in a single library together with other library
|
||||
facilities that are not Applications and are not covered by this
|
||||
License, and convey such a combined library under terms of your
|
||||
choice, if you do both of the following:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work based
|
||||
on the Library, uncombined with any other library facilities,
|
||||
conveyed under the terms of this License.
|
||||
|
||||
b) Give prominent notice with the combined library that part of it
|
||||
is a work based on the Library, and explaining where to find the
|
||||
accompanying uncombined form of the same work.
|
||||
|
||||
6. Revised Versions of the GNU Lesser General Public License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions
|
||||
of the GNU Lesser General Public License from time to time. Such new
|
||||
versions will be similar in spirit to the present version, but may
|
||||
differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Library as you received it specifies that a certain numbered version
|
||||
of the GNU Lesser General Public License "or any later version"
|
||||
applies to it, you have the option of following the terms and
|
||||
conditions either of that published version or of any later version
|
||||
published by the Free Software Foundation. If the Library as you
|
||||
received it does not specify a version number of the GNU Lesser
|
||||
General Public License, you may choose any version of the GNU Lesser
|
||||
General Public License ever published by the Free Software Foundation.
|
||||
|
||||
If the Library as you received it specifies that a proxy can decide
|
||||
whether future versions of the GNU Lesser General Public License shall
|
||||
apply, that proxy's public statement of acceptance of any version is
|
||||
permanent authorization for you to choose that version for the
|
||||
Library.
|
||||
|
||||
###############################################################################
|
||||
|
||||
Attribution-ShareAlike 4.0 International
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Corporation ("Creative Commons") is not a law firm and
|
||||
does not provide legal services or legal advice. Distribution of
|
||||
Creative Commons public licenses does not create a lawyer-client or
|
||||
other relationship. Creative Commons makes its licenses and related
|
||||
information available on an "as-is" basis. Creative Commons gives no
|
||||
warranties regarding its licenses, any material licensed under their
|
||||
terms and conditions, or any related information. Creative Commons
|
||||
disclaims all liability for damages resulting from their use to the
|
||||
fullest extent possible.
|
||||
|
||||
Using Creative Commons Public Licenses
|
||||
|
||||
Creative Commons public licenses provide a standard set of terms and
|
||||
conditions that creators and other rights holders may use to share
|
||||
original works of authorship and other material subject to copyright
|
||||
and certain other rights specified in the public license below. The
|
||||
following considerations are for informational purposes only, are not
|
||||
exhaustive, and do not form part of our licenses.
|
||||
|
||||
Considerations for licensors: Our public licenses are
|
||||
intended for use by those authorized to give the public
|
||||
permission to use material in ways otherwise restricted by
|
||||
copyright and certain other rights. Our licenses are
|
||||
irrevocable. Licensors should read and understand the terms
|
||||
and conditions of the license they choose before applying it.
|
||||
Licensors should also secure all rights necessary before
|
||||
applying our licenses so that the public can reuse the
|
||||
material as expected. Licensors should clearly mark any
|
||||
material not subject to the license. This includes other CC-
|
||||
licensed material, or material used under an exception or
|
||||
limitation to copyright. More considerations for licensors:
|
||||
wiki.creativecommons.org/Considerations_for_licensors
|
||||
|
||||
Considerations for the public: By using one of our public
|
||||
licenses, a licensor grants the public permission to use the
|
||||
licensed material under specified terms and conditions. If
|
||||
the licensor's permission is not necessary for any reason--for
|
||||
example, because of any applicable exception or limitation to
|
||||
copyright--then that use is not regulated by the license. Our
|
||||
licenses grant only permissions under copyright and certain
|
||||
other rights that a licensor has authority to grant. Use of
|
||||
the licensed material may still be restricted for other
|
||||
reasons, including because others have copyright or other
|
||||
rights in the material. A licensor may make special requests,
|
||||
such as asking that all changes be marked or described.
|
||||
Although not required by our licenses, you are encouraged to
|
||||
respect those requests where reasonable. More considerations
|
||||
for the public:
|
||||
wiki.creativecommons.org/Considerations_for_licensees
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Attribution-ShareAlike 4.0 International Public
|
||||
License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree
|
||||
to be bound by the terms and conditions of this Creative Commons
|
||||
Attribution-ShareAlike 4.0 International Public License ("Public
|
||||
License"). To the extent this Public License may be interpreted as a
|
||||
contract, You are granted the Licensed Rights in consideration of Your
|
||||
acceptance of these terms and conditions, and the Licensor grants You
|
||||
such rights in consideration of benefits the Licensor receives from
|
||||
making the Licensed Material available under these terms and
|
||||
conditions.
|
||||
|
||||
|
||||
Section 1 -- Definitions.
|
||||
|
||||
a. Adapted Material means material subject to Copyright and Similar
|
||||
Rights that is derived from or based upon the Licensed Material
|
||||
and in which the Licensed Material is translated, altered,
|
||||
arranged, transformed, or otherwise modified in a manner requiring
|
||||
permission under the Copyright and Similar Rights held by the
|
||||
Licensor. For purposes of this Public License, where the Licensed
|
||||
Material is a musical work, performance, or sound recording,
|
||||
Adapted Material is always produced where the Licensed Material is
|
||||
synched in timed relation with a moving image.
|
||||
|
||||
b. Adapter's License means the license You apply to Your Copyright
|
||||
and Similar Rights in Your contributions to Adapted Material in
|
||||
accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. BY-SA Compatible License means a license listed at
|
||||
creativecommons.org/compatiblelicenses, approved by Creative
|
||||
Commons as essentially the equivalent of this Public License.
|
||||
|
||||
d. Copyright and Similar Rights means copyright and/or similar rights
|
||||
closely related to copyright including, without limitation,
|
||||
performance, broadcast, sound recording, and Sui Generis Database
|
||||
Rights, without regard to how the rights are labeled or
|
||||
categorized. For purposes of this Public License, the rights
|
||||
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||
Rights.
|
||||
|
||||
e. Effective Technological Measures means those measures that, in the
|
||||
absence of proper authority, may not be circumvented under laws
|
||||
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||
Treaty adopted on December 20, 1996, and/or similar international
|
||||
agreements.
|
||||
|
||||
f. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||
any other exception or limitation to Copyright and Similar Rights
|
||||
that applies to Your use of the Licensed Material.
|
||||
|
||||
g. License Elements means the license attributes listed in the name
|
||||
of a Creative Commons Public License. The License Elements of this
|
||||
Public License are Attribution and ShareAlike.
|
||||
|
||||
h. Licensed Material means the artistic or literary work, database,
|
||||
or other material to which the Licensor applied this Public
|
||||
License.
|
||||
|
||||
i. Licensed Rights means the rights granted to You subject to the
|
||||
terms and conditions of this Public License, which are limited to
|
||||
all Copyright and Similar Rights that apply to Your use of the
|
||||
Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
j. Licensor means the individual(s) or entity(ies) granting rights
|
||||
under this Public License.
|
||||
|
||||
k. Share means to provide material to the public by any means or
|
||||
process that requires permission under the Licensed Rights, such
|
||||
as reproduction, public display, public performance, distribution,
|
||||
dissemination, communication, or importation, and to make material
|
||||
available to the public including in ways that members of the
|
||||
public may access the material from a place and at a time
|
||||
individually chosen by them.
|
||||
|
||||
l. Sui Generis Database Rights means rights other than copyright
|
||||
resulting from Directive 96/9/EC of the European Parliament and of
|
||||
the Council of 11 March 1996 on the legal protection of databases,
|
||||
as amended and/or succeeded, as well as other essentially
|
||||
equivalent rights anywhere in the world.
|
||||
|
||||
m. You means the individual or entity exercising the Licensed Rights
|
||||
under this Public License. Your has a corresponding meaning.
|
||||
|
||||
|
||||
Section 2 -- Scope.
|
||||
|
||||
a. License grant.
|
||||
|
||||
1. Subject to the terms and conditions of this Public License,
|
||||
the Licensor hereby grants You a worldwide, royalty-free,
|
||||
non-sublicensable, non-exclusive, irrevocable license to
|
||||
exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
a. reproduce and Share the Licensed Material, in whole or
|
||||
in part; and
|
||||
|
||||
b. produce, reproduce, and Share Adapted Material.
|
||||
|
||||
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||
Exceptions and Limitations apply to Your use, this Public
|
||||
License does not apply, and You do not need to comply with
|
||||
its terms and conditions.
|
||||
|
||||
3. Term. The term of this Public License is specified in Section
|
||||
6(a).
|
||||
|
||||
4. Media and formats; technical modifications allowed. The
|
||||
Licensor authorizes You to exercise the Licensed Rights in
|
||||
all media and formats whether now known or hereafter created,
|
||||
and to make technical modifications necessary to do so. The
|
||||
Licensor waives and/or agrees not to assert any right or
|
||||
authority to forbid You from making technical modifications
|
||||
necessary to exercise the Licensed Rights, including
|
||||
technical modifications necessary to circumvent Effective
|
||||
Technological Measures. For purposes of this Public License,
|
||||
simply making modifications authorized by this Section 2(a)
|
||||
(4) never produces Adapted Material.
|
||||
|
||||
5. Downstream recipients.
|
||||
|
||||
a. Offer from the Licensor -- Licensed Material. Every
|
||||
recipient of the Licensed Material automatically
|
||||
receives an offer from the Licensor to exercise the
|
||||
Licensed Rights under the terms and conditions of this
|
||||
Public License.
|
||||
|
||||
b. Additional offer from the Licensor -- Adapted Material.
|
||||
Every recipient of Adapted Material from You
|
||||
automatically receives an offer from the Licensor to
|
||||
exercise the Licensed Rights in the Adapted Material
|
||||
under the conditions of the Adapter's License You apply.
|
||||
|
||||
c. No downstream restrictions. You may not offer or impose
|
||||
any additional or different terms or conditions on, or
|
||||
apply any Effective Technological Measures to, the
|
||||
Licensed Material if doing so restricts exercise of the
|
||||
Licensed Rights by any recipient of the Licensed
|
||||
Material.
|
||||
|
||||
6. No endorsement. Nothing in this Public License constitutes or
|
||||
may be construed as permission to assert or imply that You
|
||||
are, or that Your use of the Licensed Material is, connected
|
||||
with, or sponsored, endorsed, or granted official status by,
|
||||
the Licensor or others designated to receive attribution as
|
||||
provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. Other rights.
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not
|
||||
licensed under this Public License, nor are publicity,
|
||||
privacy, and/or other similar personality rights; however, to
|
||||
the extent possible, the Licensor waives and/or agrees not to
|
||||
assert any such rights held by the Licensor to the limited
|
||||
extent necessary to allow You to exercise the Licensed
|
||||
Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this
|
||||
Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to
|
||||
collect royalties from You for the exercise of the Licensed
|
||||
Rights, whether directly or through a collecting society
|
||||
under any voluntary or waivable statutory or compulsory
|
||||
licensing scheme. In all other cases the Licensor expressly
|
||||
reserves any right to collect such royalties.
|
||||
|
||||
|
||||
Section 3 -- License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the
|
||||
following conditions.
|
||||
|
||||
a. Attribution.
|
||||
|
||||
1. If You Share the Licensed Material (including in modified
|
||||
form), You must:
|
||||
|
||||
a. retain the following if it is supplied by the Licensor
|
||||
with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed
|
||||
Material and any others designated to receive
|
||||
attribution, in any reasonable manner requested by
|
||||
the Licensor (including by pseudonym if
|
||||
designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of
|
||||
warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the
|
||||
extent reasonably practicable;
|
||||
|
||||
b. indicate if You modified the Licensed Material and
|
||||
retain an indication of any previous modifications; and
|
||||
|
||||
c. indicate the Licensed Material is licensed under this
|
||||
Public License, and include the text of, or the URI or
|
||||
hyperlink to, this Public License.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||
reasonable manner based on the medium, means, and context in
|
||||
which You Share the Licensed Material. For example, it may be
|
||||
reasonable to satisfy the conditions by providing a URI or
|
||||
hyperlink to a resource that includes the required
|
||||
information.
|
||||
|
||||
3. If requested by the Licensor, You must remove any of the
|
||||
information required by Section 3(a)(1)(A) to the extent
|
||||
reasonably practicable.
|
||||
|
||||
b. ShareAlike.
|
||||
|
||||
In addition to the conditions in Section 3(a), if You Share
|
||||
Adapted Material You produce, the following conditions also apply.
|
||||
|
||||
1. The Adapter's License You apply must be a Creative Commons
|
||||
license with the same License Elements, this version or
|
||||
later, or a BY-SA Compatible License.
|
||||
|
||||
2. You must include the text of, or the URI or hyperlink to, the
|
||||
Adapter's License You apply. You may satisfy this condition
|
||||
in any reasonable manner based on the medium, means, and
|
||||
context in which You Share Adapted Material.
|
||||
|
||||
3. You may not offer or impose any additional or different terms
|
||||
or conditions on, or apply any Effective Technological
|
||||
Measures to, Adapted Material that restrict exercise of the
|
||||
rights granted under the Adapter's License You apply.
|
||||
|
||||
|
||||
Section 4 -- Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that
|
||||
apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||
to extract, reuse, reproduce, and Share all or a substantial
|
||||
portion of the contents of the database;
|
||||
|
||||
b. if You include all or a substantial portion of the database
|
||||
contents in a database in which You have Sui Generis Database
|
||||
Rights, then the database in which You have Sui Generis Database
|
||||
Rights (but not its individual contents) is Adapted Material,
|
||||
|
||||
including for purposes of Section 3(b); and
|
||||
c. You must comply with the conditions in Section 3(a) if You Share
|
||||
all or a substantial portion of the contents of the database.
|
||||
|
||||
For the avoidance of doubt, this Section 4 supplements and does not
|
||||
replace Your obligations under this Public License where the Licensed
|
||||
Rights include other Copyright and Similar Rights.
|
||||
|
||||
|
||||
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
||||
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
||||
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
||||
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
||||
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
||||
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
||||
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
||||
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
||||
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||
|
||||
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
||||
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
||||
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
||||
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
||||
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
||||
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
||||
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
||||
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
|
||||
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided
|
||||
above shall be interpreted in a manner that, to the extent
|
||||
possible, most closely approximates an absolute disclaimer and
|
||||
waiver of all liability.
|
||||
|
||||
|
||||
Section 6 -- Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and
|
||||
Similar Rights licensed here. However, if You fail to comply with
|
||||
this Public License, then Your rights under this Public License
|
||||
terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under
|
||||
Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided
|
||||
it is cured within 30 days of Your discovery of the
|
||||
violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any
|
||||
right the Licensor may have to seek remedies for Your violations
|
||||
of this Public License.
|
||||
|
||||
c. For the avoidance of doubt, the Licensor may also offer the
|
||||
Licensed Material under separate terms or conditions or stop
|
||||
distributing the Licensed Material at any time; however, doing so
|
||||
will not terminate this Public License.
|
||||
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
||||
License.
|
||||
|
||||
|
||||
Section 7 -- Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different
|
||||
terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the
|
||||
Licensed Material not stated herein are separate from and
|
||||
independent of the terms and conditions of this Public License.
|
||||
|
||||
|
||||
Section 8 -- Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and
|
||||
shall not be interpreted to, reduce, limit, restrict, or impose
|
||||
conditions on any use of the Licensed Material that could lawfully
|
||||
be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is
|
||||
deemed unenforceable, it shall be automatically reformed to the
|
||||
minimum extent necessary to make it enforceable. If the provision
|
||||
cannot be reformed, it shall be severed from this Public License
|
||||
without affecting the enforceability of the remaining terms and
|
||||
conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no
|
||||
failure to comply consented to unless expressly agreed to by the
|
||||
Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted
|
||||
as a limitation upon, or waiver of, any privileges and immunities
|
||||
that apply to the Licensor or You, including from the legal
|
||||
processes of any jurisdiction or authority.
|
||||
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons is not a party to its public
|
||||
licenses. Notwithstanding, Creative Commons may elect to apply one of
|
||||
its public licenses to material it publishes and in those instances
|
||||
will be considered the “Licensor.” The text of the Creative Commons
|
||||
public licenses is dedicated to the public domain under the CC0 Public
|
||||
Domain Dedication. Except for the limited purpose of indicating that
|
||||
material is shared under a Creative Commons public license or as
|
||||
otherwise permitted by the Creative Commons policies published at
|
||||
creativecommons.org/policies, Creative Commons does not authorize the
|
||||
use of the trademark "Creative Commons" or any other trademark or logo
|
||||
of Creative Commons without its prior written consent including,
|
||||
without limitation, in connection with any unauthorized modifications
|
||||
to any of its public licenses or any other arrangements,
|
||||
understandings, or agreements concerning use of licensed material. For
|
||||
the avoidance of doubt, this paragraph does not form part of the
|
||||
public licenses.
|
||||
|
||||
Creative Commons may be contacted at creativecommons.org.
|
72
mods/plantlife_modpack/README
Normal file
|
@ -0,0 +1,72 @@
|
|||
README file for Plantlife mod, by Vanessa Ezekowitz
|
||||
---------------------------------------------------
|
||||
|
||||
Plantlife is a combined form of my Flowers and Poison Ivy mods and an expanded
|
||||
version of the old Bushes mod, now called bushes_classic. The entire package
|
||||
has been significantly rewritten and re-organized. This mod supplies all
|
||||
three of these components and should be 100% compatible with mods that used
|
||||
the old versions.
|
||||
|
||||
Its purpose is to add various kinds of flowers, cotton plants, water foliage,
|
||||
poison ivy, and fruit bushes, obviously. :-) All of these are spawned as
|
||||
normal nodes and can be collected and used in any recipes that depend on the
|
||||
old mods.
|
||||
|
||||
Spawning of plants is sensitive to the amount of available light. Flowers,
|
||||
cotton, and waterlilies only spawn when there at least a signficant amount of
|
||||
light. Seaweed will grow only in dimly-lit areas. Poison ivy also grows only
|
||||
in the daytime, but require less light than flowers.
|
||||
|
||||
Growing of poison ivy will only occur for plants that are on the same surface
|
||||
that is necessary for them to spawn on, so they won't grow if placed on e.g.
|
||||
cobble or homedecor flower pot, etc. This doesn't affect wall-climbing poison
|
||||
ivy, since it uses a different growth pattern.
|
||||
|
||||
All plants use multiple controls provided by biome_lib, to keep where they
|
||||
grow under control - no more random spread of plants! In addition, the density
|
||||
of the plants in any region they appear in has been fixed and brought under
|
||||
control.
|
||||
|
||||
Poison ivy is found sparsely among junglegrass, but will not grow near flowers.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
Important details:
|
||||
|
||||
Configuration: Any of the three components of this mod can be disabled
|
||||
by just removing their respective directories.
|
||||
|
||||
Dependencies: Just the game's default stuff.
|
||||
|
||||
Recommends: Nothing in particular.
|
||||
|
||||
Conflicts: This mod should not be installed alongside the original, separate
|
||||
Poison Ivy, or old Bushes mods. If those exist, delete them, as this mod
|
||||
supplies their functionality. If you still use the old Jungle Grass mod
|
||||
either as previously supplied with this modpack, or in its standalone form,
|
||||
you'll want to delete the "junglegrass" directory from this modpack to get rid
|
||||
of the aliases-to-air that it supplies.
|
||||
|
||||
Software Requirements: This mod requires Minetest 0.4.11 or later. It is
|
||||
unlikely to work with old versions.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
Crafting:
|
||||
|
||||
For crafting recipes, please see the forum thread for this modpack:
|
||||
|
||||
https://forum.minetest.net/viewtopic.php?f=11&t=3898
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
Notes:
|
||||
|
||||
Poison Ivy will spawn on grass and in some cases, on vertical surfaces
|
||||
including trees and jungle trees where they meet the dirt or grass. Ivy
|
||||
previously spawned on the ground taller/thicker or start climbing up said
|
||||
vertical surfaces and trees.
|
||||
|
||||
At present, the poison ivy presents little more than an annoyance - they can
|
||||
only be cut down and either re-planted or thrown away. No damage is done by
|
||||
harvesting them, yet. ;-)
|
10
mods/plantlife_modpack/copyright.txt
Normal file
|
@ -0,0 +1,10 @@
|
|||
Ironzorg's Flowers mod served as the basis for the three mods that eventually
|
||||
went into creating this file. Any code still remaining from that mod is
|
||||
entirely his work (though I'm pretty sure it's all been phased out).
|
||||
|
||||
Flowers textures by Ironzorg.
|
||||
|
||||
Junglegrass textures are modified copies of the original one from the game's
|
||||
default set.
|
||||
|
||||
All remaining code, textures, etc. by Vanessa Ezekowitz.
|
109
mods/plantlife_modpack/ferns/crafting.lua
Normal file
|
@ -0,0 +1,109 @@
|
|||
-- support for i18n
|
||||
local S = minetest.get_translator("ferns")
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- Ferns - Crafting 0.0.5
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- (by Mossmanikin)
|
||||
-----------------------------------------------------------------------------------------------
|
||||
|
||||
local fern1 = minetest.registered_items["default:fern_1"] or false
|
||||
fern1 = (fern1 and fern1.name) or "ferns:fern_01"
|
||||
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "ferns:fiddlehead 3",
|
||||
recipe = {"ferns:fern_01"},
|
||||
replacements = {
|
||||
{fern1, "ferns:ferntuber"}
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "ferns:fiddlehead 3",
|
||||
recipe = {"ferns:tree_fern_leaves"},
|
||||
replacements = {
|
||||
{"ferns:tree_fern_leaves", "ferns:sapling_tree_fern"}
|
||||
},
|
||||
})
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- FIDDLEHEAD
|
||||
-----------------------------------------------------------------------------------------------
|
||||
minetest.register_alias("archaeplantae:fiddlehead", "ferns:fiddlehead")
|
||||
|
||||
minetest.register_craftitem("ferns:fiddlehead", {
|
||||
description = S("Fiddlehead"),
|
||||
inventory_image = "ferns_fiddlehead.png",
|
||||
on_use = minetest.item_eat(-1), -- slightly poisonous when raw
|
||||
})
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "ferns:fiddlehead_roasted",
|
||||
recipe = "ferns:fiddlehead",
|
||||
cooktime = 1,
|
||||
})
|
||||
minetest.register_craftitem("ferns:fiddlehead_roasted", {
|
||||
description = S("Roasted Fiddlehead"),
|
||||
inventory_image = "ferns_fiddlehead_roasted.png",
|
||||
on_use = minetest.item_eat(1), -- edible when cooked
|
||||
})
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- FERN TUBER
|
||||
-----------------------------------------------------------------------------------------------
|
||||
minetest.register_alias("archaeplantae:ferntuber", "ferns:ferntuber")
|
||||
|
||||
minetest.register_craftitem("ferns:ferntuber", {
|
||||
description = S("Fern Tuber"),
|
||||
inventory_image = "ferns_ferntuber.png",
|
||||
})
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "ferns:ferntuber_roasted",
|
||||
recipe = "ferns:ferntuber",
|
||||
cooktime = 3,
|
||||
})
|
||||
|
||||
minetest.register_alias("archaeplantae:ferntuber_roasted", "ferns:ferntuber_roasted")
|
||||
|
||||
minetest.register_craftitem("ferns:ferntuber_roasted", {
|
||||
description = S("Roasted Fern Tuber"),
|
||||
inventory_image = "ferns_ferntuber_roasted.png",
|
||||
on_use = minetest.item_eat(3),
|
||||
})
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- HORSETAIL (EQUISETUM) --> GREEN DYE https://en.wikipedia.org/wiki/Equisetum
|
||||
-----------------------------------------------------------------------------------------------
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "dye:green",
|
||||
recipe = {"group:horsetail"},
|
||||
})
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- GLUE WOODEN TOOLS with RESIN & POLISH them with HORSETAIL (planned)
|
||||
-----------------------------------------------------------------------------------------------
|
||||
--[[minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "default:pick_wood",
|
||||
recipe = {"default:pick_wood","group:horsetail","farming:string","default:stick"},
|
||||
})
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "default:shovel_wood",
|
||||
recipe = {"default:shovel_wood","group:horsetail","farming:string","default:stick"},
|
||||
})
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "default:axe_wood",
|
||||
recipe = {"default:axe_wood","group:horsetail","farming:string","default:stick"},
|
||||
})
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "default:sword_wood",
|
||||
recipe = {"default:sword_wood","group:horsetail","farming:string","default:stick"},
|
||||
})
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "farming:hoe_wood",
|
||||
recipe = {"farming:hoe_wood","group:horsetail","farming:string","default:stick"},
|
||||
})]]
|
215
mods/plantlife_modpack/ferns/fern.lua
Normal file
|
@ -0,0 +1,215 @@
|
|||
-----------------------------------------------------------------------------------------------
|
||||
-- Ferns - Fern 0.1.0
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- by Mossmanikin
|
||||
-- Contains code from: biome_lib
|
||||
-- Looked at code from: default, flowers, painting, trees
|
||||
-- Dependencies: biome_lib
|
||||
-- Supports: dryplants, stoneage, sumpf
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- some inspiration from here
|
||||
-- https://en.wikipedia.org/wiki/Athyrium_yokoscense
|
||||
-- http://www.mygarden.net.au/gardening/athyrium-yokoscense/3900/1
|
||||
-----------------------------------------------------------------------------------------------
|
||||
|
||||
assert(abstract_ferns.config.enable_lady_fern == true)
|
||||
|
||||
-- support for i18n
|
||||
local S = minetest.get_translator("ferns")
|
||||
|
||||
-- Maintain backward compatibilty
|
||||
-- minetest-0.5: Begin
|
||||
local default_ferns = minetest.registered_items["default:fern_1"] or false
|
||||
if default_ferns then
|
||||
minetest.register_alias("ferns:fern_03", "default:fern_3")
|
||||
minetest.register_alias("ferns:fern_02", "default:fern_2")
|
||||
minetest.register_alias("ferns:fern_01", "default:fern_1")
|
||||
end
|
||||
-- minetest-0.5: End
|
||||
minetest.register_alias("archaeplantae:fern", "ferns:fern_03")
|
||||
minetest.register_alias("archaeplantae:fern_mid", "ferns:fern_02")
|
||||
minetest.register_alias("archaeplantae:fern_small", "ferns:fern_01")
|
||||
minetest.register_alias("ferns:fern_04", "ferns:fern_02") -- for placing
|
||||
|
||||
local nodenames = {}
|
||||
|
||||
local function create_nodes()
|
||||
local images = { "ferns_fern.png", "ferns_fern_mid.png", "ferns_fern_big.png" }
|
||||
local vscales = { 1, math.sqrt(8), math.sqrt(11) }
|
||||
local descs = { S("Lady-fern (Athyrium)"), nil, nil }
|
||||
|
||||
for i = 1, 3 do
|
||||
local node_on_place = nil
|
||||
if i == 1 then
|
||||
node_on_place = function(itemstack, placer, pointed_thing)
|
||||
-- place a random fern
|
||||
local stack = ItemStack("ferns:fern_0"..math.random(1,4))
|
||||
local ret = minetest.item_place(stack, placer, pointed_thing)
|
||||
return ItemStack("ferns:fern_01 "..itemstack:get_count()-(1-ret:get_count())) -- TODO FIXME?
|
||||
end
|
||||
end
|
||||
nodenames[i] = "ferns:fern_"..string.format("%02d", i)
|
||||
minetest.register_node(nodenames[i], {
|
||||
description = descs[i] or (S("Lady-fern (Athyrium)").." " .. string.format("%02d", i)),
|
||||
inventory_image = "ferns_fern.png",
|
||||
drawtype = "plantlike",
|
||||
visual_scale = vscales[i],
|
||||
paramtype = "light",
|
||||
tiles = { images[i] },
|
||||
walkable = false,
|
||||
buildable_to = true,
|
||||
groups = {snappy=3,flammable=2,attached_node=1,not_in_creative_inventory=1},
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16},
|
||||
},
|
||||
drop = "ferns:fern_01",
|
||||
on_place = node_on_place
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- Init
|
||||
-----------------------------------------------------------------------------------------------
|
||||
|
||||
if default_ferns then
|
||||
for i = 1, 3 do
|
||||
nodenames[i] = "ferns:fern_"..string.format("%02d", i)
|
||||
end
|
||||
else
|
||||
create_nodes()
|
||||
end
|
||||
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- Spawning
|
||||
-----------------------------------------------------------------------------------------------
|
||||
|
||||
if abstract_ferns.config.lady_ferns_near_tree == true then
|
||||
biome_lib.register_on_generate({ -- near trees (woodlands)
|
||||
surface = {
|
||||
"default:dirt_with_grass",
|
||||
"default:mossycobble",
|
||||
"default:desert_sand",
|
||||
"default:sand",
|
||||
"default:jungletree",
|
||||
"stoneage:grass_with_silex",
|
||||
"sumpf:sumpf"
|
||||
},
|
||||
max_count = 30,
|
||||
rarity = 62,--63,
|
||||
min_elevation = 1, -- above sea level
|
||||
near_nodes = {"group:tree"},
|
||||
near_nodes_size = 3,--4,
|
||||
near_nodes_vertical = 2,--3,
|
||||
near_nodes_count = 1,
|
||||
plantlife_limit = -0.9,
|
||||
humidity_max = -1.0,
|
||||
humidity_min = 0.4,
|
||||
temp_max = -0.5, -- 55 °C (too hot?)
|
||||
temp_min = 0.75, -- -12 °C
|
||||
random_facedir = { 0, 179 },
|
||||
},
|
||||
nodenames
|
||||
)
|
||||
end
|
||||
|
||||
if abstract_ferns.config.lady_ferns_near_rock == true then
|
||||
biome_lib.register_on_generate({ -- near stone (mountains)
|
||||
surface = {
|
||||
"default:dirt_with_grass",
|
||||
"default:mossycobble",
|
||||
"group:falling_node",
|
||||
--"default:jungletree",
|
||||
"stoneage:grass_with_silex",
|
||||
"sumpf:sumpf"
|
||||
},
|
||||
max_count = 35,
|
||||
rarity = 40,
|
||||
min_elevation = 1, -- above sea level
|
||||
near_nodes = {"group:stone"},
|
||||
near_nodes_size = 1,
|
||||
near_nodes_count = 16,
|
||||
plantlife_limit = -0.9,
|
||||
humidity_max = -1.0,
|
||||
humidity_min = 0.4,
|
||||
temp_max = -0.5, -- 55 °C (too hot?)
|
||||
temp_min = 0.75, -- -12 °C
|
||||
random_facedir = { 0, 179 },
|
||||
},
|
||||
nodenames
|
||||
)
|
||||
end
|
||||
|
||||
if abstract_ferns.config.lady_ferns_near_ores == true then -- this one causes a huge fps drop
|
||||
biome_lib.register_on_generate({ -- near ores (potential mining sites)
|
||||
surface = {
|
||||
"default:dirt_with_grass",
|
||||
"default:mossycobble",
|
||||
"default:stone_with_coal",
|
||||
"default:stone_with_iron",
|
||||
"default:stone_with_tin", -- minetest >= 0.4.16
|
||||
"moreores:mineral_tin",
|
||||
"moreores:mineral_silver",
|
||||
"sumpf:sumpf"
|
||||
},
|
||||
max_count = 1200,--1600, -- maybe too much? :D
|
||||
rarity = 25,--15,
|
||||
min_elevation = 1, -- above sea level
|
||||
near_nodes = {
|
||||
"default:stone_with_iron",
|
||||
--"default:stone_with_copper",
|
||||
--"default:stone_with_mese",
|
||||
--"default:stone_with_gold",
|
||||
--"default:stone_with_diamond",
|
||||
"default:stone_with_tin", -- minetest >= 0.4.16
|
||||
"moreores:mineral_tin",
|
||||
"moreores:mineral_silver"
|
||||
--"moreores:mineral_mithril"
|
||||
},
|
||||
near_nodes_size = 2,
|
||||
near_nodes_vertical = 4,--5,--6,
|
||||
near_nodes_count = 2,--3,
|
||||
plantlife_limit = -0.9,
|
||||
humidity_max = -1.0,
|
||||
humidity_min = 0.4,
|
||||
temp_max = -0.5, -- 55 °C (too hot?)
|
||||
temp_min = 0.75, -- -12 °C
|
||||
random_facedir = { 0, 179 },
|
||||
},
|
||||
nodenames
|
||||
)
|
||||
end
|
||||
|
||||
if abstract_ferns.config.lady_ferns_in_groups == true then -- this one is meant as a replacement of Ferns_near_Ores
|
||||
biome_lib.register_on_generate({
|
||||
surface = {
|
||||
"default:dirt_with_grass",
|
||||
"default:mossycobble",
|
||||
"default:stone_with_coal",
|
||||
"default:stone_with_iron",
|
||||
"default:stone_with_tin", -- minetest >= 0.4.16
|
||||
"moreores:mineral_tin",
|
||||
"moreores:mineral_silver",
|
||||
"sumpf:sumpf"
|
||||
},
|
||||
max_count = 70,
|
||||
rarity = 25,--15,
|
||||
min_elevation = 1, -- above sea level
|
||||
near_nodes = {
|
||||
"default:stone"
|
||||
},
|
||||
near_nodes_size = 2,
|
||||
near_nodes_vertical = 2,--6,
|
||||
near_nodes_count = 3,
|
||||
plantlife_limit = -0.9,
|
||||
humidity_max = -1.0,
|
||||
humidity_min = 0.4,
|
||||
temp_max = -0.5, -- 55 °C (too hot?)
|
||||
temp_min = 0.75, -- -12 °C
|
||||
random_facedir = { 0, 179 },
|
||||
},
|
||||
nodenames
|
||||
)
|
||||
end
|
351
mods/plantlife_modpack/ferns/gianttreefern.lua
Normal file
|
@ -0,0 +1,351 @@
|
|||
-----------------------------------------------------------------------------------------------
|
||||
-- Ferns - Giant Tree Fern 0.1.1
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- by Mossmanikin
|
||||
-- Contains code from: biome_lib
|
||||
-- Looked at code from: 4seasons, default
|
||||
-- Supports: vines
|
||||
-----------------------------------------------------------------------------------------------
|
||||
|
||||
assert(abstract_ferns.config.enable_giant_treefern == true)
|
||||
|
||||
-- support for i18n
|
||||
local S = minetest.get_translator("ferns")
|
||||
-- lot of code, lot to load
|
||||
|
||||
function abstract_ferns.can_grow_giant_tree_fern(pos)
|
||||
local node_name = minetest.get_node(pos).name
|
||||
if node_name ~= "air" and node_name ~= "ferns:sapling_giant_tree_fern" and node_name ~= "default:junglegrass" then
|
||||
return false
|
||||
end
|
||||
|
||||
local below_name = minetest.get_node(vector.new(pos.x, pos.y - 1, pos.z)).name
|
||||
if minetest.get_item_group(below_name, "soil") == 0 and minetest.get_item_group(below_name, "sand") == 0 then
|
||||
return false
|
||||
end
|
||||
|
||||
local light = minetest.get_node_light(pos, 0.5)
|
||||
if light <= 8 then
|
||||
return false
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
abstract_ferns.grow_giant_tree_fern = function(pos)
|
||||
local pos_aux = {x = pos.x, y = pos.y + 1, z = pos.z}
|
||||
local name = minetest.get_node(pos_aux).name
|
||||
if name ~= "air" and name ~= "ferns:sapling_giant_tree_fern"
|
||||
and name ~= "default:junglegrass" then
|
||||
return
|
||||
end
|
||||
|
||||
local size = math.random(12,16) -- min of range must be >= 4
|
||||
|
||||
local leafchecks = {
|
||||
{
|
||||
direction = 3,
|
||||
positions = {
|
||||
{x = pos.x + 1, y = pos.y + size - 1, z = pos.z },
|
||||
{x = pos.x + 2, y = pos.y + size , z = pos.z },
|
||||
{x = pos.x + 3, y = pos.y + size - 1, z = pos.z },
|
||||
{x = pos.x + 4, y = pos.y + size - 2, z = pos.z }
|
||||
}
|
||||
},
|
||||
{
|
||||
direction = 1,
|
||||
positions = {
|
||||
{x = pos.x - 1, y = pos.y + size - 1, z = pos.z },
|
||||
{x = pos.x - 2, y = pos.y + size, z = pos.z },
|
||||
{x = pos.x - 3, y = pos.y + size - 1, z = pos.z },
|
||||
{x = pos.x - 4, y = pos.y + size - 2, z = pos.z }
|
||||
}
|
||||
},
|
||||
{
|
||||
direction = 2,
|
||||
positions = {
|
||||
{x = pos.x , y = pos.y + size - 1, z = pos.z + 1},
|
||||
{x = pos.x , y = pos.y + size , z = pos.z + 2},
|
||||
{x = pos.x , y = pos.y + size - 1, z = pos.z + 3},
|
||||
{x = pos.x , y = pos.y + size - 2, z = pos.z + 4}
|
||||
}
|
||||
},
|
||||
{
|
||||
direction = 0,
|
||||
positions = {
|
||||
{x = pos.x , y = pos.y + size - 1, z = pos.z - 1},
|
||||
{x = pos.x , y = pos.y + size , z = pos.z - 2},
|
||||
{x = pos.x , y = pos.y + size - 1, z = pos.z - 3},
|
||||
{x = pos.x , y = pos.y + size - 2, z = pos.z - 4}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
local brk = false
|
||||
for i = 1, size-3 do
|
||||
pos_aux.y = pos.y + i
|
||||
local nodename = minetest.get_node(pos_aux).name
|
||||
if not (nodename == "air" or (i == 1 and nodename == "ferns:sapling_giant_tree_fern")) then
|
||||
brk = true
|
||||
break
|
||||
end
|
||||
minetest.swap_node({x = pos.x, y = pos.y + i, z = pos.z}, {name="ferns:fern_trunk_big"})
|
||||
end
|
||||
if not brk then
|
||||
minetest.swap_node({x = pos.x, y = pos.y + size-2, z = pos.z}, {name="ferns:fern_trunk_big_top"})
|
||||
minetest.swap_node({x = pos.x, y = pos.y + size-1, z = pos.z}, {name="ferns:tree_fern_leaves_giant"})
|
||||
|
||||
-- all the checking for air below is to prevent some ugly bugs (incomplete trunks of neighbouring trees), it's a bit slower, but worth the result
|
||||
|
||||
-- assert(#leafchecks == 4)
|
||||
for i = 1, 4 do
|
||||
local positions = leafchecks[i].positions
|
||||
local rot = leafchecks[i].direction
|
||||
local endpos = 4 -- If the loop below adds all intermediate leaves then the "terminating" leaf will be at positions[4]
|
||||
-- assert(#positions == 4)
|
||||
-- add leaves so long as the destination nodes are air
|
||||
for j = 1, 3 do
|
||||
if minetest.get_node(positions[j]).name == "air" then
|
||||
minetest.swap_node(positions[j], {name="ferns:tree_fern_leave_big"})
|
||||
else
|
||||
endpos = j
|
||||
break
|
||||
end
|
||||
end
|
||||
-- add the terminating leaf if required and possible
|
||||
if endpos == 4 and minetest.get_node(positions[endpos]).name == "air" then
|
||||
minetest.swap_node(positions[endpos], {name="ferns:tree_fern_leave_big_end", param2=rot})
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- GIANT TREE FERN LEAVES
|
||||
-----------------------------------------------------------------------------------------------
|
||||
minetest.register_node("ferns:tree_fern_leaves_giant", {
|
||||
description = S("Tree Fern Crown (Dicksonia)"),
|
||||
drawtype = "plantlike",
|
||||
visual_scale = math.sqrt(11),
|
||||
wield_scale = {x=0.175, y=0.175, z=0.175},
|
||||
paramtype = "light",
|
||||
tiles = {"ferns_fern_tree_giant.png"},
|
||||
inventory_image = "ferns_fern_tree.png",
|
||||
walkable = false,
|
||||
groups = {
|
||||
snappy=3,
|
||||
flammable=2,
|
||||
attached_node=1,
|
||||
not_in_creative_inventory=1
|
||||
},
|
||||
is_ground_content = false,
|
||||
drop = {
|
||||
max_items = 2,
|
||||
items = {
|
||||
{
|
||||
-- occasionally, drop a second sapling instead of leaves
|
||||
-- (extra saplings can also be obtained by replanting and
|
||||
-- reharvesting leaves)
|
||||
items = {"ferns:sapling_giant_tree_fern"},
|
||||
rarity = 10,
|
||||
},
|
||||
{
|
||||
items = {"ferns:sapling_giant_tree_fern"},
|
||||
},
|
||||
{
|
||||
items = {"ferns:tree_fern_leaves_giant"},
|
||||
}
|
||||
}
|
||||
},
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16},
|
||||
},
|
||||
})
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- GIANT TREE FERN LEAVE PART
|
||||
-----------------------------------------------------------------------------------------------
|
||||
minetest.register_node("ferns:tree_fern_leave_big", {
|
||||
description = S("Giant Tree Fern Leaves"),
|
||||
drawtype = "raillike",
|
||||
paramtype = "light",
|
||||
tiles = {
|
||||
"ferns_tree_fern_leave_big.png",
|
||||
},
|
||||
walkable = false,
|
||||
groups = {
|
||||
snappy=3,
|
||||
flammable=2,
|
||||
attached_node=1,
|
||||
not_in_creative_inventory=1
|
||||
},
|
||||
is_ground_content = false,
|
||||
drop = "",
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
after_destruct = function(pos,oldnode)
|
||||
for _, d in pairs({{x=-1,z=0},{x=1,z=0},{x=0,z=-1},{x=0,z=1}}) do
|
||||
local node = minetest.get_node({x=pos.x+d.x,y=pos.y+1,z=pos.z+d.z})
|
||||
if node.name == "ferns:tree_fern_leave_big" then
|
||||
minetest.dig_node({x=pos.x+d.x,y=pos.y+1,z=pos.z+d.z})
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- GIANT TREE FERN LEAVE END
|
||||
-----------------------------------------------------------------------------------------------
|
||||
minetest.register_node("ferns:tree_fern_leave_big_end", {
|
||||
description = S("Giant Tree Fern Leave End"),
|
||||
drawtype = "nodebox",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
tiles = { "ferns_tree_fern_leave_big_end.png" },
|
||||
use_texture_alpha = "clip",
|
||||
walkable = false,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
-- {left, bottom, front, right, top, back }
|
||||
fixed = {-1/2, -1/2, 1/2, 1/2, 33/64, 1/2},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-1/2, -1/2, 1/2, 1/2, 33/64, 1/2},
|
||||
},
|
||||
groups = {
|
||||
snappy=3,
|
||||
flammable=2,
|
||||
attached_node=1,
|
||||
not_in_creative_inventory=1
|
||||
},
|
||||
is_ground_content = false,
|
||||
drop = "",
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
})
|
||||
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- GIANT TREE FERN TRUNK TOP
|
||||
-----------------------------------------------------------------------------------------------
|
||||
minetest.register_node("ferns:fern_trunk_big_top", {
|
||||
description = S("Giant Fern Trunk"),
|
||||
drawtype = "nodebox",
|
||||
paramtype = "light",
|
||||
tiles = {
|
||||
"ferns_fern_trunk_big_top.png^ferns_tree_fern_leave_big_cross.png",
|
||||
"ferns_fern_trunk_big_top.png^ferns_tree_fern_leave_big_cross.png",
|
||||
"ferns_fern_trunk_big.png"
|
||||
},
|
||||
use_texture_alpha = "clip",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
-- {left, bottom, front, right, top, back }
|
||||
fixed = {
|
||||
{-1/2, 33/64, -1/2, 1/2, 33/64, 1/2},
|
||||
{-1/4, -1/2, -1/4, 1/4, 1/2, 1/4},
|
||||
}
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4},
|
||||
},
|
||||
groups = {
|
||||
tree=1,
|
||||
choppy=2,
|
||||
oddly_breakable_by_hand=2,
|
||||
flammable=3,
|
||||
wood=1,
|
||||
not_in_creative_inventory=1,
|
||||
leafdecay=3 -- to support vines
|
||||
},
|
||||
is_ground_content = false,
|
||||
drop = "ferns:fern_trunk_big",
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
})
|
||||
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- GIANT TREE FERN TRUNK
|
||||
-----------------------------------------------------------------------------------------------
|
||||
minetest.register_node("ferns:fern_trunk_big", {
|
||||
description = S("Giant Fern Trunk"),
|
||||
drawtype = "nodebox",
|
||||
paramtype = "light",
|
||||
tiles = {
|
||||
"ferns_fern_trunk_big_top.png",
|
||||
"ferns_fern_trunk_big_top.png",
|
||||
"ferns_fern_trunk_big.png"
|
||||
},
|
||||
use_texture_alpha = "clip",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4},
|
||||
},
|
||||
groups = {tree=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
|
||||
is_ground_content = false,
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
after_destruct = function(pos,oldnode)
|
||||
local node = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z})
|
||||
if node.name == "ferns:fern_trunk_big" or node.name == "ferns:fern_trunk_big_top" then
|
||||
minetest.dig_node({x=pos.x,y=pos.y+1,z=pos.z})
|
||||
minetest.add_item(pos,"ferns:fern_trunk_big")
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- GIANT TREE FERN SAPLING
|
||||
-----------------------------------------------------------------------------------------------
|
||||
minetest.register_node("ferns:sapling_giant_tree_fern", {
|
||||
description = S("Giant Tree Fern Sapling"),
|
||||
drawtype = "plantlike",
|
||||
paramtype = "light",
|
||||
tiles = {"ferns_sapling_tree_fern_giant.png"},
|
||||
inventory_image = "ferns_sapling_tree_fern_giant.png",
|
||||
walkable = false,
|
||||
groups = {snappy=3,flammable=2,flora=1,attached_node=1,sapling=1},
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16},
|
||||
},
|
||||
})
|
||||
|
||||
-- abm
|
||||
minetest.register_abm({
|
||||
nodenames = "ferns:sapling_giant_tree_fern",
|
||||
interval = 1000,
|
||||
chance = 4,
|
||||
action = function(pos, node, _, _)
|
||||
if abstract_ferns.can_grow_giant_tree_fern(pos) then
|
||||
abstract_ferns.grow_giant_tree_fern({x = pos.x, y = pos.y-1, z = pos.z})
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- GENERATE GIANT TREE FERN
|
||||
-----------------------------------------------------------------------------------------------
|
||||
|
||||
minetest.register_decoration({
|
||||
deco_type = "schematic",
|
||||
place_on = {
|
||||
"ethereal:grove_dirt",
|
||||
"default:dirt_with_rainforest_litter",
|
||||
"bambooforest:dirt_with_bamboo",
|
||||
},
|
||||
sidelen = 80,
|
||||
fill_ratio = 0.00045,
|
||||
biomes = {
|
||||
"rainforest",
|
||||
"grove",
|
||||
},
|
||||
y_min = 3,
|
||||
y_max = 31000,
|
||||
place_offset_y = 1,
|
||||
schematic = minetest.get_modpath("ferns") .. "/schematics/tree_fern.mts",
|
||||
flags = "place_center_x, place_center_z,force_placement",
|
||||
})
|
94
mods/plantlife_modpack/ferns/horsetail.lua
Normal file
|
@ -0,0 +1,94 @@
|
|||
-----------------------------------------------------------------------------------------------
|
||||
-- Archae Plantae - Horsetail 0.0.5
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- by Mossmanikin
|
||||
-- Contains code from: biome_lib
|
||||
-- Looked at code from: default, flowers, trees
|
||||
-- Dependencies: biome_lib
|
||||
-- Supports: dryplants, stoneage, sumpf
|
||||
-----------------------------------------------------------------------------------------------
|
||||
|
||||
assert(abstract_ferns.config.enable_horsetails == true)
|
||||
|
||||
-- support for i18n
|
||||
local S = minetest.get_translator("ferns")
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- HORSETAIL (EQUISETUM)
|
||||
-----------------------------------------------------------------------------------------------
|
||||
|
||||
local node_names = {}
|
||||
|
||||
local function create_nodes()
|
||||
local selection_boxes = {
|
||||
{ -0.15, -1/2, -0.15, 0.15, -1/16, 0.15 },
|
||||
{ -0.15, -1/2, -0.15, 0.15, 1/16, 0.15 },
|
||||
{ -0.15, -1/2, -0.15, 0.15, 4/16, 0.15 },
|
||||
{ -0.15, -1/2, -0.15, 0.15, 7/16, 0.15 },
|
||||
}
|
||||
|
||||
for i = 1, 4 do
|
||||
local node_name = "ferns:horsetail_" .. string.format("%02d", i)
|
||||
local node_img = "ferns_horsetail_" .. string.format("%02d", i) .. ".png"
|
||||
local node_desc
|
||||
local node_on_use = nil
|
||||
local node_drop = "ferns:horsetail_04"
|
||||
|
||||
if i == 1 then
|
||||
node_desc = S("Young Horsetail (Equisetum) @1", 1)
|
||||
node_on_use = minetest.item_eat(1) -- young ones edible https://en.wikipedia.org/wiki/Equisetum
|
||||
node_drop = node_name
|
||||
elseif i == 4 then
|
||||
node_desc = S("Horsetail (Equisetum)")
|
||||
else
|
||||
node_desc = S("Horsetail (Equisetum) @1", i)
|
||||
end
|
||||
|
||||
node_names[i] = node_name
|
||||
|
||||
minetest.register_node(node_name, {
|
||||
description = node_desc,
|
||||
drawtype = "plantlike",
|
||||
paramtype = "light",
|
||||
tiles = { node_img },
|
||||
inventory_image = node_img,
|
||||
walkable = false,
|
||||
buildable_to = true,
|
||||
groups = {snappy=3,flammable=2,attached_node=1,horsetail=1},
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = selection_boxes[i],
|
||||
},
|
||||
on_use = node_on_use,
|
||||
drop = node_drop,
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- Init
|
||||
-----------------------------------------------------------------------------------------------
|
||||
|
||||
create_nodes()
|
||||
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- Generating
|
||||
-----------------------------------------------------------------------------------------------
|
||||
|
||||
minetest.register_decoration({
|
||||
deco_type = "simple",
|
||||
place_on = {
|
||||
"default:dirt_with_grass",
|
||||
"default:coniferous_litter",
|
||||
},
|
||||
sidelen = 80,
|
||||
fill_ratio = 0.0011,
|
||||
y_min = 1,
|
||||
y_max = 31000,
|
||||
decoration = {
|
||||
"ferns:horsetail_01",
|
||||
"ferns:horsetail_02",
|
||||
"ferns:horsetail_03",
|
||||
"ferns:horsetail_04",
|
||||
}
|
||||
})
|
21
mods/plantlife_modpack/ferns/init.lua
Normal file
|
@ -0,0 +1,21 @@
|
|||
abstract_ferns = {}
|
||||
|
||||
dofile(minetest.get_modpath("ferns").."/settings.lua")
|
||||
|
||||
if abstract_ferns.config.enable_lady_fern == true then
|
||||
dofile(minetest.get_modpath("ferns").."/fern.lua")
|
||||
end
|
||||
|
||||
if abstract_ferns.config.enable_horsetails == true then
|
||||
dofile(minetest.get_modpath("ferns").."/horsetail.lua")
|
||||
end
|
||||
|
||||
if abstract_ferns.config.enable_treefern == true then
|
||||
dofile(minetest.get_modpath("ferns").."/treefern.lua")
|
||||
end
|
||||
|
||||
if abstract_ferns.config.enable_giant_treefern == true then
|
||||
dofile(minetest.get_modpath("ferns").."/gianttreefern.lua")
|
||||
end
|
||||
|
||||
dofile(minetest.get_modpath("ferns").."/crafting.lua")
|
16
mods/plantlife_modpack/ferns/locale/ferns.de.tr
Normal file
|
@ -0,0 +1,16 @@
|
|||
# textdomain: ferns
|
||||
Fiddlehead=Geigenkopf
|
||||
Roasted Fiddlehead=Gerösteter Geigenkopf
|
||||
Fern Tuber=Farnknolle
|
||||
Roasted Fern Tuber=Geröstete Farnknolle
|
||||
Lady-fern (Athyrium)=Frauenfarn (Athyrium)
|
||||
Giant Tree Fern Leaves=Riesige Baumfarnblätter
|
||||
Giant Tree Fern Leave End=Riesiges Baumfarnblattende
|
||||
Giant Fern Trunk=Riesiger Baumfarnstamm
|
||||
Giant Tree Fern Sapling=Riesiger Baumfarnsetzling
|
||||
Tree Fern Crown (Dicksonia)=Baumfarnkrone (Dicksonia)
|
||||
Young Horsetail (Equisetum) @1=Junger Schachtelhalm (Equisetum) @1
|
||||
Horsetail (Equisetum)=Schachtelhalm (Equisetum)
|
||||
Horsetail (Equisetum) @1= Schachtelhalm (Equisetum) @1
|
||||
Fern Trunk (Dicksonia)=Farnstamm (Dicksonia)
|
||||
Tree Fern Sapling (Dicksonia)=Baumfarnsetzling (Dicksonia)
|
16
mods/plantlife_modpack/ferns/locale/ferns.eo.tr
Normal file
|
@ -0,0 +1,16 @@
|
|||
# textdomain: ferns
|
||||
Fiddlehead=Filika Supro
|
||||
Roasted Fiddlehead=Rostita Filika Supro
|
||||
Fern Tuber=Filika Tubero
|
||||
Roasted Fern Tuber=Rostita Filika Tubero
|
||||
Lady-fern (Athyrium)=Afiriumo (Athyrium)
|
||||
Giant Tree Fern Leaves=Folioj de Giganta Arba Filiko
|
||||
Giant Tree Fern Leave End=Folifino de Giganta Arba Filiko
|
||||
Giant Fern Trunk=Trunko de Giganta Arba Filiko
|
||||
Giant Tree Fern Sapling=Arbido de Giganta Arba Filiko
|
||||
Tree Fern Crown (Dicksonia)=Krono de Arba Filiko
|
||||
Young Horsetail (Equisetum) @1=Juna Ekvizeto (Equisetum) @1
|
||||
Horsetail (Equisetum)=Ekvizeto (Equisetum)
|
||||
Horsetail (Equisetum) @1=Ekvizeto (Equisetum) @1
|
||||
Fern Trunk (Dicksonia)=Trunko de Arba Filiko (Dicksonia)
|
||||
Tree Fern Sapling (Dicksonia)=Arbido de Arba Filiko (Dicksonia)
|
16
mods/plantlife_modpack/ferns/locale/ferns.fr.tr
Normal file
|
@ -0,0 +1,16 @@
|
|||
# textdomain: ferns
|
||||
Fiddlehead=Crosse de fougère
|
||||
Roasted Fiddlehead=Crosse de fougère rôtie
|
||||
Fern Tuber=Tubercule de fougère
|
||||
Roasted Fern Tuber=Tubercule de fougère rôti
|
||||
Lady-fern (Athyrium)=Fougère (Athyrium)
|
||||
Giant Tree Fern Leaves=Feuilles de fougère géante
|
||||
Giant Tree Fern Leave End=Feuilles de fougère géante (extrémité)
|
||||
Giant Fern Trunk=Tronc de fougère géante
|
||||
Giant Tree Fern Sapling=Pousse de fougère géante
|
||||
Tree Fern Crown (Dicksonia)=Fougère en couronne (Dicksonia)
|
||||
Young Horsetail (Equisetum) @1=Pousse de prêle (Equisetum) @1
|
||||
Horsetail (Equisetum)=Prêle (Equisetum)
|
||||
Horsetail (Equisetum) @1=Prêle (Equisetum) @1
|
||||
Fern Trunk (Dicksonia)=Tronc de fougère en couronne (Dicksonia)
|
||||
Tree Fern Sapling (Dicksonia)=Pousse de fougère en couronne (Dicksonia)
|
16
mods/plantlife_modpack/ferns/locale/template.txt
Normal file
|
@ -0,0 +1,16 @@
|
|||
# textdomain: ferns
|
||||
Fiddlehead=
|
||||
Roasted Fiddlehead=
|
||||
Fern Tuber=
|
||||
Roasted Fern Tuber=
|
||||
Lady-fern (Athyrium)=
|
||||
Giant Tree Fern Leaves=
|
||||
Giant Tree Fern Leave End=
|
||||
Giant Fern Trunk=
|
||||
Giant Tree Fern Sapling=
|
||||
Tree Fern Crown (Dicksonia)=
|
||||
Young Horsetail (Equisetum) @1=
|
||||
Horsetail (Equisetum)=
|
||||
Horsetail (Equisetum) @1=
|
||||
Fern Trunk (Dicksonia)=
|
||||
Tree Fern Sapling (Dicksonia)=
|
2
mods/plantlife_modpack/ferns/mod.conf
Normal file
|
@ -0,0 +1,2 @@
|
|||
name = ferns
|
||||
depends = default, abdecor
|
BIN
mods/plantlife_modpack/ferns/schematics/tree_fern.mts
Normal file
43
mods/plantlife_modpack/ferns/settings.lua
Normal file
|
@ -0,0 +1,43 @@
|
|||
-- In case you don't wanna have errors:
|
||||
|
||||
-- Only change what's behind a "=" (or "--").
|
||||
-- Don't use caps (behind a "=").
|
||||
|
||||
-- If there's a "false" (behind a "=") you can change it to "true" (and the other way around).
|
||||
-- Spelling is important.
|
||||
-- If "true" or "false" is necessary as setting, everything(!) which is not spelled "true" will be read as if it were "false" (even "1", "True"...)
|
||||
|
||||
-- If you wanna comment something (for example to remember the default value), you can do this by putting "--" in front of the comment.
|
||||
-- You can put "--" at the end of a line with "=" in it, or at the beginning of an empty/new line (minetest will ignore what's behind it then).
|
||||
-- But don't put "--" in front of a line with "=" in it (or else minetest will ignore the setting and you might get an error).
|
||||
|
||||
-- If something is still unclear, don't hesitate to post your question @ https://forum.minetest.net/viewtopic.php?id=6921
|
||||
|
||||
abstract_ferns.config = {}
|
||||
|
||||
-- Which plants should generate/spawn?
|
||||
abstract_ferns.config.enable_lady_fern = false
|
||||
abstract_ferns.config.enable_horsetails = true
|
||||
abstract_ferns.config.enable_treefern = false
|
||||
abstract_ferns.config.enable_giant_treefern = true
|
||||
|
||||
-- Where should they generate/spawn? (if they generate/spawn)
|
||||
--
|
||||
-- Lady-Fern
|
||||
abstract_ferns.config.lady_ferns_near_tree = true
|
||||
abstract_ferns.config.lady_ferns_near_rock = true
|
||||
abstract_ferns.config.lady_ferns_near_ores = true -- if there's a bunch of ferns there's ores nearby, this one causes a huge fps drop
|
||||
abstract_ferns.config.lady_ferns_in_groups = false -- this one is meant as a replacement of Ferns_near_Ores: ferns tend to generate in groups, less fps drop, no hint for nearby ores
|
||||
--
|
||||
-- Horsetails
|
||||
abstract_ferns.config.enable_horsetails_spawning = false -- horsetails will grow in already explored areas, over time, near water or gravel
|
||||
abstract_ferns.config.enable_horsetails_on_grass = true -- on dirt with grass and swamp (sumpf mod)
|
||||
abstract_ferns.config.enable_horsetails_on_stones = true -- on gravel, mossy cobble and silex (stoneage mod)
|
||||
--
|
||||
-- Tree_Fern
|
||||
abstract_ferns.config.enable_treeferns_in_jungle = true
|
||||
abstract_ferns.config.enable_treeferns_in_oases = true -- for oases and tropical beaches
|
||||
--
|
||||
-- Giant_Tree_Fern
|
||||
abstract_ferns.config.enable_giant_treeferns_in_jungle = true
|
||||
abstract_ferns.config.enable_giant_treeferns_in_oases = true -- for oases and tropical beaches
|
BIN
mods/plantlife_modpack/ferns/textures/ferns_5.png
Normal file
After Width: | Height: | Size: 550 B |
BIN
mods/plantlife_modpack/ferns/textures/ferns_6.png
Normal file
After Width: | Height: | Size: 666 B |
BIN
mods/plantlife_modpack/ferns/textures/ferns_7.png
Normal file
After Width: | Height: | Size: 669 B |
BIN
mods/plantlife_modpack/ferns/textures/ferns_8.png
Normal file
After Width: | Height: | Size: 510 B |
BIN
mods/plantlife_modpack/ferns/textures/ferns_fern.png
Normal file
After Width: | Height: | Size: 362 B |
BIN
mods/plantlife_modpack/ferns/textures/ferns_fern_big.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
mods/plantlife_modpack/ferns/textures/ferns_fern_mid.png
Normal file
After Width: | Height: | Size: 699 B |
BIN
mods/plantlife_modpack/ferns/textures/ferns_fern_tree.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
mods/plantlife_modpack/ferns/textures/ferns_fern_tree_giant.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
mods/plantlife_modpack/ferns/textures/ferns_fern_tree_inv.png
Normal file
After Width: | Height: | Size: 391 B |
BIN
mods/plantlife_modpack/ferns/textures/ferns_fern_tree_tl.png
Normal file
After Width: | Height: | Size: 264 B |
BIN
mods/plantlife_modpack/ferns/textures/ferns_fern_tree_tr.png
Normal file
After Width: | Height: | Size: 256 B |
BIN
mods/plantlife_modpack/ferns/textures/ferns_fern_trunk.png
Normal file
After Width: | Height: | Size: 671 B |
BIN
mods/plantlife_modpack/ferns/textures/ferns_fern_trunk_big.png
Normal file
After Width: | Height: | Size: 684 B |
After Width: | Height: | Size: 398 B |
BIN
mods/plantlife_modpack/ferns/textures/ferns_fern_trunk_top.png
Normal file
After Width: | Height: | Size: 233 B |
BIN
mods/plantlife_modpack/ferns/textures/ferns_ferntuber.png
Normal file
After Width: | Height: | Size: 438 B |
After Width: | Height: | Size: 428 B |
BIN
mods/plantlife_modpack/ferns/textures/ferns_fiddlehead.png
Normal file
After Width: | Height: | Size: 327 B |
After Width: | Height: | Size: 521 B |
BIN
mods/plantlife_modpack/ferns/textures/ferns_horsetail_01.png
Normal file
After Width: | Height: | Size: 150 B |
BIN
mods/plantlife_modpack/ferns/textures/ferns_horsetail_02.png
Normal file
After Width: | Height: | Size: 166 B |
BIN
mods/plantlife_modpack/ferns/textures/ferns_horsetail_03.png
Normal file
After Width: | Height: | Size: 199 B |
BIN
mods/plantlife_modpack/ferns/textures/ferns_horsetail_04.png
Normal file
After Width: | Height: | Size: 224 B |
After Width: | Height: | Size: 168 B |
After Width: | Height: | Size: 224 B |
After Width: | Height: | Size: 560 B |
After Width: | Height: | Size: 724 B |
After Width: | Height: | Size: 456 B |
261
mods/plantlife_modpack/ferns/treefern.lua
Normal file
|
@ -0,0 +1,261 @@
|
|||
-----------------------------------------------------------------------------------------------
|
||||
-- Ferns - Tree Fern 0.1.1
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- by Mossmanikin
|
||||
-- Contains code from: biome_lib
|
||||
-- Looked at code from: default , trees
|
||||
-----------------------------------------------------------------------------------------------
|
||||
|
||||
-- support for i18n
|
||||
local S = minetest.get_translator("ferns")
|
||||
|
||||
assert(abstract_ferns.config.enable_treefern == true)
|
||||
|
||||
function abstract_ferns.can_grow_tree_fern(pos)
|
||||
local node_name = minetest.get_node(pos).name
|
||||
if node_name ~= "air" and node_name ~= "ferns:sapling_tree_fern" and node_name ~= "default:junglegrass" then
|
||||
return false
|
||||
end
|
||||
|
||||
local below_name = minetest.get_node(vector.new(pos.x, pos.y - 1, pos.z)).name
|
||||
if minetest.get_item_group(below_name, "soil") == 0 and minetest.get_item_group(below_name, "sand") == 0 then
|
||||
return false
|
||||
end
|
||||
|
||||
local light = minetest.get_node_light(pos, 0.5)
|
||||
if light <= 8 then
|
||||
return false
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
abstract_ferns.grow_tree_fern = function(pos)
|
||||
|
||||
local pos_aux = {x = pos.x, y = pos.y + 1, z = pos.z}
|
||||
local name = minetest.get_node(pos_aux).name
|
||||
if name ~= "air" and name ~= "ferns:sapling_tree_fern"
|
||||
and name ~= "default:junglegrass" then
|
||||
return
|
||||
end
|
||||
|
||||
local size = math.random(1, 4) + math.random(1, 4)
|
||||
if (size > 5) then
|
||||
size = 10 - size
|
||||
end
|
||||
size = size + 1
|
||||
local crown = ({ "ferns:tree_fern_leaves", "ferns:tree_fern_leaves_02" })[math.random(1, 2)]
|
||||
|
||||
local i = 1
|
||||
local brk = false
|
||||
while (i < size) do
|
||||
pos_aux.y = pos.y + i
|
||||
name = minetest.get_node(pos_aux).name
|
||||
if not (name == "air" or (i == 1 and name == "ferns:sapling_tree_fern")) then
|
||||
brk = true
|
||||
break
|
||||
end
|
||||
minetest.swap_node({x = pos.x, y = pos.y + i, z = pos.z}, { name = "ferns:fern_trunk" })
|
||||
i = i + 1
|
||||
end
|
||||
if not brk then
|
||||
minetest.swap_node({x = pos.x, y = pos.y + i - 1, z = pos.z}, { name = crown })
|
||||
end
|
||||
end
|
||||
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- TREE FERN LEAVES
|
||||
-----------------------------------------------------------------------------------------------
|
||||
|
||||
-- TODO: Both of these nodes look the same?
|
||||
|
||||
minetest.register_node("ferns:tree_fern_leaves", {
|
||||
description = S("Tree Fern Crown (Dicksonia)"),
|
||||
drawtype = "plantlike",
|
||||
visual_scale = math.sqrt(8),
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
--tiles = {"[combine:32x32:0,0=top_left.png:0,16=bottom_left.png:16,0=top_right.png:16,16=bottom_right.png"},
|
||||
tiles = {"ferns_fern_tree.png"},
|
||||
inventory_image = "ferns_fern_tree_inv.png",
|
||||
walkable = false,
|
||||
groups = {snappy=3,flammable=2,attached_node=1},
|
||||
is_ground_content = false,
|
||||
drop = {
|
||||
max_items = 2,
|
||||
items = {
|
||||
{
|
||||
-- occasionally, drop a second sapling instead of leaves
|
||||
-- (extra saplings can also be obtained by replanting and
|
||||
-- reharvesting leaves)
|
||||
items = {"ferns:sapling_tree_fern"},
|
||||
rarity = 10,
|
||||
},
|
||||
{
|
||||
items = {"ferns:sapling_tree_fern"},
|
||||
},
|
||||
{
|
||||
items = {"ferns:tree_fern_leaves"},
|
||||
}
|
||||
}
|
||||
},
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16},
|
||||
},
|
||||
})
|
||||
minetest.register_node("ferns:tree_fern_leaves_02", {
|
||||
drawtype = "plantlike",
|
||||
visual_scale = math.sqrt(8),
|
||||
paramtype = "light",
|
||||
tiles = {"ferns_fern_big.png"},
|
||||
walkable = false,
|
||||
groups = {snappy=3,flammable=2,attached_node=1,not_in_creative_inventory=1},
|
||||
is_ground_content = false,
|
||||
drop = {
|
||||
max_items = 2,
|
||||
items = {
|
||||
{
|
||||
-- occasionally, drop a second sapling instead of leaves
|
||||
-- (extra saplings can also be obtained by replanting and
|
||||
-- reharvesting leaves)
|
||||
items = {"ferns:sapling_tree_fern"},
|
||||
rarity = 10,
|
||||
},
|
||||
{
|
||||
items = {"ferns:sapling_tree_fern"},
|
||||
},
|
||||
{
|
||||
items = {"ferns:tree_fern_leaves"},
|
||||
}
|
||||
}
|
||||
},
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16},
|
||||
},
|
||||
})
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- FERN TRUNK
|
||||
-----------------------------------------------------------------------------------------------
|
||||
minetest.register_node("ferns:fern_trunk", {
|
||||
description = S("Fern Trunk (Dicksonia)"),
|
||||
drawtype = "nodebox",
|
||||
paramtype = "light",
|
||||
tiles = {
|
||||
"ferns_fern_trunk_top.png",
|
||||
"ferns_fern_trunk_top.png",
|
||||
"ferns_fern_trunk.png"
|
||||
},
|
||||
use_texture_alpha = "clip",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {-1/8, -1/2, -1/8, 1/8, 1/2, 1/8},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
|
||||
},
|
||||
groups = {tree=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
|
||||
is_ground_content = false,
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
after_destruct = function(pos,oldnode)
|
||||
local node = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z})
|
||||
if node.name == "ferns:fern_trunk" then
|
||||
minetest.dig_node({x=pos.x,y=pos.y+1,z=pos.z})
|
||||
minetest.add_item(pos,"ferns:fern_trunk")
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- TREE FERN SAPLING
|
||||
-----------------------------------------------------------------------------------------------
|
||||
minetest.register_node("ferns:sapling_tree_fern", {
|
||||
description = S("Tree Fern Sapling (Dicksonia)"),
|
||||
drawtype = "plantlike",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
tiles = {"ferns_sapling_tree_fern.png"},
|
||||
inventory_image = "ferns_sapling_tree_fern.png",
|
||||
walkable = false,
|
||||
groups = {snappy=3,flammable=2,flora=1,attached_node=1,sapling=1},
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16},
|
||||
},
|
||||
})
|
||||
-- abm
|
||||
minetest.register_abm({
|
||||
nodenames = "ferns:sapling_tree_fern",
|
||||
interval = 1000,
|
||||
chance = 4,
|
||||
action = function(pos, node, _, _)
|
||||
if abstract_ferns.can_grow_tree_fern(pos) then
|
||||
abstract_ferns.grow_tree_fern({x = pos.x, y = pos.y-1, z = pos.z})
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- GENERATE TREE FERN
|
||||
-----------------------------------------------------------------------------------------------
|
||||
|
||||
-- in jungles
|
||||
if abstract_ferns.config.enable_treeferns_in_jungle == true then
|
||||
biome_lib.register_on_generate({
|
||||
surface = {
|
||||
"default:dirt_with_grass",
|
||||
"default:dirt_with_rainforest_litter", -- minetest >= 0.4.16
|
||||
"default:sand",
|
||||
"default:desert_sand",
|
||||
},
|
||||
max_count = 35,--27,
|
||||
avoid_nodes = {"default:tree"},
|
||||
avoid_radius = 4,
|
||||
rarity = 50,
|
||||
seed_diff = 329,
|
||||
min_elevation = -10,
|
||||
near_nodes = {"default:jungletree"},
|
||||
near_nodes_size = 6,
|
||||
near_nodes_vertical = 2,--4,
|
||||
near_nodes_count = 1,
|
||||
plantlife_limit = -0.9,
|
||||
humidity_max = -1.0,
|
||||
humidity_min = 0.4,
|
||||
temp_max = -0.5,
|
||||
temp_min = 0.13,
|
||||
},
|
||||
abstract_ferns.grow_tree_fern
|
||||
)
|
||||
end
|
||||
|
||||
-- for oases & tropical beaches
|
||||
if abstract_ferns.config.enable_treeferns_in_oases == true then
|
||||
biome_lib.register_on_generate({
|
||||
surface = {
|
||||
"default:sand"--,
|
||||
--"default:desert_sand"
|
||||
},
|
||||
max_count = 35,
|
||||
rarity = 50,
|
||||
seed_diff = 329,
|
||||
neighbors = {"default:desert_sand"},
|
||||
ncount = 1,
|
||||
min_elevation = 1,
|
||||
near_nodes = {"default:water_source","default:river_water_source"},
|
||||
near_nodes_size = 2,
|
||||
near_nodes_vertical = 1,
|
||||
near_nodes_count = 1,
|
||||
plantlife_limit = -0.9,
|
||||
humidity_max = -1.0,
|
||||
humidity_min = 1.0,
|
||||
temp_max = -1.0,
|
||||
temp_min = 1.0,
|
||||
},
|
||||
abstract_ferns.grow_tree_fern
|
||||
)
|
||||
end
|
1
mods/plantlife_modpack/modpack.conf
Normal file
|
@ -0,0 +1 @@
|
|||
min_minetest_version = 5.3.0
|
239
mods/plantlife_modpack/pl_seaweed/init.lua
Normal file
|
@ -0,0 +1,239 @@
|
|||
-- support for i18n
|
||||
local S = minetest.get_translator("pl_seaweed")
|
||||
|
||||
local seaweed_rarity = minetest.settings:get("pl_seaweed.seaweed_rarity") or 0.06
|
||||
|
||||
local function get_ndef(name)
|
||||
return minetest.registered_nodes[name] or {}
|
||||
end
|
||||
|
||||
local algae_list = { {nil}, {2}, {3}, {4} }
|
||||
|
||||
for i in ipairs(algae_list) do
|
||||
local num = ""
|
||||
local algae_groups = {snappy = 3,flammable=2}
|
||||
|
||||
if algae_list[i][1] ~= nil then
|
||||
num = "_"..algae_list[i][1]
|
||||
algae_groups = { snappy = 3,flammable=2, not_in_creative_inventory=1 }
|
||||
end
|
||||
|
||||
minetest.register_node(":flowers:seaweed"..num, {
|
||||
description = S("Seaweed"),
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
"flowers_seaweed"..num..".png",
|
||||
"flowers_seaweed"..num..".png^[transformFY"
|
||||
},
|
||||
use_texture_alpha = "clip",
|
||||
inventory_image = "flowers_seaweed_2.png",
|
||||
wield_image = "flowers_seaweed_2.png",
|
||||
sunlight_propagates = true,
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
walkable = false,
|
||||
groups = algae_groups,
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = { -0.4, -0.5, -0.4, 0.4, -0.45, 0.4 },
|
||||
},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = { -0.5, -0.49, -0.5, 0.5, -0.49, 0.5 },
|
||||
},
|
||||
buildable_to = true,
|
||||
|
||||
liquids_pointable = true,
|
||||
drop = "flowers:seaweed",
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
if not itemstack or not placer or not pointed_thing then
|
||||
return
|
||||
end
|
||||
|
||||
local keys = placer:get_player_control()
|
||||
local pt = pointed_thing
|
||||
|
||||
local place_pos = nil
|
||||
local top_pos = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z}
|
||||
local under_node = minetest.get_node(pt.under)
|
||||
local above_node = minetest.get_node(pt.above)
|
||||
local top_node = minetest.get_node(top_pos)
|
||||
if get_ndef(under_node.name)["buildable_to"] then
|
||||
if under_node.name ~= "default:water_source" then
|
||||
place_pos = pt.under
|
||||
elseif top_node.name ~= "default:water_source" and get_ndef(top_node.name)["buildable_to"] then
|
||||
place_pos = top_pos
|
||||
else
|
||||
return
|
||||
end
|
||||
elseif get_ndef(above_node.name)["buildable_to"] then
|
||||
place_pos = pt.above
|
||||
end
|
||||
if not place_pos then return end -- something went wrong :P
|
||||
|
||||
local pname = placer:get_player_name()
|
||||
if not minetest.is_protected(place_pos, pname) then
|
||||
|
||||
local nodename = "default:cobble" -- :D
|
||||
|
||||
if not keys["sneak"] then
|
||||
--local node = minetest.get_node(pt.under)
|
||||
local seaweed = math.random(1,4)
|
||||
if seaweed == 1 then
|
||||
nodename = "flowers:seaweed"
|
||||
elseif seaweed == 2 then
|
||||
nodename = "flowers:seaweed_2"
|
||||
elseif seaweed == 3 then
|
||||
nodename = "flowers:seaweed_3"
|
||||
elseif seaweed == 4 then
|
||||
nodename = "flowers:seaweed_4"
|
||||
end
|
||||
minetest.swap_node(place_pos, {name = nodename, param2 = math.random(0,3) })
|
||||
else
|
||||
local fdir = minetest.dir_to_facedir(placer:get_look_dir())
|
||||
minetest.swap_node(place_pos, {name = "flowers:seaweed", param2 = fdir})
|
||||
end
|
||||
|
||||
if not minetest.is_creative_enabled(pname) then
|
||||
itemstack:take_item()
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
minetest.register_alias("flowers:flower_seaweed", "flowers:seaweed")
|
||||
minetest.register_alias("along_shore:pondscum_1", "flowers:seaweed")
|
||||
minetest.register_alias("along_shore:seaweed_1", "flowers:seaweed")
|
||||
minetest.register_alias("along_shore:seaweed_2", "flowers:seaweed_2")
|
||||
minetest.register_alias("along_shore:seaweed_3", "flowers:seaweed_3")
|
||||
minetest.register_alias("along_shore:seaweed_4", "flowers:seaweed_4")
|
||||
|
||||
-- Register seaweed decorations
|
||||
local warm_shores = {}
|
||||
for _,biome in ipairs(asuna.features.ocean.temperate) do
|
||||
table.insert(warm_shores,biome .. "_shore")
|
||||
end
|
||||
for _,biome in ipairs(asuna.features.ocean.tropical) do
|
||||
table.insert(warm_shores,biome .. "_shore")
|
||||
end
|
||||
|
||||
local seaweed_selector = {
|
||||
minetest.get_content_id("flowers:seaweed"),
|
||||
minetest.get_content_id("flowers:seaweed_2"),
|
||||
minetest.get_content_id("flowers:seaweed_3"),
|
||||
}
|
||||
|
||||
local cids = {
|
||||
air = minetest.get_content_id("air"),
|
||||
water = minetest.get_content_id("default:water_source"),
|
||||
}
|
||||
|
||||
abdecor.register_advanced_decoration("plantlife_seaweed",{
|
||||
target = {
|
||||
place_on = {
|
||||
"default:sand",
|
||||
"default:dirt_with_grass",
|
||||
"default:dirt_with_rainforest_litter",
|
||||
"livingjungle:jungleground",
|
||||
"livingjungle:leafyjungleground",
|
||||
"naturalbiomes:alderswamp_litter",
|
||||
},
|
||||
spawn_by = "default:water_source",
|
||||
num_spawn_by = 3,
|
||||
sidelen = 80,
|
||||
fill_ratio = 0.25,
|
||||
biomes = warm_shores,
|
||||
y_max = 1,
|
||||
y_min = 1,
|
||||
},
|
||||
fn = function(mapgen)
|
||||
-- Get provided values
|
||||
local va = mapgen.voxelarea
|
||||
local pos = va:index(mapgen.pos.x,mapgen.pos.y,mapgen.pos.z)
|
||||
local vdata = mapgen.data
|
||||
|
||||
-- Get stride values
|
||||
local ystride = va.ystride
|
||||
local zstride = va.zstride
|
||||
|
||||
-- Set mapgen node to air
|
||||
vdata[pos + ystride] = cids.air
|
||||
|
||||
-- List of potential open water spots where seaweed can be placed
|
||||
local open_water = {0,0,0,0}
|
||||
|
||||
-- Semi-pseudo-random number for how many nodes from shore to place seaweed
|
||||
local pcgr = PcgRandom(pos)
|
||||
local scan_limit
|
||||
|
||||
-- Scan -x for the furthest available open water
|
||||
scan_limit = pcgr:next(1,4) + 1
|
||||
for xscan = 1, scan_limit do
|
||||
local ipos = pos - xscan
|
||||
if vdata[ipos] == cids.water then
|
||||
open_water[1] = ipos + ystride
|
||||
else
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
-- Scan +x for the furthest available open water
|
||||
scan_limit = pcgr:next(1,4) + 1
|
||||
for xscan = 1, scan_limit do
|
||||
local ipos = pos + xscan
|
||||
if vdata[ipos] == cids.water then
|
||||
open_water[2] = ipos + ystride
|
||||
else
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
-- Scan -z for the furthest available open water
|
||||
scan_limit = pcgr:next(1,4) + 1
|
||||
for zscan = 1, scan_limit do
|
||||
local ipos = pos - zscan * zstride
|
||||
if vdata[ipos] == cids.water then
|
||||
open_water[3] = ipos + ystride
|
||||
else
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
-- Scan +z for the furthest available open water
|
||||
scan_limit = pcgr:next(1,4) + 1
|
||||
for zscan = 1, scan_limit do
|
||||
local ipos = pos + zscan * zstride
|
||||
if vdata[ipos] == cids.water then
|
||||
open_water[4] = ipos + ystride
|
||||
else
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
-- Iterate through open water and generate seaweed where possible
|
||||
for i = 1, 4 do
|
||||
local owpos = open_water[i]
|
||||
if owpos ~= 0 then -- valid open water
|
||||
vdata[owpos] = seaweed_selector[pcgr:next(1,3)]
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
deco_type = "simple",
|
||||
place_on = "default:sand",
|
||||
sidelen = 80,
|
||||
fill_ratio = 0.00275,
|
||||
biomes = warm_shores,
|
||||
y_max = 1,
|
||||
y_min = 1,
|
||||
decoration = {
|
||||
"flowers:seaweed_2",
|
||||
"flowers:seaweed_3",
|
||||
"flowers:seaweed_4",
|
||||
},
|
||||
})
|
|
@ -0,0 +1,2 @@
|
|||
# textdomain: pl_seaweed
|
||||
Seaweed=Seegras
|
|
@ -0,0 +1,2 @@
|
|||
# textdomain: pl_seaweed
|
||||
Seaweed=Algues
|
|
@ -0,0 +1,2 @@
|
|||
# textdomain: pl_seaweed
|
||||
Seaweed=Deniz yosunu
|
|
@ -0,0 +1,2 @@
|
|||
# textdomain: pl_seaweed
|
||||
Seaweed=Algo
|
|
@ -0,0 +1,2 @@
|
|||
# textdomain: pl_seaweed
|
||||
Seaweed=Algas marinas
|
2
mods/plantlife_modpack/pl_seaweed/locale/template.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
# textdomain: pl_seaweed
|
||||
Seaweed=
|
3
mods/plantlife_modpack/pl_seaweed/mod.conf
Normal file
|
@ -0,0 +1,3 @@
|
|||
name = pl_seaweed
|
||||
depends = default, abdecor
|
||||
optional_depends = farming, flowers
|
2
mods/plantlife_modpack/pl_seaweed/settingtypes.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
# Seaweed rarity (higher number -> higher probability)
|
||||
pl_seaweed.seaweed_rarity (Seaweed rarity) float 0.06 0.0001 1
|
BIN
mods/plantlife_modpack/pl_seaweed/textures/flowers_seaweed.png
Normal file
After Width: | Height: | Size: 234 B |
After Width: | Height: | Size: 222 B |
BIN
mods/plantlife_modpack/pl_seaweed/textures/flowers_seaweed_2.png
Normal file
After Width: | Height: | Size: 224 B |
BIN
mods/plantlife_modpack/pl_seaweed/textures/flowers_seaweed_3.png
Normal file
After Width: | Height: | Size: 226 B |
BIN
mods/plantlife_modpack/pl_seaweed/textures/flowers_seaweed_4.png
Normal file
After Width: | Height: | Size: 178 B |