From 2a2501c62608efb1c7e651abe90007215c17f5fe Mon Sep 17 00:00:00 2001 From: chmodsayshello Date: Tue, 28 Dec 2021 08:07:42 +0000 Subject: [PATCH 001/357] Initial commit --- LICENSE | 232 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 3 + 2 files changed, 235 insertions(+) create mode 100644 LICENSE create mode 100644 README.md diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..d41c0bd98 --- /dev/null +++ b/LICENSE @@ -0,0 +1,232 @@ +GNU GENERAL PUBLIC LICENSE +Version 3, 29 June 2007 + +Copyright © 2007 Free Software Foundation, Inc. + +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + +Preamble + +The GNU General Public License is a free, copyleft license for software and other kinds of works. + +The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. + +To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. + +For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. + +Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. + +For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. + +Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. + +Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. + +The precise terms and conditions for copying, distribution and modification follow. + +TERMS AND CONDITIONS + +0. Definitions. + +“This License” refers to version 3 of the GNU General Public License. + +“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. + +“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations. + +To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work. + +A “covered work” means either the unmodified Program or a work based on the Program. + +To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. + +To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. + +An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. + +1. Source Code. +The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work. + +A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. + +The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. + +The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. + +The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. + +The Corresponding Source for a work in source code form is that same work. + +2. Basic Permissions. +All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. + +3. Protecting Users' Legal Rights From Anti-Circumvention Law. +No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. + +When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. + +4. Conveying Verbatim Copies. +You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. + +5. Conveying Modified Source Versions. +You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”. + + c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. + +A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. + +6. Conveying Non-Source Forms. +You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: + + a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. + + d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. + +A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. + +“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. + +If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). + +The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. + +Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. + +7. Additional Terms. +“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or authors of the material; or + + e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. + +All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. + +8. Termination. +You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). + +However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. + +Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. + +Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. + +9. Acceptance Not Required for Having Copies. +You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. + +10. Automatic Licensing of Downstream Recipients. +Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. + +An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. + +11. Patents. +A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”. + +A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. + +In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. + +If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. + +A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. + +12. No Surrender of Others' Freedom. +If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. + +13. Use with the GNU Affero General Public License. +Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. + +14. Revised Versions of this License. +The Free Software Foundation may publish revised and/or new versions of the GNU 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 Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. + +If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. + +Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. + +15. Disclaimer of Warranty. +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +16. Limitation of Liability. +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +17. Interpretation of Sections 15 and 16. +If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. + +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + +If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”. + +You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . + +The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . diff --git a/README.md b/README.md new file mode 100644 index 000000000..5ccd49b7d --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# mcl_sus_stew + +This Mod adds Suspicious Stews for Mineclone (by chmood 000 -R / (chmodsayshello on git)) \ No newline at end of file -- 2.40.1 From 6b32c36a4f86a8164b0956d22c41733bdda3379a Mon Sep 17 00:00:00 2001 From: chmodsayshello Date: Tue, 28 Dec 2021 08:08:50 +0000 Subject: [PATCH 002/357] add texture --- textures/sus_stew.png | Bin 0 -> 445 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 textures/sus_stew.png diff --git a/textures/sus_stew.png b/textures/sus_stew.png new file mode 100644 index 0000000000000000000000000000000000000000..3580c35aa063a70d0a424ed2d8530b7bc0112f4b GIT binary patch literal 445 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP-J2RV{+2iMFZ43;IUY;(FAr`0KPTcR!#3<1=zuU#Y zx?W(SjHRTK$CV&~b$MvnO=4`ZCN{`MP=4q6d>zR&^b^cX8&2Tt_7_v)5Ve zQzf~l?TlquHjht3Uw2bk{o$P(8v}2tMH@1BJp1IdUqO(2_QeIW+uej~OC=jJ-b&3r z?HYc0LzhylFSEkiugUgys?ml(m4`SEv=qE_6hX2_=H|&%y^k=$911ArJ;Lu^uy!k l-@3BCKAZ3-@{jW#=IvYR%l7>9ISCAC22WQ%mvv4FO#rEFv3mdj literal 0 HcmV?d00001 -- 2.40.1 From 37adcc1ec5ae40230b66310de7266c627226719b Mon Sep 17 00:00:00 2001 From: chmodsayshello Date: Tue, 28 Dec 2021 08:09:58 +0000 Subject: [PATCH 003/357] credit to the creators of Pixel Perfection --- Note | 1 + 1 file changed, 1 insertion(+) create mode 100644 Note diff --git a/Note b/Note new file mode 100644 index 000000000..cbf07b1f8 --- /dev/null +++ b/Note @@ -0,0 +1 @@ +The texture for the suspicious stew is from the Minecraft resourcepack "Pixel Perfection Legacy" (https://www.curseforge.com/minecraft/texture-packs/pixel-perfection-legacy), wich is licensed under CC BY-SA 4.0 (Creative Commons license)! \ No newline at end of file -- 2.40.1 From fdd85e234b1919ad2263bb30fb690ae2a038d932 Mon Sep 17 00:00:00 2001 From: chmodsayshello Date: Tue, 28 Dec 2021 08:10:54 +0000 Subject: [PATCH 004/357] add the mod itself --- init.lua | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 init.lua diff --git a/init.lua b/init.lua new file mode 100644 index 000000000..e2634dd2e --- /dev/null +++ b/init.lua @@ -0,0 +1,110 @@ + +-- ____________________________ +--_________________________________________/ Variables & Functions \_________ + +local eat = minetest.item_eat(6, "mcl_core:bowl") --6 hunger points, player receives mcl_core:bowl after eating + + + +local function poison(itemstack, placer, pointed_thing) + mcl_potions.poison_func(placer, 1, 12) + return eat(itemstack, placer, pointed_thing) +end + +local function hunger(itemstack, placer, pointed_thing, player) + return eat(itemstack, placer, pointed_thing) +end + +local function jump_boost(itemstack, placer, pointed_thing) + mcl_potions.leaping_func(placer, 1, 6) + return eat(itemstack, placer, pointed_thing) +end + +local function regeneration(itemstack, placer, pointed_thing) + mcl_potions.regeneration_func(placer, 1, 8) + return eat(itemstack, placer, pointed_thing) +end + +local function night_vision(itemstack, placer, pointed_thing) + mcl_potions.night_vision_func(placer, 1, 5) + return eat(itemstack, placer, pointed_thing) +end + +-- ________________________ +--_________________________________________/ Item Regestration \_________________ +minetest.register_craftitem("mcl_sus_stew:poison_stew",{ + description = "Suspicious Stew", + inventory_image = "sus_stew.png", + stack_max = 1, + on_place = poison, + groups = { food = 2, eatable = 4, not_in_creative_inventory=1,}, +}) + +minetest.register_craftitem("mcl_sus_stew:hunger_stew",{ + description = "Suspicious Stew", + inventory_image = "sus_stew.png", + stack_max = 1, + on_place = hunger, + groups = { food = 2, eatable = 4, not_in_creative_inventory=1,}, +}) + +minetest.register_craftitem("mcl_sus_stew:jump_boost_stew",{ + description = "Suspicious Stew", + inventory_image = "sus_stew.png", + stack_max = 1, + on_place = jump_boost, + groups = { food = 2, eatable = 4, not_in_creative_inventory=1,}, +}) + +minetest.register_craftitem("mcl_sus_stew:regneration_stew",{ + description = "Suspicious Stew", + inventory_image = "sus_stew.png", + stack_max = 1, + on_place = regeneration, + groups = { food = 2, eatable = 4,}, --Only the regeneration Suspicious Stew is in the creative inventory so there are not 5 identical looking items in it +}) + +minetest.register_craftitem("mcl_sus_stew:night_vision_stew",{ + description = "Suspicious Stew", + inventory_image = "sus_stew.png", + stack_max = 1, + on_place = night_vision, + groups = { food = 2, eatable = 4, not_in_creative_inventory=1,}, +}) + +-- ____________________________ +--______________________________________/ Using mcl_hunger API \______________________ +mcl_hunger.register_food("mcl_sus_stew:hunger_stew",10, "", 3.5, 0, 100) -- Register it using mcl_hunger so i can use its poison feature + +-- ______________ +--_________________________________________/ Crafts \________________________________ + +minetest.register_craft({ + output = "mcl_sus_stew:poison_stew", + recipe = { {"mcl_mushrooms:mushroom_red", "mcl_mushrooms:mushroom_brown"}, {"mcl_core:bowl", "mcl_flowers:tulip_white"} }, +}) + +minetest.register_craft({ + output = "mcl_sus_stew:hunger_stew", + recipe = { {"mcl_mushrooms:mushroom_red", "mcl_mushrooms:mushroom_brown"}, {"mcl_core:bowl", "mcl_flowers:blue_orchid"} }, +}) + +minetest.register_craft({ + output = "mcl_sus_stew:hunger_stew", + recipe = { {"mcl_mushrooms:mushroom_red", "mcl_mushrooms:mushroom_brown"}, {"mcl_core:bowl", "mcl_flowers:dandelion"} }, +}) + +minetest.register_craft({ + output = "mcl_sus_stew:jump_boost_stew", + recipe = { {"mcl_mushrooms:mushroom_red", "mcl_mushrooms:mushroom_brown"}, {"mcl_core:bowl", "mcl_flowers:peony"} }, +}) + +minetest.register_craft({ + output = "mcl_sus_stew:regeneration_stew", + recipe = { {"mcl_mushrooms:mushroom_red", "mcl_mushrooms:mushroom_brown"}, {"mcl_core:bowl", "mcl_flowers:oxeye_daisy"} }, +}) + +minetest.register_craft({ + output = "mcl_sus_stew:night_vision_stew", + recipe = { {"mcl_mushrooms:mushroom_red", "mcl_mushrooms:mushroom_brown"}, {"mcl_core:bowl", "mcl_flowers:poppy"} }, +}) -- 2.40.1 From e9547c54bb7d26207b241bb24b2745141d2f5e67 Mon Sep 17 00:00:00 2001 From: chmodsayshello Date: Tue, 28 Dec 2021 08:11:52 +0000 Subject: [PATCH 005/357] add depends.txt for dependencies --- depends.txt | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 depends.txt diff --git a/depends.txt b/depends.txt new file mode 100644 index 000000000..6ac5f4501 --- /dev/null +++ b/depends.txt @@ -0,0 +1,5 @@ +mcl_core +mcl_mushrooms +mcl_flowers +mcl_potions +mcl_hunger \ No newline at end of file -- 2.40.1 From 9ea12e450a95d364c527c3eb75aaafb5ee0e225a Mon Sep 17 00:00:00 2001 From: chmodsayshello Date: Tue, 28 Dec 2021 11:27:58 +0000 Subject: [PATCH 006/357] fix bowl disappering after eating the hunger stew --- init.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/init.lua b/init.lua index e2634dd2e..2ce2354cd 100644 --- a/init.lua +++ b/init.lua @@ -74,7 +74,8 @@ minetest.register_craftitem("mcl_sus_stew:night_vision_stew",{ -- ____________________________ --______________________________________/ Using mcl_hunger API \______________________ -mcl_hunger.register_food("mcl_sus_stew:hunger_stew",10, "", 3.5, 0, 100) -- Register it using mcl_hunger so i can use its poison feature +mcl_hunger.register_food("mcl_sus_stew:hunger_stew",6, "mcl_core:bowl", 3.5, 0, 100) -- Register it using mcl_hunger so i can use its poison feature + -- ______________ --_________________________________________/ Crafts \________________________________ -- 2.40.1 From 326edffaef74a8bc53be409de7b8a5297fba145a Mon Sep 17 00:00:00 2001 From: chmodsayshello Date: Tue, 28 Dec 2021 11:45:08 +0000 Subject: [PATCH 007/357] remove myself from the short description --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5ccd49b7d..374d80b92 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ # mcl_sus_stew -This Mod adds Suspicious Stews for Mineclone (by chmood 000 -R / (chmodsayshello on git)) \ No newline at end of file +This Mod adds Suspicious Stews for Mineclone \ No newline at end of file -- 2.40.1 From f6867ffedde8ae11e08d77da44a383802f820775 Mon Sep 17 00:00:00 2001 From: chmodsayshello Date: Tue, 28 Dec 2021 15:57:21 +0000 Subject: [PATCH 008/357] added saturation values --- init.lua | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/init.lua b/init.lua index 2ce2354cd..62b239a36 100644 --- a/init.lua +++ b/init.lua @@ -38,6 +38,7 @@ minetest.register_craftitem("mcl_sus_stew:poison_stew",{ stack_max = 1, on_place = poison, groups = { food = 2, eatable = 4, not_in_creative_inventory=1,}, + _mcl_saturation = 7.2, }) minetest.register_craftitem("mcl_sus_stew:hunger_stew",{ @@ -46,6 +47,7 @@ minetest.register_craftitem("mcl_sus_stew:hunger_stew",{ stack_max = 1, on_place = hunger, groups = { food = 2, eatable = 4, not_in_creative_inventory=1,}, + _mcl_saturation = 7.2, }) minetest.register_craftitem("mcl_sus_stew:jump_boost_stew",{ @@ -54,6 +56,7 @@ minetest.register_craftitem("mcl_sus_stew:jump_boost_stew",{ stack_max = 1, on_place = jump_boost, groups = { food = 2, eatable = 4, not_in_creative_inventory=1,}, + _mcl_saturation = 7.2, }) minetest.register_craftitem("mcl_sus_stew:regneration_stew",{ @@ -62,6 +65,7 @@ minetest.register_craftitem("mcl_sus_stew:regneration_stew",{ stack_max = 1, on_place = regeneration, groups = { food = 2, eatable = 4,}, --Only the regeneration Suspicious Stew is in the creative inventory so there are not 5 identical looking items in it + _mcl_saturation = 7.2, }) minetest.register_craftitem("mcl_sus_stew:night_vision_stew",{ @@ -70,6 +74,7 @@ minetest.register_craftitem("mcl_sus_stew:night_vision_stew",{ stack_max = 1, on_place = night_vision, groups = { food = 2, eatable = 4, not_in_creative_inventory=1,}, + _mcl_saturation = 7.2, }) -- ____________________________ -- 2.40.1 From da12a0a5b2d039e0543070941662e862d8fc7297 Mon Sep 17 00:00:00 2001 From: chmodsayshello Date: Tue, 28 Dec 2021 16:07:47 +0000 Subject: [PATCH 009/357] removed ALL suspicious stews from the creative inventory See https://minecraft.fandom.com/wiki/Suspicious_Stew --- init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/init.lua b/init.lua index 62b239a36..e49471e56 100644 --- a/init.lua +++ b/init.lua @@ -64,7 +64,7 @@ minetest.register_craftitem("mcl_sus_stew:regneration_stew",{ inventory_image = "sus_stew.png", stack_max = 1, on_place = regeneration, - groups = { food = 2, eatable = 4,}, --Only the regeneration Suspicious Stew is in the creative inventory so there are not 5 identical looking items in it + groups = { food = 2, eatable = 4, not_in_creative_inventory=1,}, _mcl_saturation = 7.2, }) -- 2.40.1 From a4c608aadac47e3e2d170c79e1e552bc50add632 Mon Sep 17 00:00:00 2001 From: chmodsayshello Date: Sat, 1 Jan 2022 08:19:01 +0000 Subject: [PATCH 010/357] you no longer can get potion effects without eating the stew --- init.lua | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/init.lua b/init.lua index e49471e56..1c3774106 100644 --- a/init.lua +++ b/init.lua @@ -7,29 +7,45 @@ local eat = minetest.item_eat(6, "mcl_core:bowl") --6 hunger points, player rece local function poison(itemstack, placer, pointed_thing) - mcl_potions.poison_func(placer, 1, 12) - return eat(itemstack, placer, pointed_thing) + local hunger = mcl_hunger.get_hunger(placer) + if hunger < 20 then + mcl_potions.poison_func(placer, 1, 12) + return eat(itemstack, placer, pointed_thing) + end end local function hunger(itemstack, placer, pointed_thing, player) - return eat(itemstack, placer, pointed_thing) + local hunger = mcl_hunger.get_hunger(placer) + if hunger < 20 then + return eat(itemstack, placer, pointed_thing) + end end local function jump_boost(itemstack, placer, pointed_thing) - mcl_potions.leaping_func(placer, 1, 6) - return eat(itemstack, placer, pointed_thing) + local hunger = mcl_hunger.get_hunger(placer) + if hunger < 20 then + mcl_potions.leaping_func(placer, 1, 6) + return eat(itemstack, placer, pointed_thing) + end end local function regeneration(itemstack, placer, pointed_thing) - mcl_potions.regeneration_func(placer, 1, 8) - return eat(itemstack, placer, pointed_thing) + local hunger = mcl_hunger.get_hunger(placer) + if hunger < 20 then + mcl_potions.regeneration_func(placer, 1, 8) + return eat(itemstack, placer, pointed_thing) + end end local function night_vision(itemstack, placer, pointed_thing) - mcl_potions.night_vision_func(placer, 1, 5) - return eat(itemstack, placer, pointed_thing) + local hunger = mcl_hunger.get_hunger(placer) + if hunger < 20 then + mcl_potions.night_vision_func(placer, 1, 5) + return eat(itemstack, placer, pointed_thing) + end end + -- ________________________ --_________________________________________/ Item Regestration \_________________ minetest.register_craftitem("mcl_sus_stew:poison_stew",{ -- 2.40.1 From 1127231ca9333497d70debc07c9ae0293c42be6f Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 27 May 2022 15:06:25 +0200 Subject: [PATCH 011/357] Fix crash on non existent xp-hud due to gamemode --- mods/HUD/mcl_experience/init.lua | 60 ++++++++++++++++++-------------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/mods/HUD/mcl_experience/init.lua b/mods/HUD/mcl_experience/init.lua index aea805fa2..6ead36687 100644 --- a/mods/HUD/mcl_experience/init.lua +++ b/mods/HUD/mcl_experience/init.lua @@ -156,33 +156,7 @@ function mcl_experience.throw_xp(pos, total_xp) end end -function mcl_experience.update(player) - local xp = mcl_experience.get_xp(player) - local cache = caches[player] - - cache.level = xp_to_level(xp) - - if not minetest.is_creative_enabled(player:get_player_name()) then - player:hud_change(hud_bars[player], "text", "mcl_experience_bar_background.png^[lowpart:" - .. math.floor(math.floor(xp_to_bar(xp, cache.level) * 18) / 18 * 100) - .. ":mcl_experience_bar.png^[transformR270" - ) - - if cache.level == 0 then - player:hud_change(hud_levels[player], "text", "") - else - player:hud_change(hud_levels[player], "text", tostring(cache.level)) - end - end -end - -function mcl_experience.register_on_add_xp(func, priority) - table.insert(mcl_experience.on_add_xp, {func = func, priority = priority or 0}) -end - --- callbacks - -minetest.register_on_joinplayer(function(player) +local function setup_hud(player) caches[player] = { last_time = get_time(), } @@ -205,7 +179,39 @@ minetest.register_on_joinplayer(function(player) z_index = 12, }) end +end +function mcl_experience.update(player) + local xp = mcl_experience.get_xp(player) + local cache = caches[player] + + cache.level = xp_to_level(xp) + + if not minetest.is_creative_enabled(player:get_player_name()) then + if not hud_bars[player] then + setup_hud(player) + end + player:hud_change(hud_bars[player], "text", "mcl_experience_bar_background.png^[lowpart:" + .. math.floor(math.floor(xp_to_bar(xp, cache.level) * 18) / 18 * 100) + .. ":mcl_experience_bar.png^[transformR270" + ) + + if cache.level == 0 then + player:hud_change(hud_levels[player], "text", "") + else + player:hud_change(hud_levels[player], "text", tostring(cache.level)) + end + end +end + +function mcl_experience.register_on_add_xp(func, priority) + table.insert(mcl_experience.on_add_xp, {func = func, priority = priority or 0}) +end + +-- callbacks + +minetest.register_on_joinplayer(function(player) + setup_hud(player) mcl_experience.update(player) end) -- 2.40.1 From ae2860d017e9c962384528c971c07d96eb0f9dfd Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 27 May 2022 19:56:47 +0200 Subject: [PATCH 012/357] Show/Hide XP-hud immediately after gamemode switch --- mods/HUD/mcl_experience/init.lua | 19 ++++++++++++++++--- mods/HUD/mcl_inventory/init.lua | 6 ++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/mods/HUD/mcl_experience/init.lua b/mods/HUD/mcl_experience/init.lua index 6ead36687..37250ee2f 100644 --- a/mods/HUD/mcl_experience/init.lua +++ b/mods/HUD/mcl_experience/init.lua @@ -156,7 +156,20 @@ function mcl_experience.throw_xp(pos, total_xp) end end -local function setup_hud(player) +function mcl_experience.remove_hud(player) + if hud_bars[player] then + player:hud_remove(hud_bars[player]) + hud_bars[player] = nil + end + if hud_levels[player] then + player:hud_remove(hud_levels[player]) + hud_levels[player] = nil + end +end + +function mcl_experience.setup_hud(player) + if hud_bars[player] and hud_levels[player] then return end + mcl_experience.remove_hud(player) caches[player] = { last_time = get_time(), } @@ -189,7 +202,7 @@ function mcl_experience.update(player) if not minetest.is_creative_enabled(player:get_player_name()) then if not hud_bars[player] then - setup_hud(player) + mcl_experience.setup_hud(player) end player:hud_change(hud_bars[player], "text", "mcl_experience_bar_background.png^[lowpart:" .. math.floor(math.floor(xp_to_bar(xp, cache.level) * 18) / 18 * 100) @@ -211,7 +224,7 @@ end -- callbacks minetest.register_on_joinplayer(function(player) - setup_hud(player) + mcl_experience.setup_hud(player) mcl_experience.update(player) end) diff --git a/mods/HUD/mcl_inventory/init.lua b/mods/HUD/mcl_inventory/init.lua index eb6b4c7b1..1a73e59df 100644 --- a/mods/HUD/mcl_inventory/init.lua +++ b/mods/HUD/mcl_inventory/init.lua @@ -206,6 +206,12 @@ local gamemodes = { function mcl_inventory.player_set_gamemode(p,g) local m = p:get_meta() m:set_string("gamemode",g) + if g == "survival" then + mcl_experience.setup_hud(p) + mcl_experience.update(p) + elseif g == "creative" then + mcl_experience.remove_hud(p) + end set_inventory(p) end -- 2.40.1 From 14ec1aa014d593d3ef49acb1c35022e5e0d7ac12 Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 22 May 2022 14:41:46 +0200 Subject: [PATCH 013/357] add basic parrot perching --- mods/ENTITIES/mobs_mc/parrot.lua | 57 ++++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/parrot.lua b/mods/ENTITIES/mobs_mc/parrot.lua index f3e3723c8..a17838d10 100644 --- a/mods/ENTITIES/mobs_mc/parrot.lua +++ b/mods/ENTITIES/mobs_mc/parrot.lua @@ -8,7 +8,35 @@ local S = minetest.get_translator("mobs_mc") --################### --################### PARROT --################### +local shoulders = { + left = vector.new(-3.25,10.5,0), + right = vector.new(3.25,10.5,0) +} +--find a free shoulder or return nil +local function get_shoulder(player) + local sh = 0 + for _,o in pairs(player:get_children()) do + local l = o:get_luaentity() + if l and l.name == "mobs_mc:parrot" then + local _,_,a = l.object:get_attach() + for _,s in pairs(shoulders) do + if a and vector.equals(a,s) then sh = sh + 1 end + end + end + end + if sh == 0 then return shoulders["left"] + elseif sh == 1 then return shoulders["right"] end +end + +local function perch(self,player) + if self.tamed and player:get_player_name() == self.owner and not self.object:get_attach() then + local shoulder = get_shoulder(player) + if not shoulder then return true end + self.object:set_attach(player,"",shoulder,vector.new(0,0,0),true) + mobs:set_animation(self, "stand") + end +end mcl_mobs:register_mob("mobs_mc:parrot", { @@ -89,13 +117,36 @@ mcl_mobs:register_mob("mobs_mc:parrot", { end -- Feed to tame, but not breed - if mcl_mobs:feed_tame(self, clicker, 1, false, true) then return end - if mcl_mobs:protect(self, clicker) then return end - if mcl_mobs:capture_mob(self, clicker, 0, 50, 80, false, nil) then return end + if mobs:feed_tame(self, clicker, 1, false, true) then return end + perch(self,clicker) end, + do_custom = function(self,dtime) + for _,p in pairs(minetest.get_connected_players()) do + if vector.distance(self.object:get_pos(),p:get_pos()) < 1 then + perch(self,p) + end + for _,o in pairs(p:get_children()) do + local l = o:get_luaentity() + if l and l.name == "mobs_mc:parrot" then + if minetest.get_node(vector.offset(p:get_pos(),0,-1,0)).name == "air" then + o:set_detach() + end + end + end + end + end }) +minetest.register_on_leaveplayer(function(p) + for _,o in pairs(p:get_children()) do + local l = o:get_luaentity() + if l and l.name == "mobs_mc:parrot" then + l.object:set_detach() + end + end +end) + -- Parrots spawn rarely in jungles. TODO: Also check for jungle *biome* <- I'll get to this eventually -j4i mcl_mobs:spawn_specific( "mobs_mc:parrot", -- 2.40.1 From 86bc398a7932cbce49c2a077549a0341f5ffd981 Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 22 May 2022 19:46:10 +0200 Subject: [PATCH 014/357] don't do flying animation while perching,fix anims --- mods/ENTITIES/mcl_mobs/api.lua | 62 ++++++++++++++++---------------- mods/ENTITIES/mobs_mc/parrot.lua | 8 ++--- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 6b2cff0e3..933634cce 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -363,6 +363,35 @@ local remove_texture_mod = function(self, mod) self.object:set_texture_mod(full_mod) end +-- are we flying in what we are suppose to? (taikedz) +local flight_check = function(self) + + local nod = self.standing_in + local def = minetest.registered_nodes[nod] + + if not def then return false end -- nil check + + local fly_in + if type(self.fly_in) == "string" then + fly_in = { self.fly_in } + elseif type(self.fly_in) == "table" then + fly_in = self.fly_in + else + return false + end + + for _,checknode in pairs(fly_in) do + if nod == checknode then + return true + elseif checknode == "__airlike" or def.walkable == false and + (def.liquidtype == "none" or minetest.get_item_group(nod, "fake_liquid") == 1) then + return true + end + end + + return false +end + -- set defined animation local set_animation = function(self, anim, fixed_frame) if not self.animation or not anim then @@ -372,6 +401,8 @@ local set_animation = function(self, anim, fixed_frame) return end + if flight_check(self) and self.fly and anim == "walk" then anim = "fly" end + self.animation.current = self.animation.current or "" if (anim == self.animation.current @@ -513,37 +544,6 @@ local line_of_sight = function(self, pos1, pos2, stepsize) return false end - --- are we flying in what we are suppose to? (taikedz) -local flight_check = function(self) - - local nod = self.standing_in - local def = minetest.registered_nodes[nod] - - if not def then return false end -- nil check - - local fly_in - if type(self.fly_in) == "string" then - fly_in = { self.fly_in } - elseif type(self.fly_in) == "table" then - fly_in = self.fly_in - else - return false - end - - for _,checknode in pairs(fly_in) do - if nod == checknode then - return true - elseif checknode == "__airlike" and def.walkable == false and - (def.liquidtype == "none" or minetest.get_item_group(nod, "fake_liquid") == 1) then - return true - end - end - - return false -end - - -- custom particle effects local effect = function(pos, amount, texture, min_size, max_size, radius, gravity, glow, go_down) diff --git a/mods/ENTITIES/mobs_mc/parrot.lua b/mods/ENTITIES/mobs_mc/parrot.lua index a17838d10..cf380e1c9 100644 --- a/mods/ENTITIES/mobs_mc/parrot.lua +++ b/mods/ENTITIES/mobs_mc/parrot.lua @@ -73,12 +73,12 @@ mcl_mobs:register_mob("mobs_mc:parrot", { stand_speed = 50, walk_speed = 50, fly_speed = 50, - stand_start = 30, - stand_end = 45, + stand_start = 0, + stand_end = 0, fly_start = 30, fly_end = 45, - walk_start = 30, - walk_end = 45, + walk_start = 0, + walk_end = 20, -- TODO: actual walk animation --walk_start = 0, --walk_end = 20, -- 2.40.1 From 3d13000599f9aa69847a79424f1bed36497e8d54 Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 22 May 2022 19:47:53 +0200 Subject: [PATCH 015/357] tweak detaching behavior --- mods/ENTITIES/mobs_mc/parrot.lua | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mods/ENTITIES/mobs_mc/parrot.lua b/mods/ENTITIES/mobs_mc/parrot.lua index cf380e1c9..ee1a08de8 100644 --- a/mods/ENTITIES/mobs_mc/parrot.lua +++ b/mods/ENTITIES/mobs_mc/parrot.lua @@ -128,7 +128,10 @@ mcl_mobs:register_mob("mobs_mc:parrot", { for _,o in pairs(p:get_children()) do local l = o:get_luaentity() if l and l.name == "mobs_mc:parrot" then - if minetest.get_node(vector.offset(p:get_pos(),0,-1,0)).name == "air" then + local n1 = minetest.get_node(vector.offset(p:get_pos(),0,-0.6,0)).name + local n2 = minetest.get_node(vector.offset(p:get_pos(),0,0,0)).name + local n3 = minetest.get_node(vector.offset(p:get_pos(),0,1,0)).name + if n1 == "air" or minetest.get_item_group(n2,"water") ~= 0 or minetest.get_item_group(n2,"lava") ~= 0 then o:set_detach() end end -- 2.40.1 From e90e17e533d64a955e8a693a6b297def9b29f1ed Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 23 May 2022 00:09:38 +0200 Subject: [PATCH 016/357] clean up perch code, smoother behavior --- mods/ENTITIES/mobs_mc/parrot.lua | 67 +++++++++++++++++++++----------- 1 file changed, 45 insertions(+), 22 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/parrot.lua b/mods/ENTITIES/mobs_mc/parrot.lua index ee1a08de8..21930b239 100644 --- a/mods/ENTITIES/mobs_mc/parrot.lua +++ b/mods/ENTITIES/mobs_mc/parrot.lua @@ -9,24 +9,30 @@ local S = minetest.get_translator("mobs_mc") --################### PARROT --################### local shoulders = { - left = vector.new(-3.25,10.5,0), - right = vector.new(3.25,10.5,0) + left = vector.new(-3.75,10.5,0), + right = vector.new(3.75,10.5,0) } --find a free shoulder or return nil local function get_shoulder(player) - local sh = 0 + local sh = "left" for _,o in pairs(player:get_children()) do local l = o:get_luaentity() if l and l.name == "mobs_mc:parrot" then local _,_,a = l.object:get_attach() for _,s in pairs(shoulders) do - if a and vector.equals(a,s) then sh = sh + 1 end + if a and vector.equals(a,s) then + if sh == "left" then + sh = "right" + else + return + end + + end end end end - if sh == 0 then return shoulders["left"] - elseif sh == 1 then return shoulders["right"] end + return shoulders[sh] end local function perch(self,player) @@ -38,6 +44,38 @@ local function perch(self,player) end end +local function check_perch(self,dtime) + if self.object:get_attach() then + for _,p in pairs(minetest.get_connected_players()) do + for _,o in pairs(p:get_children()) do + local l = o:get_luaentity() + if l and l.name == "mobs_mc:parrot" then + local n1 = minetest.get_node(vector.offset(p:get_pos(),0,-0.6,0)).name + local n2 = minetest.get_node(vector.offset(p:get_pos(),0,0,0)).name + local n3 = minetest.get_node(vector.offset(p:get_pos(),0,1,0)).name + if n1 == "air" or minetest.get_item_group(n2,"water") > 0 or minetest.get_item_group(n2,"lava") > 0 then + o:set_detach() + self.detach_timer = 0 + return + end + end + end + end + elseif not self.detach_timer then + for _,p in pairs(minetest.get_connected_players()) do + if vector.distance(self.object:get_pos(),p:get_pos()) < 0.5 then + perch(self,p) + return + end + end + elseif self.detach_timer then + if self.detach_timer > 1 then + self.detach_timer = nil + else + self.detach_timer = self.detach_timer + dtime + end + end +end mcl_mobs:register_mob("mobs_mc:parrot", { description = S("Parrot"), @@ -121,22 +159,7 @@ mcl_mobs:register_mob("mobs_mc:parrot", { perch(self,clicker) end, do_custom = function(self,dtime) - for _,p in pairs(minetest.get_connected_players()) do - if vector.distance(self.object:get_pos(),p:get_pos()) < 1 then - perch(self,p) - end - for _,o in pairs(p:get_children()) do - local l = o:get_luaentity() - if l and l.name == "mobs_mc:parrot" then - local n1 = minetest.get_node(vector.offset(p:get_pos(),0,-0.6,0)).name - local n2 = minetest.get_node(vector.offset(p:get_pos(),0,0,0)).name - local n3 = minetest.get_node(vector.offset(p:get_pos(),0,1,0)).name - if n1 == "air" or minetest.get_item_group(n2,"water") ~= 0 or minetest.get_item_group(n2,"lava") ~= 0 then - o:set_detach() - end - end - end - end + check_perch(self,dtime) end }) -- 2.40.1 From c0a9cb7020a1075809b3adabfd287f21bb2ad8ea Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 23 May 2022 19:59:59 +0200 Subject: [PATCH 017/357] don't hurt perched parrot on punch --- mods/ENTITIES/mobs_mc/parrot.lua | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/parrot.lua b/mods/ENTITIES/mobs_mc/parrot.lua index 21930b239..b4a91ba5b 100644 --- a/mods/ENTITIES/mobs_mc/parrot.lua +++ b/mods/ENTITIES/mobs_mc/parrot.lua @@ -153,25 +153,19 @@ mcl_mobs:register_mob("mobs_mc:parrot", { end return end - -- Feed to tame, but not breed if mobs:feed_tame(self, clicker, 1, false, true) then return end perch(self,clicker) end, do_custom = function(self,dtime) check_perch(self,dtime) - end - -}) - -minetest.register_on_leaveplayer(function(p) - for _,o in pairs(p:get_children()) do - local l = o:get_luaentity() - if l and l.name == "mobs_mc:parrot" then - l.object:set_detach() + end, + do_punch = function(self,puncher) --do_punch is the mcl_mobs_redo variant - it gets called by on_punch later.... + if self.object:get_attach() == puncher then + return false --return false explicitly here. mcl_mobs checks for that end - end -end) + end, +}) -- Parrots spawn rarely in jungles. TODO: Also check for jungle *biome* <- I'll get to this eventually -j4i mcl_mobs:spawn_specific( -- 2.40.1 From 7bc63d2882fa3123d817be54a471aef126b6e854 Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 28 May 2022 00:06:29 +0200 Subject: [PATCH 018/357] fix mcl_mobs api_changes --- mods/ENTITIES/mobs_mc/parrot.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/parrot.lua b/mods/ENTITIES/mobs_mc/parrot.lua index b4a91ba5b..84b3aaead 100644 --- a/mods/ENTITIES/mobs_mc/parrot.lua +++ b/mods/ENTITIES/mobs_mc/parrot.lua @@ -40,7 +40,7 @@ local function perch(self,player) local shoulder = get_shoulder(player) if not shoulder then return true end self.object:set_attach(player,"",shoulder,vector.new(0,0,0),true) - mobs:set_animation(self, "stand") + mcl_mobs:set_animation(self, "stand") end end @@ -154,7 +154,7 @@ mcl_mobs:register_mob("mobs_mc:parrot", { return end -- Feed to tame, but not breed - if mobs:feed_tame(self, clicker, 1, false, true) then return end + if mcl_mobs:feed_tame(self, clicker, 1, false, true) then return end perch(self,clicker) end, do_custom = function(self,dtime) -- 2.40.1 From a179a1cb6227d11be3c6a68c2f254fc243f9c42d Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 28 May 2022 02:00:17 +0200 Subject: [PATCH 019/357] fix indoor weather + multiplayer issue --- mods/ENVIRONMENT/mcl_weather/rain.lua | 52 +++++++++------------------ mods/ENVIRONMENT/mcl_weather/snow.lua | 24 ++++++------- 2 files changed, 28 insertions(+), 48 deletions(-) diff --git a/mods/ENVIRONMENT/mcl_weather/rain.lua b/mods/ENVIRONMENT/mcl_weather/rain.lua index f85b91369..f0be39f6c 100644 --- a/mods/ENVIRONMENT/mcl_weather/rain.lua +++ b/mods/ENVIRONMENT/mcl_weather/rain.lua @@ -1,5 +1,5 @@ -local PARTICLES_COUNT_RAIN = 100 -local PARTICLES_COUNT_THUNDER = 300 +local PARTICLES_COUNT_RAIN = 800 +local PARTICLES_COUNT_THUNDER = 1200 local get_connected_players = minetest.get_connected_players @@ -26,38 +26,22 @@ local size = math.random(1,3) local psdef= { amount = mcl_weather.rain.particles_count, time=0, - minpos = vector.new(-6,3,-6), - maxpos = vector.new(6,15,6), - minvel = vector.new(-vel,-falling_speed,-vel), - maxvel = vector.new(vel,-falling_speed+vel,vel), + minpos = vector.new(-15,20,-15), + maxpos = vector.new(15,25,15), + minvel = vector.new(-2,-falling_speed-2,-2), + maxvel = vector.new(2,-falling_speed+2,2), minacc = vector.new(0,0,0), - maxacc = vector.new(0,-0.4,0), - minexptime = 0.5, - maxexptime = 2, + maxacc = vector.new(0,-0.5,0), + minexptime = 15, + maxexptime = 30, minsize = size, maxsize= size*2, collisiondetection = true, collision_removal = true, vertical = true, } -local psdef_backsplash= { - amount = 10, - time=0, - minpos = vector.new(-3,-1,-3), - maxpos = vector.new(3,0,3), - minvel = vector.new(-vel,falling_speed*2,-vel), - maxvel = vector.new(vel,falling_speed*2+vel,vel), - minacc = vector.new(0,0,0), - maxacc = vector.new(0,0,0), - minexptime = 0.1, - maxexptime = 0.2, - minsize = size*0.1, - maxsize= size*0.5, - collisiondetection = true, - collision_removal = true, - vertical = true, -} -local textures = {"weather_pack_rain_raindrop_1.png", "weather_pack_rain_raindrop_2.png", "weather_pack_rain_raindrop_1.png"} + +local textures = {"weather_pack_rain_raindrop_1.png", "weather_pack_rain_raindrop_2.png"} function mcl_weather.rain.sound_handler(player) return minetest.sound_play("weather_rain", { @@ -90,8 +74,6 @@ function mcl_weather.rain.add_rain_particles(player) psdef.texture=v mcl_weather.add_spawner_player(player,"rain"..k,psdef) end - psdef_backsplash.texture=textures[math.random(1,#textures)] - local l=mcl_weather.add_spawner_player(player,"rainbacksplash",psdef_backsplash) if l then update_sound[player:get_player_name()]=true end @@ -185,14 +167,14 @@ function mcl_weather.rain.make_weather() for _, player in pairs(get_connected_players()) do local pos=player:get_pos() - if mcl_weather.is_underwater(player) or not mcl_worlds.has_weather(pos) or not mcl_weather.is_outdoor(pos) then + if mcl_weather.is_underwater(player) or not mcl_worlds.has_weather(pos) then mcl_weather.rain.remove_sound(player) mcl_weather.remove_spawners_player(player) - return false + else + mcl_weather.rain.add_player(player) + mcl_weather.rain.add_rain_particles(player) + mcl_weather.rain.update_sound(player) end - mcl_weather.rain.add_player(player) - mcl_weather.rain.add_rain_particles(player) - mcl_weather.rain.update_sound(player) end end @@ -200,11 +182,9 @@ end function mcl_weather.rain.set_particles_mode(mode) if mode == "thunder" then psdef.amount=PARTICLES_COUNT_THUNDER - psdef_backsplash.amount=PARTICLES_COUNT_THUNDER mcl_weather.rain.particles_count = PARTICLES_COUNT_THUNDER else psdef.amount=PARTICLES_COUNT_RAIN - psdef_backsplash.amount=PARTICLES_COUNT_RAIN mcl_weather.rain.particles_count = PARTICLES_COUNT_RAIN end end diff --git a/mods/ENVIRONMENT/mcl_weather/snow.lua b/mods/ENVIRONMENT/mcl_weather/snow.lua index b60283127..a55428996 100644 --- a/mods/ENVIRONMENT/mcl_weather/snow.lua +++ b/mods/ENVIRONMENT/mcl_weather/snow.lua @@ -8,14 +8,14 @@ mcl_weather.snow.init_done = false local psdef= { amount = 99, time = 0, --stay on til we turn it off - minpos = vector.new(-15,-5,-15), - maxpos =vector.new(15,10,15), - minvel = vector.new(0,-1,0), - maxvel = vector.new(0,-4,0), + minpos = vector.new(-25,20,-25), + maxpos =vector.new(25,25,25), + minvel = vector.new(-0.2,-1,-0.2), + maxvel = vector.new(0.2,-4,0.2), minacc = vector.new(0,-1,0), maxacc = vector.new(0,-4,0), - minexptime = 1, - maxexptime = 1, + minexptime = 15, + maxexptime = 30, minsize = 0.5, maxsize = 5, collisiondetection = true, @@ -70,13 +70,13 @@ minetest.register_globalstep(function(dtime) end for _, player in pairs(get_connected_players()) do - if (mcl_weather.is_underwater(player) or not mcl_worlds.has_weather(player:get_pos()) or not mcl_weather.is_outdoor(player:get_pos())) then + if mcl_weather.is_underwater(player) or not mcl_worlds.has_weather(player:get_pos()) then mcl_weather.remove_spawners_player(player) - return false - end - for i=1,2 do - psdef.texture="weather_pack_snow_snowflake"..i..".png" - mcl_weather.add_spawner_player(player,"snow"..i,psdef) + else + for i=1,2 do + psdef.texture="weather_pack_snow_snowflake"..i..".png" + mcl_weather.add_spawner_player(player,"snow"..i,psdef) + end end end end) -- 2.40.1 From da6563a5b39b30502635e331c3c7bbfb9b22de4b Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 26 May 2022 02:24:56 +0200 Subject: [PATCH 020/357] Spawn witch and black cat on witchhut generation --- .../mobs_mc/textures/mobs_mc_cat_black.png | Bin 606 -> 7117 bytes mods/MAPGEN/mcl_structures/init.lua | 19 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_cat_black.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_cat_black.png index d6e54c7a15637a4925a492b852e27071896479d3..a839a6ef37d345362f80c340f500ad42f999b393 100644 GIT binary patch literal 7117 zcmeHMcT^Kg-wsWriJ*vzN{oOMlWZzUq)Je@0&*1*#KLB?fdDCx08ykXf+&dC1rY=+ zND~W4vvEZM6~qQy3rdr!g3^R{0rl$n-tV06p6|WyU*?=mc4vOSXXbh4nVp%F7)OUy zDvI+JQ7Dv(tqpT6@@s)yXjvKL+pz$;ib72<-0tKeUJC}Ig?<7K*9S(6w+Uf1Ea7rc zC`m)cQSX4ag(|zoMH;RVgD6Yf?gyfak;}}r^$#`TiajzD&tFMDU^DY}X<=AH_V{Q} zap-%6BAp}5)j9O7JJ#A$$hdp{p$+t5qvSV3>1}G|DiFmA?E;#`>KL~FeI0h_noV%N5PSsxdc4Wl+S zE;SGS*qAF?6!MCtSS8nj*{RlC1Iyl((#9 zzP{TYC+SAPtj(i%-DvstN{iP!+D<(knu}&G!_wX?nI3jLzPX^BEIV-0Vh+lya1l#! zp=^oGQQEw{YrT2Aj2wWs*Zb)OxOlX?)j-NBweF`^qtG%Gb=9J9Ni;Kib=h9cj+lSPkp`%{65&eRK0$7Zr^>oEEp}OLCEazM!ENi$aImv$vuga+l${x#fDZROgH0^{q=a`)&nJ5?jLd9kx(#G zZo|76Da)qosZ~c7OM6v}tj}Bqcq*=*<|72To9HW*Akgs|{zA~;_LJc?ta&MML)Oad z%Q*!rXE$}vYjBuT&$k?qD{t6)cR@0KRfmE8(ycpson_ro5F_y-R9A8Z^>`+xdZXd$ z%K>Ryw(GH(OLK70>WG@RmN|A_zS;F3FsDEZxid9-R`<$s6BhICT1-r zw>mAuT1##66ZI0->6L5cB)yHu7&7sFpFVd>_iF|1mK!dbpQmp=Y@Oli#NU04**`{WTgX!wC*d>ix&kv<2F~<81GJy8p;$jh5T6p+s~2^?h@(`NLJRMBlpi zjxBn#`!g~mOq9*VyL+&S?qg`h{h17c&Y7o_Q5Gt@?GNeHKXPoPlpIu_rVYv3fg;T% z*jvJz2GI4U^tkT)X~$MS%&5rS(U~`BQ+%$Ozo+|+g5rZ0ZqH*3A%(p9j)rKtvpwDh z8oQ+v6SXP*t`B1hQjrI23=;zzUHe$=p-3bYldx@*dSROp8>#nz0vrhORCiAiCct!l0 zA+D>H?C|q$D1LT+@D2@XG)z9WTh9Zchwc;i==)@bkTa&G<%^fBuR5OGWwOVqve?yb zx5us*_%W)+w%_NP&CM$p>YX0x@6ilveN8kC9k5~RgdEi~D_td*7?1bN%jFSWzJE5`k{Ogn6skKjHU5-@hUC(?=$(c_-oS^tZ zyCqYB+U@21uEKTJ!&dBuTAFuo*y6-9udVmgi1%;JGB@jgBeU(L8=dz!iO%Rd_GHc_ z=T?u3iznlH`lz4ubb7n49P3G}e7#$Hn!WkMqzJVcch#alzs)+6ynf57L|wAt5c^U> zLpExUy zK5;Ag@@R#teEr9o%NAeUjtFBnq~aNETezXl>!t?>-kXhLJm(6wjuxt?31!G3iEDbU z#(ZKts&W{4P&h8V`$BlBz^u9sg_7FIwX$-wwX*uQhe38ONx=!GHn%JmRBT6Y|wo6e8)jNdy_L=;QQnr<;k_Bp`iYm+-0KV)|u)q zx7Br`9UZL{U?;WH>z7un*z@VlqOs^VM=CS+XUVRNlXE&{88G@Pw6ECB$ejLKZ&$O$ ztBNb;E5lyl9$skt^f{kryaqK+5@uZea%dXx(RO=jwsm~i81Gf{wQPf+>n$^YL3U+k zmrcm=6=td>DYeFMc(~gskDBi6%khuo(e|5l1!0j^?w2f{cP{Gf>FMfzNy;7zLFr!b zi>@7Rwn3p(uX2$+rHj2C0}}9XAX~tKaT1;o*>j>$Cgu_$2zkR|Gz<3N@=Yw11E(5ur zD8^&ZlObYnQ;dtfBic&f2cyY2G7i96OSl0o0x#{L1ymM;>6d9_Rt%g?x|6iV49PmX5Zj7$Oe% ztHjX<6myUSQ;Z##?=ShQ!imd+*NMRiH3?J-i9#e(C^t=|H3fXQlT~Q+q-_}>G}VX*41lLb1j(DKf;>UK2aL?`uZH?o&iyxoMWE9F zm<`gfR1%4R3>HYn(pfBHEE_PUffSemP=G1o-_b<^jyMqXgDpJ}rU)CvK$C3H`Wv`> zwjfYsFiHD+e4r;hp%g$QU;#Q7pg0i#2ARwtlQ8&yo*oT?VHTZ^Fazj_fs7#lu`>W5 z^w=Okp>fD`2>iLb|9^S}27oZ6|2OEtAOyk?M8wjNnSdqJ*~VBF1%R*+Oa%ZEgv?}! z_8+51AYh4r6F^{)Xbb}Nzd?^qrIOiXn2x-C5bKbsFbzv5(qSx(LWMbWDrAhjQU0&= zCg=J8W=$gEODvJ<1P~cSB7;OQLT&)y8$}cR#FF!EI-21B$Ap~<_+gDgj6GF`tbNE* zivPZresw%DIsVDd*B8Y<*#sK>tC7E@?=QK2$@RAs_*=oh-1SSYzoo$63jXD;|Cn5g zf1So*KC(p*M9$j&c4>IzoUZO@=VXl%_{`Uuw+v@wW@fUB2RSFt)>SajM{1?SYaQ01 zELxu-e-fdjSgThtQPFY>k)uCKL1^PDLZN1qOxe zh^%N&(UmhC_ct_BY4vhD#Sc?0beB4xQ>ckbnCGb3fm*NW-i4A%&9#;=o~a2pwVa+RPUb9-6$k5k3I-9hc{*^yvTp|7~JQ?a{6I>Dwz63h9hm=DK=&ZDQ~A?EnA($MGIq0000JbW%=J0RR90 z|NsC0{{a90|Nj600002Xr|eb$00F^CL_t(|0i=|HuA49nMSrocxp+?Aw(kEwc6I`L zQz>2ddaR&E!ABPvx(q}VuwwaS1=d=}9^8CczTL44LU|H^02_JiiEXTkdx_^Sr1`SxpEV9>gof9wx2D4mDfHYKp3c8z>bw%Pm>rsNb)va)Ajf11V z3?M25d~z08dZ(Zw+5l)~&G!?6`4pE4>LpnA>%lr=`C$ZEg2_X{_heotsQyflWeJtU z9ODClSeMA^_Nl<11Y-^wO3agoukz8>ee?NC(cnH4uz#(h0)0W?ecR?QQK%jXAR?i1 zEs#9RW!BBJhCm|J<`fW;#I-JWWvaojC=xKp3qf#S!Dg4TO)ZwP)4Zns}MxBq0hK2qUo f-um`?gWLcBf)6=#*sJXE00000NkvXXu0mjfW9J&t diff --git a/mods/MAPGEN/mcl_structures/init.lua b/mods/MAPGEN/mcl_structures/init.lua index 9a1a73281..2b791aa91 100644 --- a/mods/MAPGEN/mcl_structures/init.lua +++ b/mods/MAPGEN/mcl_structures/init.lua @@ -280,6 +280,24 @@ function mcl_structures.generate_boulder(pos, rotation, pr) return minetest.place_schematic(newpos, path, rotation) -- don't serialize schematics for registered biome decorations, for MT 5.4.0, https://github.com/minetest/minetest/issues/10995 end +local function spawn_witch(p1,p2) + local c = minetest.find_node_near(p1,15,{"mcl_cauldrons:cauldron"}) + local nn = minetest.find_nodes_in_area(p1,p2,{"mcl_core:sprucewood"}) + if c then + for _,v in pairs(nn) do + local ap = vector.offset(v,0,1,0) + local an = minetest.get_node(ap) + if ap.y == c.y and an.name == "air" then + minetest.add_entity(ap,"mobs_mc:witch"):get_luaentity()._home = c + local cat = minetest.add_entity(ap,"mobs_mc:cat") + cat:set_properties({textures = {"mobs_mc_cat_black.png"}}) + cat:get_luaentity().owner = "witch" --so it's not claimable by players (unless they're named witch hehe) + return + end + end + end +end + local function hut_placement_callback(p1, p2, size, orientation, pr) if not p1 or not p2 then return end local legs = minetest.find_nodes_in_area(p1, p2, "mcl_core:tree") @@ -289,6 +307,7 @@ local function hut_placement_callback(p1, p2, size, orientation, pr) minetest.swap_node(legs[i], {name = "mcl_core:tree", param2 = 2}) end end + spawn_witch(p1,p2) end function mcl_structures.generate_witch_hut(pos, rotation, pr) -- 2.40.1 From 2337e72a235157048976d0335d4634461594a2c0 Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 26 May 2022 14:46:06 +0200 Subject: [PATCH 021/357] simplify spawn logic --- mods/MAPGEN/mcl_structures/init.lua | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/mods/MAPGEN/mcl_structures/init.lua b/mods/MAPGEN/mcl_structures/init.lua index 2b791aa91..322874d4c 100644 --- a/mods/MAPGEN/mcl_structures/init.lua +++ b/mods/MAPGEN/mcl_structures/init.lua @@ -282,19 +282,16 @@ end local function spawn_witch(p1,p2) local c = minetest.find_node_near(p1,15,{"mcl_cauldrons:cauldron"}) - local nn = minetest.find_nodes_in_area(p1,p2,{"mcl_core:sprucewood"}) if c then - for _,v in pairs(nn) do - local ap = vector.offset(v,0,1,0) - local an = minetest.get_node(ap) - if ap.y == c.y and an.name == "air" then - minetest.add_entity(ap,"mobs_mc:witch"):get_luaentity()._home = c - local cat = minetest.add_entity(ap,"mobs_mc:cat") - cat:set_properties({textures = {"mobs_mc_cat_black.png"}}) - cat:get_luaentity().owner = "witch" --so it's not claimable by players (unless they're named witch hehe) - return - end - end + local nn = minetest.find_nodes_in_area_under_air(vector.new(p1.x,c.y-1,p1.z),vector.new(p2.x,c.y-1,p2.z),{"mcl_core:sprucewood"}) + local witch = minetest.add_entity(vector.offset(nn[math.random(#nn)],0,1,0),"mobs_mc:witch"):get_luaentity() + local cat = minetest.add_entity(vector.offset(nn[math.random(#nn)],0,1,0),"mobs_mc:cat"):get_luaentity() + witch._home = c + witch.can_despawn = false + cat.object:set_properties({textures = {"mobs_mc_cat_black.png"}}) + cat.owner = "!witch!" --so it's not claimable by player + cat.can_despawn = false + return end end -- 2.40.1 From 6b9cb0062d98a49432a8b3e86909f9769a69de90 Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 26 May 2022 15:16:06 +0200 Subject: [PATCH 022/357] save home coords in cat entity as well --- mods/MAPGEN/mcl_structures/init.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/mods/MAPGEN/mcl_structures/init.lua b/mods/MAPGEN/mcl_structures/init.lua index 322874d4c..5d3ecac6c 100644 --- a/mods/MAPGEN/mcl_structures/init.lua +++ b/mods/MAPGEN/mcl_structures/init.lua @@ -290,6 +290,7 @@ local function spawn_witch(p1,p2) witch.can_despawn = false cat.object:set_properties({textures = {"mobs_mc_cat_black.png"}}) cat.owner = "!witch!" --so it's not claimable by player + cat._home = c cat.can_despawn = false return end -- 2.40.1 From e4a4648b25a790d64c73a3c06d1aa0ace9b2f9a5 Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 26 May 2022 15:20:18 +0200 Subject: [PATCH 023/357] fix size of black cat texture --- .../mobs_mc/textures/mobs_mc_cat_black.png | Bin 7117 -> 385 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_cat_black.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_cat_black.png index a839a6ef37d345362f80c340f500ad42f999b393..8d1322565a7745bab53b111a7a35657f898cb923 100644 GIT binary patch delta 15 WcmX?W-pD*bd9sz1_U2hq#*6?gq6Fyx literal 7117 zcmeHMcT^Kg-wsWriJ*vzN{oOMlWZzUq)Je@0&*1*#KLB?fdDCx08ykXf+&dC1rY=+ zND~W4vvEZM6~qQy3rdr!g3^R{0rl$n-tV06p6|WyU*?=mc4vOSXXbh4nVp%F7)OUy zDvI+JQ7Dv(tqpT6@@s)yXjvKL+pz$;ib72<-0tKeUJC}Ig?<7K*9S(6w+Uf1Ea7rc zC`m)cQSX4ag(|zoMH;RVgD6Yf?gyfak;}}r^$#`TiajzD&tFMDU^DY}X<=AH_V{Q} zap-%6BAp}5)j9O7JJ#A$$hdp{p$+t5qvSV3>1}G|DiFmA?E;#`>KL~FeI0h_noV%N5PSsxdc4Wl+S zE;SGS*qAF?6!MCtSS8nj*{RlC1Iyl((#9 zzP{TYC+SAPtj(i%-DvstN{iP!+D<(knu}&G!_wX?nI3jLzPX^BEIV-0Vh+lya1l#! zp=^oGQQEw{YrT2Aj2wWs*Zb)OxOlX?)j-NBweF`^qtG%Gb=9J9Ni;Kib=h9cj+lSPkp`%{65&eRK0$7Zr^>oEEp}OLCEazM!ENi$aImv$vuga+l${x#fDZROgH0^{q=a`)&nJ5?jLd9kx(#G zZo|76Da)qosZ~c7OM6v}tj}Bqcq*=*<|72To9HW*Akgs|{zA~;_LJc?ta&MML)Oad z%Q*!rXE$}vYjBuT&$k?qD{t6)cR@0KRfmE8(ycpson_ro5F_y-R9A8Z^>`+xdZXd$ z%K>Ryw(GH(OLK70>WG@RmN|A_zS;F3FsDEZxid9-R`<$s6BhICT1-r zw>mAuT1##66ZI0->6L5cB)yHu7&7sFpFVd>_iF|1mK!dbpQmp=Y@Oli#NU04**`{WTgX!wC*d>ix&kv<2F~<81GJy8p;$jh5T6p+s~2^?h@(`NLJRMBlpi zjxBn#`!g~mOq9*VyL+&S?qg`h{h17c&Y7o_Q5Gt@?GNeHKXPoPlpIu_rVYv3fg;T% z*jvJz2GI4U^tkT)X~$MS%&5rS(U~`BQ+%$Ozo+|+g5rZ0ZqH*3A%(p9j)rKtvpwDh z8oQ+v6SXP*t`B1hQjrI23=;zzUHe$=p-3bYldx@*dSROp8>#nz0vrhORCiAiCct!l0 zA+D>H?C|q$D1LT+@D2@XG)z9WTh9Zchwc;i==)@bkTa&G<%^fBuR5OGWwOVqve?yb zx5us*_%W)+w%_NP&CM$p>YX0x@6ilveN8kC9k5~RgdEi~D_td*7?1bN%jFSWzJE5`k{Ogn6skKjHU5-@hUC(?=$(c_-oS^tZ zyCqYB+U@21uEKTJ!&dBuTAFuo*y6-9udVmgi1%;JGB@jgBeU(L8=dz!iO%Rd_GHc_ z=T?u3iznlH`lz4ubb7n49P3G}e7#$Hn!WkMqzJVcch#alzs)+6ynf57L|wAt5c^U> zLpExUy zK5;Ag@@R#teEr9o%NAeUjtFBnq~aNETezXl>!t?>-kXhLJm(6wjuxt?31!G3iEDbU z#(ZKts&W{4P&h8V`$BlBz^u9sg_7FIwX$-wwX*uQhe38ONx=!GHn%JmRBT6Y|wo6e8)jNdy_L=;QQnr<;k_Bp`iYm+-0KV)|u)q zx7Br`9UZL{U?;WH>z7un*z@VlqOs^VM=CS+XUVRNlXE&{88G@Pw6ECB$ejLKZ&$O$ ztBNb;E5lyl9$skt^f{kryaqK+5@uZea%dXx(RO=jwsm~i81Gf{wQPf+>n$^YL3U+k zmrcm=6=td>DYeFMc(~gskDBi6%khuo(e|5l1!0j^?w2f{cP{Gf>FMfzNy;7zLFr!b zi>@7Rwn3p(uX2$+rHj2C0}}9XAX~tKaT1;o*>j>$Cgu_$2zkR|Gz<3N@=Yw11E(5ur zD8^&ZlObYnQ;dtfBic&f2cyY2G7i96OSl0o0x#{L1ymM;>6d9_Rt%g?x|6iV49PmX5Zj7$Oe% ztHjX<6myUSQ;Z##?=ShQ!imd+*NMRiH3?J-i9#e(C^t=|H3fXQlT~Q+q-_}>G}VX*41lLb1j(DKf;>UK2aL?`uZH?o&iyxoMWE9F zm<`gfR1%4R3>HYn(pfBHEE_PUffSemP=G1o-_b<^jyMqXgDpJ}rU)CvK$C3H`Wv`> zwjfYsFiHD+e4r;hp%g$QU;#Q7pg0i#2ARwtlQ8&yo*oT?VHTZ^Fazj_fs7#lu`>W5 z^w=Okp>fD`2>iLb|9^S}27oZ6|2OEtAOyk?M8wjNnSdqJ*~VBF1%R*+Oa%ZEgv?}! z_8+51AYh4r6F^{)Xbb}Nzd?^qrIOiXn2x-C5bKbsFbzv5(qSx(LWMbWDrAhjQU0&= zCg=J8W=$gEODvJ<1P~cSB7;OQLT&)y8$}cR#FF!EI-21B$Ap~<_+gDgj6GF`tbNE* zivPZresw%DIsVDd*B8Y<*#sK>tC7E@?=QK2$@RAs_*=oh-1SSYzoo$63jXD;|Cn5g zf1So*KC(p*M9$j&c4>IzoUZO@=VXl%_{`Uuw+v@wW@fUB2RSFt)>SajM{1?SYaQ01 zELxu-e-fdjSgThtQPFY>k)uCKL1^PDLZN1qOxe zh^%N&(UmhC_ct_BY4vhD#Sc?0beB4xQ>ckbnCGb3fm*NW-i4A%&9#;=o~a2pwVa+RPUb9-6$k5k3I-9hc{* Date: Sun, 29 May 2022 21:53:11 +0200 Subject: [PATCH 024/357] make cart.table, fletch.table and loom diggable --- mods/ITEMS/mcl_cartography_table/init.lua | 4 +++- mods/ITEMS/mcl_fletching_table/init.lua | 4 +++- mods/ITEMS/mcl_loom/init.lua | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/mods/ITEMS/mcl_cartography_table/init.lua b/mods/ITEMS/mcl_cartography_table/init.lua index d2f065880..a7c66b4e2 100644 --- a/mods/ITEMS/mcl_cartography_table/init.lua +++ b/mods/ITEMS/mcl_cartography_table/init.lua @@ -11,7 +11,9 @@ minetest.register_node("mcl_cartography_table:cartography_table", { "cartography_table_side3.png", "cartography_table_side1.png" }, paramtype2 = "facedir", - groups = {choppy=1, deco_block=1, material_wood=1,flammable=1} + groups = { axey = 2, handy = 1, deco_block = 1, material_wood = 1, flammable = 1 }, + _mcl_blast_resistance = 2.5, + _mcl_hardness = 2.5 }) diff --git a/mods/ITEMS/mcl_fletching_table/init.lua b/mods/ITEMS/mcl_fletching_table/init.lua index 88763b218..5fc7556b8 100644 --- a/mods/ITEMS/mcl_fletching_table/init.lua +++ b/mods/ITEMS/mcl_fletching_table/init.lua @@ -10,7 +10,9 @@ minetest.register_node("mcl_fletching_table:fletching_table", { "fletching_table_front.png", "fletching_table_front.png" }, paramtype2 = "facedir", - groups = {choppy=1, deco_block=1, material_wood=1, flammable=1} + groups = { axey = 2, handy = 1, deco_block = 1, material_wood = 1, flammable = 1 }, + _mcl_blast_resistance = 2.5, + _mcl_hardness = 2.5 }) minetest.register_craft({ diff --git a/mods/ITEMS/mcl_loom/init.lua b/mods/ITEMS/mcl_loom/init.lua index 6126a5d39..89960e133 100644 --- a/mods/ITEMS/mcl_loom/init.lua +++ b/mods/ITEMS/mcl_loom/init.lua @@ -11,7 +11,9 @@ minetest.register_node("mcl_loom:loom", { "loom_front.png", "loom_front.png" }, paramtype2 = "facedir", - groups = {choppy=1, deco_block=1, material_wood=1, flammable=1} + groups = { axey = 2, handy = 1, deco_block = 1, material_wood = 1, flammable = 1 }, + _mcl_blast_resistance = 2.5, + _mcl_hardness = 2.5 }) -- 2.40.1 From a86fc935aa4a14700c84e0226c600652ec51255d Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Mon, 30 May 2022 01:32:20 +0000 Subject: [PATCH 025/357] mcl_maps: add callback to load_map function (#2261) Fixes maps in itemframes not loading after restart (#2255) Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/2261 Co-authored-by: Elias Fleckenstein Co-committed-by: Elias Fleckenstein --- mods/ITEMS/mcl_itemframes/init.lua | 5 ++++- mods/ITEMS/mcl_maps/init.lua | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/mods/ITEMS/mcl_itemframes/init.lua b/mods/ITEMS/mcl_itemframes/init.lua index 364bffee6..eac5b066b 100644 --- a/mods/ITEMS/mcl_itemframes/init.lua +++ b/mods/ITEMS/mcl_itemframes/init.lua @@ -64,7 +64,10 @@ minetest.register_entity("mcl_itemframes:map", { }, on_activate = function(self, staticdata) self.id = staticdata - self.object:set_properties({textures = {mcl_maps.load_map(self.id)}}) + mcl_maps.load_map(self.id, function(texture) + -- will not crash even if self.object is invalid by now + self.object:set_properties({textures = {texture}}) + end) end, get_staticdata = function(self) return self.id diff --git a/mods/ITEMS/mcl_maps/init.lua b/mods/ITEMS/mcl_maps/init.lua index 450d8fbad..fb13625d5 100644 --- a/mods/ITEMS/mcl_maps/init.lua +++ b/mods/ITEMS/mcl_maps/init.lua @@ -139,7 +139,7 @@ function mcl_maps.create_map(pos) return itemstack end -function mcl_maps.load_map(id) +function mcl_maps.load_map(id, callback) if id == "" or creating_maps[id] then return end @@ -152,16 +152,19 @@ function mcl_maps.load_map(id) -- Minetest 5.3 and 5.4 until media loads loaded_maps[id] = true dynamic_add_media(map_textures_path .. texture, function() end) + if callback then callback(texture) end else -- minetest.dynamic_add_media() never blocks -- in Minetest 5.5, callback runs after load dynamic_add_media(map_textures_path .. texture, function() loaded_maps[id] = true + if callback then callback(texture) end end) end end if loaded_maps[id] then + if callback then callback(texture) end return texture end end -- 2.40.1 From dc21b02d04fc6802dbafca83b724f3973a663d8b Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 30 May 2022 02:04:49 +0200 Subject: [PATCH 026/357] update old mobs_mc_ horse armor textures --- mods/ENTITIES/mobs_mc/horse.lua | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/mods/ENTITIES/mobs_mc/horse.lua b/mods/ENTITIES/mobs_mc/horse.lua index 53951b460..d423c124c 100644 --- a/mods/ENTITIES/mobs_mc/horse.lua +++ b/mods/ENTITIES/mobs_mc/horse.lua @@ -81,6 +81,20 @@ for b=1, #horse_base do end end +-- in e7898352d890c2414af653eba624939df9c0b8b4 (0.76-dev) all items from mobs_mc were moved to mcl_mobitems +-- this results in existing horses wearing armor would still have the old texture filename in their +-- properties this function updates them. It should be removed some time in the future when we can be +-- reasonably sure all horses that want it get the new nexture. +local function update_textures(self) + local old = "mobs_mc_horse_armor_" + local txt = self.object:get_properties().textures + if txt[2]:find(old) then + txt[2] = txt[2]:gsub(old,"mcl_mobitems_horse_armor_") + self.object:set_properties({textures=txt}) + return + end +end + -- Horse local horse = { description = S("Horse"), @@ -138,7 +152,7 @@ local horse = { max = 2, looting = "common",}, }, - + on_spawn = update_textures, do_custom = function(self, dtime) -- set needed values if not already present -- 2.40.1 From 31106a203154866ab8de5654505ac2c9fa5fe828 Mon Sep 17 00:00:00 2001 From: MysticTempest Date: Mon, 30 May 2022 15:11:22 -0500 Subject: [PATCH 027/357] Fix items obtained from villager trades: This PR stops the load_enchantments function from being called for all items in the villager trades. Fixing non-enchanted items from villagers being unable to stack with their regular counterparts. As they now, no longer have any description metadata. While also ensuring that enchanted items still have their tooltips, and work. --- mods/ENTITIES/mobs_mc/villager.lua | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mods/ENTITIES/mobs_mc/villager.lua b/mods/ENTITIES/mobs_mc/villager.lua index f04602ebf..79744714e 100644 --- a/mods/ENTITIES/mobs_mc/villager.lua +++ b/mods/ENTITIES/mobs_mc/villager.lua @@ -724,7 +724,10 @@ local function set_trade(trader, player, inv, concrete_tradenum) local trade = trades[concrete_tradenum] inv:set_stack("wanted", 1, ItemStack(trade.wanted[1])) local offered = ItemStack(trade.offered) - mcl_enchanting.load_enchantments(offered) + -- Only load enchantments for enchanted items; fixes unnecessary metadata being applied to regular items from villagers. + if mcl_enchanting.is_enchanted(offered:get_name()) then + mcl_enchanting.load_enchantments(offered) + end inv:set_stack("offered", 1, offered) if trade.wanted[2] then local wanted2 = ItemStack(trade.wanted[2]) -- 2.40.1 From 25d847f49f2c5aea8670e1a1b95446d2248aa40b Mon Sep 17 00:00:00 2001 From: NO11 Date: Tue, 31 May 2022 12:12:28 +0200 Subject: [PATCH 028/357] Fix crash when unknown item in offhand slot --- mods/HUD/mcl_offhand/init.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mods/HUD/mcl_offhand/init.lua b/mods/HUD/mcl_offhand/init.lua index b0fc223ec..5f48eede9 100644 --- a/mods/HUD/mcl_offhand/init.lua +++ b/mods/HUD/mcl_offhand/init.lua @@ -59,8 +59,9 @@ minetest.register_globalstep(function(dtime) local itemstack = mcl_offhand.get_offhand(player) local offhand_item = itemstack:get_name() local offhand_hud = mcl_offhand[player].hud - if offhand_item ~= "" then - local item_texture = minetest.registered_items[offhand_item].inventory_image .. "^[resize:" .. max_offhand_px .. "x" .. max_offhand_px + local item = minetest.registered_items[offhand_item] + if offhand_item ~= "" and item then + local item_texture = item.inventory_image .. "^[resize:" .. max_offhand_px .. "x" .. max_offhand_px local position = {x = 0.5, y = 1} local offset = {x = -320, y = -32} -- 2.40.1 From 983b8f09341ef6dd4da74b9a703a4cb51dce69d0 Mon Sep 17 00:00:00 2001 From: MysticTempest Date: Thu, 2 Jun 2022 00:20:44 -0500 Subject: [PATCH 029/357] Make breaking boats by hand easier. --- mods/ENTITIES/mcl_boats/init.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mods/ENTITIES/mcl_boats/init.lua b/mods/ENTITIES/mcl_boats/init.lua index b7cc92775..a44e7ea87 100644 --- a/mods/ENTITIES/mcl_boats/init.lua +++ b/mods/ENTITIES/mcl_boats/init.lua @@ -110,9 +110,11 @@ end local boat = { physical = true, + pointable = true, -- Warning: Do not change the position of the collisionbox top surface, -- lowering it causes the boat to fall through the world if underwater collisionbox = {-0.5, -0.35, -0.5, 0.5, 0.3, 0.5}, + selectionbox = {-0.7, -0.35, -0.7, 0.7, 0.3, 0.7}, visual = "mesh", mesh = "mcl_boats_boat.b3d", textures = {"mcl_boats_texture_oak_boat.png", "mcl_boats_texture_oak_boat.png", "mcl_boats_texture_oak_boat.png", "mcl_boats_texture_oak_boat.png", "mcl_boats_texture_oak_boat.png"}, -- 2.40.1 From 5dde594c1933e6704c8dde5aff237a5dc1fa74c9 Mon Sep 17 00:00:00 2001 From: MysticTempest Date: Thu, 2 Jun 2022 01:50:51 -0500 Subject: [PATCH 030/357] Item movement fixes: This PR fixes items at flowing_water edges not falling down holes. As well as fixing items not sliding on slippery nodes like ice. And, allows for movement starting at the source block of a flowing water node. While ensuring regular water_source blocks do not bug out. --- mods/ENTITIES/mcl_item_entity/init.lua | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/mods/ENTITIES/mcl_item_entity/init.lua b/mods/ENTITIES/mcl_item_entity/init.lua index 5d86071eb..1e781ef27 100644 --- a/mods/ENTITIES/mcl_item_entity/init.lua +++ b/mods/ENTITIES/mcl_item_entity/init.lua @@ -78,7 +78,6 @@ local function enable_physics(object, luaentity, ignore_check) object:set_properties({ physical = true }) - object:set_velocity({x=0,y=0,z=0}) object:set_acceleration({x=0,y=-get_gravity(),z=0}) end end @@ -774,8 +773,8 @@ minetest.register_entity(":__builtin:item", { return end - -- Move item around on flowing liquids - if def and def.liquidtype == "flowing" then + -- Move item around on flowing liquids; add 'source' check to allow items to continue flowing a bit in the source block of flowing water. + if def and def.liquidtype == "flowing" or def.liquidtype == "source" then --[[ Get flowing direction (function call from flowlib), if there's a liquid. NOTE: According to Qwertymine, flowlib.quickflow is only reliable for liquids with a flowing distance of 7. @@ -808,7 +807,7 @@ minetest.register_entity(":__builtin:item", { local nn = minetest.get_node({x=p.x, y=p.y-0.5, z=p.z}).name local v = self.object:get_velocity() - if not minetest.registered_nodes[nn] or minetest.registered_nodes[nn].walkable and v.y == 0 then + if not minetest.registered_nodes[nn] or minetest.registered_nodes[nn].walkable and not minetest.registered_nodes[nn].groups.slippery and v.y == 0 then if self.physical_state then local own_stack = ItemStack(self.object:get_luaentity().itemstring) -- Merge with close entities of the same item -- 2.40.1 From 62d7b8cc770f1b818a4ef6145e01b2effccfe836 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 3 Jun 2022 12:43:25 +0200 Subject: [PATCH 031/357] move depends.txt to mod.conf --- depends.txt | 5 ----- mod.conf | 3 +++ 2 files changed, 3 insertions(+), 5 deletions(-) delete mode 100644 depends.txt create mode 100644 mod.conf diff --git a/depends.txt b/depends.txt deleted file mode 100644 index 6ac5f4501..000000000 --- a/depends.txt +++ /dev/null @@ -1,5 +0,0 @@ -mcl_core -mcl_mushrooms -mcl_flowers -mcl_potions -mcl_hunger \ No newline at end of file diff --git a/mod.conf b/mod.conf new file mode 100644 index 000000000..9e28bd300 --- /dev/null +++ b/mod.conf @@ -0,0 +1,3 @@ +name = mcl_sus_stew +author = chmodsayshello +depends = mcl_core, mcl_mushrooms, mcl_flowers, mcl_potions, mcl_hunger -- 2.40.1 From b4c5805afea7cf9f17cc671438e559c1e8c2f1b1 Mon Sep 17 00:00:00 2001 From: MysticTempest Date: Fri, 3 Jun 2022 05:46:27 -0500 Subject: [PATCH 032/357] Make items flowing in water use acceleration for movement. --- mods/ENTITIES/mcl_item_entity/init.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mods/ENTITIES/mcl_item_entity/init.lua b/mods/ENTITIES/mcl_item_entity/init.lua index 1e781ef27..c0fbf4b15 100644 --- a/mods/ENTITIES/mcl_item_entity/init.lua +++ b/mods/ENTITIES/mcl_item_entity/init.lua @@ -783,11 +783,11 @@ minetest.register_entity(":__builtin:item", { -- Just to make sure we don't manipulate the speed for no reason if vec.x ~= 0 or vec.y ~= 0 or vec.z ~= 0 then -- Minecraft Wiki: Flowing speed is "about 1.39 meters per second" - local f = 1.39 + local f = 1.2 -- Set new item moving speed into the direciton of the liquid local newv = vector.multiply(vec, f) - self.object:set_acceleration({x = 0, y = 0, z = 0}) - self.object:set_velocity({x = newv.x, y = -0.22, z = newv.z}) + -- Swap to acceleration instead of a static speed to better mimic MC mechanics. + self.object:set_acceleration({x = newv.x, y = -0.22, z = newv.z}) self.physical_state = true self._flowing = true -- 2.40.1 From 3cd87dfe3835fa9f8057ff0b935d2239f426b6e0 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 3 Jun 2022 12:43:47 +0200 Subject: [PATCH 033/357] use itemmeta instead of separate itemstrings --- init.lua | 187 ++++++++++++++++++++++++++----------------------------- 1 file changed, 88 insertions(+), 99 deletions(-) diff --git a/init.lua b/init.lua index 1c3774106..e39be2944 100644 --- a/init.lua +++ b/init.lua @@ -4,129 +4,118 @@ local eat = minetest.item_eat(6, "mcl_core:bowl") --6 hunger points, player receives mcl_core:bowl after eating +local flower_effect = { + [ "mcl_flowers:tulip_white" ] = "poison", + [ "mcl_flowers:blue_orchid" ] = "hunger", + [ "mcl_flowers:dandelion" ] = "hunger", + [ "mcl_flowers:peony" ] = "jump", + [ "mcl_flowers:oxeye_daisy" ] = "regeneration", + [ "mcl_flowers:poppy" ] = "night_vision" +} +local effects = { + [ "poison" ] = function(itemstack, placer, pointed_thing) + mcl_potions.poison_func(placer, 1, 12) + return eat(itemstack, placer, pointed_thing) + end, -local function poison(itemstack, placer, pointed_thing) - local hunger = mcl_hunger.get_hunger(placer) - if hunger < 20 then - mcl_potions.poison_func(placer, 1, 12) - return eat(itemstack, placer, pointed_thing) - end + [ "hunger" ] = function(itemstack, placer, pointed_thing, player) + mcl_hunger.item_eat(6, "mcl_core:bowl", 3.5, 0, 100) + return eat(itemstack, placer, pointed_thing) + end, + + ["jump"] = function(itemstack, placer, pointed_thing) + mcl_potions.leaping_func(placer, 1, 6) + return eat(itemstack, placer, pointed_thing) + end, + + ["regeneration"] = function(itemstack, placer, pointed_thing) + mcl_potions.regeneration_func(placer, 1, 8) + return eat(itemstack, placer, pointed_thing) + end, + + ["night_vision"] = function(itemstack, placer, pointed_thing) + mcl_potions.night_vision_func(placer, 1, 5) + return eat(itemstack, placer, pointed_thing) + end, +} + +local function eat_stew(itemstack, placer, pointed_thing) + local e = itemstack:get_meta():get_string("effect") + if effects[e] then + if effects[e](itemstack,placer,pointed_thing) then + return "mcl_core:bowl" + end + end end -local function hunger(itemstack, placer, pointed_thing, player) - local hunger = mcl_hunger.get_hunger(placer) - if hunger < 20 then - return eat(itemstack, placer, pointed_thing) - end -end +minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) + if itemstack:get_name() ~= "mcl_sus_stew:stew" then return end + for f,e in pairs(flower_effect) do + for _,it in pairs(old_craft_grid) do + if it:get_name() == f then + itemstack:get_meta():set_string("effect",e) + return itemstack + end + end + end +end) -local function jump_boost(itemstack, placer, pointed_thing) - local hunger = mcl_hunger.get_hunger(placer) - if hunger < 20 then - mcl_potions.leaping_func(placer, 1, 6) - return eat(itemstack, placer, pointed_thing) - end -end - -local function regeneration(itemstack, placer, pointed_thing) - local hunger = mcl_hunger.get_hunger(placer) - if hunger < 20 then - mcl_potions.regeneration_func(placer, 1, 8) - return eat(itemstack, placer, pointed_thing) - end -end - -local function night_vision(itemstack, placer, pointed_thing) - local hunger = mcl_hunger.get_hunger(placer) - if hunger < 20 then - mcl_potions.night_vision_func(placer, 1, 5) - return eat(itemstack, placer, pointed_thing) - end -end - - --- ________________________ ---_________________________________________/ Item Regestration \_________________ -minetest.register_craftitem("mcl_sus_stew:poison_stew",{ - description = "Suspicious Stew", - inventory_image = "sus_stew.png", - stack_max = 1, - on_place = poison, - groups = { food = 2, eatable = 4, not_in_creative_inventory=1,}, - _mcl_saturation = 7.2, +-- ________________________ +--_________________________________________/ Item Regestration \_________________ +minetest.register_craftitem("mcl_sus_stew:stew",{ + description = "Suspicious Stew", + inventory_image = "sus_stew.png", + stack_max = 1, + on_place = eat_stew, + groups = { food = 2, eatable = 4, can_eat_when_full = 1, not_in_creative_inventory=1,}, + _mcl_saturation = 7.2, }) -minetest.register_craftitem("mcl_sus_stew:hunger_stew",{ - description = "Suspicious Stew", - inventory_image = "sus_stew.png", - stack_max = 1, - on_place = hunger, - groups = { food = 2, eatable = 4, not_in_creative_inventory=1,}, - _mcl_saturation = 7.2, -}) +mcl_hunger.register_food("mcl_sus_stew:stew",6, "mcl_core:bowl") -minetest.register_craftitem("mcl_sus_stew:jump_boost_stew",{ - description = "Suspicious Stew", - inventory_image = "sus_stew.png", - stack_max = 1, - on_place = jump_boost, - groups = { food = 2, eatable = 4, not_in_creative_inventory=1,}, - _mcl_saturation = 7.2, -}) +--compat with old (mcl5) sus_stew +minetest.register_alias("mcl_sus_stew:poison_stew", "mcl_sus_stew:stew") +minetest.register_alias("mcl_sus_stew:hunger_stew", "mcl_sus_stew:stew") +minetest.register_alias("mcl_sus_stew:jump_boost_stew", "mcl_sus_stew:stew") +minetest.register_alias("mcl_sus_stew:regneration_stew", "mcl_sus_stew:stew") +minetest.register_alias("mcl_sus_stew:night_vision_stew", "mcl_sus_stew:stew") -minetest.register_craftitem("mcl_sus_stew:regneration_stew",{ - description = "Suspicious Stew", - inventory_image = "sus_stew.png", - stack_max = 1, - on_place = regeneration, - groups = { food = 2, eatable = 4, not_in_creative_inventory=1,}, - _mcl_saturation = 7.2, -}) - -minetest.register_craftitem("mcl_sus_stew:night_vision_stew",{ - description = "Suspicious Stew", - inventory_image = "sus_stew.png", - stack_max = 1, - on_place = night_vision, - groups = { food = 2, eatable = 4, not_in_creative_inventory=1,}, - _mcl_saturation = 7.2, -}) - --- ____________________________ ---______________________________________/ Using mcl_hunger API \______________________ -mcl_hunger.register_food("mcl_sus_stew:hunger_stew",6, "mcl_core:bowl", 3.5, 0, 100) -- Register it using mcl_hunger so i can use its poison feature - - --- ______________ ---_________________________________________/ Crafts \________________________________ +-- ______________ +--_________________________________________/ Crafts \________________________________ minetest.register_craft({ - output = "mcl_sus_stew:poison_stew", - recipe = { {"mcl_mushrooms:mushroom_red", "mcl_mushrooms:mushroom_brown"}, {"mcl_core:bowl", "mcl_flowers:tulip_white"} }, + type = "shapeless", + output = "mcl_sus_stew:stew", + recipe = {"mcl_mushrooms:mushroom_red", "mcl_mushrooms:mushroom_brown", "mcl_core:bowl", "mcl_flowers:tulip_white"}, }) minetest.register_craft({ - output = "mcl_sus_stew:hunger_stew", - recipe = { {"mcl_mushrooms:mushroom_red", "mcl_mushrooms:mushroom_brown"}, {"mcl_core:bowl", "mcl_flowers:blue_orchid"} }, + type = "shapeless", + output = "mcl_sus_stew:stew", + recipe = {"mcl_mushrooms:mushroom_red", "mcl_mushrooms:mushroom_brown", "mcl_core:bowl", "mcl_flowers:blue_orchid"}, }) minetest.register_craft({ - output = "mcl_sus_stew:hunger_stew", - recipe = { {"mcl_mushrooms:mushroom_red", "mcl_mushrooms:mushroom_brown"}, {"mcl_core:bowl", "mcl_flowers:dandelion"} }, + type = "shapeless", + output = "mcl_sus_stew:stew", + recipe = {"mcl_mushrooms:mushroom_red", "mcl_mushrooms:mushroom_brown", "mcl_core:bowl", "mcl_flowers:dandelion"} , }) minetest.register_craft({ - output = "mcl_sus_stew:jump_boost_stew", - recipe = { {"mcl_mushrooms:mushroom_red", "mcl_mushrooms:mushroom_brown"}, {"mcl_core:bowl", "mcl_flowers:peony"} }, + type = "shapeless", + output = "mcl_sus_stew:stew", + recipe = {"mcl_mushrooms:mushroom_red", "mcl_mushrooms:mushroom_brown", "mcl_core:bowl", "mcl_flowers:peony"}, }) minetest.register_craft({ - output = "mcl_sus_stew:regeneration_stew", - recipe = { {"mcl_mushrooms:mushroom_red", "mcl_mushrooms:mushroom_brown"}, {"mcl_core:bowl", "mcl_flowers:oxeye_daisy"} }, + type = "shapeless", + output = "mcl_sus_stew:stew", + recipe = {"mcl_mushrooms:mushroom_red", "mcl_mushrooms:mushroom_brown", "mcl_core:bowl", "mcl_flowers:oxeye_daisy"}, }) minetest.register_craft({ - output = "mcl_sus_stew:night_vision_stew", - recipe = { {"mcl_mushrooms:mushroom_red", "mcl_mushrooms:mushroom_brown"}, {"mcl_core:bowl", "mcl_flowers:poppy"} }, + type = "shapeless", + output = "mcl_sus_stew:stew", + recipe = {"mcl_mushrooms:mushroom_red", "mcl_mushrooms:mushroom_brown", "mcl_core:bowl", "mcl_flowers:poppy"}, }) -- 2.40.1 From 6f3c013d41598a6083717a3e33ee9ebe1c258ce5 Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 4 Jun 2022 02:44:39 +0200 Subject: [PATCH 034/357] random effect on sstew with no meta --- init.lua | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/init.lua b/init.lua index e39be2944..37fb5265f 100644 --- a/init.lua +++ b/init.lua @@ -39,13 +39,22 @@ local effects = { return eat(itemstack, placer, pointed_thing) end, } +local function get_random_effect() + local keys = {} + for k in pairs(effects) do + table.insert(keys, k) + end + return effects[keys[math.random(#keys)]] +end local function eat_stew(itemstack, placer, pointed_thing) local e = itemstack:get_meta():get_string("effect") - if effects[e] then - if effects[e](itemstack,placer,pointed_thing) then - return "mcl_core:bowl" - end + local f = effects[e] + if not f then + f = get_random_effect() + end + if f(itemstack,placer,pointed_thing) then + return "mcl_core:bowl" end end -- 2.40.1 From ef093d0c003d6e9089253991f9259b1113d99b9f Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 4 Jun 2022 16:33:18 +0200 Subject: [PATCH 035/357] Be more careful with possibly expired objects --- mods/ENTITIES/mcl_burning/api.lua | 1 + mods/ITEMS/mcl_bows/rocket.lua | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/mods/ENTITIES/mcl_burning/api.lua b/mods/ENTITIES/mcl_burning/api.lua index 885875aca..1d07e96f0 100644 --- a/mods/ENTITIES/mcl_burning/api.lua +++ b/mods/ENTITIES/mcl_burning/api.lua @@ -134,6 +134,7 @@ function mcl_burning.set_on_fire(obj, burn_time) end function mcl_burning.extinguish(obj) + if not obj:get_pos() then return end if mcl_burning.is_burning(obj) then local storage = mcl_burning.get_storage(obj) if obj:is_player() then diff --git a/mods/ITEMS/mcl_bows/rocket.lua b/mods/ITEMS/mcl_bows/rocket.lua index 9eb8ab8c4..b8ad2c1f0 100644 --- a/mods/ITEMS/mcl_bows/rocket.lua +++ b/mods/ITEMS/mcl_bows/rocket.lua @@ -19,15 +19,16 @@ local function dir_to_pitch(dir) end local function damage_explosion(self, damagemulitplier) - mcl_explosions.explode(self.object:get_pos(), 3, {}) - local objects = minetest.get_objects_inside_radius(self.object:get_pos(), 8) + local p = self.object:get_pos() + mcl_explosions.explode(p, 3, {}) + local objects = minetest.get_objects_inside_radius(p, 8) for _,obj in pairs(objects) do if obj:is_player() then - mcl_util.deal_damage(obj, damagemulitplier - vector.distance(self.object:get_pos(), obj:get_pos()), {type = "explosion"}) + mcl_util.deal_damage(obj, damagemulitplier - vector.distance(p, obj:get_pos()), {type = "explosion"}) elseif obj:get_luaentity().is_mob then obj:punch(self.object, 1.0, { full_punch_interval=1.0, - damage_groups={fleshy=damagemulitplier - vector.distance(self.object:get_pos(), obj:get_pos())}, + damage_groups={fleshy=damagemulitplier - vector.distance(p, obj:get_pos())}, }, self.object:get_velocity()) end end -- 2.40.1 From 4af1094eedd431201bd580bf3af36628d17f9529 Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 2 Jun 2022 03:12:14 +0200 Subject: [PATCH 036/357] Add shipwrecks schematics by chmodsayshello --- mods/MAPGEN/mcl_shipwrecks/init.lua | 104 ++++++++++++++++++ mods/MAPGEN/mcl_shipwrecks/mod.conf | 3 + .../shipwreck_full_back_damaged.mts | Bin 0 -> 1203 bytes .../schematics/shipwreck_full_damaged.mts | Bin 0 -> 1518 bytes .../schematics/shipwreck_full_normal.mts | Bin 0 -> 1545 bytes .../schematics/shipwreck_half_back.mts | Bin 0 -> 1248 bytes .../schematics/shipwreck_half_front.mts | Bin 0 -> 903 bytes 7 files changed, 107 insertions(+) create mode 100644 mods/MAPGEN/mcl_shipwrecks/init.lua create mode 100644 mods/MAPGEN/mcl_shipwrecks/mod.conf create mode 100644 mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_full_back_damaged.mts create mode 100644 mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_full_damaged.mts create mode 100644 mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_full_normal.mts create mode 100644 mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_half_back.mts create mode 100644 mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_half_front.mts diff --git a/mods/MAPGEN/mcl_shipwrecks/init.lua b/mods/MAPGEN/mcl_shipwrecks/init.lua new file mode 100644 index 000000000..e9b957095 --- /dev/null +++ b/mods/MAPGEN/mcl_shipwrecks/init.lua @@ -0,0 +1,104 @@ +local modname = minetest.get_current_modname() +local modpath = minetest.get_modpath(modname) +--local S = minetest.get_translator(modname) + +local mgp = minetest.get_mapgen_params() +local pr = PseudoRandom(mgp.seed) + +--schematics by chmodsayshello +local schems = { + "shipwreck_full_damaged", + "shipwreck_full_normal", + "shipwreck_full_back_damaged", + "shipwreck_half_front", + "shipwreck_half_back", +} + +local loottable_supply = { + stacks_min = 3, + stacks_max = 10, + items = { + --{ itemstring = "TODO:sus_stew", weight = 10, amount_min = 1, amount_max = 1 }, + { itemstring = "mcl_core:paper", weight = 8, amount_min = 1, amount_max = 12 }, + { itemstring = "mcl_farming:wheat_item", weight = 7, amount_min = 8, amount_max = 21 }, + { itemstring = "mcl_farming:carrot_item", weight = 7, amount_min = 4, amount_max = 8 }, + { itemstring = "mcl_farming:potato_item_poison", weight = 7, amount_min = 2, amount_max = 6 }, + { itemstring = "mcl_farming:potato_item", weight = 7, amount_min = 2, amount_max = 6 }, + --{ itemstring = "TODO:moss_block", weight = 7, amount_min = 1, amount_max = 4 }, + { itemstring = "mcl_core:coal_lump", weight = 6, amount_min = 2, amount_max = 8 }, + { itemstring = "mcl_mobitems:rotten_flesh", weight = 5, amount_min = 5, amount_max = 24 }, + { itemstring = "mcl_farming:potato_item", weight = 3, amount_min = 1, amount_max = 5 }, + { itemstring = "mcl_armor:helmet_leather_enchanted", weight = 3 }, + { itemstring = "mcl_armor:chestplate_leather_enchanted", weight = 3 }, + { itemstring = "mcl_armor:leggings_leather_enchanted", weight = 3 }, + { itemstring = "mcl_armor:boots_leather_enchanted", weight = 3 }, + --{ itemstring = "TODO:bamboo", weight = 2, amount_min = 1, amount_max = 3 }, + { itemstring = "mcl_farming:pumpkin", weight = 2, amount_min = 1, amount_max = 3 }, + { itemstring = "mcl_tnt:tnt", weight = 1, amount_min = 1, amount_max = 2 }, + + } +} + +local loottable_treasure = { + stacks_min = 3, + stacks_max = 10, + items = { + { itemstring = "mcl_core:iron_ingot", weight = 8, amount_min = 1, amount_max = 5 }, + { itemstring = "mcl_core:iron_nugget", weight = 8, amount_min = 1, amount_max = 10 }, + { itemstring = "mcl_core:emerald", weight = 8, amount_min = 1, amount_max = 12 }, + { itemstring = "mcl_dye:blue", weight = 8, amount_min = 1, amount_max = 12 }, + { itemstring = "mcl_core:gold_ingot", weight = 8, amount_min = 1, amount_max = 5 }, + { itemstring = "mcl_core:gold_nugget", weight = 8, amount_min = 1, amount_max = 10 }, + { itemstring = "mcl_experience:bottle", weight = 8, amount_min = 1, amount_max = 10 }, + { itemstring = "mcl_core:diamond", weight = 8, amount_min = 1, amount_max = 10 }, + } +} + +local function fill_chests(p1,p2) + for _,p in pairs(minetest.find_nodes_in_area(p1,p2,{"mcl_chests:chest_small"})) do + if minetest.get_meta(p):get_string("infotext") ~= "Chest" then + minetest.registered_nodes["mcl_chests:chest_small"].on_construct(p) + end + local inv = minetest.get_inventory( {type="node", pos=p} ) + local loot = loottable_supply + if pr:next(1,10) == 1 then loot = loottable_treasure end + mcl_loot.fill_inventory(inv, "main", mcl_loot.get_multi_loot({loot}, pr), pr) + end +end + +local function get_ocean_biomes() + local r = {} + for k,_ in pairs(minetest.registered_biomes) do + if k:find("_ocean") then table.insert(r,k) end + end + return r +end + +minetest.register_node("mcl_shipwrecks:structblock", {drawtype="airlike",groups = {structblock=1,not_in_creative_inventory=1},}) + +minetest.register_decoration({ + decoration = "mcl_shipwrecks:structblock", + deco_type = "simple", + place_on = {"group:sand","mcl_core:gravel"}, + spawn_by = {"group:water"}, + num_spawn_by = 4, + sidelen = 80, + fill_ratio = 0.00002, + flags = "place_center_x, place_center_z, force_placement", + biomes = get_ocean_biomes(), + y_max=mgp.water_level-4, +}) + +minetest.register_lbm({ + name = "mcl_shipwrecks:struct_lbm", + run_at_every_load = true, + nodenames = {"mcl_shipwrecks:structblock"}, + action = function(pos, node) + minetest.set_node(pos,{name="air"}) + local file = modpath.."/schematics/"..schems[pr:next(1,#schems)]..".mts" + local pp = vector.offset(pos,0,pr:next(-4,-2),0) + mcl_structures.place_schematic(pp, file, "random", nil, true, "place_center_x,place_center_z", function() + fill_chests(vector.offset(pos,-20,-5,-20),vector.offset(pos,20,15,20)) + end)-- pr, callback_param + end +}) diff --git a/mods/MAPGEN/mcl_shipwrecks/mod.conf b/mods/MAPGEN/mcl_shipwrecks/mod.conf new file mode 100644 index 000000000..a3ca2c02c --- /dev/null +++ b/mods/MAPGEN/mcl_shipwrecks/mod.conf @@ -0,0 +1,3 @@ +name = mcl_shipwrecks +author = cora +depends = mcl_loot, mcl_structures diff --git a/mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_full_back_damaged.mts b/mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_full_back_damaged.mts new file mode 100644 index 0000000000000000000000000000000000000000..12f3c9b1397a55b114129633349306c427bef496 GIT binary patch literal 1203 zcmeYb3HD`RVNhg{WZ0{D?YyI4lgO*pctQXX;XI?^i0)ZQ#{aV$N&O19v6LA z>McLP!0M>hJPZYOEC0IAlXO zztu&23?83X&#XJIw)btR>f5h#-(;rI`g;})5o_QwjhzK%(jVW`M+-_d{h z`HUCuALqQEk@5cVj3d7--dX>j#nU6pa3KF*Owq02qrZQz`DuKv?9$iBw_DAxPiCIQ zvvx}Q)jPMD8TwLwiS&K@Y_a#s`NulHcmJJ#oRMKpY~Ov$1I8D?feIuZFud9&=Dg32 z!D7m;wcWRh*31jDVm_wwca?*~Ix*%-mhx9e`}A|)bgh_P<2&Qt`MVqss~L*8-)}M$ zT(~QOrNZy@lS?yomu4SyToQh+;=uRmeS%8Mc1_fB&RE?msKn5?=Q{Uu&qF68#0}5< zc^*~v>}^oiLfOwe@9MJW?7Y8p9=ppFv90YJew^y^*lMm+-mkos*<;E>pR*jva|(O& zdz8zvE=jaI9o*QmPW3zEBRl(LAKrcm>Z-DH`(!F?A-++kg(159a6Q8oiH%_Yd^kHb z_2>TC3^KkqueoNjHZ?IGE2+P!;}XShGh9v#SL$1yrOQ(vk z^=Y}sy0p~%m=-?&>>FbNLyaRG4;DW88`!1s?fDM_=Z7j!0=6hWiY@wcH*ik;R7EAF zBex$<`C?I_cGZFJjG$m(jb4n*f#Q|N4pn)i{$$dSsWHFWBk{=JIg_E-uvU_R;lSh{ K>?#)@iUR;mO&+xX literal 0 HcmV?d00001 diff --git a/mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_full_damaged.mts b/mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_full_damaged.mts new file mode 100644 index 0000000000000000000000000000000000000000..5c8a3e105cee2ff2ec228e7b5e4e786cea5fd6a2 GIT binary patch literal 1518 zcmeYb3HD`RVNhg{WZ>$ ztMR?aoKRyT#kL`v$HpWy{8~VHs%*CIn)io)eP?8N5V~@XQEu*=_cmLDwKhIFw{=6# zS@~$)T>EWz;=JwqQpL)yZ?b#G$Z)4iE9g}8Dbd|}G3I}_NpFmMzuD~0H}+^XzN2ER z-ko6o>>T(+XUm&5`I~nB^4Z5Wu_W;@+?n_ExWpHJy8 zUt&>`{-}0#+16icW5TUm&Ruioc2^HO;(hAa#b^9^X+@j9{*8anDP48Mk~4OX{MQeg zw~IwvuWPk?G-uu0$2Yw_k65POzr3eaY^{7<+vfLGTc)$U*|DTIc0rHpoR@QNu9M(o zsIkwR`FP5jBZ_svR6*Y11?fU#r*3LOOtH+}F z{o@zk6QA8V9?A5*kl{h~2aEHoPO7s%vs=B)bx!5^RhfeA=~o#T;uy`3`?YS z{$bJCbH~V;)}GF%{bTMr2Mz+@wN7*3q>vyq?5MD9dDd@rbB$yp__Ma#LhZkvH5aviC?Nr z{l~@K^QtRsJJ0;`6pR;d;(KVHpgHraVW*bIFIQo|lDma5`wcD??pd57>n^+XmBqTy z>qW_b!hf4b^1oOz$LZQ>&ow`e-supw>ifB=Lz!(Mcc;aMmMQmZGW(3*aGY(}y5Wd_A`_N|w0i!~M0Uo$ju{O!7C zXJ&u&0b9>st`$O}T6XQ%tyUNKvRRugd*S_~P^Lnn=%bU*@6B=X$5k%nulvKhO+W5w z`icp1fu7O~-<|zl|EW2nspY@WsxR$u-SXPk7W;T@r<{4+p5_tgQqB6HXlKRhzp87* zKmVJwl3&$T@Hl_6i%bQZ9$(hl?UEth`!xbI+BF+x*yeRDNpH1oRocHeVhIo=e2Hi0*XM&v~3-?$ts+I9cKw}{0 zqSy=K#3#iY;gTweH>#NPb}n!DVgmtJ=Bs5}U+=2syEgxH{CzVAPqoSXUV$sVyXAVu zsX0o@ZH(w`3=O_%)P8GP<(XcCdcM#5`574cy`D}f%r5^sYk8U1(kYpOZ5DainJkOH z=`Vi$y+m*O*Y`>`^H0~@XJ&}tdaDy#woGoyL&@D=_PqXnm-YIO-#I+n|2yg~71Xl+ zbns7*$W9LNdB4wZsGoN(yRC@3f`>up{M)*ZMwj(d&L>u@yceJPT=-W0)NeEQ?tBry z{^Gol^Pcgaf3KbO_(>S=*3wywGU>T8+*#X>Y)j{le!A~<_e;Z7b+Lvkte?!(-+D|! zsi$wTt3l^X9%cTw&5z&Y?6mn^tJm(*bLoC!=-yAhod&Ju(T6O1>Nf8`XgkmL{NehV z0-1(B@%4WSy}FwB3cdgJL+)Yx?c?jW@ju^u@8A=e<$lL1HYe|i+j`e4`Aplpo7qZj z?<|a(JkKnCXaD_r$8?M1n{P|Jwm5#Tu^^|SW)SN__YHS4j@?r`5? zo_C?l3>7Rf{kJ>Q|Ja_p!tuwJkKw?l5A&F1_dI7n1tJ%>z4d9FDXVDDazOl2)Gzk8 zFLGEp9k;LK?70`};^AjByP6?b!)Apt*G&|)9!gmW^F_B=+ zdh{i9t>EX3fEYr=C zRCN=4RX#h#xp*E;{~wVqn&%O?(bzTr(Entiba|V|3Yi%`=k%Kn?>o80yHm|TKIyl~ zmHFpB_4}{nFkZx!Y$Kp@?iDBh>pvegM0dZQ-ghc^Md#w)pqsDk3jav#n))OysYW5<_Gu=$BMn0Tt3W1?6 zrZ_WllTpAEZ7)`PwL*rT`Q^J-b4J>Ttbfd~L*??*?iJbpj%!1Fo73^%_Uvg70H#i? A82|tP literal 0 HcmV?d00001 diff --git a/mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_half_back.mts b/mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_half_back.mts new file mode 100644 index 0000000000000000000000000000000000000000..f58376f3009eb49fb9bbb3e71668aee3205aa9ef GIT binary patch literal 1248 zcmeYb3HD`RVNhg{WZ$H!}{I@5+GeGy1i&snG z{Nq-$;|gomo|#y`PX50C=eK7CKJHpkc}1QfI!^p;`2CX5|C4vj-@HbAv(9Vqh(0fy zedjo1!{Rr8Be#CBw%oS!-X~kv?4y#}Y3=7%F&?lyyZY{FzWx2liT}SGF={Hlw(I2k z#|#HPKbXlZcU}e@;6UQR%dNSyEf1u+UodC96L`D$Vdzc1O>8G#$8kUSqc_R&#>5@3 zZiPi&i>iOakQllB?*5J|Jm0v38yN~8ZZr1UFJt#-^OX5o&z}8pl@NHPUbtcVog*{8 zo?@P3aG-alu#AFy^BvjH%Sy@*e+z`w?OwzyuxRz{@`FbTgCDUd*Yt*J+?2iJl2dcQ zdxb^RqX_MDQ!F0FhV(hUTlVOIz@u4So;rq2QzQ;=_`t`v{uINy!VdvSpBC}%d#Lk$ z*NUnK)s^AA_dBPF7n(@S zHZJ3IobQ~DJ%#Hg?mo$3Gh;<+?R;Ghe~Ej#g(n=|EXjPbxi;tMM*bHX;tp%dZ5Aw3 z|Kc_I>z*6yR}}U(FTdomQdM=X{D#|g6D)rCNg00J*LF8Gy}|h6=T{Y}C*$uhGcfG_ K!EU%o(E|2 literal 0 HcmV?d00001 diff --git a/mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_half_front.mts b/mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_half_front.mts new file mode 100644 index 0000000000000000000000000000000000000000..41efb386b3ca718e4788f051e050a0d8405208ac GIT binary patch literal 903 zcmeYb3HD`RVNhg{WZ2D<~CHD;!E-i7-Z000<#n>3-&ZjH`r$|X$A?n zGmA@#G7Ab)Q=pz;5Ch9(q!yPHTP1_2_~P8eoE(S_m|-BNz|5+c^Y-q=yju2Xqw+g2GQ23znQSx??-}bG3 zB|X!``gVI)PYlhjSa(!aSMefe^y%B8Tix7OE?ro7>32k#u*iptS9^WtTq=Cz^1DIq zQT80Z>;E3ATo8Wab2-&@+vZtHiww)917D|GKo+{V!Ku)zIE`{`iVV6VB`~^D|qVE6?k0*>bxf yNKaNv%F9Ql>`Bqfi{`wdyl2^WU%V7yYvmn(FkWx^j-O|gL6+S+nSU%V(*yuqfRd5` literal 0 HcmV?d00001 -- 2.40.1 From b7419dc207ee1e9b16f6f69aed4b72430ab019eb Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 2 Jun 2022 12:30:51 +0200 Subject: [PATCH 037/357] randomly enchant treasure --- mods/MAPGEN/mcl_shipwrecks/init.lua | 84 ++++++++++++++++------------- mods/MAPGEN/mcl_shipwrecks/mod.conf | 2 +- 2 files changed, 47 insertions(+), 39 deletions(-) diff --git a/mods/MAPGEN/mcl_shipwrecks/init.lua b/mods/MAPGEN/mcl_shipwrecks/init.lua index e9b957095..731a43793 100644 --- a/mods/MAPGEN/mcl_shipwrecks/init.lua +++ b/mods/MAPGEN/mcl_shipwrecks/init.lua @@ -14,45 +14,53 @@ local schems = { "shipwreck_half_back", } -local loottable_supply = { - stacks_min = 3, - stacks_max = 10, - items = { - --{ itemstring = "TODO:sus_stew", weight = 10, amount_min = 1, amount_max = 1 }, - { itemstring = "mcl_core:paper", weight = 8, amount_min = 1, amount_max = 12 }, - { itemstring = "mcl_farming:wheat_item", weight = 7, amount_min = 8, amount_max = 21 }, - { itemstring = "mcl_farming:carrot_item", weight = 7, amount_min = 4, amount_max = 8 }, - { itemstring = "mcl_farming:potato_item_poison", weight = 7, amount_min = 2, amount_max = 6 }, - { itemstring = "mcl_farming:potato_item", weight = 7, amount_min = 2, amount_max = 6 }, - --{ itemstring = "TODO:moss_block", weight = 7, amount_min = 1, amount_max = 4 }, - { itemstring = "mcl_core:coal_lump", weight = 6, amount_min = 2, amount_max = 8 }, - { itemstring = "mcl_mobitems:rotten_flesh", weight = 5, amount_min = 5, amount_max = 24 }, - { itemstring = "mcl_farming:potato_item", weight = 3, amount_min = 1, amount_max = 5 }, - { itemstring = "mcl_armor:helmet_leather_enchanted", weight = 3 }, - { itemstring = "mcl_armor:chestplate_leather_enchanted", weight = 3 }, - { itemstring = "mcl_armor:leggings_leather_enchanted", weight = 3 }, - { itemstring = "mcl_armor:boots_leather_enchanted", weight = 3 }, - --{ itemstring = "TODO:bamboo", weight = 2, amount_min = 1, amount_max = 3 }, - { itemstring = "mcl_farming:pumpkin", weight = 2, amount_min = 1, amount_max = 3 }, - { itemstring = "mcl_tnt:tnt", weight = 1, amount_min = 1, amount_max = 2 }, - +local function get_supply_loot() + return { + stacks_min = 3, + stacks_max = 10, + items = { + --{ itemstring = "TODO:sus_stew", weight = 10, amount_min = 1, amount_max = 1 }, + { itemstring = "mcl_core:paper", weight = 8, amount_min = 1, amount_max = 12 }, + { itemstring = "mcl_farming:wheat_item", weight = 7, amount_min = 8, amount_max = 21 }, + { itemstring = "mcl_farming:carrot_item", weight = 7, amount_min = 4, amount_max = 8 }, + { itemstring = "mcl_farming:potato_item_poison", weight = 7, amount_min = 2, amount_max = 6 }, + { itemstring = "mcl_farming:potato_item", weight = 7, amount_min = 2, amount_max = 6 }, + --{ itemstring = "TODO:moss_block", weight = 7, amount_min = 1, amount_max = 4 }, + { itemstring = "mcl_core:coal_lump", weight = 6, amount_min = 2, amount_max = 8 }, + { itemstring = "mcl_mobitems:rotten_flesh", weight = 5, amount_min = 5, amount_max = 24 }, + { itemstring = "mcl_farming:potato_item", weight = 3, amount_min = 1, amount_max = 5 }, + { itemstring = "mcl_armor:helmet_leather_enchanted", weight = 3, func = function(stack, pr) + mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}) end }, + { itemstring = "mcl_armor:chestplate_leather_enchanted", weight = 3, func = function(stack, pr) + mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}) end }, + { itemstring = "mcl_armor:leggings_leather_enchanted", weight = 3, func = function(stack, pr) + mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}) end }, + { itemstring = "mcl_armor:boots_leather_enchanted", weight = 3, func = function(stack, pr) + mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}) end }, + --{ itemstring = "TODO:bamboo", weight = 2, amount_min = 1, amount_max = 3 }, + { itemstring = "mcl_farming:pumpkin", weight = 2, amount_min = 1, amount_max = 3 }, + { itemstring = "mcl_tnt:tnt", weight = 1, amount_min = 1, amount_max = 2 }, + + } } -} +end -local loottable_treasure = { - stacks_min = 3, - stacks_max = 10, - items = { - { itemstring = "mcl_core:iron_ingot", weight = 8, amount_min = 1, amount_max = 5 }, - { itemstring = "mcl_core:iron_nugget", weight = 8, amount_min = 1, amount_max = 10 }, - { itemstring = "mcl_core:emerald", weight = 8, amount_min = 1, amount_max = 12 }, - { itemstring = "mcl_dye:blue", weight = 8, amount_min = 1, amount_max = 12 }, - { itemstring = "mcl_core:gold_ingot", weight = 8, amount_min = 1, amount_max = 5 }, - { itemstring = "mcl_core:gold_nugget", weight = 8, amount_min = 1, amount_max = 10 }, - { itemstring = "mcl_experience:bottle", weight = 8, amount_min = 1, amount_max = 10 }, - { itemstring = "mcl_core:diamond", weight = 8, amount_min = 1, amount_max = 10 }, +local function get_treasure_loot() + return { + stacks_min = 3, + stacks_max = 10, + items = { + { itemstring = "mcl_core:iron_ingot", weight = 8, amount_min = 1, amount_max = 5 }, + { itemstring = "mcl_core:iron_nugget", weight = 8, amount_min = 1, amount_max = 10 }, + { itemstring = "mcl_core:emerald", weight = 8, amount_min = 1, amount_max = 12 }, + { itemstring = "mcl_dye:blue", weight = 8, amount_min = 1, amount_max = 12 }, + { itemstring = "mcl_core:gold_ingot", weight = 8, amount_min = 1, amount_max = 5 }, + { itemstring = "mcl_core:gold_nugget", weight = 8, amount_min = 1, amount_max = 10 }, + { itemstring = "mcl_experience:bottle", weight = 8, amount_min = 1, amount_max = 10 }, + { itemstring = "mcl_core:diamond", weight = 8, amount_min = 1, amount_max = 10 }, + } } -} +end local function fill_chests(p1,p2) for _,p in pairs(minetest.find_nodes_in_area(p1,p2,{"mcl_chests:chest_small"})) do @@ -60,8 +68,8 @@ local function fill_chests(p1,p2) minetest.registered_nodes["mcl_chests:chest_small"].on_construct(p) end local inv = minetest.get_inventory( {type="node", pos=p} ) - local loot = loottable_supply - if pr:next(1,10) == 1 then loot = loottable_treasure end + local loot = get_supply_loot() + if pr:next(1,10) == 1 then loot = get_treasure_loot() end mcl_loot.fill_inventory(inv, "main", mcl_loot.get_multi_loot({loot}, pr), pr) end end diff --git a/mods/MAPGEN/mcl_shipwrecks/mod.conf b/mods/MAPGEN/mcl_shipwrecks/mod.conf index a3ca2c02c..79940c744 100644 --- a/mods/MAPGEN/mcl_shipwrecks/mod.conf +++ b/mods/MAPGEN/mcl_shipwrecks/mod.conf @@ -1,3 +1,3 @@ name = mcl_shipwrecks author = cora -depends = mcl_loot, mcl_structures +depends = mcl_loot, mcl_structures, mcl_enchanting -- 2.40.1 From d4e4bc870878d5f17827a60f47073c66016f561f Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 4 Jun 2022 14:20:53 +0200 Subject: [PATCH 038/357] add rarer beached shipwreck --- mods/MAPGEN/mcl_shipwrecks/init.lua | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/mods/MAPGEN/mcl_shipwrecks/init.lua b/mods/MAPGEN/mcl_shipwrecks/init.lua index 731a43793..12ab0539c 100644 --- a/mods/MAPGEN/mcl_shipwrecks/init.lua +++ b/mods/MAPGEN/mcl_shipwrecks/init.lua @@ -81,6 +81,13 @@ local function get_ocean_biomes() end return r end +local function get_beach_biomes() + local r = {} + for k,_ in pairs(minetest.registered_biomes) do + if k:find("_beach") or k:find("_shore") then table.insert(r,k) end + end + return r +end minetest.register_node("mcl_shipwrecks:structblock", {drawtype="airlike",groups = {structblock=1,not_in_creative_inventory=1},}) @@ -97,6 +104,21 @@ minetest.register_decoration({ y_max=mgp.water_level-4, }) +--rare beached variant +minetest.register_decoration({ + decoration = "mcl_shipwrecks:structblock", + deco_type = "simple", + place_on = {"group:sand","mcl_core:gravel","group:dirt"}, + spawn_by = {"group:water","air"}, + num_spawn_by = 4, + sidelen = 80, + fill_ratio=0.000001, + flags = "place_center_x, place_center_z, force_placement", + biomes = get_beach_biomes(), + y_max = mgp.water_level + 4, + y_min = mgp.water_level - 1, +}) + minetest.register_lbm({ name = "mcl_shipwrecks:struct_lbm", run_at_every_load = true, -- 2.40.1 From 4bff9710a043af9341d2cf09a33b60f1b9f579d5 Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 6 Jun 2022 01:04:08 +0200 Subject: [PATCH 039/357] Make structblock non walk- and pointable --- mods/MAPGEN/mcl_shipwrecks/init.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/MAPGEN/mcl_shipwrecks/init.lua b/mods/MAPGEN/mcl_shipwrecks/init.lua index 12ab0539c..9227680b4 100644 --- a/mods/MAPGEN/mcl_shipwrecks/init.lua +++ b/mods/MAPGEN/mcl_shipwrecks/init.lua @@ -89,7 +89,7 @@ local function get_beach_biomes() return r end -minetest.register_node("mcl_shipwrecks:structblock", {drawtype="airlike",groups = {structblock=1,not_in_creative_inventory=1},}) +minetest.register_node("mcl_shipwrecks:structblock", {drawtype="airlike", walkable = false, pointable = false,groups = {structblock=1,not_in_creative_inventory=1}}) minetest.register_decoration({ decoration = "mcl_shipwrecks:structblock", @@ -129,6 +129,6 @@ minetest.register_lbm({ local pp = vector.offset(pos,0,pr:next(-4,-2),0) mcl_structures.place_schematic(pp, file, "random", nil, true, "place_center_x,place_center_z", function() fill_chests(vector.offset(pos,-20,-5,-20),vector.offset(pos,20,15,20)) - end)-- pr, callback_param + end,pr) end }) -- 2.40.1 From 42c764e1490dc97f8ac9a26f7e585ae10265b7f3 Mon Sep 17 00:00:00 2001 From: epCode <64379263+epCode@users.noreply.github.com> Date: Mon, 6 Jun 2022 11:12:57 -0700 Subject: [PATCH 040/357] Make Villager nod/head shake --- .../mobs_mc/models/mobs_mc_villager.b3d | Bin 213725 -> 67116 bytes mods/ENTITIES/mobs_mc/villager.lua | 10 ++++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_villager.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_villager.b3d index 1b92adfa5924f05da75ec910d2dcbd9f1611f9b8..a941ca8efffe8ffdd3a7d389bd876e6e931f7450 100644 GIT binary patch literal 67116 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 literal 213725 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 Date: Mon, 6 Jun 2022 12:09:14 -0700 Subject: [PATCH 041/357] Add more Villager sounds --- .../sounds/mobs_mc_villager_accept.1.ogg | Bin 0 -> 9793 bytes .../sounds/mobs_mc_villager_accept.2.ogg | Bin 0 -> 9058 bytes .../mobs_mc/sounds/mobs_mc_villager_hurt.1.ogg | Bin 0 -> 6981 bytes .../mobs_mc/sounds/mobs_mc_villager_hurt.2.ogg | Bin 0 -> 6749 bytes .../mobs_mc/sounds/mobs_mc_villager_trade.1.ogg | Bin 0 -> 6518 bytes .../mobs_mc/sounds/mobs_mc_villager_trade.2.ogg | Bin 0 -> 10273 bytes .../mobs_mc/sounds/mobs_mc_villager_trade.3.ogg | Bin 0 -> 8553 bytes .../mobs_mc/sounds/mobs_mc_villager_trade.4.ogg | Bin 0 -> 7427 bytes mods/ENTITIES/mobs_mc/villager.lua | 1 + 9 files changed, 1 insertion(+) create mode 100644 mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_accept.1.ogg create mode 100644 mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_accept.2.ogg create mode 100644 mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_hurt.1.ogg create mode 100644 mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_hurt.2.ogg create mode 100644 mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_trade.1.ogg create mode 100644 mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_trade.2.ogg create mode 100644 mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_trade.3.ogg create mode 100644 mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_trade.4.ogg diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_accept.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_accept.1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..b72b8b83f3bdba5f48c3d688d16a5f073680ff74 GIT binary patch literal 9793 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 D``GLo literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_hurt.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_hurt.1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..6c96f57b8916cd991ea753c560d33eda64623bda GIT binary patch literal 6981 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 literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_trade.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_trade.1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..f177713674e2aa51487789d25a0348173470fe3a GIT binary patch literal 6518 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 SMmQiuS{RcQ-1=@Cy#E8#FB_Wx literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_trade.3.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_trade.3.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e012ed349d5e73c0429ad282da521cc03f652f1b GIT binary patch literal 8553 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 DqCV#+ literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_trade.4.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_trade.4.ogg new file mode 100644 index 0000000000000000000000000000000000000000..51d808f52e365b3ec1bda9d24a098bc85e8dd155 GIT binary patch literal 7427 zcmaiZ2UwHK(*GNJAV5H>1Pus6C_-ow6hQ=q00Mzff=G?h5kgTEjS`ezBO*m<0qGru zqliiek&aj>BHfB8auoe<;GBEU|9;$i^3d$8J07@Kna6wecgjuFjxMoFjq1ukBdbzkVe1%ztYXR%}5i_ z?Y+);?z0FwjrR3&v)y8kHbJYYVzpJ(v07;P;{jo4tg5Ok`V={g9E7HLl6`$C7^V~$ z`!*Ad!4X>+#05sMX6Sb6Kr#`6kPze|gW*d%WrAVQ^W@KE(2beBcGZ{+dQ7{Rdpx$| z?*^^mAq+um5LF(YSTJwm-H$shCYKnLi}O0JU5w_8wVKAkAAjBJ?q5`2%ob zV26N(^o^yWgb2*WEn4cT7-+7cg1V%NvxB%5?&MzKR_j7XnyD=nrXAN=x>Jy-vn*df zV8EkXKZG~Kj@r6cKHzY=KuOSga~p?a&-lH?p=dCxQ~ywD%UK`~rb*E7RB23Vfl1LR?@F(% zM$fWFzusD<-de=g6bJ^UFiWmiX3_tsrySDB|992*>{5XAfh{`&QJsM@Mg*D8ASKQ% z3wJ@lr}_k?_8^U86pc>GK~Rqc8+Oypp01hk|Lp{(+aX9Fi)s%f?I^nA z6!URl3Z_N=d%3)Y7odn#&Z%^7Dwle)>y}xlfUQ^_*Ac|FBrqX5?=3oWAoI&p9AD;K zZi!IV@S_-;EV-tVjI1pW`u2;@0$*Z!Zno#%9LS{fn;nXm_I9R@Pz?=%U4UJN};uA#|ho8MosC^?zk{|Gk&R>Zu>@@axQf!>Bk z_J^l%=GcG2M<4jj^|@F_&J}b-B8QuhRFPELuHYoTv|MZ#rf^q6;!%7_q$NRIjuCui zOLH^?(U4mx{=3v>dX<<>`ICN~mFg$RBM2-&v63c0aYDoVElMTM z*oVb=rYVNggJWM?=XI zjbz8W5e|)i19yl%#xe8 zmP+!u|08ldV~aCli=$%~q7&s~(!F9bOPlh2dn#9&|Ihlb$T=1y11g9dqac}oL{2Lf zbp%9Ht&;hdZ5?$7fkA_fME~gk2x?76m~NdTRs`iyg61eenP{W?-y;T4M>WicHGpBS zLy$NG?Ey}vA!CD*4g7WOxv=vx?0Gnjyf!gfF;X3Y0+j_Ifa7mF%@7D#0fq;c>~G9Fnu8iazhZfF;R3vKW09e(1V>r5%9R; zZ0mj;mn5wR%aId_#4u3S{g_S^t?%$$cI3cec?d$c!obHsUc&EVF+dF&PmgdO^K;7hiE)e&r!-T(w6vtO(XX_!!ZClbG{3Z`_H=1wc~5OsS*7m^pjO@~tyL;5 zRVu43|52*6(s-w|xuU1GI;*m5rST)r6Qz~rGo_W4Wwq~^)aHtnj=+^>)eA+K-lDSQ z=91=S|CQ#zzD7S(LFsafLhs}1p4yKq%_{XFQdY!}*L0^@JD`W3bJ#7%^{86E0}m^H z^Z*7!-*L|ZP)%T2oxcPa>-eIm=c=8^IGqW0T3V4+TDDT_ulS^V#lVUf;dGrmwcp7> z)PHJ!qT_f%e(7?vLT?KYgniW!fcirf<@8bu5OQiOcp}`p*5S{5UUmfj(3$-fQc#6} zcP0UBz?j(B(W9RyrN~0nhCv)s3qsaNg?4l>lCX>}w83&nQI6x=QFKeZw-kLup#yD` zXwsFPCW!aM(1!?|c??UuPab`Y;8RmH;`Sb0D1!G=rVo+4OFBkK@dEBhwS_{DeiJyO zo=E_#7IF*u4DgIXAyd4vZ65$~!O&sjl0rdiladC&icu(HipMqzIr?MAP+&!&prZ+< zL&(}sxg&E=2O6;IW(wbuF_%FHtZqi8;_(&NQwe?9X-rm;iFgxCV=CSZ>67;~#&3RkGPo(hD| zzaYiq=tFLRRVpDKtZ?*gDoXbTgiJzQ!~6@1ujaQAQaMwGDR@IrlA6BSf>Vde3h7hf z#%}0pxpmk)UDFhnNHcehCf6FpOX(fllCtAcZp^ zBdWIYpj=7G1!pD;bdGsu;&GgL^rM&#G(D97!~vB`f)K!V?Y2w;o%9Y3py8_-iUhFg zARWP1wA=esN-@UV$~DIUh#TfJeei(b^Rx+qUa@mR)vOXmT5@7=1r3iaC8%g%#(3;i zA-7oULiQ0ZOnU~%af-y4sRww;GV_mkKmd;&fPh;-F`H~k;=dD*39jv|{HWm8qr2~4NqWZi<3Dote`oLit>@@d0U-C!2GW1X%?bVHl(0RfjoHbg z#MBYV2NJy}8DPg8lC-Os#X=fzPu>wcPF@zE1cL$a0TE3n;crq11O-_}I`illA>ow) zZ%$dp7{MDz(cxm$k1$0&KWvO)jFIA$LCE33qg%Y@RRWmO{@kq`TR21j@hRqB4g!ee z1Ges?jArVK7)by!`K_KT=)t!W zxGgZ!1VJiC2b{OZ=z>7TR(eM#FcAq%!z64$b*l%LVw!7fvefokW-bUI%E~;2_bkd3 z^ho<^%sghb^z6bzR0ISCKKEY1jCG;gvuWw3wB#V9+dct8Ebdqh*;u??Y?O{=2w4++ z7PH;rtt@if@z^KjbX&Z9%9Wv@@`lhpaJNKrL8?e8^~?G&A+atXh{lG2a;sYhuqW8q z-U_O5Be*+hlp!xx2ubTgq(s{z1b38P&Ue#+>`%CKaZ(Wp3H5P2i)yXxPOn1HG&Gx3 zbUREanHssn|LhxHi+hjYIz|k>?W-^h+66(Wyl83ZOk5&g5`Qu>MIco$Z3i8|7lNi? zRDOsm!yX+SeJZiw$tI?u9SW}+7mY2te85RdP zLQZnx>9%pL`&Wh6i_%wYC7nayTFP?yuDfdcO;)1@MEoum%KPwy9I!8lSkjXlm?(Ka zcb`@djqpx3%V6v3g`+-+#N7?#OJ0|*KFNIh+_eYn=fBE-L3PJuJ&!etGYo~_e~8L{A8ajbGvP{od;14VJol>M z*C)s%g!A~)P=zQgujN~LRhf46Dd^qTWRru3&KKMdEah}z^LWwDdd%Kbtg*u}^`f|C zbt-9L&|#WoZSy|A1;ez&Wu<;WIrs5QQ{DA~B@eaixgmM3+0R-@W*Z_01?RYH^GJ!iZd&X)Z2Y*tMj)vnwq|7BN+USQ zPOcb}~#PSo) z^AK_5`p~VhmeAYUm(8?2?IqAHhZMi&lcuOn!ncpNc3;jJY;?FZX?-?`vjuCocdo8NxG4)K zU~2zMZuice3AFbKqt*rpRKo=k>+oy?^Zj?GS9B{TW@Q+L7zb@hc;9Bv$%7J6@oi`N zB+&(yelD-peQ-jye49ei73VKbzNvcpr^5%f_c|YisFgfoswWH~!+j-T7VY;qj`%0O zR^WtuAJ3HqBILZzEI7AyH&e);97}$F7mKzObUn9Q#}z5X3JcGWd30=_LmNww*yrI< zvt8}Ne7ccJ@7N8Kj|o%T4vy-bII*cSwO8QQz$jw={TRO)pP$}-`vz70XWrLU zrE=C{D$^F{43~~jBKtKGj8LAWUK`H<%Z&>Uud(>(yv#VE{|h^P&tUlKgv}nUeJlpn zp6Q5s!5RN^nVgVEK#|(j@jqXu_;6}K(?{MfQ@eKuWR!dHu*#{HOzOT}n&L*+{q#%Q0OWLhFx8#6z)DPXtKov{}=pY!(ze`nwjiKsc{^p)fG{#mAKo ztdJ$8Y-YJ>>VSm%vCt;;=9|;te(ecoWrs&gTL1^XDjRPtik{e;CBEGKm zuZ^Xa;`qQ+QhLi~<2_@3DE7UvT6LL&j5vDnE zj?LI0e@R8)^wZ5vg%rCF>{Lrdy=yakj=A4 z^T}E);x4@U94;>!t-hxpfh^~ZuCuEoIGf+Qh#8?jldJmt=Oc>{`T1+_3^`<3TieQd z()S)s4RqI&yI zJenZs9ZIKNbc>k@5EgZDWfhdS$lrZ^|7_*bS(^_&O9J}ZK@-8y=-n5wuVIo;w0s+Q zm9-D=onIbOX)Rk(xy=IY+szv4=R4TiVL5q0q%ge#c57p#%_2xx7?SS3#5mK^x!*cEy7+unhHo9CQ)rI zee=Z??}a*7ecnKzOwCr)G`}^!9d+GX(MG;V_Fp=n=^J$cM*LOqbeQ$$fnUBa-c+v) z60#A#*XGkHm&fvM3lE=MNK~~&}DxdJe zkEhj3AoQeg5jvM;CCAM;$gE?0Ntn%7IuZR3TBoH(~^{_#4 zOnW>W-Jp1wyz^eO%zG=eQgBwNH&>bi?Pg3k0Eb<)p%zOTdlWkDFHjv#jF0wuA0Z6A zQdhDksF3x4?98J+$@)ZPEro7H)5d&EO;qpC7Qd=(x_0f?rB8$$UK&sRgCZx$-c4)& zE~wDjnP2$8K8^mm^%MRZ?{5EeEW7w1b`^Hhb!QB(pW}zrCdYIwR?WuD|c+}o6)t)1;@|f21%0%qx>zBSpkh+ z=lvUI1&h53W0EGbb6`r&E-?otFB|pwxUPCB(#d%jUc#?BVg78lg1N9l)Wc;05j+Ek zCd)K)*nK@L1l{VQububE(tqbHn$x4^nztK*hW3>R=LT@7LTe@-!!s}%8?^EzJj3-< z^6vXn>B3XT=F@6ERxE0#N~l^fO8vcW9^Y&f-;aQfLr}FZ>*PB`HfpYQI z%G6h^{Q4}BmGOu#63jnkPId{s+vBb#Gxf=Ix2dbr1}k*1ns>m5rQ=;p_AsvmD`a~v zKW=f!bD(4);#Sf8fn=9}IYTyQ8&d^t*NZrrm$^Op=T-tr!~ghJS5tkKjnxpDHP!ZQ zh-)x|`;3WR54++z6y&?)E-qz|xzi)MQ?)PDG{xpV*Nu>=9~at0-@|ePkJ=6R#Xs8M z@)Hgx-zLEq#*8gIos7=Y6}04bhHc8X&Of;0VEx1S3`Hu({CBX%1GDzuWiO1|Iex{F zo%wkN#9=v3U9ecwXP86|=-0L2H)>AWBbY=ZzQ>Wj!akbZV|Om!p?SP0VVWQVZ%v3> zt!9LmS%a~tzxeD&#);(YOB)=tN7iHxc97y4;V((F5)r&6la-%CgyZ5cP7 zeJU*%VajbXUZ#LO2q(RFd>MAch}VVXL}T@Q0Re4zQa z!Q?*m%YlEC?>;4Zd?k1SvV2L|N8Gt0>2k-#G}l?a-sYP0;sfiBXLI?cc`n|6)c)aM z_wJ8J3kRTJr}fClp2`d0I(18H&E;I+OdF=0e?n=P^@*svzK}-YOpWqud!xP3vP6ya zSx&tuOb1C5_xe_tlzMqWT@|57vvJAG9KSgy5!XUUunWJkAQsonP2Bg14iD4$EbHh literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/villager.lua b/mods/ENTITIES/mobs_mc/villager.lua index 32e757d15..d623e7ca9 100644 --- a/mods/ENTITIES/mobs_mc/villager.lua +++ b/mods/ENTITIES/mobs_mc/villager.lua @@ -1227,6 +1227,7 @@ mcl_mobs:register_mob("mobs_mc:villager", { -- TODO: sounds sounds = { random = "mobs_mc_villager", + damage = "mobs_mc_villager_hurt", distance = 10, }, animation = { -- 2.40.1 From e1feec9a3027e5e57ada570da7352da8ccf6f9fe Mon Sep 17 00:00:00 2001 From: epCode <64379263+epCode@users.noreply.github.com> Date: Mon, 6 Jun 2022 13:42:24 -0700 Subject: [PATCH 042/357] Add Raytracing arrows --- mods/ITEMS/mcl_bows/arrow.lua | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/mods/ITEMS/mcl_bows/arrow.lua b/mods/ITEMS/mcl_bows/arrow.lua index 1816184bb..b15e20a7d 100644 --- a/mods/ITEMS/mcl_bows/arrow.lua +++ b/mods/ITEMS/mcl_bows/arrow.lua @@ -188,7 +188,8 @@ function ARROW_ENTITY.on_step(self, dtime) -- The radius of 3 is fairly liberal, but anything lower than than will cause -- arrow to hilariously go through mobs often. -- TODO: Implement an ACTUAL collision detection (engine support needed). - local objs = minetest.get_objects_inside_radius(pos, 1.5) + + local closest_object local closest_distance @@ -196,32 +197,26 @@ function ARROW_ENTITY.on_step(self, dtime) self._deflection_cooloff = self._deflection_cooloff - dtime end - -- Iterate through all objects and remember the closest attackable object - for k, obj in pairs(objs) do - local ok = false - -- Arrows can only damage players and mobs - if obj:is_player() then - ok = true - elseif obj:get_luaentity() then - if (obj:get_luaentity().is_mob or obj:get_luaentity()._hittable_by_projectile) then + local arrow_dir = vector.rotate(vector.new(0,0,1), self.object:get_rotation()) + local raycast = minetest.raycast(pos, vector.add(pos, vector.multiply(arrow_dir, 6)), true, false) + for hitpoint in raycast do + if hitpoint.type == "object" and hitpoint.ref ~= self._shooter then + local ok = false + if hitpoint.ref:is_player() then ok = true + elseif hitpoint.ref:get_luaentity() then + if (hitpoint.ref:get_luaentity().is_mob or hitpoint.ref:get_luaentity()._hittable_by_projectile) then + ok = true + end end - end - - if ok then - local dist = vector.distance(pos, obj:get_pos()) - if not closest_object or not closest_distance then - closest_object = obj - closest_distance = dist - elseif dist < closest_distance then - closest_object = obj + if ok then + local dist = vector.distance(hitpoint.ref:get_pos(), pos) + closest_object = hitpoint.ref closest_distance = dist end end end - -- If an attackable object was found, we will damage the closest one only - if closest_object then local obj = closest_object local is_player = obj:is_player() -- 2.40.1 From f2c2f4106bf10a035ca647664387a89feb62145d Mon Sep 17 00:00:00 2001 From: epCode <64379263+epCode@users.noreply.github.com> Date: Mon, 6 Jun 2022 13:55:28 -0700 Subject: [PATCH 043/357] fix arrows not disapearing after mob hit, and self damaging --- mods/ITEMS/mcl_bows/arrow.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_bows/arrow.lua b/mods/ITEMS/mcl_bows/arrow.lua index b15e20a7d..d0af738a1 100644 --- a/mods/ITEMS/mcl_bows/arrow.lua +++ b/mods/ITEMS/mcl_bows/arrow.lua @@ -200,7 +200,7 @@ function ARROW_ENTITY.on_step(self, dtime) local arrow_dir = vector.rotate(vector.new(0,0,1), self.object:get_rotation()) local raycast = minetest.raycast(pos, vector.add(pos, vector.multiply(arrow_dir, 6)), true, false) for hitpoint in raycast do - if hitpoint.type == "object" and hitpoint.ref ~= self._shooter then + if hitpoint.type == "object" then local ok = false if hitpoint.ref:is_player() then ok = true @@ -299,6 +299,8 @@ function ARROW_ENTITY.on_step(self, dtime) minetest.after(150, function() self.object:remove() end) + else + self.object:remove() end end end -- 2.40.1 From fdb7d5bfadc80cc3a9fe77b138d3e831cafa50b3 Mon Sep 17 00:00:00 2001 From: epCode <64379263+epCode@users.noreply.github.com> Date: Mon, 6 Jun 2022 14:32:07 -0700 Subject: [PATCH 044/357] fixed Badly calculated arrow direction --- mods/ITEMS/mcl_bows/arrow.lua | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/mods/ITEMS/mcl_bows/arrow.lua b/mods/ITEMS/mcl_bows/arrow.lua index d0af738a1..cd32f5392 100644 --- a/mods/ITEMS/mcl_bows/arrow.lua +++ b/mods/ITEMS/mcl_bows/arrow.lua @@ -197,8 +197,8 @@ function ARROW_ENTITY.on_step(self, dtime) self._deflection_cooloff = self._deflection_cooloff - dtime end - local arrow_dir = vector.rotate(vector.new(0,0,1), self.object:get_rotation()) - local raycast = minetest.raycast(pos, vector.add(pos, vector.multiply(arrow_dir, 6)), true, false) + local arrow_dir = self.object:get_velocity() + local raycast = minetest.raycast(pos, vector.add(pos, vector.multiply(arrow_dir, 0.2)), true, false) for hitpoint in raycast do if hitpoint.type == "object" then local ok = false @@ -211,8 +211,13 @@ function ARROW_ENTITY.on_step(self, dtime) end if ok then local dist = vector.distance(hitpoint.ref:get_pos(), pos) - closest_object = hitpoint.ref - closest_distance = dist + if not closest_object or not closest_distance then + closest_object = hitpoint.ref + closest_distance = dist + elseif dist < closest_distance then + closest_object = hitpoint.ref + closest_distance = dist + end end end end -- 2.40.1 From 78940e109c82ad5e93abc180da9cd14cd7924f13 Mon Sep 17 00:00:00 2001 From: epCode <64379263+epCode@users.noreply.github.com> Date: Mon, 6 Jun 2022 14:38:18 -0700 Subject: [PATCH 045/357] fix critical hit displaying in the wrong place --- mods/ITEMS/mcl_bows/arrow.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/ITEMS/mcl_bows/arrow.lua b/mods/ITEMS/mcl_bows/arrow.lua index cd32f5392..fb5874982 100644 --- a/mods/ITEMS/mcl_bows/arrow.lua +++ b/mods/ITEMS/mcl_bows/arrow.lua @@ -198,7 +198,7 @@ function ARROW_ENTITY.on_step(self, dtime) end local arrow_dir = self.object:get_velocity() - local raycast = minetest.raycast(pos, vector.add(pos, vector.multiply(arrow_dir, 0.2)), true, false) + local raycast = minetest.raycast(pos, vector.add(pos, vector.multiply(arrow_dir, 0.1)), true, false) for hitpoint in raycast do if hitpoint.type == "object" then local ok = false @@ -249,7 +249,7 @@ function ARROW_ENTITY.on_step(self, dtime) -- Punch target object but avoid hurting enderman. if not lua or lua.name ~= "mobs_mc:enderman" then if not self._in_player then - damage_particles(self.object:get_pos(), self._is_critical) + damage_particles(vector.add(pos, vector.multiply(self.object:get_velocity(), 0.1)), self._is_critical) end if mcl_burning.is_burning(self.object) then mcl_burning.set_on_fire(obj, 5) -- 2.40.1 From d7382292985a40326bf9eb94bbcc45d06fa9dd7e Mon Sep 17 00:00:00 2001 From: epCode Date: Tue, 7 Jun 2022 00:58:37 +0000 Subject: [PATCH 046/357] Make loaded Crossbow (Corssbow) not show up in creative inventory --- mods/ITEMS/mcl_bows/crossbow.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/ITEMS/mcl_bows/crossbow.lua b/mods/ITEMS/mcl_bows/crossbow.lua index b211f6b39..9ee6d6e9c 100644 --- a/mods/ITEMS/mcl_bows/crossbow.lua +++ b/mods/ITEMS/mcl_bows/crossbow.lua @@ -151,7 +151,7 @@ S("The speed and damage of the arrow increases the longer you charge. The regula }) minetest.register_tool("mcl_bows:crossbow_loaded", { - description = S("Corssbow"), + description = S("Crossbow"), _tt_help = S("Launches arrows"), _doc_items_longdesc = S("Corssbow are ranged weapons to shoot arrows at your foes.").."\n".. S("The speed and damage of the arrow increases the longer you charge. The regular damage of the arrow is between 1 and 9. At full charge, there's also a 20% of a critical hit, dealing 10 damage instead."), @@ -181,7 +181,7 @@ S("The speed and damage of the arrow increases the longer you charge. The regula itemstack:get_meta():set_string("active", "true") return itemstack end, - groups = {weapon=1,weapon_ranged=1,crossbow=1,enchantability=1}, + groups = {weapon=1,weapon_ranged=1,crossbow=1,enchantability=1,not_in_creative_inventory=1}, _mcl_uses = 326, }) -- 2.40.1 From 0fd25d15fa7e3694d91c145924b1b0fceee9b068 Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 6 Jun 2022 16:00:58 +0200 Subject: [PATCH 047/357] name -> title in game.conf --- game.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/game.conf b/game.conf index db7357702..9f54e5159 100644 --- a/game.conf +++ b/game.conf @@ -1,2 +1,2 @@ -name = MineClone 2 +title = MineClone 2 description = A survival sandbox game. Survive, gather, hunt, build, explore, and do much more. -- 2.40.1 From 5c057f24fb6812ac3df49b4b8a5084d7741aca5b Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 6 Jun 2022 16:01:35 +0200 Subject: [PATCH 048/357] get_mapgen_params -> get_mapgen_setting --- mods/MAPGEN/mcl_shipwrecks/init.lua | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/mods/MAPGEN/mcl_shipwrecks/init.lua b/mods/MAPGEN/mcl_shipwrecks/init.lua index 9227680b4..c9bf2c942 100644 --- a/mods/MAPGEN/mcl_shipwrecks/init.lua +++ b/mods/MAPGEN/mcl_shipwrecks/init.lua @@ -2,10 +2,11 @@ local modname = minetest.get_current_modname() local modpath = minetest.get_modpath(modname) --local S = minetest.get_translator(modname) -local mgp = minetest.get_mapgen_params() -local pr = PseudoRandom(mgp.seed) +local seed = minetest.get_mapgen_setting("seed") +local water_level = minetest.get_mapgen_setting("water_level") +local pr = PseudoRandom(seed) ---schematics by chmodsayshello +--schematics by chmodsayshello local schems = { "shipwreck_full_damaged", "shipwreck_full_normal", @@ -101,7 +102,7 @@ minetest.register_decoration({ fill_ratio = 0.00002, flags = "place_center_x, place_center_z, force_placement", biomes = get_ocean_biomes(), - y_max=mgp.water_level-4, + y_max=water_level-4, }) --rare beached variant @@ -115,8 +116,8 @@ minetest.register_decoration({ fill_ratio=0.000001, flags = "place_center_x, place_center_z, force_placement", biomes = get_beach_biomes(), - y_max = mgp.water_level + 4, - y_min = mgp.water_level - 1, + y_max = water_level + 4, + y_min = water_level - 1, }) minetest.register_lbm({ -- 2.40.1 From 6c804f44d55b7e2f4efc07949807ab26b51a61f6 Mon Sep 17 00:00:00 2001 From: epCode <64379263+epCode@users.noreply.github.com> Date: Mon, 6 Jun 2022 18:43:50 -0700 Subject: [PATCH 049/357] add a small bit of doc --- mods/ITEMS/mcl_bows/arrow.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mods/ITEMS/mcl_bows/arrow.lua b/mods/ITEMS/mcl_bows/arrow.lua index fb5874982..8edf75011 100644 --- a/mods/ITEMS/mcl_bows/arrow.lua +++ b/mods/ITEMS/mcl_bows/arrow.lua @@ -198,9 +198,11 @@ function ARROW_ENTITY.on_step(self, dtime) end local arrow_dir = self.object:get_velocity() + --create a raycast from the arrow based on the velocity of the arrow to deal with lag local raycast = minetest.raycast(pos, vector.add(pos, vector.multiply(arrow_dir, 0.1)), true, false) for hitpoint in raycast do if hitpoint.type == "object" then + -- find the closest object that is in the way of the arrow local ok = false if hitpoint.ref:is_player() then ok = true -- 2.40.1 From 45ec87616705a596ea67c7f9af8d7a4b47cbb9be Mon Sep 17 00:00:00 2001 From: MysticTempest Date: Tue, 7 Jun 2022 02:55:19 -0500 Subject: [PATCH 050/357] Knockback fixes: This PR enables knockback for snowballs, and eggs. And disables knockback for the following mobs: Shulkers, Iron Golems, and Ender Dragons. --- mods/ENTITIES/mcl_mobs/api.lua | 51 +++++++++++++------------- mods/ENTITIES/mobs_mc/ender_dragon.lua | 1 + mods/ENTITIES/mobs_mc/iron_golem.lua | 1 + mods/ENTITIES/mobs_mc/shulker.lua | 1 + mods/ITEMS/mcl_throwing/register.lua | 4 +- 5 files changed, 30 insertions(+), 28 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 933634cce..577c4c2aa 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -3210,35 +3210,36 @@ local mob_punch = function(self, hitter, tflp, tool_capabilities, dir) local die = false - -- only play hit sound and show blood effects if damage is 1 or over; lower to 0.1 to ensure armor works appropriately. - if damage >= 0.1 then - -- weapon sounds - if weapon:get_definition().sounds ~= nil then + if damage >= 0 then + -- only play hit sound and show blood effects if damage is 1 or over; lower to 0.1 to ensure armor works appropriately. + if damage >= 0.1 then + -- weapon sounds + if weapon:get_definition().sounds ~= nil then - local s = random(0, #weapon:get_definition().sounds) + local s = random(0, #weapon:get_definition().sounds) - minetest.sound_play(weapon:get_definition().sounds[s], { - object = self.object, --hitter, - max_hear_distance = 8 - }, true) - else - minetest.sound_play("default_punch", { - object = self.object, - max_hear_distance = 5 - }, true) + minetest.sound_play(weapon:get_definition().sounds[s], { + object = self.object, --hitter, + max_hear_distance = 8 + }, true) + else + minetest.sound_play("default_punch", { + object = self.object, + max_hear_distance = 5 + }, true) + end + + damage_effect(self, damage) + + -- do damage + self.health = self.health - damage + + -- skip future functions if dead, except alerting others + if check_for_death(self, "hit", {type = "punch", puncher = hitter}) then + die = true + end end - - damage_effect(self, damage) - - -- do damage - self.health = self.health - damage - - -- skip future functions if dead, except alerting others - if check_for_death(self, "hit", {type = "punch", puncher = hitter}) then - die = true - end - -- knock back effect (only on full punch) if not die and self.knock_back diff --git a/mods/ENTITIES/mobs_mc/ender_dragon.lua b/mods/ENTITIES/mobs_mc/ender_dragon.lua index d2f971f79..e7a233fc5 100644 --- a/mods/ENTITIES/mobs_mc/ender_dragon.lua +++ b/mods/ENTITIES/mobs_mc/ender_dragon.lua @@ -35,6 +35,7 @@ mcl_mobs:register_mob("mobs_mc:enderdragon", { }, physical = true, damage = 10, + knock_back = false, jump = true, jump_height = 14, fly = true, diff --git a/mods/ENTITIES/mobs_mc/iron_golem.lua b/mods/ENTITIES/mobs_mc/iron_golem.lua index 7f1e66714..81c7ed4bb 100644 --- a/mods/ENTITIES/mobs_mc/iron_golem.lua +++ b/mods/ENTITIES/mobs_mc/iron_golem.lua @@ -37,6 +37,7 @@ mcl_mobs:register_mob("mobs_mc:iron_golem", { run_velocity = 1.2, -- Approximation damage = 14, + knock_back = false, reach = 3, group_attack = true, attacks_monsters = true, diff --git a/mods/ENTITIES/mobs_mc/shulker.lua b/mods/ENTITIES/mobs_mc/shulker.lua index 5b3c4d282..77273db2f 100644 --- a/mods/ENTITIES/mobs_mc/shulker.lua +++ b/mods/ENTITIES/mobs_mc/shulker.lua @@ -33,6 +33,7 @@ mcl_mobs:register_mob("mobs_mc:shulker", { -- TODO: Make shulker dye-able visual_size = {x=3, y=3}, walk_chance = 0, + knock_back = false, jump = false, drops = { {name = "mcl_mobitems:shulker_shell", diff --git a/mods/ITEMS/mcl_throwing/register.lua b/mods/ITEMS/mcl_throwing/register.lua index 413bc9d5f..53af28652 100644 --- a/mods/ITEMS/mcl_throwing/register.lua +++ b/mods/ITEMS/mcl_throwing/register.lua @@ -61,11 +61,9 @@ local function check_object_hit(self, pos, dmg) and entity.name ~= self.object:get_luaentity().name then if object:is_player() and self._thrower ~= object:get_player_name() then - -- TODO: Deal knockback self.object:remove() return true elseif (entity.is_mob == true or entity._hittable_by_projectile) and (self._thrower ~= object) then - -- FIXME: Knockback is broken object:punch(self.object, 1.0, { full_punch_interval = 1.0, damage_groups = dmg, @@ -185,7 +183,7 @@ local function egg_on_step(self, dtime) end -- Destroy when hitting a mob or player (no chick spawning) - if check_object_hit(self, pos) then + if check_object_hit(self, pos, 0) then minetest.sound_play("mcl_throwing_egg_impact", { pos = self.object:get_pos(), max_hear_distance=10, gain=0.5 }, true) self.object:remove() return -- 2.40.1 From 6bc5e76b8f6b71a9c679670a9f48443b5f6a069f Mon Sep 17 00:00:00 2001 From: epCode <64379263+epCode@users.noreply.github.com> Date: Fri, 10 Jun 2022 19:40:12 -0700 Subject: [PATCH 051/357] fix tipped arrows and rocket --- mods/ITEMS/mcl_bows/rocket.lua | 39 ++++++++++++++----------- mods/ITEMS/mcl_potions/tipped_arrow.lua | 39 ++++++++++++++----------- 2 files changed, 44 insertions(+), 34 deletions(-) diff --git a/mods/ITEMS/mcl_bows/rocket.lua b/mods/ITEMS/mcl_bows/rocket.lua index b8ad2c1f0..c47989e3e 100644 --- a/mods/ITEMS/mcl_bows/rocket.lua +++ b/mods/ITEMS/mcl_bows/rocket.lua @@ -410,29 +410,34 @@ function ARROW_ENTITY.on_step(self, dtime) end -- Iterate through all objects and remember the closest attackable object - for k, obj in pairs(objs) do - local ok = false - -- Arrows can only damage players and mobs - if obj:is_player() then - ok = true - elseif obj:get_luaentity() then - if (obj:get_luaentity().is_mob or obj:get_luaentity()._hittable_by_projectile) then + local arrow_dir = self.object:get_velocity() + --create a raycast from the arrow based on the velocity of the arrow to deal with lag + local raycast = minetest.raycast(pos, vector.add(pos, vector.multiply(arrow_dir, 0.1)), true, false) + for hitpoint in raycast do + if hitpoint.type == "object" then + -- find the closest object that is in the way of the arrow + local ok = false + if hitpoint.ref:is_player() then ok = true + elseif hitpoint.ref:get_luaentity() then + if (hitpoint.ref:get_luaentity().is_mob or hitpoint.ref:get_luaentity()._hittable_by_projectile) then + ok = true + end end - end - - if ok then - local dist = vector.distance(pos, obj:get_pos()) - if not closest_object or not closest_distance then - closest_object = obj - closest_distance = dist - elseif dist < closest_distance then - closest_object = obj - closest_distance = dist + if ok then + local dist = vector.distance(hitpoint.ref:get_pos(), pos) + if not closest_object or not closest_distance then + closest_object = hitpoint.ref + closest_distance = dist + elseif dist < closest_distance then + closest_object = hitpoint.ref + closest_distance = dist + end end end end + -- If an attackable object was found, we will damage the closest one only if closest_object then diff --git a/mods/ITEMS/mcl_potions/tipped_arrow.lua b/mods/ITEMS/mcl_potions/tipped_arrow.lua index e6da04dff..a3dbe84c2 100644 --- a/mods/ITEMS/mcl_potions/tipped_arrow.lua +++ b/mods/ITEMS/mcl_potions/tipped_arrow.lua @@ -210,29 +210,34 @@ function mcl_potions.register_arrow(name, desc, color, def) end -- Iterate through all objects and remember the closest attackable object - for k, obj in pairs(objs) do - local ok = false - -- Arrows can only damage players and mobs - if obj ~= self._shooter and obj:is_player() then - ok = true - elseif obj:get_luaentity() then - if obj ~= self._shooter and obj:get_luaentity().is_mob then + local arrow_dir = self.object:get_velocity() + --create a raycast from the arrow based on the velocity of the arrow to deal with lag + local raycast = minetest.raycast(pos, vector.add(pos, vector.multiply(arrow_dir, 0.1)), true, false) + for hitpoint in raycast do + if hitpoint.type == "object" then + -- find the closest object that is in the way of the arrow + local ok = false + if hitpoint.ref:is_player() then ok = true + elseif hitpoint.ref:get_luaentity() then + if (hitpoint.ref:get_luaentity().is_mob or hitpoint.ref:get_luaentity()._hittable_by_projectile) then + ok = true + end end - end - - if ok then - local dist = vector.distance(pos, obj:get_pos()) - if not closest_object or not closest_distance then - closest_object = obj - closest_distance = dist - elseif dist < closest_distance then - closest_object = obj - closest_distance = dist + if ok then + local dist = vector.distance(hitpoint.ref:get_pos(), pos) + if not closest_object or not closest_distance then + closest_object = hitpoint.ref + closest_distance = dist + elseif dist < closest_distance then + closest_object = hitpoint.ref + closest_distance = dist + end end end end + -- If an attackable object was found, we will damage the closest one only if closest_object then local obj = closest_object -- 2.40.1 From 1a5195b5e6e8568c58aa3250bb08f813a11daea8 Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Sat, 11 Jun 2022 11:52:11 -0600 Subject: [PATCH 052/357] Isn't It Iron Pick Advancement --- mods/HUD/mcl_achievements/init.lua | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/mods/HUD/mcl_achievements/init.lua b/mods/HUD/mcl_achievements/init.lua index c963773d1..8667f2557 100644 --- a/mods/HUD/mcl_achievements/init.lua +++ b/mods/HUD/mcl_achievements/init.lua @@ -101,6 +101,17 @@ awards.register_achievement("mcl:bookcase", { } }) +awards.register_achievement("mcl:buildIronPickaxe", { + title = S("Isn't It Iron Pick"), + description = S("Craft a iron pickaxe using sticks and iron."), + icon = "default_tool_steelpick.png", + trigger = { + type = "craft", + item = "mcl_tools:pick_iron", + target = 1 + } +}) + -- Item pickup achievements: These are awarded when picking up a certain item. -- The achivements are manually given in the mod mcl_item_entity. awards.register_achievement("mcl:diamonds", { -- 2.40.1 From 91f8f44e176830cbc3886f5fe30092e05b510f8d Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Sat, 11 Jun 2022 12:29:11 -0600 Subject: [PATCH 053/357] The End? Advancement --- mods/HUD/mcl_achievements/init.lua | 6 ++++++ mods/ITEMS/mcl_portals/portal_end.lua | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/mods/HUD/mcl_achievements/init.lua b/mods/HUD/mcl_achievements/init.lua index 8667f2557..6226903ef 100644 --- a/mods/HUD/mcl_achievements/init.lua +++ b/mods/HUD/mcl_achievements/init.lua @@ -174,6 +174,12 @@ awards.register_achievement("mcl:buildNetherPortal", { icon = "default_obsidian.png", }) +awards.register_achievement("mcl:enterEndPortal", { + title = S("The End?"), + description = S("Or the beginning?\nHint: Enter an end portal."), + icon = "mcl_end_end_stone.png", +}) + -- NON-PC ACHIEVEMENTS (XBox, Pocket Edition, etc.) if non_pc_achievements then diff --git a/mods/ITEMS/mcl_portals/portal_end.lua b/mods/ITEMS/mcl_portals/portal_end.lua index e4982c39b..4ebc97d62 100644 --- a/mods/ITEMS/mcl_portals/portal_end.lua +++ b/mods/ITEMS/mcl_portals/portal_end.lua @@ -241,7 +241,7 @@ function mcl_portals.end_portal_teleport(pos, node) end mcl_portals.end_teleport(obj, objpos) - + awards.unlock(obj:get_player_name(), "mcl:enterEndPortal") end end end -- 2.40.1 From 2a62936fe7c94cc31494ea18d93f6d30ee54b907 Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Sat, 11 Jun 2022 12:41:59 -0600 Subject: [PATCH 054/357] Postmortal Advancement --- mods/HUD/mcl_achievements/init.lua | 7 +++++++ mods/ITEMS/mcl_totems/init.lua | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/mods/HUD/mcl_achievements/init.lua b/mods/HUD/mcl_achievements/init.lua index 6226903ef..a68c716b8 100644 --- a/mods/HUD/mcl_achievements/init.lua +++ b/mods/HUD/mcl_achievements/init.lua @@ -180,6 +180,13 @@ awards.register_achievement("mcl:enterEndPortal", { icon = "mcl_end_end_stone.png", }) +-- Triggered in mcl_totems +awards.register_achievement("mcl:postMortal", { + title = S("Postmortal"), + description = S("Use a Totem of Undying to cheat death."), + icon = "mcl_totems_totem.png", +}) + -- NON-PC ACHIEVEMENTS (XBox, Pocket Edition, etc.) if non_pc_achievements then diff --git a/mods/ITEMS/mcl_totems/init.lua b/mods/ITEMS/mcl_totems/init.lua index 8e529c5d5..26874b50b 100644 --- a/mods/ITEMS/mcl_totems/init.lua +++ b/mods/ITEMS/mcl_totems/init.lua @@ -51,7 +51,8 @@ mcl_damage.register_modifier(function(obj, damage, reason) obj:set_wielded_item(wield) end end - + awards.unlock(obj:get_player_name(), "mcl:postMortal") + -- Effects minetest.sound_play({name = "mcl_totems_totem", gain = 1}, {pos=ppos, max_hear_distance = 16}, true) -- 2.40.1 From 17e2f05971c3cad5718c0a8589815f912d5c54ce Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Sat, 11 Jun 2022 12:52:51 -0600 Subject: [PATCH 055/357] Sweet Dreams Advancement --- mods/HUD/mcl_achievements/init.lua | 7 +++++++ mods/ITEMS/mcl_beds/functions.lua | 1 + 2 files changed, 8 insertions(+) diff --git a/mods/HUD/mcl_achievements/init.lua b/mods/HUD/mcl_achievements/init.lua index a68c716b8..efcbe2ed7 100644 --- a/mods/HUD/mcl_achievements/init.lua +++ b/mods/HUD/mcl_achievements/init.lua @@ -187,6 +187,13 @@ awards.register_achievement("mcl:postMortal", { icon = "mcl_totems_totem.png", }) +-- Triggered in mcl_beds +awards.register_achievement("mcl:sweetDreams", { + title = S("Sweet Dreams"), + description = S("Sleep in a bed to change your respawn point."), + icon = "mcl_beds_bed_red.png", +}) + -- NON-PC ACHIEVEMENTS (XBox, Pocket Edition, etc.) if non_pc_achievements then diff --git a/mods/ITEMS/mcl_beds/functions.lua b/mods/ITEMS/mcl_beds/functions.lua index c1e76c90a..e570bd8eb 100644 --- a/mods/ITEMS/mcl_beds/functions.lua +++ b/mods/ITEMS/mcl_beds/functions.lua @@ -76,6 +76,7 @@ local function lay_down(player, pos, bed_pos, state, skip) -- save respawn position when entering bed if spawn_mod and mcl_spawn.set_spawn_pos(player, bed_pos, nil) then minetest.chat_send_player(name, S("New respawn position set!")) + awards.unlock(player:get_player_name(), "mcl:sweetDreams") end -- No sleeping if too far away -- 2.40.1 From b544fb819d289961353ea9c30dc16e21acf5ff21 Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Sat, 11 Jun 2022 13:18:25 -0600 Subject: [PATCH 056/357] What A Deal! Advancement --- mods/ENTITIES/mobs_mc/villager.lua | 5 +++++ mods/HUD/mcl_achievements/init.lua | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/mods/ENTITIES/mobs_mc/villager.lua b/mods/ENTITIES/mobs_mc/villager.lua index d623e7ca9..13a50b601 100644 --- a/mods/ENTITIES/mobs_mc/villager.lua +++ b/mods/ENTITIES/mobs_mc/villager.lua @@ -985,6 +985,11 @@ local trade_inventory = { elseif listname == "output" then if not trader_exists(player:get_player_name()) then return 0 + -- Begin Award Code + -- May need to be moved if award gets unlocked in the wrong cases. + elseif trader_exists(player:get_player_name()) then + awards.unlock(player:get_player_name(), "mcl:whatAdeal") + -- End Award Code end -- Only allow taking full stack local count = stack:get_count() diff --git a/mods/HUD/mcl_achievements/init.lua b/mods/HUD/mcl_achievements/init.lua index efcbe2ed7..8d8cd6c1b 100644 --- a/mods/HUD/mcl_achievements/init.lua +++ b/mods/HUD/mcl_achievements/init.lua @@ -194,6 +194,13 @@ awards.register_achievement("mcl:sweetDreams", { icon = "mcl_beds_bed_red.png", }) +-- Triggered in mobs_mc +awards.register_achievement("mcl:whatAdeal", { + title = S("What A Deal!"), + description = S("Successfully trade with a Villager."), + icon = "mcl_core_emerald.png", +}) + -- NON-PC ACHIEVEMENTS (XBox, Pocket Edition, etc.) if non_pc_achievements then -- 2.40.1 From eb72bb81da2769e71f88e3309c6cf96803941d9f Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Sat, 11 Jun 2022 14:07:57 -0600 Subject: [PATCH 057/357] Fishy Business Advancement --- mods/HUD/mcl_achievements/init.lua | 7 +++++++ mods/ITEMS/mcl_fishing/init.lua | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/mods/HUD/mcl_achievements/init.lua b/mods/HUD/mcl_achievements/init.lua index 8d8cd6c1b..db96f7f62 100644 --- a/mods/HUD/mcl_achievements/init.lua +++ b/mods/HUD/mcl_achievements/init.lua @@ -201,6 +201,13 @@ awards.register_achievement("mcl:whatAdeal", { icon = "mcl_core_emerald.png", }) +-- Triggered in mcl_fishing +awards.register_achievement("mcl:fishyBusiness", { + title = S("Fishy Business"), + description = S("Catch a fish. \nHint: Catch a fish, salmon, clownfish, or pufferfish."), + icon = "mcl_fishing_fishing_rod.png", +}) + -- NON-PC ACHIEVEMENTS (XBox, Pocket Edition, etc.) if non_pc_achievements then diff --git a/mods/ITEMS/mcl_fishing/init.lua b/mods/ITEMS/mcl_fishing/init.lua index 1d8f24fb3..efc66e00e 100644 --- a/mods/ITEMS/mcl_fishing/init.lua +++ b/mods/ITEMS/mcl_fishing/init.lua @@ -75,6 +75,7 @@ local fish = function(itemstack, player, pointed_thing) stacks_min = 1, stacks_max = 1, }, pr) + awards.unlock(player:get_player_name(), "mcl:fishyBusiness") elseif r <= junk_value then -- Junk items = mcl_loot.get_loot({ @@ -124,6 +125,9 @@ local fish = function(itemstack, player, pointed_thing) local inv = player:get_inventory() if inv:room_for_item("main", item) then inv:add_item("main", item) + if item:get_name() == "mcl_mobitems:leather" then + awards.unlock(player:get_player_name(), "mcl:killCow") + end else minetest.add_item(pos, item) end -- 2.40.1 From bbd86045e5ab9b7643a092e3061276cb292443a1 Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Sat, 11 Jun 2022 15:31:57 -0600 Subject: [PATCH 058/357] Country Lode, Take Me Home Advancement --- mods/HUD/mcl_achievements/init.lua | 7 +++++++ mods/ITEMS/mcl_compass/init.lua | 1 + 2 files changed, 8 insertions(+) diff --git a/mods/HUD/mcl_achievements/init.lua b/mods/HUD/mcl_achievements/init.lua index db96f7f62..907796ab1 100644 --- a/mods/HUD/mcl_achievements/init.lua +++ b/mods/HUD/mcl_achievements/init.lua @@ -208,6 +208,13 @@ awards.register_achievement("mcl:fishyBusiness", { icon = "mcl_fishing_fishing_rod.png", }) +-- Triggered in mcl_compass +awards.register_achievement("mcl:countryLode", { + title = S("Country Lode, Take Me Home"), + description = S("Use a compass on a Lodestone."), + icon = "lodestone_side4.png", +}) + -- NON-PC ACHIEVEMENTS (XBox, Pocket Edition, etc.) if non_pc_achievements then diff --git a/mods/ITEMS/mcl_compass/init.lua b/mods/ITEMS/mcl_compass/init.lua index 0bcc3f0af..4536064d1 100644 --- a/mods/ITEMS/mcl_compass/init.lua +++ b/mods/ITEMS/mcl_compass/init.lua @@ -189,6 +189,7 @@ minetest.register_globalstep(function(dtime) if string_find(stack:get_name(), "_lodestone") then stack:set_name("mcl_compass:" .. compass_frame .. "_lodestone") + awards.unlock(player:get_player_name(), "mcl:countryLode") else stack:set_name("mcl_compass:" .. compass_frame) end -- 2.40.1 From 87a45ad78e4c3d612824ee6febbc63557c012bc2 Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Sat, 11 Jun 2022 19:14:28 -0600 Subject: [PATCH 059/357] Minor Format Detail in Country Lode Advancement --- mods/HUD/mcl_achievements/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/HUD/mcl_achievements/init.lua b/mods/HUD/mcl_achievements/init.lua index 907796ab1..dfd3c0657 100644 --- a/mods/HUD/mcl_achievements/init.lua +++ b/mods/HUD/mcl_achievements/init.lua @@ -210,7 +210,7 @@ awards.register_achievement("mcl:fishyBusiness", { -- Triggered in mcl_compass awards.register_achievement("mcl:countryLode", { - title = S("Country Lode, Take Me Home"), + title = S("Country Lode,\nTake Me Home"), description = S("Use a compass on a Lodestone."), icon = "lodestone_side4.png", }) -- 2.40.1 From a43627e268315b1076be739d8287ab2d49c49b30 Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 12 Jun 2022 03:03:32 +0200 Subject: [PATCH 060/357] Fix 2 wrong variable uses that made warnings --- mods/ENTITIES/mcl_mobs/api.lua | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 577c4c2aa..30e8a257d 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -2326,9 +2326,8 @@ local do_states = function(self, dtime) local s = self.object:get_pos() local objs = minetest.get_objects_inside_radius(s, 3) - + local lp for n = 1, #objs do - if objs[n]:is_player() then lp = objs[n]:get_pos() break @@ -2336,7 +2335,7 @@ local do_states = function(self, dtime) end -- look at any players nearby, otherwise turn randomly - if self.look_at_players then + if lp and self.look_at_players then local vec = { x = lp.x - s.x, @@ -2964,7 +2963,7 @@ local function damage_mob(self,reason,damage) if damage > 0 then self.health = self.health - damage - effect(pos, 5, "mcl_particles_smoke.png", 1, 2, 2, nil) + effect(self.object:get_pos(), 5, "mcl_particles_smoke.png", 1, 2, 2, nil) if check_for_death(self, reason, {type = reason}) then return true -- 2.40.1 From 4e1b6074c795addbff658c7791e861c0d99fa93a Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 11 Jun 2022 11:59:12 +0200 Subject: [PATCH 061/357] Add Smooth Basalt node --- mods/ITEMS/mcl_blackstone/init.lua | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mods/ITEMS/mcl_blackstone/init.lua b/mods/ITEMS/mcl_blackstone/init.lua index 4909edf2f..5061f0184 100644 --- a/mods/ITEMS/mcl_blackstone/init.lua +++ b/mods/ITEMS/mcl_blackstone/init.lua @@ -82,6 +82,15 @@ minetest.register_node("mcl_blackstone:basalt", { _mcl_blast_resistance = 2, _mcl_hardness = 2, }) +minetest.register_node("mcl_blackstone:basalt_smooth", { + description = S("Smooth Basalt"), + tiles = {"mcl_blackstone_basalt_smooth.png"}, + sounds = mcl_sounds.node_sound_stone_defaults(), + is_ground_content = false, + groups = {cracky = 3, pickaxey=2, material_stone=1}, + _mcl_blast_resistance = 2, + _mcl_hardness = 2, +}) minetest.register_node("mcl_blackstone:blackstone_polished", { description = S("Polished Blackstone"), tiles = {"mcl_blackstone_polished.png"}, -- 2.40.1 From 2074fec7a151b523d815bd273448b4377f1c6041 Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 11 Jun 2022 12:07:07 +0200 Subject: [PATCH 062/357] Fix hardness and b.resistance of blackstone nodes --- mods/ITEMS/mcl_blackstone/init.lua | 34 +++++++++++++++--------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/mods/ITEMS/mcl_blackstone/init.lua b/mods/ITEMS/mcl_blackstone/init.lua index 5061f0184..8c69b903d 100644 --- a/mods/ITEMS/mcl_blackstone/init.lua +++ b/mods/ITEMS/mcl_blackstone/init.lua @@ -13,8 +13,8 @@ minetest.register_node("mcl_blackstone:blackstone", { sounds = mcl_sounds.node_sound_stone_defaults(), is_ground_content = false, groups = {cracky = 3, pickaxey=2, material_stone=1, cobble=1}, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, + _mcl_blast_resistance = 6, + _mcl_hardness = 1.5, }) minetest.register_node("mcl_blackstone:blackstone_gilded", { description = S("Gilded Blackstone"), @@ -53,8 +53,8 @@ minetest.register_node("mcl_blackstone:nether_gold", { {items = {"mcl_blackstone:nether_gold"}, rarity = 8}, } }, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, + _mcl_blast_resistance = 3, + _mcl_hardness = 3, _mcl_silk_touch_drop = true, _mcl_fortune_drop = mcl_core.fortune_drop_ore, }) @@ -67,8 +67,8 @@ minetest.register_node("mcl_blackstone:basalt_polished", { on_rotate = on_rotate, is_ground_content = false, groups = {cracky = 3, pickaxey=2, material_stone=1}, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, + _mcl_blast_resistance = 4.2, + _mcl_hardness = 1.25, }) minetest.register_node("mcl_blackstone:basalt", { description = S("Basalt"), @@ -79,8 +79,8 @@ minetest.register_node("mcl_blackstone:basalt", { on_rotate = on_rotate, is_ground_content = false, groups = {cracky = 3, pickaxey=2, material_stone=1}, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, + _mcl_blast_resistance = 4.2, + _mcl_hardness = 1.25, }) minetest.register_node("mcl_blackstone:basalt_smooth", { description = S("Smooth Basalt"), @@ -88,8 +88,8 @@ minetest.register_node("mcl_blackstone:basalt_smooth", { sounds = mcl_sounds.node_sound_stone_defaults(), is_ground_content = false, groups = {cracky = 3, pickaxey=2, material_stone=1}, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, + _mcl_blast_resistance = 4.2, + _mcl_hardness = 1.25, }) minetest.register_node("mcl_blackstone:blackstone_polished", { description = S("Polished Blackstone"), @@ -97,7 +97,7 @@ minetest.register_node("mcl_blackstone:blackstone_polished", { sounds = mcl_sounds.node_sound_stone_defaults(), is_ground_content = false, groups = {cracky = 3, pickaxey=2, material_stone=1}, - _mcl_blast_resistance = 2, + _mcl_blast_resistance = 6, _mcl_hardness = 2, }) minetest.register_node("mcl_blackstone:blackstone_chiseled_polished", { @@ -106,8 +106,8 @@ minetest.register_node("mcl_blackstone:blackstone_chiseled_polished", { sounds = mcl_sounds.node_sound_stone_defaults(), is_ground_content = false, groups = {cracky = 3, pickaxey=2, material_stone=1}, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, + _mcl_blast_resistance = 6, + _mcl_hardness = 1.5, }) minetest.register_node("mcl_blackstone:blackstone_brick_polished", { description = S("Polished Blackstone Bricks"), @@ -115,8 +115,8 @@ minetest.register_node("mcl_blackstone:blackstone_brick_polished", { sounds = mcl_sounds.node_sound_stone_defaults(), is_ground_content = false, groups = {cracky = 3, pickaxey=2, material_stone=1}, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, + _mcl_blast_resistance = 6, + _mcl_hardness = 1.5, }) minetest.register_node("mcl_blackstone:quartz_brick", { description = S("Quartz Bricks"), @@ -125,8 +125,8 @@ minetest.register_node("mcl_blackstone:quartz_brick", { is_ground_content = false, sounds = mcl_sounds.node_sound_stone_defaults(), groups = {cracky = 3, pickaxey=2, material_stone=1}, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, + _mcl_blast_resistance = 0.8, + _mcl_hardness = 0.8, }) minetest.register_node("mcl_blackstone:soul_soil", { description = S("Soul Soil"), -- 2.40.1 From 9cea10a70624294942b5ce41d208df665834b335 Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 12 Jun 2022 11:30:39 +0200 Subject: [PATCH 063/357] fix more blast resistance and hardness values --- mods/ENTITIES/mcl_minecarts/rails.lua | 2 +- mods/ITEMS/mcl_bells/init.lua | 2 +- mods/ITEMS/mcl_copper/nodes.lua | 2 +- mods/ITEMS/mcl_core/nodes_base.lua | 22 +++++++++++----------- mods/ITEMS/mcl_end/building.lua | 2 +- mods/ITEMS/mcl_farming/soil.lua | 2 +- mods/ITEMS/mcl_ocean/kelp.lua | 2 +- mods/ITEMS/mcl_ocean/prismarine.lua | 2 +- mods/ITEMS/mcl_portals/portal_end.lua | 2 +- 9 files changed, 19 insertions(+), 19 deletions(-) diff --git a/mods/ENTITIES/mcl_minecarts/rails.lua b/mods/ENTITIES/mcl_minecarts/rails.lua index 91282f253..5117fe48c 100644 --- a/mods/ENTITIES/mcl_minecarts/rails.lua +++ b/mods/ENTITIES/mcl_minecarts/rails.lua @@ -21,7 +21,7 @@ local function register_rail(itemstring, tiles, def_extras, creative) stack_max = 64, groups = groups, sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 3.5, + _mcl_blast_resistance = 0.7, _mcl_hardness = 0.7, after_destruct = function(pos) -- Scan for minecarts in this pos and force them to execute their "floating" check. diff --git a/mods/ITEMS/mcl_bells/init.lua b/mods/ITEMS/mcl_bells/init.lua index b216c6659..33b3cc8e1 100644 --- a/mods/ITEMS/mcl_bells/init.lua +++ b/mods/ITEMS/mcl_bells/init.lua @@ -35,7 +35,7 @@ minetest.register_node("mcl_bells:bell", { is_ground_content = false, groups = {pickaxey=2, deco_block=1 }, sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 6, + _mcl_blast_resistance = 5, _mcl_hardness = 5, on_rightclick = mcl_bells.ring_once, use_texture_alpha = "clip", diff --git a/mods/ITEMS/mcl_copper/nodes.lua b/mods/ITEMS/mcl_copper/nodes.lua index 38fbb6c3d..22c1bf807 100644 --- a/mods/ITEMS/mcl_copper/nodes.lua +++ b/mods/ITEMS/mcl_copper/nodes.lua @@ -34,7 +34,7 @@ minetest.register_node("mcl_copper:block", { groups = {pickaxey = 2, building_block = 1}, sounds = mcl_sounds.node_sound_metal_defaults(), _mcl_blast_resistance = 6, - _mcl_hardness = 5, + _mcl_hardness = 3, }) minetest.register_node("mcl_copper:block_exposed", { diff --git a/mods/ITEMS/mcl_core/nodes_base.lua b/mods/ITEMS/mcl_core/nodes_base.lua index 0e9b53d04..005b00525 100644 --- a/mods/ITEMS/mcl_core/nodes_base.lua +++ b/mods/ITEMS/mcl_core/nodes_base.lua @@ -389,7 +389,7 @@ minetest.register_node("mcl_core:dirt_with_grass", { return mcl_core.on_snowable_construct(pos) end, _mcl_snowed = "mcl_core:dirt_with_grass_snow", - _mcl_blast_resistance = 0.5, + _mcl_blast_resistance = 0.6, _mcl_hardness = 0.6, _mcl_silk_touch_drop = true, }) @@ -434,7 +434,7 @@ minetest.register_node("mcl_core:mycelium", { on_construct = mcl_core.on_snowable_construct, _mcl_snowed = "mcl_core:mycelium_snow", - _mcl_blast_resistance = 0.5, + _mcl_blast_resistance = 0.6, _mcl_hardness = 0.6, _mcl_silk_touch_drop = true, }) @@ -451,8 +451,8 @@ minetest.register_node("mcl_core:podzol", { sounds = mcl_sounds.node_sound_dirt_defaults(), on_construct = mcl_core.on_snowable_construct, _mcl_snowed = "mcl_core:podzol_snow", - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.6, + _mcl_blast_resistance = 0.8, + _mcl_hardness = 0.8, _mcl_silk_touch_drop = true, }) mcl_core.register_snowed_node("mcl_core:podzol_snow", "mcl_core:podzol", nil, nil, false, S("Podzol with Snow")) @@ -556,8 +556,8 @@ minetest.register_node("mcl_core:sandstonesmooth", { stack_max = 64, groups = {pickaxey=1, sandstone=1, normal_sandstone=1, building_block=1, material_stone=1}, sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 0.8, - _mcl_hardness = 0.8, + _mcl_blast_resistance = 6, + _mcl_hardness = 2, }) minetest.register_node("mcl_core:sandstonecarved", { @@ -581,8 +581,8 @@ minetest.register_node("mcl_core:sandstonesmooth2", { stack_max = 64, groups = {pickaxey=1, sandstone=1, normal_sandstone=1, building_block=1, material_stone=1}, sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 0.8, - _mcl_hardness = 0.8, + _mcl_blast_resistance = 6, + _mcl_hardness = 2, }) -- red sandstone -- @@ -775,7 +775,7 @@ minetest.register_node("mcl_core:goldblock", { groups = {pickaxey=4, building_block=1}, sounds = mcl_sounds.node_sound_metal_defaults(), _mcl_blast_resistance = 6, - _mcl_hardness = 5, + _mcl_hardness = 3, }) minetest.register_node("mcl_core:diamondblock", { @@ -1062,8 +1062,8 @@ minetest.register_node("mcl_core:snowblock", { on_construct = mcl_core.on_snow_construct, after_destruct = mcl_core.after_snow_destruct, drop = "mcl_throwing:snowball 4", - _mcl_blast_resistance = 0.2, - _mcl_hardness = 0.2, + _mcl_blast_resistance = 0.1, + _mcl_hardness = 0.1, _mcl_silk_touch_drop = true, }) diff --git a/mods/ITEMS/mcl_end/building.lua b/mods/ITEMS/mcl_end/building.lua index 06c6722c4..82f6e76e4 100644 --- a/mods/ITEMS/mcl_end/building.lua +++ b/mods/ITEMS/mcl_end/building.lua @@ -29,7 +29,7 @@ minetest.register_node("mcl_end:end_bricks", { groups = {pickaxey=1, building_block=1, material_stone=1}, sounds = mcl_sounds.node_sound_stone_defaults(), _mcl_blast_resistance = 9, - _mcl_hardness = 0.8, + _mcl_hardness = 3, }) minetest.register_node("mcl_end:purpur_block", { diff --git a/mods/ITEMS/mcl_farming/soil.lua b/mods/ITEMS/mcl_farming/soil.lua index 8b31d888f..a6721cc26 100644 --- a/mods/ITEMS/mcl_farming/soil.lua +++ b/mods/ITEMS/mcl_farming/soil.lua @@ -21,7 +21,7 @@ minetest.register_node("mcl_farming:soil", { end, groups = {handy=1,shovely=1, dirtifies_below_solid=1, dirtifier=1, soil=2, soil_sapling=1, deco_block=1 }, sounds = mcl_sounds.node_sound_dirt_defaults(), - _mcl_blast_resistance = 0.5, + _mcl_blast_resistance = 0.6, _mcl_hardness = 0.6, }) diff --git a/mods/ITEMS/mcl_ocean/kelp.lua b/mods/ITEMS/mcl_ocean/kelp.lua index ae273abe9..5cddabd30 100644 --- a/mods/ITEMS/mcl_ocean/kelp.lua +++ b/mods/ITEMS/mcl_ocean/kelp.lua @@ -782,7 +782,7 @@ minetest.register_node("mcl_ocean:dried_kelp_block", { on_place = mcl_util.rotate_axis, on_rotate = on_rotate, _mcl_hardness = 0.5, - _mcl_blast_resistance = 12.5, + _mcl_blast_resistance = 2.5, }) minetest.register_craft({ diff --git a/mods/ITEMS/mcl_ocean/prismarine.lua b/mods/ITEMS/mcl_ocean/prismarine.lua index e38b3e0a6..32d17538d 100644 --- a/mods/ITEMS/mcl_ocean/prismarine.lua +++ b/mods/ITEMS/mcl_ocean/prismarine.lua @@ -40,7 +40,7 @@ minetest.register_node("mcl_ocean:prismarine", { tiles = {{name="mcl_ocean_prismarine_anim.png", animation={type="vertical_frames", aspect_w=32, aspect_h=32, length=45.0}}}, groups = {pickaxey=1, building_block=1, material_stone=1}, sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 1.5, + _mcl_blast_resistance = 6, _mcl_hardness = 1.5, }) diff --git a/mods/ITEMS/mcl_portals/portal_end.lua b/mods/ITEMS/mcl_portals/portal_end.lua index 4ebc97d62..8fa22e4fb 100644 --- a/mods/ITEMS/mcl_portals/portal_end.lua +++ b/mods/ITEMS/mcl_portals/portal_end.lua @@ -99,7 +99,7 @@ minetest.register_node("mcl_portals:portal_end", { groups = {portal=1, not_in_creative_inventory = 1, disable_jump = 1}, _mcl_hardness = -1, - _mcl_blast_resistance = 36000000, + _mcl_blast_resistance = 3600000, }) -- Obsidian platform at the End portal destination in the End -- 2.40.1 From c4aa634a40a8180f5fa8f719ba2573357de58493 Mon Sep 17 00:00:00 2001 From: NO11 Date: Sun, 12 Jun 2022 13:45:35 -0600 Subject: [PATCH 064/357] mcl_spyglass by NO11 --- mods/ITEMS/mcl_spyglass/LICENSE | 674 ++++++++++++++++++ mods/ITEMS/mcl_spyglass/init.lua | 81 +++ .../mcl_spyglass/locale/mcl_spyglass.ru.tr | 3 + mods/ITEMS/mcl_spyglass/locale/template.txt | 3 + mods/ITEMS/mcl_spyglass/mod.conf | 5 + mods/ITEMS/mcl_spyglass/screenshot.1.png | Bin 0 -> 5515 bytes mods/ITEMS/mcl_spyglass/screenshot.png | Bin 0 -> 277426 bytes .../mcl_spyglass/textures/mcl_spyglass.png | Bin 0 -> 2042 bytes .../textures/mcl_spyglass_scope.png | Bin 0 -> 4010 bytes 9 files changed, 766 insertions(+) create mode 100644 mods/ITEMS/mcl_spyglass/LICENSE create mode 100644 mods/ITEMS/mcl_spyglass/init.lua create mode 100644 mods/ITEMS/mcl_spyglass/locale/mcl_spyglass.ru.tr create mode 100644 mods/ITEMS/mcl_spyglass/locale/template.txt create mode 100644 mods/ITEMS/mcl_spyglass/mod.conf create mode 100644 mods/ITEMS/mcl_spyglass/screenshot.1.png create mode 100644 mods/ITEMS/mcl_spyglass/screenshot.png create mode 100644 mods/ITEMS/mcl_spyglass/textures/mcl_spyglass.png create mode 100644 mods/ITEMS/mcl_spyglass/textures/mcl_spyglass_scope.png diff --git a/mods/ITEMS/mcl_spyglass/LICENSE b/mods/ITEMS/mcl_spyglass/LICENSE new file mode 100644 index 000000000..f288702d2 --- /dev/null +++ b/mods/ITEMS/mcl_spyglass/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU 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 +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/mods/ITEMS/mcl_spyglass/init.lua b/mods/ITEMS/mcl_spyglass/init.lua new file mode 100644 index 000000000..0fa9a680e --- /dev/null +++ b/mods/ITEMS/mcl_spyglass/init.lua @@ -0,0 +1,81 @@ +local S = minetest.get_translator(minetest.get_current_modname()) + +minetest.register_tool("mcl_spyglass:spyglass",{ + description = S("Spyglass"), + _doc_items_longdesc = S("A spyglass is an item that can be used for zooming in on specific locations."), + inventory_image = "mcl_spyglass.png", + stack_max = 1, + _mcl_toollike_wield = true, +}) + +local function craft_spyglass(ingot) + minetest.register_craft({ + output = "mcl_spyglass:spyglass", + recipe = { + {"xpanes:pane_natural_flat"}, + {ingot}, + {ingot}, + } + }) +end + +if minetest.get_modpath("mcl_copper") then + craft_spyglass("mcl_copper:copper_ingot") +else + craft_spyglass("mcl_core:iron_ingot") +end + +local spyglass_scope = {} + +local function add_scope(player) + local wielditem = player:get_wielded_item() + if wielditem:get_name() == "mcl_spyglass:spyglass" then + spyglass_scope[player] = player:hud_add({ + hud_elem_type = "image", + position = {x = 0.5, y = 0.5}, + scale = {x = -100, y = -100}, + text = "mcl_spyglass_scope.png", + }) + player:hud_set_flags({wielditem = false}) + end +end + +local function remove_scope(player) + if spyglass_scope[player] then + player:hud_remove(spyglass_scope[player]) + spyglass_scope[player] = nil + player:hud_set_flags({wielditem = true}) + player:set_fov(86.1) + end +end + +controls.register_on_press(function(player, key) + if key ~= "RMB" then return end + add_scope(player) +end) + +controls.register_on_release(function(player, key, time) + if key ~= "RMB" then return end + remove_scope(player) +end) + +controls.register_on_hold(function(player, key, time) + if key ~= "RMB" then return end + local wielditem = player:get_wielded_item() + if wielditem:get_name() == "mcl_spyglass:spyglass" then + player:set_fov(8, false, 0.1) + if spyglass_scope[player] == nil then + add_scope(player) + end + else + remove_scope(player) + end +end) + +minetest.register_on_dieplayer(function(player) + remove_scope(player) +end) + +minetest.register_on_leaveplayer(function(player) + spyglass_scope[player] = nil +end) diff --git a/mods/ITEMS/mcl_spyglass/locale/mcl_spyglass.ru.tr b/mods/ITEMS/mcl_spyglass/locale/mcl_spyglass.ru.tr new file mode 100644 index 000000000..32b7fa96a --- /dev/null +++ b/mods/ITEMS/mcl_spyglass/locale/mcl_spyglass.ru.tr @@ -0,0 +1,3 @@ +# textdomain: mcl_spyglass +Spyglass=Подзорная труба +A spyglass is an item that can be used for zooming in on specific locations.=Подзорная труба это предмет который позволяет смотреть вдаль. \ No newline at end of file diff --git a/mods/ITEMS/mcl_spyglass/locale/template.txt b/mods/ITEMS/mcl_spyglass/locale/template.txt new file mode 100644 index 000000000..606b46455 --- /dev/null +++ b/mods/ITEMS/mcl_spyglass/locale/template.txt @@ -0,0 +1,3 @@ +# textdomain: mcl_spyglass +Spyglass= +A spyglass is an item that can be used for zooming in on specific locations.= diff --git a/mods/ITEMS/mcl_spyglass/mod.conf b/mods/ITEMS/mcl_spyglass/mod.conf new file mode 100644 index 000000000..965e6a73b --- /dev/null +++ b/mods/ITEMS/mcl_spyglass/mod.conf @@ -0,0 +1,5 @@ +name = mcl_spyglass +author = NO11 +description = This mod adds a spyglass, which is an item that can be used for zooming in on specific locations. +depends = mcl_core, controls, xpanes +optional_depends = mcl_copper diff --git a/mods/ITEMS/mcl_spyglass/screenshot.1.png b/mods/ITEMS/mcl_spyglass/screenshot.1.png new file mode 100644 index 0000000000000000000000000000000000000000..935c797f22e0fd5ef561cbdcf9ef4b277a7953c1 GIT binary patch literal 5515 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 YJr(j!Cule>@b(h0FtIT%Fgz3YKgB)FQ2+n{ literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_spyglass/screenshot.png b/mods/ITEMS/mcl_spyglass/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..80be1a00156a15055c90a76641b701363e16c772 GIT binary patch literal 277426 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

Revmt$zcI9%HSCF%qOO@ye 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

Y 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

Revmt$zcI9%HSCF%qOO@ye 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

Y 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 W-Hv|O{tFSnBNSv*q$?#&1OE?}b|8BI -- 2.40.1 From 7dd6d5f8861b93d3bf8454df85cdc58a800136be Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 13 Jun 2022 12:24:27 +0200 Subject: [PATCH 066/357] spaces -> tabs --- mods/ITEMS/mcl_spyglass/init.lua | 94 ++++++++++++++++---------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/mods/ITEMS/mcl_spyglass/init.lua b/mods/ITEMS/mcl_spyglass/init.lua index 0fa9a680e..1b8ca4cd3 100644 --- a/mods/ITEMS/mcl_spyglass/init.lua +++ b/mods/ITEMS/mcl_spyglass/init.lua @@ -1,81 +1,81 @@ local S = minetest.get_translator(minetest.get_current_modname()) minetest.register_tool("mcl_spyglass:spyglass",{ - description = S("Spyglass"), - _doc_items_longdesc = S("A spyglass is an item that can be used for zooming in on specific locations."), - inventory_image = "mcl_spyglass.png", - stack_max = 1, - _mcl_toollike_wield = true, + description = S("Spyglass"), + _doc_items_longdesc = S("A spyglass is an item that can be used for zooming in on specific locations."), + inventory_image = "mcl_spyglass.png", + stack_max = 1, + _mcl_toollike_wield = true, }) local function craft_spyglass(ingot) - minetest.register_craft({ - output = "mcl_spyglass:spyglass", - recipe = { - {"xpanes:pane_natural_flat"}, - {ingot}, - {ingot}, - } - }) + minetest.register_craft({ + output = "mcl_spyglass:spyglass", + recipe = { + {"xpanes:pane_natural_flat"}, + {ingot}, + {ingot}, + } + }) end if minetest.get_modpath("mcl_copper") then - craft_spyglass("mcl_copper:copper_ingot") + craft_spyglass("mcl_copper:copper_ingot") else - craft_spyglass("mcl_core:iron_ingot") + craft_spyglass("mcl_core:iron_ingot") end local spyglass_scope = {} local function add_scope(player) - local wielditem = player:get_wielded_item() - if wielditem:get_name() == "mcl_spyglass:spyglass" then - spyglass_scope[player] = player:hud_add({ - hud_elem_type = "image", - position = {x = 0.5, y = 0.5}, - scale = {x = -100, y = -100}, - text = "mcl_spyglass_scope.png", - }) - player:hud_set_flags({wielditem = false}) - end + local wielditem = player:get_wielded_item() + if wielditem:get_name() == "mcl_spyglass:spyglass" then + spyglass_scope[player] = player:hud_add({ + hud_elem_type = "image", + position = {x = 0.5, y = 0.5}, + scale = {x = -100, y = -100}, + text = "mcl_spyglass_scope.png", + }) + player:hud_set_flags({wielditem = false}) + end end local function remove_scope(player) - if spyglass_scope[player] then - player:hud_remove(spyglass_scope[player]) - spyglass_scope[player] = nil - player:hud_set_flags({wielditem = true}) - player:set_fov(86.1) - end + if spyglass_scope[player] then + player:hud_remove(spyglass_scope[player]) + spyglass_scope[player] = nil + player:hud_set_flags({wielditem = true}) + player:set_fov(86.1) + end end controls.register_on_press(function(player, key) - if key ~= "RMB" then return end - add_scope(player) + if key ~= "RMB" then return end + add_scope(player) end) controls.register_on_release(function(player, key, time) - if key ~= "RMB" then return end - remove_scope(player) + if key ~= "RMB" then return end + remove_scope(player) end) controls.register_on_hold(function(player, key, time) - if key ~= "RMB" then return end - local wielditem = player:get_wielded_item() - if wielditem:get_name() == "mcl_spyglass:spyglass" then - player:set_fov(8, false, 0.1) - if spyglass_scope[player] == nil then - add_scope(player) - end - else - remove_scope(player) - end + if key ~= "RMB" then return end + local wielditem = player:get_wielded_item() + if wielditem:get_name() == "mcl_spyglass:spyglass" then + player:set_fov(8, false, 0.1) + if spyglass_scope[player] == nil then + add_scope(player) + end + else + remove_scope(player) + end end) minetest.register_on_dieplayer(function(player) - remove_scope(player) + remove_scope(player) end) minetest.register_on_leaveplayer(function(player) - spyglass_scope[player] = nil + spyglass_scope[player] = nil end) -- 2.40.1 From bd6d777f05b7ba2a34a5419a359f5bf682c467d6 Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 13 Jun 2022 12:25:14 +0200 Subject: [PATCH 067/357] remove check for mcl_copper, fix recipe --- mods/ITEMS/mcl_spyglass/init.lua | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/mods/ITEMS/mcl_spyglass/init.lua b/mods/ITEMS/mcl_spyglass/init.lua index 1b8ca4cd3..fa1a82339 100644 --- a/mods/ITEMS/mcl_spyglass/init.lua +++ b/mods/ITEMS/mcl_spyglass/init.lua @@ -8,22 +8,14 @@ minetest.register_tool("mcl_spyglass:spyglass",{ _mcl_toollike_wield = true, }) -local function craft_spyglass(ingot) - minetest.register_craft({ - output = "mcl_spyglass:spyglass", - recipe = { - {"xpanes:pane_natural_flat"}, - {ingot}, - {ingot}, - } - }) -end - -if minetest.get_modpath("mcl_copper") then - craft_spyglass("mcl_copper:copper_ingot") -else - craft_spyglass("mcl_core:iron_ingot") -end +minetest.register_craft({ + output = "mcl_spyglass:spyglass", + recipe = { + {"mcl_amethyst:amethyst_shard"}, + {"mcl_copper:copper_ingot"}, + {"mcl_copper:copper_ingot"}, + } +}) local spyglass_scope = {} -- 2.40.1 From 27a84799e42259ff97b50bb5a0a4513055b2828a Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 13 Jun 2022 12:32:48 +0200 Subject: [PATCH 068/357] remove superfluous dependencies --- mods/ITEMS/mcl_spyglass/mod.conf | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mods/ITEMS/mcl_spyglass/mod.conf b/mods/ITEMS/mcl_spyglass/mod.conf index 965e6a73b..c13b281e1 100644 --- a/mods/ITEMS/mcl_spyglass/mod.conf +++ b/mods/ITEMS/mcl_spyglass/mod.conf @@ -1,5 +1,4 @@ name = mcl_spyglass author = NO11 description = This mod adds a spyglass, which is an item that can be used for zooming in on specific locations. -depends = mcl_core, controls, xpanes -optional_depends = mcl_copper +depends = mcl_core, controls -- 2.40.1 From 110b293297e88f111f76d6c75374d46ad5175ac8 Mon Sep 17 00:00:00 2001 From: mrminer Date: Wed, 15 Jun 2022 01:30:55 +0000 Subject: [PATCH 069/357] Update 'mods/ITEMS/mcl_farming/potatoes.lua' --- mods/ITEMS/mcl_farming/potatoes.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_farming/potatoes.lua b/mods/ITEMS/mcl_farming/potatoes.lua index 04a971de8..78532c0c0 100644 --- a/mods/ITEMS/mcl_farming/potatoes.lua +++ b/mods/ITEMS/mcl_farming/potatoes.lua @@ -91,7 +91,7 @@ minetest.register_craftitem("mcl_farming:potato_item", { _doc_items_longdesc = S("Potatoes are food items which can be eaten, cooked in the furnace and planted. Pigs like potatoes."), _doc_items_usagehelp = S("Hold it in your hand and rightclick to eat it. Place it on top of farmland to plant it. It grows in sunlight and grows faster on hydrated farmland. Rightclick an animal to feed it."), inventory_image = "farming_potato.png", - groups = {food = 2, eatable = 1, compostability = 65}, + groups = {food = 2, eatable = 1, compostability = 65, smoker_cookable = 1}, _mcl_saturation = 0.6, stack_max = 64, on_secondary_use = minetest.item_eat(1), -- 2.40.1 From 60f164d46ac5a8377e205a8acb3eb8022a124d73 Mon Sep 17 00:00:00 2001 From: cora Date: Tue, 14 Jun 2022 12:32:08 +0200 Subject: [PATCH 070/357] Fix horse and wolf spawning biomes --- mods/ENTITIES/mobs_mc/horse.lua | 47 ++++++++------------------------- mods/ENTITIES/mobs_mc/wolf.lua | 27 +++++++------------ 2 files changed, 21 insertions(+), 53 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/horse.lua b/mods/ENTITIES/mobs_mc/horse.lua index d423c124c..20ff8b718 100644 --- a/mods/ENTITIES/mobs_mc/horse.lua +++ b/mods/ENTITIES/mobs_mc/horse.lua @@ -542,41 +542,14 @@ mcl_mobs:spawn_specific( "ground", { "flat", - "IcePlainsSpikes", - "ColdTaiga", - "ColdTaiga_beach", - "ColdTaiga_beach_water", - "MegaTaiga", - "MegaSpruceTaiga", - "ExtremeHills", - "ExtremeHills_beach", - "ExtremeHillsM", - "ExtremeHills+", - "ExtremeHills+_snowtop", - "StoneBeach", "Plains", "Plains_beach", "SunflowerPlains", - "Taiga", - "Taiga_beach", - "Forest", - "Forest_beach", - "FlowerForest", - "FlowerForest_beach", - "BirchForest", - "BirchForestM", - "RoofedForest", "Savanna", "Savanna_beach", "SavannaM", - "Jungle", - "Jungle_shore", - "JungleM", - "JungleM_shore", - "JungleEdge", - "JungleEdgeM", - "Swampland", - "Swampland_shore" + "Savanna_beach", + "Plains_beach", }, 0, minetest.LIGHT_MAX+1, @@ -586,18 +559,20 @@ minetest.LIGHT_MAX+1, mobs_mc.water_level+3, mcl_vars.mg_overworld_max) - mcl_mobs:spawn_specific( "mobs_mc:donkey", "overworld", "ground", { -"Mesa", -"MesaPlateauFM_grasstop", -"MesaPlateauF", -"MesaPlateauFM", -"MesaPlateauF_grasstop", -"MesaBryce", + "flat", + "Plains", + "Plains_beach", + "SunflowerPlains", + "Savanna", + "Savanna_beach", + "SavannaM", + "Savanna_beach", + "Plains_beach", }, 0, minetest.LIGHT_MAX+1, diff --git a/mods/ENTITIES/mobs_mc/wolf.lua b/mods/ENTITIES/mobs_mc/wolf.lua index f2232c397..d875bebf9 100644 --- a/mods/ENTITIES/mobs_mc/wolf.lua +++ b/mods/ENTITIES/mobs_mc/wolf.lua @@ -232,29 +232,22 @@ dog.on_rightclick = function(self, clicker) end mcl_mobs:register_mob("mobs_mc:dog", dog) - -- Spawn mcl_mobs:spawn_specific( "mobs_mc:wolf", "overworld", "ground", { -"FlowerForest", -"Swampland", -"Taiga", -"ExtremeHills", -"BirchForest", -"MegaSpruceTaiga", -"MegaTaiga", -"ExtremeHills+", -"Forest", -"Plains", -"ColdTaiga", -"SunflowerPlains", -"RoofedForest", -"MesaPlateauFM_grasstop", -"ExtremeHillsM", -"BirchForestM", + "Taiga", + "MegaSpruceTaiga", + "MegaTaiga", + "Forest", + "ColdTaiga", + "FlowerForest_beach", + "Forest_beach", + "ColdTaiga_beach_water", + "Taiga_beach", + "ColdTaiga_beach", }, 0, minetest.LIGHT_MAX+1, -- 2.40.1 From 8651e3b04ef576cf482e21f0c614e3f88de21b89 Mon Sep 17 00:00:00 2001 From: cora Date: Tue, 14 Jun 2022 12:32:26 +0200 Subject: [PATCH 071/357] randomize spawning list --- mods/ENTITIES/mcl_mobs/spawning.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/mods/ENTITIES/mcl_mobs/spawning.lua b/mods/ENTITIES/mcl_mobs/spawning.lua index 74fcc3255..71f4ec859 100644 --- a/mods/ENTITIES/mcl_mobs/spawning.lua +++ b/mods/ENTITIES/mcl_mobs/spawning.lua @@ -426,6 +426,7 @@ if mobs_spawn then perlin_noise = perlin_noise or minetest_get_perlin(noise_params) local noise = perlin_noise:get_3d(spawning_position) local current_summary_chance = summary_chance + table.shuffle(mob_library_worker_table) while #mob_library_worker_table > 0 do local mob_chance_offset = (math_round(noise * current_summary_chance + 12345) % current_summary_chance) + 1 local mob_index = 1 -- 2.40.1 From 899c8499968f6df518311387ca2d677c249d7942 Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 6 Jun 2022 01:46:32 +0200 Subject: [PATCH 072/357] old registered_structures -> structure_data --- mods/ITEMS/mcl_end/eye_of_ender.lua | 2 +- mods/MAPGEN/mcl_strongholds/init.lua | 2 +- mods/MAPGEN/mcl_structures/init.lua | 14 +++++++------- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/mods/ITEMS/mcl_end/eye_of_ender.lua b/mods/ITEMS/mcl_end/eye_of_ender.lua index ea3d70aba..bc697e359 100644 --- a/mods/ITEMS/mcl_end/eye_of_ender.lua +++ b/mods/ITEMS/mcl_end/eye_of_ender.lua @@ -87,7 +87,7 @@ minetest.register_craftitem("mcl_end:ender_eye", { end local origin = user:get_pos() origin.y = origin.y + 1.5 - local strongholds = mcl_structures.get_registered_structures("stronghold") + local strongholds = mcl_structures.get_structure_data("stronghold") local dim = mcl_worlds.pos_to_dimension(origin) local is_creative = minetest.is_creative_enabled(user:get_player_name()) diff --git a/mods/MAPGEN/mcl_strongholds/init.lua b/mods/MAPGEN/mcl_strongholds/init.lua index 083172a3c..2a362cc40 100644 --- a/mods/MAPGEN/mcl_strongholds/init.lua +++ b/mods/MAPGEN/mcl_strongholds/init.lua @@ -61,7 +61,7 @@ local function init_strongholds() end end - mcl_structures.register_structures("stronghold", table.copy(strongholds)) + mcl_structures.register_structure_data("stronghold", table.copy(strongholds)) strongholds_inited = true end diff --git a/mods/MAPGEN/mcl_structures/init.lua b/mods/MAPGEN/mcl_structures/init.lua index 5d3ecac6c..e330e2c01 100644 --- a/mods/MAPGEN/mcl_structures/init.lua +++ b/mods/MAPGEN/mcl_structures/init.lua @@ -530,7 +530,7 @@ function mcl_structures.generate_desert_temple(pos, rotation, pr) mcl_structures.place_schematic(newpos, path, rotation or "random", nil, true, nil, temple_placement_callback, pr) end -local registered_structures = {} +local structure_data = {} --[[ Returns a table of structure of the specified type. Currently the only valid parameter is "stronghold". @@ -543,18 +543,18 @@ Format of return value: TODO: Implement this function for all other structure types as well. ]] -function mcl_structures.get_registered_structures(structure_type) - if registered_structures[structure_type] then - return table.copy(registered_structures[structure_type]) +function mcl_structures.get_structure_data(structure_type) + if structure_data[structure_type] then + return table.copy(structure_data[structure_type]) else return {} end end -- Register a structures table for the given type. The table format is the same as for --- mcl_structures.get_registered_structures. -function mcl_structures.register_structures(structure_type, structures) - registered_structures[structure_type] = structures +-- mcl_structures.get_structure_data. +function mcl_structures.register_structure_data(structure_type, structures) + structure_data[structure_type] = structures end local function dir_to_rotation(dir) -- 2.40.1 From 6406a147382c66e1c46bd1a374fa26e45d3c0fc0 Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 6 Jun 2022 03:34:31 +0200 Subject: [PATCH 073/357] Add Structure placement api --- mods/MAPGEN/mcl_shipwrecks/init.lua | 146 +++++++++++++++++----------- mods/MAPGEN/mcl_structures/api.lua | 69 +++++++++++++ mods/MAPGEN/mcl_structures/init.lua | 2 + 3 files changed, 162 insertions(+), 55 deletions(-) create mode 100644 mods/MAPGEN/mcl_structures/api.lua diff --git a/mods/MAPGEN/mcl_shipwrecks/init.lua b/mods/MAPGEN/mcl_shipwrecks/init.lua index c9bf2c942..b2c0c3306 100644 --- a/mods/MAPGEN/mcl_shipwrecks/init.lua +++ b/mods/MAPGEN/mcl_shipwrecks/init.lua @@ -8,11 +8,11 @@ local pr = PseudoRandom(seed) --schematics by chmodsayshello local schems = { - "shipwreck_full_damaged", - "shipwreck_full_normal", - "shipwreck_full_back_damaged", - "shipwreck_half_front", - "shipwreck_half_back", + modpath.."/schematics/".."shipwreck_full_damaged"..".mts", + modpath.."/schematics/".."shipwreck_full_normal"..".mts", + modpath.."/schematics/".."shipwreck_full_back_damaged"..".mts", + modpath.."/schematics/".."shipwreck_half_front"..".mts", + modpath.."/schematics/".."shipwreck_half_back"..".mts", } local function get_supply_loot() @@ -41,7 +41,7 @@ local function get_supply_loot() --{ itemstring = "TODO:bamboo", weight = 2, amount_min = 1, amount_max = 3 }, { itemstring = "mcl_farming:pumpkin", weight = 2, amount_min = 1, amount_max = 3 }, { itemstring = "mcl_tnt:tnt", weight = 1, amount_min = 1, amount_max = 2 }, - + } } end @@ -75,61 +75,97 @@ local function fill_chests(p1,p2) end end -local function get_ocean_biomes() - local r = {} - for k,_ in pairs(minetest.registered_biomes) do - if k:find("_ocean") then table.insert(r,k) end - end - return r -end -local function get_beach_biomes() - local r = {} - for k,_ in pairs(minetest.registered_biomes) do - if k:find("_beach") or k:find("_shore") then table.insert(r,k) end - end - return r -end +local ocean_biomes = { + "RoofedForest_ocean", + "JungleEdgeM_ocean", + "BirchForestM_ocean", + "BirchForest_ocean", + "IcePlains_deep_ocean", + "Jungle_deep_ocean", + "Savanna_ocean", + "MesaPlateauF_ocean", + "ExtremeHillsM_deep_ocean", + "Savanna_deep_ocean", + "SunflowerPlains_ocean", + "Swampland_deep_ocean", + "Swampland_ocean", + "MegaSpruceTaiga_deep_ocean", + "ExtremeHillsM_ocean", + "JungleEdgeM_deep_ocean", + "SunflowerPlains_deep_ocean", + "BirchForest_deep_ocean", + "IcePlainsSpikes_ocean", + "Mesa_ocean", + "StoneBeach_ocean", + "Plains_deep_ocean", + "JungleEdge_deep_ocean", + "SavannaM_deep_ocean", + "Desert_deep_ocean", + "Mesa_deep_ocean", + "ColdTaiga_deep_ocean", + "Plains_ocean", + "MesaPlateauFM_ocean", + "Forest_deep_ocean", + "JungleM_deep_ocean", + "FlowerForest_deep_ocean", + "MushroomIsland_ocean", + "MegaTaiga_ocean", + "StoneBeach_deep_ocean", + "IcePlainsSpikes_deep_ocean", + "ColdTaiga_ocean", + "SavannaM_ocean", + "MesaPlateauF_deep_ocean", + "MesaBryce_deep_ocean", + "ExtremeHills+_deep_ocean", + "ExtremeHills_ocean", + "MushroomIsland_deep_ocean", + "Forest_ocean", + "MegaTaiga_deep_ocean", + "JungleEdge_ocean", + "MesaBryce_ocean", + "MegaSpruceTaiga_ocean", + "ExtremeHills+_ocean", + "Jungle_ocean", + "RoofedForest_deep_ocean", + "IcePlains_ocean", + "FlowerForest_ocean", + "ExtremeHills_deep_ocean", + "MesaPlateauFM_deep_ocean", + "Desert_ocean", + "Taiga_ocean", + "BirchForestM_deep_ocean", + "Taiga_deep_ocean", + "JungleM_ocean" +} -minetest.register_node("mcl_shipwrecks:structblock", {drawtype="airlike", walkable = false, pointable = false,groups = {structblock=1,not_in_creative_inventory=1}}) +local beach_biomes = { + "FlowerForest_beach", + "Forest_beach", + "StoneBeach", + "ColdTaiga_beach_water", + "Taiga_beach", + "Savanna_beach", + "Plains_beach", + "ExtremeHills_beach", + "ColdTaiga_beach", + "Swampland_shore", + "MushroomIslandShore", + "JungleM_shore", + "Jungle_shore" +} -minetest.register_decoration({ - decoration = "mcl_shipwrecks:structblock", - deco_type = "simple", +mcl_structures.register_structure("shipwreck",{ place_on = {"group:sand","mcl_core:gravel"}, spawn_by = {"group:water"}, num_spawn_by = 4, - sidelen = 80, fill_ratio = 0.00002, flags = "place_center_x, place_center_z, force_placement", - biomes = get_ocean_biomes(), - y_max=water_level-4, -}) - ---rare beached variant -minetest.register_decoration({ - decoration = "mcl_shipwrecks:structblock", - deco_type = "simple", - place_on = {"group:sand","mcl_core:gravel","group:dirt"}, - spawn_by = {"group:water","air"}, - num_spawn_by = 4, - sidelen = 80, - fill_ratio=0.000001, - flags = "place_center_x, place_center_z, force_placement", - biomes = get_beach_biomes(), - y_max = water_level + 4, - y_min = water_level - 1, -}) - -minetest.register_lbm({ - name = "mcl_shipwrecks:struct_lbm", - run_at_every_load = true, - nodenames = {"mcl_shipwrecks:structblock"}, - action = function(pos, node) - minetest.set_node(pos,{name="air"}) - local file = modpath.."/schematics/"..schems[pr:next(1,#schems)]..".mts" - local pp = vector.offset(pos,0,pr:next(-4,-2),0) - mcl_structures.place_schematic(pp, file, "random", nil, true, "place_center_x,place_center_z", function() - fill_chests(vector.offset(pos,-20,-5,-20),vector.offset(pos,20,15,20)) - end,pr) + biomes = ocean_biomes, + y_max = water_level-4, + y_min = mcl_vars.mg_overworld_min, + filenames = schems, + y_offset = function(pr) return pr:next(-4,-2) end, + after_place = function(pos) + fill_chests(vector.offset(pos,-20,-5,-20),vector.offset(pos,20,15,20)) end }) diff --git a/mods/MAPGEN/mcl_structures/api.lua b/mods/MAPGEN/mcl_structures/api.lua new file mode 100644 index 000000000..201e2e83f --- /dev/null +++ b/mods/MAPGEN/mcl_structures/api.lua @@ -0,0 +1,69 @@ +local registered_structures = {} + +--[[] structure def: +{ + fill_ratio= OR noise = {} + biomes = + y_min = + y_max = + place_on = + spawn_by = + num_spawn_by = + flags = (default: "place_center_x, place_center_z, force_placement") + (same as decoration def) + y_offset = + filenames = {} OR place_func = function(pos,filename) + after_place = function(pos) +} +]]-- + +function mcl_structures.register_structure(name,def,nospawn) --nospawn means it will be placed by another (non-nospawn) structure that contains it's structblock i.e. it will not be placed by mapgen directly + local structblock = "mcl_structures:structblock_"..name + minetest.register_node(":"..structblock, {drawtype="airlike", walkable = false, pointable = false,groups = {structblock=1,not_in_creative_inventory=1}}) + local flags = "place_center_x, place_center_z, force_placement" + local y_offset = 0 + if def.flags then flags = def.flags end + def.name = name + if nospawn == nil then + def.deco = minetest.register_decoration({ + decoration = structblock, + deco_type = "simple", + place_on = def.place_on, + spawn_by = def.spawn_by, + num_spawn_by = def.num_spawn_by, + sidelen = 80, + fill_ratio = def.fill_ratio, + noise = def.noise, + flags = flags, + biomes = def.biomes, + y_max = def.y_max, + y_min = def.y_min + }) + end + registered_structures[name] = def +end + +minetest.register_lbm({ + name = "mcl_structures:struct_lbm", + run_at_every_load = true, + nodenames = {"group:structblock"}, + action = function(pos, node) + local name = node.name:gsub("mcl_structures:structblock_","") + local pr = PseudoRandom(pos.x+pos.y+pos.z) + local def = registered_structures[name] + local y_offset = 0 + minetest.set_node(pos,{name="air"}) + if type(def.y_offset) == "function" then + y_offset = def.y_offset(pr) + elseif def.y_offset then + y_offset = def.y_offset + end + if def.filenames then + local file = def.filenames[pr:next(1,#def.filenames)] + local pp = vector.offset(pos,0,y_offset,0) + mcl_structures.place_schematic(pp, file, "random", nil, true, "place_center_x,place_center_z",def.after_place,pr,{pos,def}) + elseif def.place_func and def.place_func(pos,def) then + def.after_place(pos,def) + end + end +}) diff --git a/mods/MAPGEN/mcl_structures/init.lua b/mods/MAPGEN/mcl_structures/init.lua index e330e2c01..388d78190 100644 --- a/mods/MAPGEN/mcl_structures/init.lua +++ b/mods/MAPGEN/mcl_structures/init.lua @@ -571,6 +571,8 @@ local function dir_to_rotation(dir) return "0" end +dofile(modpath.."/api.lua") + -- Debug command minetest.register_chatcommand("spawnstruct", { params = "desert_temple | desert_well | igloo | witch_hut | boulder | ice_spike_small | ice_spike_large | fossil | end_exit_portal | end_exit_portal_open | end_gateway_portal | end_portal_shrine | nether_portal | dungeon", -- 2.40.1 From 1eaac3c40604ffe62ecdc8416fbaec17d3c7e2b5 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 10 Jun 2022 01:06:24 +0200 Subject: [PATCH 074/357] use gennotify instead of lbm for placement keep the lbm for secondary structures --- mods/MAPGEN/mcl_structures/api.lua | 57 ++++++++++++++++++++---------- 1 file changed, 39 insertions(+), 18 deletions(-) diff --git a/mods/MAPGEN/mcl_structures/api.lua b/mods/MAPGEN/mcl_structures/api.lua index 201e2e83f..e9dc8b5bf 100644 --- a/mods/MAPGEN/mcl_structures/api.lua +++ b/mods/MAPGEN/mcl_structures/api.lua @@ -17,15 +17,35 @@ local registered_structures = {} } ]]-- +local function place_schem(pos, def, pr) + if not def then return end + if type(def.y_offset) == "function" then + y_offset = def.y_offset(pr) + elseif def.y_offset then + y_offset = def.y_offset + end + if def.filenames then + local file = def.filenames[pr:next(1,#def.filenames)] + local pp = vector.offset(pos,0,y_offset,0) + mcl_structures.place_schematic(pp, file, "random", nil, true, "place_center_x,place_center_z",def.after_place,pr,{pos,def}) + elseif def.place_func and def.place_func(pos,def) then + def.after_place(pos,def) + end +end + function mcl_structures.register_structure(name,def,nospawn) --nospawn means it will be placed by another (non-nospawn) structure that contains it's structblock i.e. it will not be placed by mapgen directly local structblock = "mcl_structures:structblock_"..name - minetest.register_node(":"..structblock, {drawtype="airlike", walkable = false, pointable = false,groups = {structblock=1,not_in_creative_inventory=1}}) local flags = "place_center_x, place_center_z, force_placement" local y_offset = 0 + local sbgroups = { structblock = 1, not_in_creative_inventory=1 } if def.flags then flags = def.flags end def.name = name - if nospawn == nil then + if nospawn then + sbgroups.structblock = nil + sbgroups.structblock_lbm = 1 + else def.deco = minetest.register_decoration({ + name = "mcl_structures:deco_"..name, decoration = structblock, deco_type = "simple", place_on = def.place_on, @@ -39,31 +59,32 @@ function mcl_structures.register_structure(name,def,nospawn) --nospawn means it y_max = def.y_max, y_min = def.y_min }) + local deco_id = minetest.get_decoration_id("mcl_structures:deco_"..name) + minetest.set_gen_notify({decoration=true}, { deco_id }) + minetest.register_on_generated(function(minp, maxp, blockseed) + local gennotify = minetest.get_mapgen_object("gennotify") + local pr = PseudoRandom(blockseed + 42) + for _, pos in pairs(gennotify["decoration#"..deco_id] or {}) do + local realpos = vector.offset(pos,0,-1,0) + minetest.remove_node(realpos) + place_schem(realpos,def,pr) + end + end) end + minetest.register_node(":"..structblock, {drawtype="airlike", walkable = false, pointable = false,groups = sbgroups}) registered_structures[name] = def end +--lbm for secondary structures (structblock included in base structure) minetest.register_lbm({ name = "mcl_structures:struct_lbm", run_at_every_load = true, - nodenames = {"group:structblock"}, + nodenames = {"group:structblock_lbm"}, action = function(pos, node) local name = node.name:gsub("mcl_structures:structblock_","") - local pr = PseudoRandom(pos.x+pos.y+pos.z) local def = registered_structures[name] - local y_offset = 0 - minetest.set_node(pos,{name="air"}) - if type(def.y_offset) == "function" then - y_offset = def.y_offset(pr) - elseif def.y_offset then - y_offset = def.y_offset - end - if def.filenames then - local file = def.filenames[pr:next(1,#def.filenames)] - local pp = vector.offset(pos,0,y_offset,0) - mcl_structures.place_schematic(pp, file, "random", nil, true, "place_center_x,place_center_z",def.after_place,pr,{pos,def}) - elseif def.place_func and def.place_func(pos,def) then - def.after_place(pos,def) - end + if not def then return end + minetest.remove_node(pos) + place_schem(pos) end }) -- 2.40.1 From 8fa67e6b4fe4b0bfc95f79aff3c9ced420a22ce3 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 10 Jun 2022 01:49:33 +0200 Subject: [PATCH 075/357] Geodes as test for place by function --- mods/MAPGEN/mcl_geodes/init.lua | 75 ++++++++++++++++++++++++++++++ mods/MAPGEN/mcl_geodes/mod.conf | 3 ++ mods/MAPGEN/mcl_structures/api.lua | 6 +-- 3 files changed, 81 insertions(+), 3 deletions(-) create mode 100644 mods/MAPGEN/mcl_geodes/init.lua create mode 100644 mods/MAPGEN/mcl_geodes/mod.conf diff --git a/mods/MAPGEN/mcl_geodes/init.lua b/mods/MAPGEN/mcl_geodes/init.lua new file mode 100644 index 000000000..cf0ec3050 --- /dev/null +++ b/mods/MAPGEN/mcl_geodes/init.lua @@ -0,0 +1,75 @@ +local adjacents = { + vector.new(1,0,0), + vector.new(-1,0,0), + vector.new(0,0,1), + vector.new(0,0,-1), + vector.new(0,1,0), + vector.new(0,-1,0) +} + +local function makegeode(pos,pr) + local size = pr:next(3,18) + local p1 = vector.offset(pos,-size,-size,-size) + local p2 = vector.offset(pos,size,size,size) + local nn = minetest.find_nodes_in_area(p1,p2,{"group:material_stone"}) + table.sort(nn,function(a, b) + return vector.distance(pos, a) < vector.distance(pos, b) + end) + if not nn[1] then return end + for i=1,math.random(#nn) do + minetest.set_node(nn[i],{name="mcl_amethyst:amethyst_block"}) + end + local nnn = minetest.find_nodes_in_area(p1,p2,{"mcl_amethyst:amethyst_block"}) + for k,v in pairs(nnn) do + local all_amethyst = true + for kk,vv in pairs(adjacents) do + local pp = vector.add(v,vv) + local an = minetest.get_node(pp) + if an.name ~= "mcl_amethyst:amethyst_block" then + if minetest.get_item_group(an.name,"material_stone") > 0 then + minetest.set_node(pp,{name="mcl_amethyst:calcite"}) + if pr:next(1,5) == 1 then + minetest.set_node(v,{name="mcl_amethyst:budding_amethyst_block"}) + end + all_amethyst = false + elseif an.name ~= "mcl_amethyst:amethyst_block" and an.name ~= "air" then + all_amethyst = false + end + end + end + if all_amethyst then minetest.set_node(v,{name="air"}) end + end + + local nnnn = minetest.find_nodes_in_area_under_air(p1,p2,{"mcl_amethyst:amethyst_block"}) + for k,v in pairs(nnnn) do + local r = pr:next(1,50) + if r < 10 then + minetest.set_node(vector.offset(v,0,1,0),{name="mcl_amethyst:amethyst_cluster",param2=1}) + end + end +end + +mcl_structures.register_structure("geodes",{ + place_on = {"mcl_core:stone"}, + spawn_by = {"air"}, + num_spawn_by = 2, + fill_ratio = 0.002, + flags = "place_center_x, place_center_z, force_placement", + biomes = ocean_biomes, + y_max = mcl_vars.mg_overworld_max, + y_min = mcl_vars.mg_overworld_min, + filenames = schems, + y_offset = function(pr) return pr:next(-4,-2) end, + place_func = function(pos,def,pr) + local p = vector.new(pos.x + pr:next(-30,30),pos.y,pos.z + pr:next(-30,30)) + makegeode(pos,pr) + end, +}) + +minetest.register_chatcommand("makegeode",{ + privs = { debug = true }, + func=function(n,p) + local pos = pl:get_pos() + makegeode(pos,PseudoRandom(minetest.get_mapgen_setting("seed"))) + end +}) diff --git a/mods/MAPGEN/mcl_geodes/mod.conf b/mods/MAPGEN/mcl_geodes/mod.conf new file mode 100644 index 000000000..cccb57108 --- /dev/null +++ b/mods/MAPGEN/mcl_geodes/mod.conf @@ -0,0 +1,3 @@ +name = mcl_geodes +author = cora +depends = mcl_init, mcl_structures diff --git a/mods/MAPGEN/mcl_structures/api.lua b/mods/MAPGEN/mcl_structures/api.lua index e9dc8b5bf..71ca75ff5 100644 --- a/mods/MAPGEN/mcl_structures/api.lua +++ b/mods/MAPGEN/mcl_structures/api.lua @@ -2,7 +2,7 @@ local registered_structures = {} --[[] structure def: { - fill_ratio= OR noise = {} + fill_ratio = OR noise = {} biomes = y_min = y_max = @@ -28,8 +28,8 @@ local function place_schem(pos, def, pr) local file = def.filenames[pr:next(1,#def.filenames)] local pp = vector.offset(pos,0,y_offset,0) mcl_structures.place_schematic(pp, file, "random", nil, true, "place_center_x,place_center_z",def.after_place,pr,{pos,def}) - elseif def.place_func and def.place_func(pos,def) then - def.after_place(pos,def) + elseif def.place_func and def.place_func(pos,def,pr) then + def.after_place(pos,def,pr) end end -- 2.40.1 From b0b8638a4c6d4858cff349c70ffb8dec18ccde34 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 10 Jun 2022 02:40:33 +0200 Subject: [PATCH 076/357] Add /spawnstruct support --- mods/MAPGEN/mcl_geodes/init.lua | 12 +-- mods/MAPGEN/mcl_structures/api.lua | 12 +-- mods/MAPGEN/mcl_structures/init.lua | 127 ++++++++++++++++------------ 3 files changed, 79 insertions(+), 72 deletions(-) diff --git a/mods/MAPGEN/mcl_geodes/init.lua b/mods/MAPGEN/mcl_geodes/init.lua index cf0ec3050..413a8fbba 100644 --- a/mods/MAPGEN/mcl_geodes/init.lua +++ b/mods/MAPGEN/mcl_geodes/init.lua @@ -8,7 +8,7 @@ local adjacents = { } local function makegeode(pos,pr) - local size = pr:next(3,18) + local size = pr:next(4,12) local p1 = vector.offset(pos,-size,-size,-size) local p2 = vector.offset(pos,size,size,size) local nn = minetest.find_nodes_in_area(p1,p2,{"group:material_stone"}) @@ -49,7 +49,7 @@ local function makegeode(pos,pr) end end -mcl_structures.register_structure("geodes",{ +mcl_structures.register_structure("geode",{ place_on = {"mcl_core:stone"}, spawn_by = {"air"}, num_spawn_by = 2, @@ -65,11 +65,3 @@ mcl_structures.register_structure("geodes",{ makegeode(pos,pr) end, }) - -minetest.register_chatcommand("makegeode",{ - privs = { debug = true }, - func=function(n,p) - local pos = pl:get_pos() - makegeode(pos,PseudoRandom(minetest.get_mapgen_setting("seed"))) - end -}) diff --git a/mods/MAPGEN/mcl_structures/api.lua b/mods/MAPGEN/mcl_structures/api.lua index 71ca75ff5..5e0858fb1 100644 --- a/mods/MAPGEN/mcl_structures/api.lua +++ b/mods/MAPGEN/mcl_structures/api.lua @@ -1,4 +1,4 @@ -local registered_structures = {} +mcl_structures.registered_structures = {} --[[] structure def: { @@ -17,7 +17,7 @@ local registered_structures = {} } ]]-- -local function place_schem(pos, def, pr) +function mcl_structures.place_structure(pos, def, pr) if not def then return end if type(def.y_offset) == "function" then y_offset = def.y_offset(pr) @@ -67,12 +67,12 @@ function mcl_structures.register_structure(name,def,nospawn) --nospawn means it for _, pos in pairs(gennotify["decoration#"..deco_id] or {}) do local realpos = vector.offset(pos,0,-1,0) minetest.remove_node(realpos) - place_schem(realpos,def,pr) + mcl_structures.place_structure(realpos,def,pr) end end) end minetest.register_node(":"..structblock, {drawtype="airlike", walkable = false, pointable = false,groups = sbgroups}) - registered_structures[name] = def + mcl_structures.registered_structures[name] = def end --lbm for secondary structures (structblock included in base structure) @@ -82,9 +82,9 @@ minetest.register_lbm({ nodenames = {"group:structblock_lbm"}, action = function(pos, node) local name = node.name:gsub("mcl_structures:structblock_","") - local def = registered_structures[name] + local def = mcl_structures.registered_structures[name] if not def then return end minetest.remove_node(pos) - place_schem(pos) + mcl_structures.place_structure(pos) end }) diff --git a/mods/MAPGEN/mcl_structures/init.lua b/mods/MAPGEN/mcl_structures/init.lua index 388d78190..665fbf4c0 100644 --- a/mods/MAPGEN/mcl_structures/init.lua +++ b/mods/MAPGEN/mcl_structures/init.lua @@ -573,60 +573,75 @@ end dofile(modpath.."/api.lua") --- Debug command -minetest.register_chatcommand("spawnstruct", { - params = "desert_temple | desert_well | igloo | witch_hut | boulder | ice_spike_small | ice_spike_large | fossil | end_exit_portal | end_exit_portal_open | end_gateway_portal | end_portal_shrine | nether_portal | dungeon", - description = S("Generate a pre-defined structure near your position."), - privs = {debug = true}, - func = function(name, param) - local player = minetest.get_player_by_name(name) - if not player then return end - local pos = player:get_pos() - if not pos then return end - pos = vector.round(pos) - local dir = minetest.yaw_to_dir(player:get_look_horizontal()) - local rot = dir_to_rotation(dir) - local pr = PseudoRandom(pos.x+pos.y+pos.z) - local errord = false - local message = S("Structure placed.") - if param == "desert_temple" then - mcl_structures.generate_desert_temple(pos, rot, pr) - elseif param == "desert_well" then - mcl_structures.generate_desert_well(pos, rot) - elseif param == "igloo" then - mcl_structures.generate_igloo(pos, rot, pr) - elseif param == "witch_hut" then - mcl_structures.generate_witch_hut(pos, rot, pr) - elseif param == "boulder" then - mcl_structures.generate_boulder(pos, rot, pr) - elseif param == "fossil" then - mcl_structures.generate_fossil(pos, rot, pr) - elseif param == "ice_spike_small" then - mcl_structures.generate_ice_spike_small(pos, rot, pr) - elseif param == "ice_spike_large" then - mcl_structures.generate_ice_spike_large(pos, rot, pr) - elseif param == "end_exit_portal" then - mcl_structures.generate_end_exit_portal(pos, rot, pr) - elseif param == "end_exit_portal_open" then - mcl_structures.generate_end_exit_portal_open(pos, rot, pr) - elseif param == "end_gateway_portal" then - mcl_structures.generate_end_gateway_portal(pos, rot, pr) - elseif param == "end_portal_shrine" then - mcl_structures.generate_end_portal_shrine(pos, rot, pr) - elseif param == "dungeon" and mcl_dungeons and mcl_dungeons.spawn_dungeon then - mcl_dungeons.spawn_dungeon(pos, rot, pr) - elseif param == "nether_portal" and mcl_portals and mcl_portals.spawn_nether_portal then - mcl_portals.spawn_nether_portal(pos, rot, pr, name) - elseif param == "" then - message = S("Error: No structure type given. Please use “/spawnstruct ”.") - errord = true - else - message = S("Error: Unknown structure type. Please use “/spawnstruct ”.") - errord = true - end - minetest.chat_send_player(name, message) - if errord then - minetest.chat_send_player(name, S("Use /help spawnstruct to see a list of avaiable types.")) - end +minetest.register_on_mods_loaded(function() + -- Debug command + local chatcommand_params = "desert_temple | desert_well | igloo | witch_hut | boulder | ice_spike_small | ice_spike_large | fossil | end_exit_portal | end_exit_portal_open | end_gateway_portal | end_portal_shrine | nether_portal | dungeon" + + for n,_ in pairs(mcl_structures.registered_structures) do + chatcommand_params = chatcommand_params .. " | "..n end -}) + + minetest.register_chatcommand("spawnstruct", { + params = chatcommand_params, + description = S("Generate a pre-defined structure near your position."), + privs = {debug = true}, + func = function(name, param) + local player = minetest.get_player_by_name(name) + if not player then return end + local pos = player:get_pos() + if not pos then return end + pos = vector.round(pos) + local dir = minetest.yaw_to_dir(player:get_look_horizontal()) + local rot = dir_to_rotation(dir) + local pr = PseudoRandom(pos.x+pos.y+pos.z) + local errord = false + local message = S("Structure placed.") + if param == "desert_temple" then + mcl_structures.generate_desert_temple(pos, rot, pr) + elseif param == "desert_well" then + mcl_structures.generate_desert_well(pos, rot) + elseif param == "igloo" then + mcl_structures.generate_igloo(pos, rot, pr) + elseif param == "witch_hut" then + mcl_structures.generate_witch_hut(pos, rot, pr) + elseif param == "boulder" then + mcl_structures.generate_boulder(pos, rot, pr) + elseif param == "fossil" then + mcl_structures.generate_fossil(pos, rot, pr) + elseif param == "ice_spike_small" then + mcl_structures.generate_ice_spike_small(pos, rot, pr) + elseif param == "ice_spike_large" then + mcl_structures.generate_ice_spike_large(pos, rot, pr) + elseif param == "end_exit_portal" then + mcl_structures.generate_end_exit_portal(pos, rot, pr) + elseif param == "end_exit_portal_open" then + mcl_structures.generate_end_exit_portal_open(pos, rot, pr) + elseif param == "end_gateway_portal" then + mcl_structures.generate_end_gateway_portal(pos, rot, pr) + elseif param == "end_portal_shrine" then + mcl_structures.generate_end_portal_shrine(pos, rot, pr) + elseif param == "dungeon" and mcl_dungeons and mcl_dungeons.spawn_dungeon then + mcl_dungeons.spawn_dungeon(pos, rot, pr) + elseif param == "nether_portal" and mcl_portals and mcl_portals.spawn_nether_portal then + mcl_portals.spawn_nether_portal(pos, rot, pr, name) + elseif param == "" then + message = S("Error: No structure type given. Please use “/spawnstruct ”.") + errord = true + else + for n,d in pairs(mcl_structures.registered_structures) do + if n == param then + mcl_structures.place_structure(pos,d,PseudoRandom(os.clock())) + minetest.chat_send_player(name, message) + return + end + end + message = S("Error: Unknown structure type. Please use “/spawnstruct ”.") + errord = true + end + minetest.chat_send_player(name, message) + if errord then + minetest.chat_send_player(name, S("Use /help spawnstruct to see a list of avaiable types.")) + end + end + }) +end) -- 2.40.1 From a89529237186cd47c9a670f12c2473173aa69741 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 10 Jun 2022 03:12:45 +0200 Subject: [PATCH 077/357] Add API documentation, minor fixes --- mods/MAPGEN/mcl_geodes/init.lua | 2 +- mods/MAPGEN/mcl_structures/API.md | 27 +++++++++++++++++++++++++++ mods/MAPGEN/mcl_structures/api.lua | 1 + mods/MAPGEN/mcl_structures/init.lua | 5 ++--- mods/MAPGEN/mcl_structures/mod.conf | 4 ++-- 5 files changed, 33 insertions(+), 6 deletions(-) create mode 100644 mods/MAPGEN/mcl_structures/API.md diff --git a/mods/MAPGEN/mcl_geodes/init.lua b/mods/MAPGEN/mcl_geodes/init.lua index 413a8fbba..d2debf7cd 100644 --- a/mods/MAPGEN/mcl_geodes/init.lua +++ b/mods/MAPGEN/mcl_geodes/init.lua @@ -8,7 +8,7 @@ local adjacents = { } local function makegeode(pos,pr) - local size = pr:next(4,12) + local size = pr:next(2,8) local p1 = vector.offset(pos,-size,-size,-size) local p2 = vector.offset(pos,size,size,size) local nn = minetest.find_nodes_in_area(p1,p2,{"group:material_stone"}) diff --git a/mods/MAPGEN/mcl_structures/API.md b/mods/MAPGEN/mcl_structures/API.md new file mode 100644 index 000000000..52d40b642 --- /dev/null +++ b/mods/MAPGEN/mcl_structures/API.md @@ -0,0 +1,27 @@ +# mcl_structures +Structure placement API for MCL2. + +## mcl_structures.register_structure(name,structure definition) +### structure definition +{ + fill_ratio = OR noise = {}, + biomes = {}, + y_min =, + y_max =, + place_on = {}, + spawn_by = {}, + num_spawn_by = + flags = (default: "place_center_x, place_center_z, force_placement") + (same as decoration def) + y_offset =, --can be a number or a function returning a number + filenames = {} OR place_func = function(pos,filename) + -- filenames can be a list of any schematics accepted by mcl_structures.place_schematic + after_place = function(pos) +} +## mcl_structures.registered_structures +Table of the registered structure defintions indexed by name. + +## mcl_structures.place_structure(pos, def, pr) +Places a structure using the mapgen placement function + +## mcl_structures.place_schematic(pos, schematic, rotation, replacements, force_placement, flags, after_placement_callback, pr, callback_param) diff --git a/mods/MAPGEN/mcl_structures/api.lua b/mods/MAPGEN/mcl_structures/api.lua index 5e0858fb1..be86df530 100644 --- a/mods/MAPGEN/mcl_structures/api.lua +++ b/mods/MAPGEN/mcl_structures/api.lua @@ -72,6 +72,7 @@ function mcl_structures.register_structure(name,def,nospawn) --nospawn means it end) end minetest.register_node(":"..structblock, {drawtype="airlike", walkable = false, pointable = false,groups = sbgroups}) + def.structblock = structblock mcl_structures.registered_structures[name] = def end diff --git a/mods/MAPGEN/mcl_structures/init.lua b/mods/MAPGEN/mcl_structures/init.lua index 665fbf4c0..a82dffbff 100644 --- a/mods/MAPGEN/mcl_structures/init.lua +++ b/mods/MAPGEN/mcl_structures/init.lua @@ -630,9 +630,8 @@ minetest.register_on_mods_loaded(function() else for n,d in pairs(mcl_structures.registered_structures) do if n == param then - mcl_structures.place_structure(pos,d,PseudoRandom(os.clock())) - minetest.chat_send_player(name, message) - return + mcl_structures.place_structure(pos,d,pr) + return true,message end end message = S("Error: Unknown structure type. Please use “/spawnstruct ”.") diff --git a/mods/MAPGEN/mcl_structures/mod.conf b/mods/MAPGEN/mcl_structures/mod.conf index 3150c7cec..c19113ad4 100644 --- a/mods/MAPGEN/mcl_structures/mod.conf +++ b/mods/MAPGEN/mcl_structures/mod.conf @@ -1,4 +1,4 @@ name = mcl_structures -author = Wuzzy -description = Structures for MCL2 +author = Wuzzy, cora +description = Structure placement for MCL2 depends = mcl_loot -- 2.40.1 From a0bed1d8bc260cd02ace7447920b7489013b1163 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 10 Jun 2022 04:34:58 +0200 Subject: [PATCH 078/357] Add proper logging + some fixes --- mods/MAPGEN/mcl_geodes/init.lua | 13 ++++++------- mods/MAPGEN/mcl_structures/API.md | 10 ++++++---- mods/MAPGEN/mcl_structures/api.lua | 28 +++++++++------------------- 3 files changed, 21 insertions(+), 30 deletions(-) diff --git a/mods/MAPGEN/mcl_geodes/init.lua b/mods/MAPGEN/mcl_geodes/init.lua index d2debf7cd..db79d2e5e 100644 --- a/mods/MAPGEN/mcl_geodes/init.lua +++ b/mods/MAPGEN/mcl_geodes/init.lua @@ -8,7 +8,7 @@ local adjacents = { } local function makegeode(pos,pr) - local size = pr:next(2,8) + local size = pr:next(4,7) local p1 = vector.offset(pos,-size,-size,-size) local p2 = vector.offset(pos,size,size,size) local nn = minetest.find_nodes_in_area(p1,p2,{"group:material_stone"}) @@ -47,21 +47,20 @@ local function makegeode(pos,pr) minetest.set_node(vector.offset(v,0,1,0),{name="mcl_amethyst:amethyst_cluster",param2=1}) end end + return true end mcl_structures.register_structure("geode",{ place_on = {"mcl_core:stone"}, - spawn_by = {"air"}, - num_spawn_by = 2, - fill_ratio = 0.002, + fill_ratio = 0.0001, flags = "place_center_x, place_center_z, force_placement", biomes = ocean_biomes, - y_max = mcl_vars.mg_overworld_max, + y_max = -24, y_min = mcl_vars.mg_overworld_min, filenames = schems, y_offset = function(pr) return pr:next(-4,-2) end, place_func = function(pos,def,pr) local p = vector.new(pos.x + pr:next(-30,30),pos.y,pos.z + pr:next(-30,30)) - makegeode(pos,pr) - end, + return makegeode(pos,pr) + end }) diff --git a/mods/MAPGEN/mcl_structures/API.md b/mods/MAPGEN/mcl_structures/API.md index 52d40b642..23d93c712 100644 --- a/mods/MAPGEN/mcl_structures/API.md +++ b/mods/MAPGEN/mcl_structures/API.md @@ -1,7 +1,9 @@ # mcl_structures Structure placement API for MCL2. -## mcl_structures.register_structure(name,structure definition) +## mcl_structures.register_structure(name,structure definition,nospawn) +If nospawn is truthy the structure will not be placed by mapgen and the decoration parameters can be omitted. This is intended for secondary structures the placement of which gets triggered by the placement of other structures. It can also be used to register testing structures so they can be used with /spawnstruct. + ### structure definition { fill_ratio = OR noise = {}, @@ -14,9 +16,9 @@ Structure placement API for MCL2. flags = (default: "place_center_x, place_center_z, force_placement") (same as decoration def) y_offset =, --can be a number or a function returning a number - filenames = {} OR place_func = function(pos,filename) - -- filenames can be a list of any schematics accepted by mcl_structures.place_schematic - after_place = function(pos) + filenames = {} OR place_func = function(pos,def,pr) + -- filenames can be a list of any schematics accepted by mcl_structures.place_schematic / minetest.place_schematic + after_place = function(pos,def,pr) } ## mcl_structures.registered_structures Table of the registered structure defintions indexed by name. diff --git a/mods/MAPGEN/mcl_structures/api.lua b/mods/MAPGEN/mcl_structures/api.lua index be86df530..2235d4405 100644 --- a/mods/MAPGEN/mcl_structures/api.lua +++ b/mods/MAPGEN/mcl_structures/api.lua @@ -1,24 +1,8 @@ mcl_structures.registered_structures = {} ---[[] structure def: -{ - fill_ratio = OR noise = {} - biomes = - y_min = - y_max = - place_on = - spawn_by = - num_spawn_by = - flags = (default: "place_center_x, place_center_z, force_placement") - (same as decoration def) - y_offset = - filenames = {} OR place_func = function(pos,filename) - after_place = function(pos) -} -]]-- - function mcl_structures.place_structure(pos, def, pr) - if not def then return end + if not def then return end + local y_offset = 0 if type(def.y_offset) == "function" then y_offset = def.y_offset(pr) elseif def.y_offset then @@ -28,9 +12,15 @@ function mcl_structures.place_structure(pos, def, pr) local file = def.filenames[pr:next(1,#def.filenames)] local pp = vector.offset(pos,0,y_offset,0) mcl_structures.place_schematic(pp, file, "random", nil, true, "place_center_x,place_center_z",def.after_place,pr,{pos,def}) + minetest.log("action","[mcl_structures] "..def.name.." placed at "..minetest.pos_to_string(pos)) + return true elseif def.place_func and def.place_func(pos,def,pr) then - def.after_place(pos,def,pr) + if not def.after_place or ( def.after_place and def.after_place(pos,def,pr) ) then + minetest.log("action","[mcl_structures] "..def.name.." placed at "..minetest.pos_to_string(pos)) + return true + end end + minetest.log("warning","[mcl_structures] placing "..def.name.." failed at "..minetest.pos_to_string(pos)) end function mcl_structures.register_structure(name,def,nospawn) --nospawn means it will be placed by another (non-nospawn) structure that contains it's structblock i.e. it will not be placed by mapgen directly -- 2.40.1 From fa56ce5d521ab144c24e57b3383fed897f20df63 Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 11 Jun 2022 12:24:06 +0200 Subject: [PATCH 079/357] Add outer geode layer uses deepslate until smooth basalt is there --- mods/MAPGEN/mcl_geodes/init.lua | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/mods/MAPGEN/mcl_geodes/init.lua b/mods/MAPGEN/mcl_geodes/init.lua index db79d2e5e..c79dc07ed 100644 --- a/mods/MAPGEN/mcl_geodes/init.lua +++ b/mods/MAPGEN/mcl_geodes/init.lua @@ -11,16 +11,18 @@ local function makegeode(pos,pr) local size = pr:next(4,7) local p1 = vector.offset(pos,-size,-size,-size) local p2 = vector.offset(pos,size,size,size) + local calcite = {} local nn = minetest.find_nodes_in_area(p1,p2,{"group:material_stone"}) table.sort(nn,function(a, b) return vector.distance(pos, a) < vector.distance(pos, b) end) if not nn[1] then return end + for i=1,math.random(#nn) do minetest.set_node(nn[i],{name="mcl_amethyst:amethyst_block"}) end - local nnn = minetest.find_nodes_in_area(p1,p2,{"mcl_amethyst:amethyst_block"}) - for k,v in pairs(nnn) do + + for k,v in pairs(minetest.find_nodes_in_area(p1,p2,{"mcl_amethyst:amethyst_block"})) do local all_amethyst = true for kk,vv in pairs(adjacents) do local pp = vector.add(v,vv) @@ -28,6 +30,7 @@ local function makegeode(pos,pr) if an.name ~= "mcl_amethyst:amethyst_block" then if minetest.get_item_group(an.name,"material_stone") > 0 then minetest.set_node(pp,{name="mcl_amethyst:calcite"}) + table.insert(calcite,pp) if pr:next(1,5) == 1 then minetest.set_node(v,{name="mcl_amethyst:budding_amethyst_block"}) end @@ -40,8 +43,13 @@ local function makegeode(pos,pr) if all_amethyst then minetest.set_node(v,{name="air"}) end end - local nnnn = minetest.find_nodes_in_area_under_air(p1,p2,{"mcl_amethyst:amethyst_block"}) - for k,v in pairs(nnnn) do + for _,v in pairs(calcite) do + for _,vv in pairs(minetest.find_nodes_in_area(vector.offset(v,-1,-1,-1),vector.offset(v,1,1,1),{"group:material_stone"})) do + minetest.set_node(vv,{name="mcl_deepslate:deepslate"}) + end + end + + for k,v in pairs(minetest.find_nodes_in_area_under_air(p1,p2,{"mcl_amethyst:amethyst_block","mcl_amethyst:budding_amethyst_block"})) do local r = pr:next(1,50) if r < 10 then minetest.set_node(vector.offset(v,0,1,0),{name="mcl_amethyst:amethyst_cluster",param2=1}) -- 2.40.1 From 1b0053299cbd4119ece9974e150eaab906151e62 Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 11 Jun 2022 12:29:53 +0200 Subject: [PATCH 080/357] Do not replace bedrock during geode gen. --- mods/MAPGEN/mcl_geodes/init.lua | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/mods/MAPGEN/mcl_geodes/init.lua b/mods/MAPGEN/mcl_geodes/init.lua index c79dc07ed..5c05bc874 100644 --- a/mods/MAPGEN/mcl_geodes/init.lua +++ b/mods/MAPGEN/mcl_geodes/init.lua @@ -7,6 +7,12 @@ local adjacents = { vector.new(0,-1,0) } +local function set_node_no_bedrock(pos,node) + local n = minetest.get_node(pos) + if n.name == "mcl_core:bedrock" then return end + return minetest.set_node(pos,node) +end + local function makegeode(pos,pr) local size = pr:next(4,7) local p1 = vector.offset(pos,-size,-size,-size) @@ -19,7 +25,7 @@ local function makegeode(pos,pr) if not nn[1] then return end for i=1,math.random(#nn) do - minetest.set_node(nn[i],{name="mcl_amethyst:amethyst_block"}) + set_node_no_bedrock(nn[i],{name="mcl_amethyst:amethyst_block"}) end for k,v in pairs(minetest.find_nodes_in_area(p1,p2,{"mcl_amethyst:amethyst_block"})) do @@ -29,10 +35,10 @@ local function makegeode(pos,pr) local an = minetest.get_node(pp) if an.name ~= "mcl_amethyst:amethyst_block" then if minetest.get_item_group(an.name,"material_stone") > 0 then - minetest.set_node(pp,{name="mcl_amethyst:calcite"}) + set_node_no_bedrock(pp,{name="mcl_amethyst:calcite"}) table.insert(calcite,pp) if pr:next(1,5) == 1 then - minetest.set_node(v,{name="mcl_amethyst:budding_amethyst_block"}) + set_node_no_bedrock(v,{name="mcl_amethyst:budding_amethyst_block"}) end all_amethyst = false elseif an.name ~= "mcl_amethyst:amethyst_block" and an.name ~= "air" then @@ -40,19 +46,19 @@ local function makegeode(pos,pr) end end end - if all_amethyst then minetest.set_node(v,{name="air"}) end + if all_amethyst then set_node_no_bedrock(v,{name="air"}) end end for _,v in pairs(calcite) do for _,vv in pairs(minetest.find_nodes_in_area(vector.offset(v,-1,-1,-1),vector.offset(v,1,1,1),{"group:material_stone"})) do - minetest.set_node(vv,{name="mcl_deepslate:deepslate"}) + set_node_no_bedrock(vv,{name="mcl_deepslate:deepslate"}) end end for k,v in pairs(minetest.find_nodes_in_area_under_air(p1,p2,{"mcl_amethyst:amethyst_block","mcl_amethyst:budding_amethyst_block"})) do local r = pr:next(1,50) if r < 10 then - minetest.set_node(vector.offset(v,0,1,0),{name="mcl_amethyst:amethyst_cluster",param2=1}) + set_node_no_bedrock(vector.offset(v,0,1,0),{name="mcl_amethyst:amethyst_cluster",param2=1}) end end return true -- 2.40.1 From 9c6aafa3c1dcdf693e0849daa36fe5cdf060aba1 Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 13 Jun 2022 02:32:26 +0200 Subject: [PATCH 081/357] add surface pools --- mods/MAPGEN/mcl_geodes/init.lua | 2 +- mods/MAPGEN/mcl_surface_pools/init.lua | 90 ++++++++++++++++++++++++++ mods/MAPGEN/mcl_surface_pools/mod.conf | 3 + 3 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 mods/MAPGEN/mcl_surface_pools/init.lua create mode 100644 mods/MAPGEN/mcl_surface_pools/mod.conf diff --git a/mods/MAPGEN/mcl_geodes/init.lua b/mods/MAPGEN/mcl_geodes/init.lua index 5c05bc874..248139809 100644 --- a/mods/MAPGEN/mcl_geodes/init.lua +++ b/mods/MAPGEN/mcl_geodes/init.lua @@ -51,7 +51,7 @@ local function makegeode(pos,pr) for _,v in pairs(calcite) do for _,vv in pairs(minetest.find_nodes_in_area(vector.offset(v,-1,-1,-1),vector.offset(v,1,1,1),{"group:material_stone"})) do - set_node_no_bedrock(vv,{name="mcl_deepslate:deepslate"}) + set_node_no_bedrock(vv,{name="mcl_deepslate:deepslate"}) --Replace with smooth basalt when available end end diff --git a/mods/MAPGEN/mcl_surface_pools/init.lua b/mods/MAPGEN/mcl_surface_pools/init.lua new file mode 100644 index 000000000..8dfa9ca40 --- /dev/null +++ b/mods/MAPGEN/mcl_surface_pools/init.lua @@ -0,0 +1,90 @@ +local adjacents = { + vector.new(1,0,0), + vector.new(1,0,1), + vector.new(1,0,-1), + vector.new(-1,0,0), + vector.new(-1,0,1), + vector.new(-1,0,-1), + vector.new(0,0,1), + vector.new(0,0,-1), + vector.new(0,-1,0) +} + +local function set_node_no_bedrock(pos,node) + local n = minetest.get_node(pos) + if n.name == "mcl_core:bedrock" then return end + return minetest.set_node(pos,node) +end + +local function airtower(pos) + for i=0,35 do + set_node_no_bedrock(vector.offset(pos,0,i,0),{name="air"}) + end +end + +local function makelake(pos,size,liquid,border,pr) + local node_under = minetest.get_node(vector.offset(pos,0,1,0)) + local p1 = vector.offset(pos,-size,-size,-size) + local p2 = vector.offset(pos,size,size,size) + local nn = minetest.find_nodes_in_area(p1,p2,{"group:material_stone", "group:sand", "group:dirt"}) + table.sort(nn,function(a, b) + return vector.distance(pos, a) < vector.distance(pos, b) + end) + if not nn[1] then return end + local y = pos.y + 1 + local lq = {} + for i=1,pr:next(1,#nn) do + if nn[i].y == y then + set_node_no_bedrock(nn[i],{name=liquid}) + airtower(vector.offset(nn[i],0,1,0)) + table.insert(lq,nn[i]) + end + end + + for k,v in pairs(lq) do + for kk,vv in pairs(adjacents) do + local pp = vector.add(v,vv) + local an = minetest.get_node(pp) + local un = minetest.get_node(vector.offset(pp,0,1,0)) + if not border then + if minetest.get_item_group(an.name,"solid") > 0 then + border = an.name + elseif minetest.get_item_group(minetest.get_node(nn[1]).name,"solid") > 0 then + border = minetest.get_node(nn[1]).name + else + border = "mcl_core:stone" + end + if border == "mcl_core:dirt" then border = "mcl_core:dirt_with_grass" end + end + if an.name ~= liquid then + set_node_no_bedrock(pp,{name=border}) + if un.name ~= liquid then + airtower(vector.offset(pp,0,1,0)) + end + end + end + end + return true +end + +mcl_structures.register_structure("lavapool",{ + place_on = {"group:sand", "group:dirt", "group:stone"}, + fill_ratio = 0.000015, + flags = "place_center_x, place_center_z, force_placement", + y_max = mcl_vars.mg_overworld_max, + y_min = minetest.get_mapgen_setting("water_level"), + place_func = function(pos,def,pr) + return makelake(pos,5,"mcl_core:lava_source","mcl_core:stone",pr) + end +}) + +mcl_structures.register_structure("water_lake",{ + place_on = {"group:dirt","group:stone"}, + fill_ratio = 0.000052, + flags = "place_center_x, place_center_z, force_placement", + y_max = mcl_vars.mg_overworld_max, + y_min = minetest.get_mapgen_setting("water_level"), + place_func = function(pos,def,pr) + return makelake(pos,5,"mcl_core:water_source",nil,pr) + end +}) diff --git a/mods/MAPGEN/mcl_surface_pools/mod.conf b/mods/MAPGEN/mcl_surface_pools/mod.conf new file mode 100644 index 000000000..bdc4319d4 --- /dev/null +++ b/mods/MAPGEN/mcl_surface_pools/mod.conf @@ -0,0 +1,3 @@ +name = mcl_surface_pools +author = cora +depends = mcl_init, mcl_structures -- 2.40.1 From 726d1f07fa88a4a094a78587dd7ad13db2c87363 Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 13 Jun 2022 11:59:15 +0200 Subject: [PATCH 082/357] use noise instead of fill_ratio for distribution --- mods/MAPGEN/mcl_geodes/init.lua | 14 +++++++++++--- mods/MAPGEN/mcl_shipwrecks/init.lua | 12 ++++++++++-- mods/MAPGEN/mcl_structures/api.lua | 2 +- mods/MAPGEN/mcl_surface_pools/init.lua | 22 +++++++++++++++++++--- 4 files changed, 41 insertions(+), 9 deletions(-) diff --git a/mods/MAPGEN/mcl_geodes/init.lua b/mods/MAPGEN/mcl_geodes/init.lua index 248139809..84acd973b 100644 --- a/mods/MAPGEN/mcl_geodes/init.lua +++ b/mods/MAPGEN/mcl_geodes/init.lua @@ -51,7 +51,7 @@ local function makegeode(pos,pr) for _,v in pairs(calcite) do for _,vv in pairs(minetest.find_nodes_in_area(vector.offset(v,-1,-1,-1),vector.offset(v,1,1,1),{"group:material_stone"})) do - set_node_no_bedrock(vv,{name="mcl_deepslate:deepslate"}) --Replace with smooth basalt when available + set_node_no_bedrock(vv,{name="mcl_blackstone:basalt_smooth"}) end end @@ -66,7 +66,15 @@ end mcl_structures.register_structure("geode",{ place_on = {"mcl_core:stone"}, - fill_ratio = 0.0001, + noise_params = { + offset = 0, + scale = 0.00022, + spread = {x = 250, y = 250, z = 250}, + seed = 7894353, + octaves = 3, + persist = 0.001, + flags = "absvalue", + }, flags = "place_center_x, place_center_z, force_placement", biomes = ocean_biomes, y_max = -24, @@ -75,6 +83,6 @@ mcl_structures.register_structure("geode",{ y_offset = function(pr) return pr:next(-4,-2) end, place_func = function(pos,def,pr) local p = vector.new(pos.x + pr:next(-30,30),pos.y,pos.z + pr:next(-30,30)) - return makegeode(pos,pr) + return makegeode(p,pr) end }) diff --git a/mods/MAPGEN/mcl_shipwrecks/init.lua b/mods/MAPGEN/mcl_shipwrecks/init.lua index b2c0c3306..a3861a2c9 100644 --- a/mods/MAPGEN/mcl_shipwrecks/init.lua +++ b/mods/MAPGEN/mcl_shipwrecks/init.lua @@ -158,8 +158,16 @@ mcl_structures.register_structure("shipwreck",{ place_on = {"group:sand","mcl_core:gravel"}, spawn_by = {"group:water"}, num_spawn_by = 4, - fill_ratio = 0.00002, - flags = "place_center_x, place_center_z, force_placement", + noise_params = { + offset = 0, + scale = 0.000022, + spread = {x = 250, y = 250, z = 250}, + seed = 3, + octaves = 3, + persist = 0.001, + flags = "absvalue", + }, + flags = "force_placement", biomes = ocean_biomes, y_max = water_level-4, y_min = mcl_vars.mg_overworld_min, diff --git a/mods/MAPGEN/mcl_structures/api.lua b/mods/MAPGEN/mcl_structures/api.lua index 2235d4405..b3d0491ee 100644 --- a/mods/MAPGEN/mcl_structures/api.lua +++ b/mods/MAPGEN/mcl_structures/api.lua @@ -43,7 +43,7 @@ function mcl_structures.register_structure(name,def,nospawn) --nospawn means it num_spawn_by = def.num_spawn_by, sidelen = 80, fill_ratio = def.fill_ratio, - noise = def.noise, + noise_params = def.noise_params, flags = flags, biomes = def.biomes, y_max = def.y_max, diff --git a/mods/MAPGEN/mcl_surface_pools/init.lua b/mods/MAPGEN/mcl_surface_pools/init.lua index 8dfa9ca40..ed42f52bb 100644 --- a/mods/MAPGEN/mcl_surface_pools/init.lua +++ b/mods/MAPGEN/mcl_surface_pools/init.lua @@ -17,7 +17,7 @@ local function set_node_no_bedrock(pos,node) end local function airtower(pos) - for i=0,35 do + for i=0,55 do set_node_no_bedrock(vector.offset(pos,0,i,0),{name="air"}) end end @@ -69,7 +69,15 @@ end mcl_structures.register_structure("lavapool",{ place_on = {"group:sand", "group:dirt", "group:stone"}, - fill_ratio = 0.000015, + noise_params = { + offset = 0, + scale = 0.0000022, + spread = {x = 250, y = 250, z = 250}, + seed = 78375213, + octaves = 3, + persist = 0.001, + flags = "absvalue", + }, flags = "place_center_x, place_center_z, force_placement", y_max = mcl_vars.mg_overworld_max, y_min = minetest.get_mapgen_setting("water_level"), @@ -80,7 +88,15 @@ mcl_structures.register_structure("lavapool",{ mcl_structures.register_structure("water_lake",{ place_on = {"group:dirt","group:stone"}, - fill_ratio = 0.000052, + noise_params = { + offset = 0, + scale = 0.000032, + spread = {x = 250, y = 250, z = 250}, + seed = 734341353, + octaves = 3, + persist = 0.001, + flags = "absvalue", + }, flags = "place_center_x, place_center_z, force_placement", y_max = mcl_vars.mg_overworld_max, y_min = minetest.get_mapgen_setting("water_level"), -- 2.40.1 From 92da429f50e3f674df63fdbd67dd08285ab600c2 Mon Sep 17 00:00:00 2001 From: cora Date: Wed, 15 Jun 2022 04:48:26 +0200 Subject: [PATCH 083/357] Fix chatcommand not under mcl_structures in /help --- mods/MAPGEN/mcl_structures/init.lua | 133 ++++++++++++++-------------- 1 file changed, 66 insertions(+), 67 deletions(-) diff --git a/mods/MAPGEN/mcl_structures/init.lua b/mods/MAPGEN/mcl_structures/init.lua index a82dffbff..ffc25d40c 100644 --- a/mods/MAPGEN/mcl_structures/init.lua +++ b/mods/MAPGEN/mcl_structures/init.lua @@ -573,74 +573,73 @@ end dofile(modpath.."/api.lua") -minetest.register_on_mods_loaded(function() - -- Debug command - local chatcommand_params = "desert_temple | desert_well | igloo | witch_hut | boulder | ice_spike_small | ice_spike_large | fossil | end_exit_portal | end_exit_portal_open | end_gateway_portal | end_portal_shrine | nether_portal | dungeon" - - for n,_ in pairs(mcl_structures.registered_structures) do - chatcommand_params = chatcommand_params .. " | "..n - end - - minetest.register_chatcommand("spawnstruct", { - params = chatcommand_params, - description = S("Generate a pre-defined structure near your position."), - privs = {debug = true}, - func = function(name, param) - local player = minetest.get_player_by_name(name) - if not player then return end - local pos = player:get_pos() - if not pos then return end - pos = vector.round(pos) - local dir = minetest.yaw_to_dir(player:get_look_horizontal()) - local rot = dir_to_rotation(dir) - local pr = PseudoRandom(pos.x+pos.y+pos.z) - local errord = false - local message = S("Structure placed.") - if param == "desert_temple" then - mcl_structures.generate_desert_temple(pos, rot, pr) - elseif param == "desert_well" then - mcl_structures.generate_desert_well(pos, rot) - elseif param == "igloo" then - mcl_structures.generate_igloo(pos, rot, pr) - elseif param == "witch_hut" then - mcl_structures.generate_witch_hut(pos, rot, pr) - elseif param == "boulder" then - mcl_structures.generate_boulder(pos, rot, pr) - elseif param == "fossil" then - mcl_structures.generate_fossil(pos, rot, pr) - elseif param == "ice_spike_small" then - mcl_structures.generate_ice_spike_small(pos, rot, pr) - elseif param == "ice_spike_large" then - mcl_structures.generate_ice_spike_large(pos, rot, pr) - elseif param == "end_exit_portal" then - mcl_structures.generate_end_exit_portal(pos, rot, pr) - elseif param == "end_exit_portal_open" then - mcl_structures.generate_end_exit_portal_open(pos, rot, pr) - elseif param == "end_gateway_portal" then - mcl_structures.generate_end_gateway_portal(pos, rot, pr) - elseif param == "end_portal_shrine" then - mcl_structures.generate_end_portal_shrine(pos, rot, pr) - elseif param == "dungeon" and mcl_dungeons and mcl_dungeons.spawn_dungeon then - mcl_dungeons.spawn_dungeon(pos, rot, pr) - elseif param == "nether_portal" and mcl_portals and mcl_portals.spawn_nether_portal then - mcl_portals.spawn_nether_portal(pos, rot, pr, name) - elseif param == "" then - message = S("Error: No structure type given. Please use “/spawnstruct ”.") - errord = true - else - for n,d in pairs(mcl_structures.registered_structures) do - if n == param then - mcl_structures.place_structure(pos,d,pr) - return true,message - end +-- Debug command +minetest.register_chatcommand("spawnstruct", { + params = "desert_temple | desert_well | igloo | witch_hut | boulder | ice_spike_small | ice_spike_large | fossil | end_exit_portal | end_exit_portal_open | end_gateway_portal | end_portal_shrine | nether_portal | dungeon", + description = S("Generate a pre-defined structure near your position."), + privs = {debug = true}, + func = function(name, param) + local player = minetest.get_player_by_name(name) + if not player then return end + local pos = player:get_pos() + if not pos then return end + pos = vector.round(pos) + local dir = minetest.yaw_to_dir(player:get_look_horizontal()) + local rot = dir_to_rotation(dir) + local pr = PseudoRandom(pos.x+pos.y+pos.z) + local errord = false + local message = S("Structure placed.") + if param == "desert_temple" then + mcl_structures.generate_desert_temple(pos, rot, pr) + elseif param == "desert_well" then + mcl_structures.generate_desert_well(pos, rot) + elseif param == "igloo" then + mcl_structures.generate_igloo(pos, rot, pr) + elseif param == "witch_hut" then + mcl_structures.generate_witch_hut(pos, rot, pr) + elseif param == "boulder" then + mcl_structures.generate_boulder(pos, rot, pr) + elseif param == "fossil" then + mcl_structures.generate_fossil(pos, rot, pr) + elseif param == "ice_spike_small" then + mcl_structures.generate_ice_spike_small(pos, rot, pr) + elseif param == "ice_spike_large" then + mcl_structures.generate_ice_spike_large(pos, rot, pr) + elseif param == "end_exit_portal" then + mcl_structures.generate_end_exit_portal(pos, rot, pr) + elseif param == "end_exit_portal_open" then + mcl_structures.generate_end_exit_portal_open(pos, rot, pr) + elseif param == "end_gateway_portal" then + mcl_structures.generate_end_gateway_portal(pos, rot, pr) + elseif param == "end_portal_shrine" then + mcl_structures.generate_end_portal_shrine(pos, rot, pr) + elseif param == "dungeon" and mcl_dungeons and mcl_dungeons.spawn_dungeon then + mcl_dungeons.spawn_dungeon(pos, rot, pr) + elseif param == "nether_portal" and mcl_portals and mcl_portals.spawn_nether_portal then + mcl_portals.spawn_nether_portal(pos, rot, pr, name) + elseif param == "" then + message = S("Error: No structure type given. Please use “/spawnstruct ”.") + errord = true + else + for n,d in pairs(mcl_structures.registered_structures) do + if n == param then + mcl_structures.place_structure(pos,d,pr) + return true,message end - message = S("Error: Unknown structure type. Please use “/spawnstruct ”.") - errord = true - end - minetest.chat_send_player(name, message) - if errord then - minetest.chat_send_player(name, S("Use /help spawnstruct to see a list of avaiable types.")) end + message = S("Error: Unknown structure type. Please use “/spawnstruct ”.") + errord = true end - }) + minetest.chat_send_player(name, message) + if errord then + minetest.chat_send_player(name, S("Use /help spawnstruct to see a list of avaiable types.")) + end + end +}) +minetest.register_on_mods_loaded(function() + local p = "" + for n,_ in pairs(mcl_structures.registered_structures) do + p = p .. " | "..n + end + minetest.registered_chatcommands["spawnstruct"].params = minetest.registered_chatcommands["spawnstruct"].params .. p end) -- 2.40.1 From a455e7bb8eae59c10ee92b91fcbb5927256d22f5 Mon Sep 17 00:00:00 2001 From: Johannes Fritz Date: Thu, 16 Jun 2022 13:43:44 -0500 Subject: [PATCH 084/357] Lightning command: Strike player by name --- mods/ENVIRONMENT/lightning/init.lua | 20 +++++++++---------- .../ENVIRONMENT/lightning/locale/template.txt | 3 +-- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/mods/ENVIRONMENT/lightning/init.lua b/mods/ENVIRONMENT/lightning/init.lua index 3579316e8..14d8f5176 100644 --- a/mods/ENVIRONMENT/lightning/init.lua +++ b/mods/ENVIRONMENT/lightning/init.lua @@ -238,8 +238,8 @@ after(5, function(dtime) end) minetest.register_chatcommand("lightning", { - params = "[ ]", - description = S("Let lightning strike at the specified position or yourself"), + params = "[ | ]", + description = S("Let lightning strike at the specified position or player. No parameter will strike yourself."), privs = { maphack = true }, func = function(name, param) local pos = {} @@ -247,21 +247,21 @@ minetest.register_chatcommand("lightning", { pos.x = tonumber(pos.x) pos.y = tonumber(pos.y) pos.z = tonumber(pos.z) + local player_to_strike if not (pos.x and pos.y and pos.z) then pos = nil + player_to_strike = minetest.get_player_by_name(param) + if not player_to_strike and param == "" then + player_to_strike = minetest.get_player_by_name(name) + end end - if name == "" and pos == nil then + if not player_to_strike and pos == nil then return false, "No position specified and unknown player" end if pos then lightning.strike(pos) - else - local player = minetest.get_player_by_name(name) - if player then - lightning.strike(player:get_pos()) - else - return false, S("No position specified and unknown player") - end + elseif player_to_strike then + lightning.strike(player_to_strike:get_pos()) end return true end, diff --git a/mods/ENVIRONMENT/lightning/locale/template.txt b/mods/ENVIRONMENT/lightning/locale/template.txt index 2c07393f6..2e7e5878a 100644 --- a/mods/ENVIRONMENT/lightning/locale/template.txt +++ b/mods/ENVIRONMENT/lightning/locale/template.txt @@ -1,4 +1,3 @@ # textdomain: lightning -@1 was struck by lightning.= -Let lightning strike at the specified position or yourself= +Let lightning strike at the specified position or player. No parameter will strike yourself.= No position specified and unknown player= -- 2.40.1 From 965d10c003f8d3cdfbddebd024d099437a4d5b1b Mon Sep 17 00:00:00 2001 From: MysticTempest Date: Tue, 7 Jun 2022 03:29:06 +0200 Subject: [PATCH 085/357] Bell can be activated by redstone --- mods/ITEMS/mcl_bells/init.lua | 4 ++++ mods/ITEMS/mcl_bells/mod.conf | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_bells/init.lua b/mods/ITEMS/mcl_bells/init.lua index 33b3cc8e1..f1fce85e9 100644 --- a/mods/ITEMS/mcl_bells/init.lua +++ b/mods/ITEMS/mcl_bells/init.lua @@ -39,6 +39,10 @@ minetest.register_node("mcl_bells:bell", { _mcl_hardness = 5, on_rightclick = mcl_bells.ring_once, use_texture_alpha = "clip", + mesecons = {effector = { + action_on = mcl_bells.ring_once, + rules = mesecon.rules.flat, + }}, }) if has_mcl_wip then diff --git a/mods/ITEMS/mcl_bells/mod.conf b/mods/ITEMS/mcl_bells/mod.conf index 18e74a7a8..e25b1fc5c 100644 --- a/mods/ITEMS/mcl_bells/mod.conf +++ b/mods/ITEMS/mcl_bells/mod.conf @@ -1,2 +1,3 @@ name = mcl_bells -optional_depends = mcl_wip +depends = mesecons +optional_depends = mcl_wip \ No newline at end of file -- 2.40.1 From d8dec7c316c7283d8d451b1b8bd2380ea1e481ce Mon Sep 17 00:00:00 2001 From: Nathan Fritzler Date: Thu, 16 Jun 2022 19:37:29 -0600 Subject: [PATCH 086/357] Fix header depth --- API.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API.md b/API.md index e73d5f8a4..f2070b8e7 100644 --- a/API.md +++ b/API.md @@ -42,7 +42,7 @@ A lot of things are possible by using one of the APIs in the mods. Note that not * Buckets: `ITEMS/mcl_buckets` * Dispenser support: `ITEMS/REDSTONE/mcl_dispensers` -## Mobs +### Mobs * Mobs: `ENTITIES/mcl_mobs` MineClone 2 uses its own mobs framework, called “Mobs Redo: MineClone 2 Edition” or “MRM” for short. -- 2.40.1 From e630ea59c94fb061228a5da7fe96bead1127912e Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 16 Jun 2022 00:58:01 +0200 Subject: [PATCH 087/357] Rate limit pathfinding attempts In certain situation it otherwise results in excessive attempts to find a path. --- mods/ENTITIES/mcl_mobs/api.lua | 69 +++++++++++++++++++++------------- 1 file changed, 43 insertions(+), 26 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 30e8a257d..8c9d8216e 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -2314,6 +2314,41 @@ local function check_doors(self) end end +local gowp_etime = 0 + +local function check_gowp(self,dtime) + gowp_etime = gowp_etime + dtime + if gowp_etime < 1 then return end + gowp_etime = 0 + local p = self.object:get_pos() + if not p or not self._target then return end + if vector.distance(p,self._target) < 2 or ( self.waypoints and #self.waypoints == 0 ) then + self.waypoints = nil + self._target = nil + self.current_target = nil + self.state = "walk" + if self.callback_arrived then return self.callback_arrived(self) end + return true + end + if self.waypoints and ( not self.current_target or vector.distance(p,self.current_target) < 1.5 ) then + self.current_target = table.remove(self.waypoints, 1) + --minetest.log("nextwp:".. tostring(self.current_target) ) + elseif self.current_target then + go_to_pos(self,self.current_target) + end + + if self.current_target and not minetest.line_of_sight(self.object:get_pos(),self.current_target) then + self.waypoints=minetest.find_path(p,self._target,150,1,4) + if not self.waypoints then self.state = "walk" end --give up + self.current_target = nil + return + end + if not self.current_target then + --minetest.log("no path") + self.state = "walk" + end +end + -- execute current state (stand, walk, run, attacks) -- returns true if mob has died local do_states = function(self, dtime) @@ -2371,32 +2406,7 @@ local do_states = function(self, dtime) end elseif self.state == "gowp" then - local p = self.object:get_pos() - if not p or not self._target then return end - if vector.distance(p,self._target) < 2 or ( self.waypoints and #self.waypoints == 0 ) then - self.waypoints = nil - self._target = nil - self.current_target = nil - self.state = "walk" - if self.callback_arrived then return self.callback_arrived(self) end - return true - end - if self.waypoints and ( not self.current_target or vector.distance(p,self.current_target) < 1.5 ) then - self.current_target = table.remove(self.waypoints, 1) - --minetest.log("nextwp:".. tostring(self.current_target) ) - elseif self.current_target then - go_to_pos(self,self.current_target) - end - - if self.current_target and not minetest.line_of_sight(self.object:get_pos(),self.current_target) then - self.waypoints=minetest.find_path(p,self._target,150,1,4) - self.current_target = nil - return - end - if not self.current_target then - --minetest.log("no path") - self.state = "walk" - end + check_gowp(self,dtime) elseif self.state == "walk" then local s = self.object:get_pos() @@ -2907,7 +2917,11 @@ local plane_adjacents = { vector.new(0,0,-1), } + +local gopath_last = os.time() function mcl_mobs:gopath(self,target,callback_arrived) + if os.time() - gopath_last < 15 then return end + gopath_last = os.time() local p = self.object:get_pos() local t = vector.offset(target,0,1,0) local wp = minetest.find_path(p,t,150,1,4) @@ -2931,6 +2945,9 @@ function mcl_mobs:gopath(self,target,callback_arrived) self.state = "gowp" return true else + self.state = "walk" + self.waypoints = nil + self.current_target = nil --minetest.log("no path found") end end -- 2.40.1 From cd43076ea3e20f2347d5b90f6ddc75fa3fcbc843 Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 16 Jun 2022 15:53:08 +0200 Subject: [PATCH 088/357] additionally rate limit villager jobhunts --- mods/ENTITIES/mobs_mc/villager.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mods/ENTITIES/mobs_mc/villager.lua b/mods/ENTITIES/mobs_mc/villager.lua index 13a50b601..e6afd61bc 100644 --- a/mods/ENTITIES/mobs_mc/villager.lua +++ b/mods/ENTITIES/mobs_mc/villager.lua @@ -613,6 +613,8 @@ local function employ(self,jobsite_pos) end local function look_for_job(self) + if self.last_jobhunt and os.time() - self.last_jobhunt < 360 then return end + self.last_jobhunt = os.time() + math.random(0,60) local p = self.object:get_pos() local nn = minetest.find_nodes_in_area(vector.offset(p,-48,-48,-48),vector.offset(p,48,48,48),jobsites) for _,n in pairs(nn) do -- 2.40.1 From 98a322443b185d7094d1dd60f851c125415697e5 Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 16 Jun 2022 16:59:08 +0200 Subject: [PATCH 089/357] make "old" villagers keep their job --- mods/ENTITIES/mobs_mc/villager.lua | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/villager.lua b/mods/ENTITIES/mobs_mc/villager.lua index e6afd61bc..c077ca944 100644 --- a/mods/ENTITIES/mobs_mc/villager.lua +++ b/mods/ENTITIES/mobs_mc/villager.lua @@ -1367,9 +1367,11 @@ mcl_mobs:register_mob("mobs_mc:villager", { return end self._id=minetest.sha1(minetest.get_gametime()..minetest.pos_to_string(self.object:get_pos())..tostring(math.random())) - self._profession = "unemployed" - if math.random(100) == 1 then - self._profession = "nitwit" + if not self._profession then + self._profession = "unemployed" + if math.random(100) == 1 then + self._profession = "nitwit" + end end set_textures(self) end, -- 2.40.1 From 8a181661a503103863420b835bf63db9ed13cd7c Mon Sep 17 00:00:00 2001 From: debiankaios Date: Fri, 29 Apr 2022 12:24:29 +0200 Subject: [PATCH 090/357] Add warped and crimson --- mods/ITEMS/mcl_mushroom/init.lua | 672 ++++++++++++++++++ .../mcl_mushroom/locale/mcl_mushrooms.de.tr | 14 + mods/ITEMS/mcl_mushroom/locale/template.txt | 14 + mods/ITEMS/mcl_mushroom/mod.conf | 2 + .../mcl_mushroom/textures/crimson_hyphae.png | Bin 0 -> 318 bytes .../textures/crimson_hyphae_side.png | Bin 0 -> 318 bytes .../textures/crimson_hyphae_wood.png | Bin 0 -> 289 bytes .../textures/crimson_nylium_side.png | Bin 0 -> 218 bytes .../textures/farming_crimson_fungus.png | Bin 0 -> 765 bytes .../textures/farming_warped_fungus.png | Bin 0 -> 172 bytes .../textures/nether_wart_block.png | Bin 0 -> 565 bytes .../mcl_mushroom/textures/shroomlight.png | Bin 0 -> 385 bytes .../mcl_mushroom/textures/warped_hyphae.png | Bin 0 -> 301 bytes .../textures/warped_hyphae_side.png | Bin 0 -> 322 bytes .../textures/warped_hyphae_wood.png | Bin 0 -> 290 bytes .../textures/warped_nylium_side.png | Bin 0 -> 223 bytes .../textures/warped_wart_block.png | Bin 0 -> 261 bytes 17 files changed, 702 insertions(+) create mode 100644 mods/ITEMS/mcl_mushroom/init.lua create mode 100644 mods/ITEMS/mcl_mushroom/locale/mcl_mushrooms.de.tr create mode 100644 mods/ITEMS/mcl_mushroom/locale/template.txt create mode 100644 mods/ITEMS/mcl_mushroom/mod.conf create mode 100644 mods/ITEMS/mcl_mushroom/textures/crimson_hyphae.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/crimson_hyphae_side.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/crimson_hyphae_wood.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/crimson_nylium_side.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/farming_crimson_fungus.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/farming_warped_fungus.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/nether_wart_block.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/shroomlight.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/warped_hyphae.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/warped_hyphae_side.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/warped_hyphae_wood.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/warped_nylium_side.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/warped_wart_block.png diff --git a/mods/ITEMS/mcl_mushroom/init.lua b/mods/ITEMS/mcl_mushroom/init.lua new file mode 100644 index 000000000..b970cf85d --- /dev/null +++ b/mods/ITEMS/mcl_mushroom/init.lua @@ -0,0 +1,672 @@ +local S = minetest.get_translator("mcl_mushroom") + +-- Warped fungus +-- Crimson fungus +--Functions and Biomes + +-- WARNING: The most comments are in german. Please Translate with an translater if you don't speak good german + +minetest.register_node("mcl_mushroom:warped_fungus", { + description = S("Warped Fungus Mushroom"), + drawtype = "plantlike", + tiles = { "farming_warped_fungus.png" }, + inventory_image = "farming_warped_fungus.png", + wield_image = "farming_warped_fungus.png", + sunlight_propagates = true, + paramtype = "light", + walkable = false, + groups = {dig_immediate=3,mushroom=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,enderman_takable=1,deco_block=1}, + + light_source = 1, + selection_box = { + type = "fixed", + fixed = { -3/16, -0.5, -3/16, 3/16, -2/16, 3/16 }, + }, + node_placement_prediction = "", + on_rightclick = function(pos, node, pointed_thing, player, itemstack) + if pointed_thing:get_wielded_item():get_name() == "mcl_dye:white" then + local nodepos = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) + if nodepos.name == "mcl_mushroom:warped_nylium" or nodepos.name == "mcl_nether:netherrack" then + local random = math.random(1, 5) + if random == 1 then + generate_warped_tree(pos) + end + end + end + end, + _mcl_blast_resistance = 0, + + stack_max = 64, +}) + +minetest.register_node("mcl_mushroom:warped_wart_block", { + description = S("Warped Wart Block"), + tiles = {"warped_wart_block.png"}, + groups = {handy=1,hoe=7,swordy=1, deco_block=1, }, + stack_max = 64, + _mcl_hardness = 2, +}) + +minetest.register_node("mcl_mushroom:shroomlight", { + description = S("Shroomlight"), + tiles = {"shroomlight.png"}, + groups = {handy=1,hoe=7,swordy=1, leafdecay=leafdecay_distance, leaves=1, deco_block=1, }, + stack_max = 64, + _mcl_hardness = 2, + light_source = 15 +}) + +minetest.register_node("mcl_mushroom:warped_hyphae", { + description = S("Warped Hyphae"), + tiles = {"warped_hyphae.png", + "warped_hyphae.png", + "warped_hyphae_side.png", + "warped_hyphae_side.png", + "warped_hyphae_side.png", + "warped_hyphae_side.png", + }, + groups = {handy=5,axey=1, bark=1, building_block=1, material_wood=1,}, + paramtype2 = "facedir", + stack_max = 64, + _mcl_hardness = 2, +}) + +minetest.register_node("mcl_mushroom:warped_nylium", { + description = S("Warped Nylium"), + tiles = {"warped_wart_block.png", + "mcl_nether_netherrack.png", + "mcl_nether_netherrack.png^warped_nylium_side.png", + "mcl_nether_netherrack.png^warped_nylium_side.png", + "mcl_nether_netherrack.png^warped_nylium_side.png", + "mcl_nether_netherrack.png^warped_nylium_side.png", + }, + groups = {pickaxey=1, building_block=1, material_stone=1}, + paramtype2 = "facedir", + stack_max = 64, + _mcl_hardness = 0.4, + _mcl_blast_resistance = 0.4, + is_ground_content = true, + drop = "mcl_nether:netherrack", + _mcl_silk_touch_drop = true, +}) + +minetest.register_node("mcl_mushroom:warped_checknode", { + description = S("Warped Checknode - only to check!"), + tiles = {"mcl_nether_netherrack.png", + "mcl_nether_netherrack.png", + "mcl_nether_netherrack.png", + "mcl_nether_netherrack.png", + "mcl_nether_netherrack.png", + "mcl_nether_netherrack.png", + }, + groups = {pickaxey=1, building_block=1, material_stone=1, not_in_creative_inventory=1}, + paramtype2 = "facedir", + stack_max = 64, + _mcl_hardness = 0.4, + _mcl_blast_resistance = 0.4, + is_ground_content = true, + drop = "mcl_nether:netherrack" +}) + +minetest.register_node("mcl_mushroom:warped_hyphae_wood", { + description = S("Warped Hyphae Wood"), + tiles = {"warped_hyphae_wood.png"}, + groups = {handy=5,axey=1, flammable=3,wood=1,building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=20}, + paramtype2 = "facedir", + stack_max = 64, + _mcl_hardness = 2, +}) + +mcl_stairs.register_stair_and_slab_simple("Warped Wood", "mcl_mushroom:warped_hyphae_wood", "Warped Wood Stairs", "Warped Wood Slab", "Double Warped Wood Slab") + +minetest.register_craft({ + output = "mcl_mushroom:warped_hyphae_wood 4", + recipe = { + {"mcl_mushroom:warped_hyphae"}, + } +}) + +minetest.register_craft({ + output = "mcl_mushroom:warped_nyliumd 2", + recipe = { + {"mcl_mushroom:warped_wart_block"}, + {"mcl_nether:netherrack"}, + } +}) + +minetest.register_abm({ + label = "mcl_mushroom:warped_fungus", + nodenames = {"mcl_mushroom:warped_fungus"}, + interval = 11, + chance = 128, + action = function(pos) + local nodepos = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) + if nodepos.name == "mcl_mushroom:warped_nylium" or nodepos.name == "mcl_nether:netherrack" then + if pos.y < -28400 then + generate_warped_tree(pos) + end + end + end +}) + +minetest.register_abm({ + label = "mcl_mushroom:warped_checknode", + nodenames = {"mcl_mushroom:warped_checknode"}, + interval = 0.1, + chance = 1, + action = function(pos) + local nodepos = minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}) + if nodepos.name == "air" then + minetest.swap_node({ x = pos.x, y = pos.y, z = pos.z }, { name = "mcl_mushroom:warped_nylium" }) + local randomg = math.random(1, 40) + if randomg == 2 then + minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_mushroom:warped_fungus" }) + elseif randomg == 7 then + local pos1 = { x = pos.x, y = pos.y + 1, z = pos.z } + generate_warped_tree(pos1) + end + else + minetest.swap_node({ x = pos.x, y = pos.y, z = pos.z }, { name = "mcl_nether:netherrack" }) + end + end +}) + +mobs:spawn({ + name = "mobs_mc:enderman", + nodes = "mcl_mushroom:warped_nylium", + max_light = 15, + min_light = 0, + chance = 300, + active_object_count = 20, + max_height = -28940, +}) + + + +minetest.register_node("mcl_mushroom:crimson_fungus", { + description = S("Crimson Fungus Mushroom"), + drawtype = "plantlike", + tiles = { "farming_crimson_fungus.png" }, + inventory_image = "farming_crimson_fungus.png", + wield_image = "farming_crimson_fungus.png", + sunlight_propagates = true, + paramtype = "light", + walkable = false, + groups = {dig_immediate=3,mushroom=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,enderman_takable=1,deco_block=1}, + + light_source = 1, + selection_box = { + type = "fixed", + fixed = { -3/16, -0.5, -3/16, 3/16, -2/16, 3/16 }, + }, + node_placement_prediction = "", + on_rightclick = function(pos, node, pointed_thing, player) + if pointed_thing:get_wielded_item():get_name() == "mcl_dye:white" then + local nodepos = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) + if nodepos.name == "mcl_mushroom:crimson_nylium" or nodepos.name == "mcl_nether:netherrack" then + local random = math.random(1, 5) + if random == 1 then + generate_crimson_tree(pos) + end + end + end + end, + _mcl_blast_resistance = 0, + + stack_max = 64, +}) + +minetest.register_node("mcl_mushroom:crimson_hyphae", { + description = S("Crimson Hyphae"), + tiles = {"crimson_hyphae.png", + "crimson_hyphae.png", + "crimson_hyphae_side.png", + "crimson_hyphae_side.png", + "crimson_hyphae_side.png", + "crimson_hyphae_side.png", + }, + groups = {handy=5,axey=1, bark=1, building_block=1, material_wood=1,}, + paramtype2 = "facedir", + stack_max = 64, + _mcl_hardness = 2, +}) + +minetest.register_node("mcl_mushroom:crimson_hyphae_wood", { + description = S("Crimson Hyphae Wood"), + tiles = {"crimson_hyphae_wood.png"}, + groups = {handy=5,axey=1, wood=1,building_block=1, material_wood=1,}, + paramtype2 = "facedir", + stack_max = 64, + _mcl_hardness = 2, +}) + +minetest.register_node("mcl_mushroom:crimson_nylium", { + description = S("Crimson Nylium"), + tiles = {"nether_wart_block.png", + "mcl_nether_netherrack.png", + "mcl_nether_netherrack.png^crimson_nylium_side.png", + "mcl_nether_netherrack.png^crimson_nylium_side.png", + "mcl_nether_netherrack.png^crimson_nylium_side.png", + "mcl_nether_netherrack.png^crimson_nylium_side.png", + }, + groups = {pickaxey=1, building_block=1, material_stone=1}, + paramtype2 = "facedir", + stack_max = 64, + _mcl_hardness = 0.4, + _mcl_blast_resistance = 0.4, + is_ground_content = true, + drop = "mcl_nether:netherrack", + _mcl_silk_touch_drop = true, +}) + +minetest.register_node("mcl_mushroom:crimson_checknode", { + description = S("Crimson Checknode - only to check!"), + tiles = {"mcl_nether_netherrack.png", + "mcl_nether_netherrack.png", + "mcl_nether_netherrack.png", + "mcl_nether_netherrack.png", + "mcl_nether_netherrack.png", + "mcl_nether_netherrack.png", + }, + groups = {pickaxey=1, building_block=1, material_stone=1, not_in_creative_inventory=1}, + paramtype2 = "facedir", + stack_max = 64, + _mcl_hardness = 0.4, + _mcl_blast_resistance = 0.4, + is_ground_content = true, + drop = "mcl_nether:netherrack" +}) + +minetest.register_craft({ + output = "mcl_mushroom:crimson_hyphae_wood 4", + recipe = { + {"mcl_mushroom:crimson_hyphae"}, + } +}) + +minetest.register_craft({ + output = "mcl_mushroom:crimson_nyliumd 2", + recipe = { + {"mcl_nether:nether_wart"}, + {"mcl_nether:netherrack"}, + } +}) + +mcl_stairs.register_stair_and_slab_simple("Crimson Wood", "mcl_mushroom:crimson_hyphae_wood", "Crimson Wood Stairs", "Crimson Wood Slab", "Double Crimson Wood Slab") + +minetest.register_abm({ + label = "mcl_mushroom:crimson_fungus", + nodenames = {"mcl_mushroom:crimson_fungus"}, + interval = 11, + chance = 128, + action = function(pos) + local nodepos = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) + if nodepos.name == "mcl_mushroom:crimson_nylium" or nodepos.name == "mcl_nether:netherrack" then + if pos.y < -28400 then + generate_crimson_tree(pos) + end + end + end +}) + +minetest.register_abm({ + label = "mcl_mushroom:crimson_checknode", + nodenames = {"mcl_mushroom:crimson_checknode"}, + interval = 0.1, + chance = 1, + action = function(pos) + local nodepos = minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}) + if nodepos.name == "air" then + minetest.swap_node({ x = pos.x, y = pos.y, z = pos.z }, { name = "mcl_mushroom:crimson_nylium" }) + local randomg = math.random(1, 40) + if randomg == 2 then + minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_mushroom:crimson_fungus" }) + elseif randomg == 7 then + local pos1 = { x = pos.x, y = pos.y + 1, z = pos.z } + generate_crimson_tree(pos1) + end + else + minetest.swap_node({ x = pos.x, y = pos.y, z = pos.z }, { name = "mcl_nether:netherrack" }) + end + end +}) + +function generate_warped_tree(pos) + -- Baumgenerator + -- Warzen + -- erste Etage + -- 2+ + minetest.set_node({x = pos.x + 2, y = pos.y + 3, z = pos.z + 2}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x + 1, y = pos.y + 3, z = pos.z + 2}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 3, z = pos.z + 2}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 3, z = pos.z + 2}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x - 2 , y = pos.y + 3, z = pos.z + 2}, { name = "mcl_mushroom:warped_wart_block" }) + --1+ + minetest.set_node({x = pos.x + 2, y = pos.y + 3, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x + 1, y = pos.y + 3, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 3, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 3, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x - 2 , y = pos.y + 3, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) + --0 + minetest.set_node({x = pos.x + 2, y = pos.y + 3, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x + 1, y = pos.y + 3, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 3, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x - 2 , y = pos.y + 3, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) + --1- + minetest.set_node({x = pos.x + 2, y = pos.y + 3, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x + 1, y = pos.y + 3, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 3, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 3, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x - 2 , y = pos.y + 3, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) + --2- + minetest.set_node({x = pos.x + 2, y = pos.y + 3, z = pos.z - 2}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x + 1, y = pos.y + 3, z = pos.z - 2}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 3, z = pos.z - 2}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 3, z = pos.z - 2}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x - 2 , y = pos.y + 3, z = pos.z - 2}, { name = "mcl_mushroom:warped_wart_block" }) + + + -- zweite etage + minetest.set_node({x = pos.x + 2, y = pos.y + 4, z = pos.z + 2}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x + 1, y = pos.y + 4, z = pos.z + 2}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 4, z = pos.z + 2}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 4, z = pos.z + 2}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x - 2 , y = pos.y + 4, z = pos.z + 2}, { name = "mcl_mushroom:warped_wart_block" }) + --1+ + minetest.set_node({x = pos.x + 2, y = pos.y + 4, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x + 1, y = pos.y + 4, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 4, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 4, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x - 2 , y = pos.y + 4, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) + --0 + minetest.set_node({x = pos.x + 2, y = pos.y + 4, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x + 1, y = pos.y + 4, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 4, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x - 2 , y = pos.y + 4, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) + --1- + minetest.set_node({x = pos.x + 2, y = pos.y + 4, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x + 1, y = pos.y + 4, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 4, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 4, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x - 2 , y = pos.y + 4, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) + --2- + minetest.set_node({x = pos.x + 2, y = pos.y + 4, z = pos.z - 2}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x + 1, y = pos.y + 4, z = pos.z - 2}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 4, z = pos.z - 2}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 4, z = pos.z - 2}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x - 2 , y = pos.y + 4, z = pos.z - 2}, { name = "mcl_mushroom:warped_wart_block" }) + + + -- dritte etage + --1+ + minetest.set_node({x = pos.x + 1, y = pos.y + 5, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 5, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 5, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) + --0 + minetest.set_node({x = pos.x + 1, y = pos.y + 5, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 5, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 5, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) + --1- + minetest.set_node({x = pos.x + 1, y = pos.y + 5, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 5, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 5, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) + + -- vierte Etage + --1+ + minetest.set_node({x = pos.x + 1, y = pos.y + 6, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 6, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 6, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) + --0 + minetest.set_node({x = pos.x + 1, y = pos.y + 6, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 6, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 6, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) + --1- + minetest.set_node({x = pos.x + 1, y = pos.y + 6, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 6, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 6, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) + -- fünfte Etage + minetest.set_node({x = pos.x, y = pos.y + 7, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) + + -- Pilzlich + local randomgenerate = math.random(1, 2) + if randomgenerate == 1 then + local randomx = math.random(-2, 2) + local randomz = math.random(-2, 2) + minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_mushroom:shroomlight" }) + end + local randomgenerate = math.random(1, 8) + if randomgenerate == 4 then + local randomx = math.random(-2, 2) + local randomz = math.random(-2, 2) + minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_mushroom:shroomlight" }) + end + -- Holz + minetest.set_node({x = pos.x, y = pos.y, z = pos.z}, { name = "mcl_mushroom:warped_hyphae" }) + minetest.set_node({x = pos.x, y = pos.y + 1, z = pos.z}, { name = "mcl_mushroom:warped_hyphae" }) + minetest.set_node({x = pos.x, y = pos.y + 2, z = pos.z}, { name = "mcl_mushroom:warped_hyphae" }) + minetest.set_node({x = pos.x, y = pos.y + 3, z = pos.z}, { name = "mcl_mushroom:warped_hyphae" }) + minetest.set_node({x = pos.x, y = pos.y + 4, z = pos.z}, { name = "mcl_mushroom:warped_hyphae" }) +end + + + + +function generate_crimson_tree(pos) + -- Baumgenerator + -- Warzen + -- erste Etage + -- 2+ + minetest.set_node({x = pos.x + 2, y = pos.y + 3, z = pos.z + 2}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x + 1, y = pos.y + 3, z = pos.z + 2}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 3, z = pos.z + 2}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 3, z = pos.z + 2}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x - 2 , y = pos.y + 3, z = pos.z + 2}, { name = "mcl_nether:nether_wart_block" }) + --1+ + minetest.set_node({x = pos.x + 2, y = pos.y + 3, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x + 1, y = pos.y + 3, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 3, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 3, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x - 2 , y = pos.y + 3, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) + --0 + minetest.set_node({x = pos.x + 2, y = pos.y + 3, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x + 1, y = pos.y + 3, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 3, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x - 2 , y = pos.y + 3, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) + --1- + minetest.set_node({x = pos.x + 2, y = pos.y + 3, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x + 1, y = pos.y + 3, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 3, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 3, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x - 2 , y = pos.y + 3, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) + --2- + minetest.set_node({x = pos.x + 2, y = pos.y + 3, z = pos.z - 2}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x + 1, y = pos.y + 3, z = pos.z - 2}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 3, z = pos.z - 2}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 3, z = pos.z - 2}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x - 2 , y = pos.y + 3, z = pos.z - 2}, { name = "mcl_nether:nether_wart_block" }) + + + -- zweite etage + minetest.set_node({x = pos.x + 2, y = pos.y + 4, z = pos.z + 2}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x + 1, y = pos.y + 4, z = pos.z + 2}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 4, z = pos.z + 2}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 4, z = pos.z + 2}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x - 2 , y = pos.y + 4, z = pos.z + 2}, { name = "mcl_nether:nether_wart_block" }) + --1+ + minetest.set_node({x = pos.x + 2, y = pos.y + 4, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x + 1, y = pos.y + 4, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 4, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 4, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x - 2 , y = pos.y + 4, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) + --0 + minetest.set_node({x = pos.x + 2, y = pos.y + 4, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x + 1, y = pos.y + 4, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 4, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x - 2 , y = pos.y + 4, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) + --1- + minetest.set_node({x = pos.x + 2, y = pos.y + 4, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x + 1, y = pos.y + 4, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 4, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 4, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x - 2 , y = pos.y + 4, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) + --2- + minetest.set_node({x = pos.x + 2, y = pos.y + 4, z = pos.z - 2}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x + 1, y = pos.y + 4, z = pos.z - 2}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 4, z = pos.z - 2}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 4, z = pos.z - 2}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x - 2 , y = pos.y + 4, z = pos.z - 2}, { name = "mcl_nether:nether_wart_block" }) + + + -- dritte etage + --1+ + minetest.set_node({x = pos.x + 1, y = pos.y + 5, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 5, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 5, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) + --0 + minetest.set_node({x = pos.x + 1, y = pos.y + 5, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 5, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 5, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) + --1- + minetest.set_node({x = pos.x + 1, y = pos.y + 5, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 5, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 5, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) + + -- vierte Etage + --1+ + minetest.set_node({x = pos.x + 1, y = pos.y + 6, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 6, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 6, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) + --0 + minetest.set_node({x = pos.x + 1, y = pos.y + 6, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 6, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 6, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) + --1- + minetest.set_node({x = pos.x + 1, y = pos.y + 6, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 6, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) + minetest.set_node({x = pos.x - 1 , y = pos.y + 6, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) + -- fünfte Etage + minetest.set_node({x = pos.x, y = pos.y + 7, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) + + -- Pilzlich + + + local randomx = math.random(-2, 2) + local randomz = math.random(-2, 2) + minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_mushroom:shroomlight" }) + + local randomgenerate = math.random(1, 2) + if randomgenerate == 2 then + local randomx = math.random(-2, 2) + local randomz = math.random(-2, 2) + minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_mushroom:shroomlight" }) + end + -- Holz + minetest.set_node({x = pos.x, y = pos.y, z = pos.z}, { name = "mcl_mushroom:crimson_hyphae" }) + minetest.set_node({x = pos.x, y = pos.y + 1, z = pos.z}, { name = "mcl_mushroom:crimson_hyphae" }) + minetest.set_node({x = pos.x, y = pos.y + 2, z = pos.z}, { name = "mcl_mushroom:crimson_hyphae" }) + minetest.set_node({x = pos.x, y = pos.y + 3, z = pos.z}, { name = "mcl_mushroom:crimson_hyphae" }) + minetest.set_node({x = pos.x, y = pos.y + 4, z = pos.z}, { name = "mcl_mushroom:crimson_hyphae" }) +end + + +--[[ +FIXME: Biomes are to rare +FIXME: Decoration don't do generate +-- biomes in test! +minetest.register_biome({ + name = "WarpedForest", + node_filler = "mcl_nether:netherrack", + node_stone = "mcl_nether:netherrack", + node_top = "mcl_mushroom:warped_nylium", + node_water = "air", + node_river_water = "air", + y_min = -29065, + y_max = -28940, + heat_point = 100, + humidity_point = 0, + _mcl_biome_type = "hot", + _mcl_palette_index = 19, +}) +minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_mushroom:warped_nylium"}, + sidelen = 16, + noise_params = { + offset = 0.01, + scale = 0.0022, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"WarpedForest"}, + y_min = -29065, + y_max = -28940 + 80, + decoration = "mcl_mushroom:warped_fungus", +}) +]] +minetest.register_ore({ + ore_type = "sheet", + ore = "mcl_mushroom:warped_checknode", + -- Note: Stone is included only for v6 mapgen support. Netherrack is not generated naturally + -- in v6, but instead set with the on_generated function in mcl_mapgen_core. + wherein = {"mcl_nether:netherrack", "mcl_core:stone"}, + clust_scarcity = 14 * 14 * 14, + clust_size = 10, + y_min = -29065, + y_max = -28940, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.1, + spread = {x = 8, y = 8, z = 8}, + seed = 4996, + octaves = 1, + persist = 0.0 + }, +}) + +minetest.register_ore({ + ore_type = "sheet", + ore = "mcl_mushroom:crimson_checknode", + -- Note: Stone is included only for v6 mapgen support. Netherrack is not generated naturally + -- in v6, but instead set with the on_generated function in mcl_mapgen_core. + wherein = {"mcl_nether:netherrack", "mcl_core:stone"}, + clust_scarcity = 10 * 10 * 10, + clust_size = 10, + y_min = -29065, + y_max = -28940, + noise_threshold = 0.0, + noise_params = { + offset = 1, + scale = 0.5, + spread = {x = 12, y = 12, z = 12}, + seed = 12948, + octaves = 1, + persist = 0.0 + }, +}) + + +minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_mushroom:warped_nylium"}, + sidelen = 16, + fill_ratio = 0.1, + biomes = {"Nether"}, + y_max = -28940, + y_min = -29065, + decoration = "mcl_mushroom:warped_fungus", +}) + + +minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_mushroom:crimson_nylium"}, + sidelen = 16, + fill_ratio = 0.1, + biomes = {"Nether"}, + y_max = -28940, + y_min = -29065, + decoration = "mcl_mushroom:crimson_fungus", +}) diff --git a/mods/ITEMS/mcl_mushroom/locale/mcl_mushrooms.de.tr b/mods/ITEMS/mcl_mushroom/locale/mcl_mushrooms.de.tr new file mode 100644 index 000000000..44bc656ec --- /dev/null +++ b/mods/ITEMS/mcl_mushroom/locale/mcl_mushrooms.de.tr @@ -0,0 +1,14 @@ +# textdomain: mcl_mushroom + +Warped Fungus Mushroom=Wirrpilz +Warped Wart Block=Wirrwarzenblock +Shroomlight=Pilzlicht +Warped Hyphae=Wirrhyphe +Warped Nylium=Wirr-Nezel +Warped Checknode - only to check!=Wirr Checkblock - Nur zum checken! +Warped Hyphae Wood= Wirrhyphen Holz +Crimson Fungus Mushroom=Karmesinpilz +Crimson Hyphae=Karmesinhyphe +Crimson Hyphae Wood=Karmesinhyphenholz +Crimson Nylium=Karmesin-Nezel +Crimson Checknode - only to check!=Karmesin Checkblock - Nur zum checken! diff --git a/mods/ITEMS/mcl_mushroom/locale/template.txt b/mods/ITEMS/mcl_mushroom/locale/template.txt new file mode 100644 index 000000000..c05d8922c --- /dev/null +++ b/mods/ITEMS/mcl_mushroom/locale/template.txt @@ -0,0 +1,14 @@ +# textdomain: mcl_mushroom + +Warped Fungus Mushroom= +Warped Wart Block= +Shroomlight= +Warped Hyphae= +Warped Nylium= +Warped Checknode - only to check!= +Warped Hyphae Wood= +Crimson Fungus Mushroom= +Crimson Hyphae= +Crimson Hyphae Wood= +Crimson Nylium= +Crimson Checknode - only to check!= diff --git a/mods/ITEMS/mcl_mushroom/mod.conf b/mods/ITEMS/mcl_mushroom/mod.conf new file mode 100644 index 000000000..46f65179c --- /dev/null +++ b/mods/ITEMS/mcl_mushroom/mod.conf @@ -0,0 +1,2 @@ +depends = mcl_stairs, mobs_mc +name = mcl_mushroom diff --git a/mods/ITEMS/mcl_mushroom/textures/crimson_hyphae.png b/mods/ITEMS/mcl_mushroom/textures/crimson_hyphae.png new file mode 100644 index 0000000000000000000000000000000000000000..583aa964786f49db13477b203bf9bce57fdaf388 GIT binary patch literal 318 zcmV-E0m1%>P)Aj-Q8*kTm)R3=f!re}>?d9g)tOzD3Us=^`HA#W(M!e55sxZ{ zHVkd}h+yW3J0;8<(M!e9hF&UG2>VRf;7(}^y@46e9QR!>6*6lCpXlOkjoaHztOOmjriS&#Ws*P&fGnX$M2;=c+>0yuH7g5 zl7+E--F^bS)EDUP)Aj-Q8*kTm)R3=f!re}>?d9g)tOzD3Us=^`HA#W(M!e55sxZ{ zHVkd}h+yW3J0;8<(M!e9hF&UG2>VRf;7(}^y@46e9QR!>6*6lCpXlOkjoaHztOOmjriS&#Ws*P&fGnX$M2;=c+>0yuH7g5 zl7+E--F^bS)EDUS43Z!C~n<5NWZ|3aP+tD8zgdH%zHzqZ9>|6a+PzgIHrPguDF){ z75~mlNRV@`&?d)JP(nhB`DtqNx^FR~#SHNZb=4vb+oXg9DIsC&M{NCw5)yR3b_3RK zcyjv9=W93I60T)Oi}|I~p0Sh`GtRkwOVEU_%)?66dSQKhg97zHG8eI0Ed!gkHNtb| zTfEs@9xdj(!7qJwguE&v@#uQ9xB2GSwJ{H7;`!qP;oRGDzNuKL00000NkvXXu0mjfhWUc( literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_mushroom/textures/crimson_nylium_side.png b/mods/ITEMS/mcl_mushroom/textures/crimson_nylium_side.png new file mode 100644 index 0000000000000000000000000000000000000000..36984d69effd04929b03929dacff2bee93ca5247 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`3q4&NLo9mlPB_SWM1hCpxuc*> ztkWev)eB6y0c^TU%k*yrX>X^&iR5t0_DW?tBPOoS6)rLJEOQDqamPoD(z{g;X6D zv3N{ju`_x0y} zITa!vGk53V^>*&R_U&{>wGU?GpUJbYUXGjjs=ad6f2-NQ54&AWSam*n?rw4MrGj5L znM4w%FtAFfIxxC%1~desa@TIX_U(7=lcTH}2UdJv`xR(g(B2n2)8B1)W*7f;o-nTr zUwh0CCXokayG0i;6f^o=R&ii_#&qXx8I#C@`;4qVJea>IM>O1P;rQ^8ZN@L@l5F1w zrkuAGHe3M>{a<1WuHIP~w*1$w#q;&|?r(Rw-xAWh@4?0M)9>APX3=o?m-dCVzi!`` ze`5LMFn;*U>+4si+U==}ob~1N1_O-ffCSI0%e&3@8r@&F&TDd=oR}N-5On#wXWzT2 zKR^ClX7ciRVj?IqVS$Sj!y%??vR2@g*OB*nq=TV*-u;IK1^UZ5KJ2;ny7YdI*}JDA ljPuT$_}0!^w(oA%<6-NVl_?v+v*Jvf zhr`GJ1xx?`KRi`HYC>VE86UI9!6OZCjg0>HXJ!a2myottw(w*9?jD|>Y&^W;3=FO+ WbyseRs4D`kXYh3Ob6Mw<&;$UW{6pdZ literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_mushroom/textures/nether_wart_block.png b/mods/ITEMS/mcl_mushroom/textures/nether_wart_block.png new file mode 100644 index 0000000000000000000000000000000000000000..b2d20b8d9def1b0652fa82b8e408230daaad6518 GIT binary patch literal 565 zcmV-50?Pe~P)Vl&|0005}NklvZ_zECO)P@L6&|0Me#Binvcq5)7;eM;HM!&0|A%$gHj{ zyi+<247Va`9TkcV_oV{$rKxIs*8{FGY70v1?jzto=%tp`n65AUA#U>_ZkMh~J2dPS zY#$9uqgv9vpy~m);nrioipwui>-U9S|F3*Zgn<75Vu#pVTts8x00000NkvXXu0mjf DY6u5} literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_mushroom/textures/shroomlight.png b/mods/ITEMS/mcl_mushroom/textures/shroomlight.png new file mode 100644 index 0000000000000000000000000000000000000000..9e18b21c7bd26620b917ec6b21f6d7e0664838cf GIT binary patch literal 385 zcmV-{0e=38P)OOAm zK5p$gZ0tI0%-7Gu+Mb7XUC*c8pYXfmUFOUFE06QP6ujeB=>#0$3YAnMuGmEovfI(@ zcKjJG=j(pK#|%NHk`NLm?!Gy>7kA#mw%YRVWt+PsX?2*}GQ08yh-LyN+vTt5VOAlg@t fQgu$9PbcsJ3%4c0<~RIw00000NkvXXu0mjfZ-1gU literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_mushroom/textures/warped_hyphae.png b/mods/ITEMS/mcl_mushroom/textures/warped_hyphae.png new file mode 100644 index 0000000000000000000000000000000000000000..6a8be80a7f083457b5af7eecb55edbab4b46e62c GIT binary patch literal 301 zcmV+|0n+}7P)DGU`73sD$4v1NjxjEt>65Y~}28?8GXKCM#i; z#_REfywfM|(zZ$?X|fXaGVfr#3um>hFx~~9M3a?BtkS5L8EM}k?K>1hi(+VzPh&VG z7_YYVQ-LI?wiVU3URFdDLyLNuzXZm+;AFX1sFxY}G{Shd??FC|fk4WTWs`t*=m8%w zOWJo)W*I+~aIAnnmdi7ea7RG%5$jP5Xvv-;M+=WUTY@6Iq>9!^<`HqX+A}`~c`^Axt&^+*k-5)s^*g z-9kQkK(RWqFBYPgTgY$}Gn$P^5aDb(!A>2SM#T!!Jrg_DtiwUNO=II1pWyiR+F`BT zI#Sr=XZtG&iP#(w-p6>+b>RH6EvzX_tj Uq#1GI=Q?-j^s&zLK$kl1pv<3)yjL%S{*_6_5C zJmTMZC>b*B8?;HgE(j$f)^sXg}Q2yhHVl`hJ=#wnJ0Ya387@@zUezO zeRt>do6noRyCjU~fmqW+r#)jSu_g@r_A5aXx-t(dRqKWI@eK;p1Ib*(YPAe(-qr}u znQ!rCZ+XO;t_E-V>PM&i-+W^eQN3s|G)1J1E0G(_iZS?CR(FSu6TJZ_(BZLT3) oX#WHDfyd`&V6`z1X5#td3$9o8AS}2J{Qv*}07*qoM6N<$f?vUXuK)l5 literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_mushroom/textures/warped_nylium_side.png b/mods/ITEMS/mcl_mushroom/textures/warped_nylium_side.png new file mode 100644 index 0000000000000000000000000000000000000000..6d974665f2835677ebbbb6af0a512af539af1567 GIT binary patch literal 223 zcmV<503iQ~P)%9e2=sEDw;&r7j?;Hx(o~c z*ygqDU<;_83N3907naVm86?c1wxKYhCzHp_1@I0EcVUl=-)u6%M{#_|vNTr(Pk&E7 zjsaYFK^~ib@+~{?DB5M(JuNbxZr=L`;yZQ#K52Ah1sD+HUiYIP>*5CaTA;H100000 LNkvXXu0mjfkiKou literal 0 HcmV?d00001 -- 2.40.1 From 49cb60f2e5a4ab2ae1dc5724cc49c4fa41bf8862 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 29 Apr 2022 12:26:49 +0200 Subject: [PATCH 091/357] comment out ore generation for now --- mods/ITEMS/mcl_mushroom/init.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_mushroom/init.lua b/mods/ITEMS/mcl_mushroom/init.lua index b970cf85d..40d293b49 100644 --- a/mods/ITEMS/mcl_mushroom/init.lua +++ b/mods/ITEMS/mcl_mushroom/init.lua @@ -605,6 +605,7 @@ minetest.register_decoration({ decoration = "mcl_mushroom:warped_fungus", }) ]] +--[[ No Ore gen for now minetest.register_ore({ ore_type = "sheet", ore = "mcl_mushroom:warped_checknode", @@ -646,7 +647,7 @@ minetest.register_ore({ persist = 0.0 }, }) - +--]] minetest.register_decoration({ deco_type = "simple", -- 2.40.1 From c1ee0228f00a205d03ac4379b99dc3cb2568ab0f Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Tue, 13 Apr 2021 08:49:57 +0200 Subject: [PATCH 092/357] Fix light_source warning in mcl_mushroom --- mods/ITEMS/mcl_mushroom/init.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_mushroom/init.lua b/mods/ITEMS/mcl_mushroom/init.lua index 40d293b49..b2281e271 100644 --- a/mods/ITEMS/mcl_mushroom/init.lua +++ b/mods/ITEMS/mcl_mushroom/init.lua @@ -53,7 +53,8 @@ minetest.register_node("mcl_mushroom:shroomlight", { groups = {handy=1,hoe=7,swordy=1, leafdecay=leafdecay_distance, leaves=1, deco_block=1, }, stack_max = 64, _mcl_hardness = 2, - light_source = 15 + -- this is 15 in Minecraft + light_source = 14, }) minetest.register_node("mcl_mushroom:warped_hyphae", { -- 2.40.1 From 5b06af4fecd677c55f2da64a7169fcf6d340b968 Mon Sep 17 00:00:00 2001 From: debiankaios Date: Fri, 16 Jul 2021 14:54:36 +0000 Subject: [PATCH 093/357] Bufixes Fixed Bug that trees generating in other blocks. The slab and stairbug was fixed too. --- mods/ITEMS/mcl_mushroom/init.lua | 378 ++++++++++++------------------- 1 file changed, 150 insertions(+), 228 deletions(-) diff --git a/mods/ITEMS/mcl_mushroom/init.lua b/mods/ITEMS/mcl_mushroom/init.lua index b2281e271..d9efea1dd 100644 --- a/mods/ITEMS/mcl_mushroom/init.lua +++ b/mods/ITEMS/mcl_mushroom/init.lua @@ -74,7 +74,7 @@ minetest.register_node("mcl_mushroom:warped_hyphae", { minetest.register_node("mcl_mushroom:warped_nylium", { description = S("Warped Nylium"), - tiles = {"warped_wart_block.png", + tiles = {"warped_nylium.png", "mcl_nether_netherrack.png", "mcl_nether_netherrack.png^warped_nylium_side.png", "mcl_nether_netherrack.png^warped_nylium_side.png", @@ -118,7 +118,7 @@ minetest.register_node("mcl_mushroom:warped_hyphae_wood", { _mcl_hardness = 2, }) -mcl_stairs.register_stair_and_slab_simple("Warped Wood", "mcl_mushroom:warped_hyphae_wood", "Warped Wood Stairs", "Warped Wood Slab", "Double Warped Wood Slab") +mcl_stairs.register_stair_and_slab_simple("warped_hyphae_wood", "mcl_mushroom:warped_hyphae_wood", "Warped Wood Stairs", "Warped Wood Slab", "Double Warped Wood Slab") minetest.register_craft({ output = "mcl_mushroom:warped_hyphae_wood 4", @@ -243,7 +243,7 @@ minetest.register_node("mcl_mushroom:crimson_hyphae_wood", { minetest.register_node("mcl_mushroom:crimson_nylium", { description = S("Crimson Nylium"), - tiles = {"nether_wart_block.png", + tiles = {"crimson_nylium.png", "mcl_nether_netherrack.png", "mcl_nether_netherrack.png^crimson_nylium_side.png", "mcl_nether_netherrack.png^crimson_nylium_side.png", @@ -293,7 +293,7 @@ minetest.register_craft({ } }) -mcl_stairs.register_stair_and_slab_simple("Crimson Wood", "mcl_mushroom:crimson_hyphae_wood", "Crimson Wood Stairs", "Crimson Wood Slab", "Double Crimson Wood Slab") +mcl_stairs.register_stair_and_slab_simple("crimson_hyphae_wood", "mcl_mushroom:crimson_hyphae_wood", "Crimson Wood Stairs", "Crimson Wood Slab", "Double Crimson Wood Slab") minetest.register_abm({ label = "mcl_mushroom:crimson_fungus", @@ -333,246 +333,168 @@ minetest.register_abm({ }) function generate_warped_tree(pos) + breakgrow = false + breakgrow2 = false -- Baumgenerator - -- Warzen - -- erste Etage - -- 2+ - minetest.set_node({x = pos.x + 2, y = pos.y + 3, z = pos.z + 2}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x + 1, y = pos.y + 3, z = pos.z + 2}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x, y = pos.y + 3, z = pos.z + 2}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 3, z = pos.z + 2}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x - 2 , y = pos.y + 3, z = pos.z + 2}, { name = "mcl_mushroom:warped_wart_block" }) - --1+ - minetest.set_node({x = pos.x + 2, y = pos.y + 3, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x + 1, y = pos.y + 3, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x, y = pos.y + 3, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 3, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x - 2 , y = pos.y + 3, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) - --0 - minetest.set_node({x = pos.x + 2, y = pos.y + 3, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x + 1, y = pos.y + 3, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 3, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x - 2 , y = pos.y + 3, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) - --1- - minetest.set_node({x = pos.x + 2, y = pos.y + 3, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x + 1, y = pos.y + 3, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x, y = pos.y + 3, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 3, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x - 2 , y = pos.y + 3, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) - --2- - minetest.set_node({x = pos.x + 2, y = pos.y + 3, z = pos.z - 2}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x + 1, y = pos.y + 3, z = pos.z - 2}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x, y = pos.y + 3, z = pos.z - 2}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 3, z = pos.z - 2}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x - 2 , y = pos.y + 3, z = pos.z - 2}, { name = "mcl_mushroom:warped_wart_block" }) + -- erste und zweite Etage + for x = pos.x - 2,pos.x + 2 do + for y = pos.y + 3, pos.y + 4 do + for z = pos.z - 2, pos.z + 2 do + if not (minetest.get_node({x = x, y = y, z = z}).name == "air") then breakgrow = true end + end + end + end + + -- dritte und vierte Etage + for x = pos.x - 1,pos.x + 1 do + for y = pos.y + 5, pos.y + 6 do + for z = pos.z - 1, pos.z + 1 do + if not (minetest.get_node({x = x, y = y, z = z}).name == "air") then breakgrow = true end + end + end + end + + -- fünfte Etage + if not (minetest.get_node({x = pos.x, y = pos.y + 7, z = pos.z}).name == "air") then breakgrow = true end + -- Holz + if not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "air") and not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "mcl_mushroom:warped_fungus") then breakgrow = true end + for y = pos.y + 1, pos.y + 4 do + if not (minetest.get_node({x = pos.x, y = y, z = pos.z}).name == "air") then breakgrow = true end + print(minetest.get_node({x = pos.x, y = y, z = pos.z}).name) + end + if not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "air") and not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "mcl_mushroom:warped_fungus") then breakgrow2 = true end + print(tostring(breakgrow)) + if breakgrow == false then + -- Warzen + -- erste und zweite Etage + for x = pos.x - 2,pos.x + 2 do + for y = pos.y + 3, pos.y + 4 do + for z = pos.z - 2, pos.z + 2 do + minetest.set_node({x = x, y = y, z = z}, { name = "mcl_mushroom:warped_wart_block" }) + end + end + end + + -- dritte und vierte Etage + for x = pos.x - 1,pos.x + 1 do + for y = pos.y + 5, pos.y + 6 do + for z = pos.z - 1, pos.z + 1 do + minetest.set_node({x = x, y = y, z = z}, { name = "mcl_mushroom:warped_wart_block" }) + end + end + end + + -- fünfte Etage + minetest.set_node({x = pos.x, y = pos.y + 7, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) - -- zweite etage - minetest.set_node({x = pos.x + 2, y = pos.y + 4, z = pos.z + 2}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x + 1, y = pos.y + 4, z = pos.z + 2}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x, y = pos.y + 4, z = pos.z + 2}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 4, z = pos.z + 2}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x - 2 , y = pos.y + 4, z = pos.z + 2}, { name = "mcl_mushroom:warped_wart_block" }) - --1+ - minetest.set_node({x = pos.x + 2, y = pos.y + 4, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x + 1, y = pos.y + 4, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x, y = pos.y + 4, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 4, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x - 2 , y = pos.y + 4, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) - --0 - minetest.set_node({x = pos.x + 2, y = pos.y + 4, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x + 1, y = pos.y + 4, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 4, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x - 2 , y = pos.y + 4, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) - --1- - minetest.set_node({x = pos.x + 2, y = pos.y + 4, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x + 1, y = pos.y + 4, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x, y = pos.y + 4, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 4, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x - 2 , y = pos.y + 4, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) - --2- - minetest.set_node({x = pos.x + 2, y = pos.y + 4, z = pos.z - 2}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x + 1, y = pos.y + 4, z = pos.z - 2}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x, y = pos.y + 4, z = pos.z - 2}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 4, z = pos.z - 2}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x - 2 , y = pos.y + 4, z = pos.z - 2}, { name = "mcl_mushroom:warped_wart_block" }) - - - -- dritte etage - --1+ - minetest.set_node({x = pos.x + 1, y = pos.y + 5, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x, y = pos.y + 5, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 5, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) - --0 - minetest.set_node({x = pos.x + 1, y = pos.y + 5, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x, y = pos.y + 5, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 5, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) - --1- - minetest.set_node({x = pos.x + 1, y = pos.y + 5, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x, y = pos.y + 5, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 5, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) - - -- vierte Etage - --1+ - minetest.set_node({x = pos.x + 1, y = pos.y + 6, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x, y = pos.y + 6, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 6, z = pos.z + 1}, { name = "mcl_mushroom:warped_wart_block" }) - --0 - minetest.set_node({x = pos.x + 1, y = pos.y + 6, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x, y = pos.y + 6, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 6, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) - --1- - minetest.set_node({x = pos.x + 1, y = pos.y + 6, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x, y = pos.y + 6, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 6, z = pos.z - 1}, { name = "mcl_mushroom:warped_wart_block" }) - -- fünfte Etage - minetest.set_node({x = pos.x, y = pos.y + 7, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) - - -- Pilzlich - local randomgenerate = math.random(1, 2) - if randomgenerate == 1 then - local randomx = math.random(-2, 2) - local randomz = math.random(-2, 2) - minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_mushroom:shroomlight" }) + -- Pilzlich + local randomgenerate = math.random(1, 2) + if randomgenerate == 1 then + local randomx = math.random(-2, 2) + local randomz = math.random(-2, 2) + minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_mushroom:shroomlight" }) + end + local randomgenerate = math.random(1, 8) + if randomgenerate == 4 then + local randomx = math.random(-2, 2) + local randomz = math.random(-2, 2) + minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_mushroom:shroomlight" }) + end + -- Holz + for y = pos.y, pos.y + 4 do + minetest.set_node({x = pos.x, y = y, z = pos.z}, { name = "mcl_mushroom:warped_hyphae" }) + --print("Placed at " .. x .. " " .. y .. " " .. z) + end + else + if breakgrow2 == false then minetest.set_node(pos,{ name = "mcl_mushroom:warped_fungus" }) end end - local randomgenerate = math.random(1, 8) - if randomgenerate == 4 then - local randomx = math.random(-2, 2) - local randomz = math.random(-2, 2) - minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_mushroom:shroomlight" }) - end - -- Holz - minetest.set_node({x = pos.x, y = pos.y, z = pos.z}, { name = "mcl_mushroom:warped_hyphae" }) - minetest.set_node({x = pos.x, y = pos.y + 1, z = pos.z}, { name = "mcl_mushroom:warped_hyphae" }) - minetest.set_node({x = pos.x, y = pos.y + 2, z = pos.z}, { name = "mcl_mushroom:warped_hyphae" }) - minetest.set_node({x = pos.x, y = pos.y + 3, z = pos.z}, { name = "mcl_mushroom:warped_hyphae" }) - minetest.set_node({x = pos.x, y = pos.y + 4, z = pos.z}, { name = "mcl_mushroom:warped_hyphae" }) end - - - function generate_crimson_tree(pos) + breakgrow = false + breakgrow2 = false -- Baumgenerator - -- Warzen - -- erste Etage - -- 2+ - minetest.set_node({x = pos.x + 2, y = pos.y + 3, z = pos.z + 2}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x + 1, y = pos.y + 3, z = pos.z + 2}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x, y = pos.y + 3, z = pos.z + 2}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 3, z = pos.z + 2}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x - 2 , y = pos.y + 3, z = pos.z + 2}, { name = "mcl_nether:nether_wart_block" }) - --1+ - minetest.set_node({x = pos.x + 2, y = pos.y + 3, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x + 1, y = pos.y + 3, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x, y = pos.y + 3, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 3, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x - 2 , y = pos.y + 3, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) - --0 - minetest.set_node({x = pos.x + 2, y = pos.y + 3, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x + 1, y = pos.y + 3, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 3, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x - 2 , y = pos.y + 3, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) - --1- - minetest.set_node({x = pos.x + 2, y = pos.y + 3, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x + 1, y = pos.y + 3, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x, y = pos.y + 3, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 3, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x - 2 , y = pos.y + 3, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) - --2- - minetest.set_node({x = pos.x + 2, y = pos.y + 3, z = pos.z - 2}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x + 1, y = pos.y + 3, z = pos.z - 2}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x, y = pos.y + 3, z = pos.z - 2}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 3, z = pos.z - 2}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x - 2 , y = pos.y + 3, z = pos.z - 2}, { name = "mcl_nether:nether_wart_block" }) + -- erste und zweite Etage + for x = pos.x - 2,pos.x + 2 do + for y = pos.y + 3, pos.y + 4 do + for z = pos.z - 2, pos.z + 2 do + if not (minetest.get_node({x = x, y = y, z = z}).name == "air") then breakgrow = true end + end + end + end + + -- dritte und vierte Etage + for x = pos.x - 1,pos.x + 1 do + for y = pos.y + 5, pos.y + 6 do + for z = pos.z - 1, pos.z + 1 do + if not (minetest.get_node({x = x, y = y, z = z}).name == "air") then breakgrow = true end + end + end + end + + -- fünfte Etage + if not (minetest.get_node({x = pos.x, y = pos.y + 7, z = pos.z}).name == "air") then breakgrow = true end + -- Holz + if not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "air") and not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "mcl_mushroom:crimson_fungus") then breakgrow = true end + for y = pos.y + 1, pos.y + 4 do + if not (minetest.get_node({x = pos.x, y = y, z = pos.z}).name == "air") then breakgrow = true end + print(minetest.get_node({x = pos.x, y = y, z = pos.z}).name) + end + if not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "air") and not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "mcl_mushroom:crimson_fungus") then breakgrow2 = true end + print(tostring(breakgrow)) + if breakgrow == false then + -- Warzen + -- erste und zweite Etage + for x = pos.x - 2,pos.x + 2 do + for y = pos.y + 3, pos.y + 4 do + for z = pos.z - 2, pos.z + 2 do + minetest.set_node({x = x, y = y, z = z}, { name = "mcl_nether:nether_wart_block" }) + end + end + end + + -- dritte und vierte Etage + for x = pos.x - 1,pos.x + 1 do + for y = pos.y + 5, pos.y + 6 do + for z = pos.z - 1, pos.z + 1 do + minetest.set_node({x = x, y = y, z = z}, { name = "mcl_nether:nether_wart_block" }) + end + end + end + + -- fünfte Etage + minetest.set_node({x = pos.x, y = pos.y + 7, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) - -- zweite etage - minetest.set_node({x = pos.x + 2, y = pos.y + 4, z = pos.z + 2}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x + 1, y = pos.y + 4, z = pos.z + 2}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x, y = pos.y + 4, z = pos.z + 2}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 4, z = pos.z + 2}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x - 2 , y = pos.y + 4, z = pos.z + 2}, { name = "mcl_nether:nether_wart_block" }) - --1+ - minetest.set_node({x = pos.x + 2, y = pos.y + 4, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x + 1, y = pos.y + 4, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x, y = pos.y + 4, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 4, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x - 2 , y = pos.y + 4, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) - --0 - minetest.set_node({x = pos.x + 2, y = pos.y + 4, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x + 1, y = pos.y + 4, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 4, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x - 2 , y = pos.y + 4, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) - --1- - minetest.set_node({x = pos.x + 2, y = pos.y + 4, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x + 1, y = pos.y + 4, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x, y = pos.y + 4, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 4, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x - 2 , y = pos.y + 4, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) - --2- - minetest.set_node({x = pos.x + 2, y = pos.y + 4, z = pos.z - 2}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x + 1, y = pos.y + 4, z = pos.z - 2}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x, y = pos.y + 4, z = pos.z - 2}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 4, z = pos.z - 2}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x - 2 , y = pos.y + 4, z = pos.z - 2}, { name = "mcl_nether:nether_wart_block" }) - - - -- dritte etage - --1+ - minetest.set_node({x = pos.x + 1, y = pos.y + 5, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x, y = pos.y + 5, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 5, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) - --0 - minetest.set_node({x = pos.x + 1, y = pos.y + 5, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x, y = pos.y + 5, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 5, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) - --1- - minetest.set_node({x = pos.x + 1, y = pos.y + 5, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x, y = pos.y + 5, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 5, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) - - -- vierte Etage - --1+ - minetest.set_node({x = pos.x + 1, y = pos.y + 6, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x, y = pos.y + 6, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 6, z = pos.z + 1}, { name = "mcl_nether:nether_wart_block" }) - --0 - minetest.set_node({x = pos.x + 1, y = pos.y + 6, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x, y = pos.y + 6, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 6, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) - --1- - minetest.set_node({x = pos.x + 1, y = pos.y + 6, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x, y = pos.y + 6, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) - minetest.set_node({x = pos.x - 1 , y = pos.y + 6, z = pos.z - 1}, { name = "mcl_nether:nether_wart_block" }) - -- fünfte Etage - minetest.set_node({x = pos.x, y = pos.y + 7, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) - - -- Pilzlich - - - local randomx = math.random(-2, 2) - local randomz = math.random(-2, 2) - minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_mushroom:shroomlight" }) - - local randomgenerate = math.random(1, 2) - if randomgenerate == 2 then - local randomx = math.random(-2, 2) - local randomz = math.random(-2, 2) - minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_mushroom:shroomlight" }) + -- Pilzlich + local randomgenerate = math.random(1, 2) + if randomgenerate == 1 then + local randomx = math.random(-2, 2) + local randomz = math.random(-2, 2) + minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_mushroom:shroomlight" }) + end + local randomgenerate = math.random(1, 8) + if randomgenerate == 4 then + local randomx = math.random(-2, 2) + local randomz = math.random(-2, 2) + minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_mushroom:shroomlight" }) + end + -- Holz + for y = pos.y, pos.y + 4 do + minetest.set_node({x = pos.x, y = y, z = pos.z}, { name = "mcl_mushroom:crimson_hyphae" }) + --print("Placed at " .. x .. " " .. y .. " " .. z) + end + else + if breakgrow2 == false then minetest.set_node(pos,{ name = "mcl_mushroom:crimson_fungus" }) end end - -- Holz - minetest.set_node({x = pos.x, y = pos.y, z = pos.z}, { name = "mcl_mushroom:crimson_hyphae" }) - minetest.set_node({x = pos.x, y = pos.y + 1, z = pos.z}, { name = "mcl_mushroom:crimson_hyphae" }) - minetest.set_node({x = pos.x, y = pos.y + 2, z = pos.z}, { name = "mcl_mushroom:crimson_hyphae" }) - minetest.set_node({x = pos.x, y = pos.y + 3, z = pos.z}, { name = "mcl_mushroom:crimson_hyphae" }) - minetest.set_node({x = pos.x, y = pos.y + 4, z = pos.z}, { name = "mcl_mushroom:crimson_hyphae" }) end --[[ FIXME: Biomes are to rare FIXME: Decoration don't do generate +WARNING: Outdatet, the biomes gernerate now different, with Ores -- biomes in test! minetest.register_biome({ name = "WarpedForest", @@ -671,4 +593,4 @@ minetest.register_decoration({ y_max = -28940, y_min = -29065, decoration = "mcl_mushroom:crimson_fungus", -}) +}) \ No newline at end of file -- 2.40.1 From 324aa159a70e653bb44eedc6bbefe89c98fc6103 Mon Sep 17 00:00:00 2001 From: debiankaios Date: Fri, 16 Jul 2021 14:56:38 +0000 Subject: [PATCH 094/357] New Textures New Textures New Textures New Textures New Textures New Textures New Textures --- .../mcl_mushroom/textures/crimson_hyphae.png | Bin 318 -> 6257 bytes .../textures/crimson_hyphae_old.png | Bin 0 -> 318 bytes .../textures/crimson_hyphae_side.png | Bin 318 -> 525 bytes .../textures/crimson_hyphae_side_old.png | Bin 0 -> 318 bytes .../textures/crimson_hyphae_wood.png | Bin 289 -> 446 bytes .../mcl_mushroom/textures/crimson_nylium.png | Bin 0 -> 6202 bytes .../textures/crimson_nylium_old.png | Bin 0 -> 565 bytes .../textures/crimson_nylium_side.png | Bin 218 -> 324 bytes .../textures/crimson_nylium_side_old.png | Bin 0 -> 218 bytes .../mcl_mushroom/textures/shroomlight.png | Bin 385 -> 428 bytes .../mcl_mushroom/textures/shroomlight_old.png | Bin 0 -> 385 bytes .../mcl_mushroom/textures/warped_hyphae.png | Bin 301 -> 6259 bytes .../textures/warped_hyphae_old.png | Bin 0 -> 301 bytes .../textures/warped_hyphae_side.png | Bin 322 -> 479 bytes .../textures/warped_hyphae_side_old.png | Bin 0 -> 322 bytes .../textures/warped_hyphae_wood.png | Bin 290 -> 461 bytes .../textures/warped_hyphae_wood_2nd.png | Bin 0 -> 434 bytes .../mcl_mushroom/textures/warped_nylium.png | Bin 0 -> 426 bytes .../textures/warped_nylium_side.png | Bin 223 -> 402 bytes .../textures/warped_nylium_side_old.png | Bin 0 -> 223 bytes .../textures/warped_wart_block.png | Bin 261 -> 6232 bytes .../textures/warped_wart_block_old.png | Bin 0 -> 261 bytes 22 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 mods/ITEMS/mcl_mushroom/textures/crimson_hyphae_old.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/crimson_hyphae_side_old.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/crimson_nylium.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/crimson_nylium_old.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/crimson_nylium_side_old.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/shroomlight_old.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/warped_hyphae_old.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/warped_hyphae_side_old.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/warped_hyphae_wood_2nd.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/warped_nylium.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/warped_nylium_side_old.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/warped_wart_block_old.png diff --git a/mods/ITEMS/mcl_mushroom/textures/crimson_hyphae.png b/mods/ITEMS/mcl_mushroom/textures/crimson_hyphae.png index 583aa964786f49db13477b203bf9bce57fdaf388..bf921d408aa9dbeb5e236739970ef4e82358f0cd 100644 GIT binary patch literal 6257 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 LNkvXXu0mjf&#Hie diff --git a/mods/ITEMS/mcl_mushroom/textures/crimson_nylium.png b/mods/ITEMS/mcl_mushroom/textures/crimson_nylium.png new file mode 100644 index 0000000000000000000000000000000000000000..0ba14eecb8069770876c9595f590c9a1b6bdecf3 GIT binary patch literal 6202 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 JR_+qE>E8zwXeIyv literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_mushroom/textures/crimson_nylium_old.png b/mods/ITEMS/mcl_mushroom/textures/crimson_nylium_old.png new file mode 100644 index 0000000000000000000000000000000000000000..b2d20b8d9def1b0652fa82b8e408230daaad6518 GIT binary patch literal 565 zcmV-50?Pe~P)Vl&|0005}NklvZ_zECO)P@L6&|0Me#Binvcq5)7;eM;HM!&0|A%$gHj{ zyi+<247Va`9TkcV_oV{$rKxIs*8{FGY70v1?jzto=%tp`n65AUA#U>_ZkMh~J2dPS zY#$9uqgv9vpy~m);nrioipwui>-U9S|F3*Zgn<75Vu#pVTts8x00000NkvXXu0mjf DY6u5} literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_mushroom/textures/crimson_nylium_side.png b/mods/ITEMS/mcl_mushroom/textures/crimson_nylium_side.png index 36984d69effd04929b03929dacff2bee93ca5247..22d6f872f7a8d5f88482c03ce9d8cac0c152710f 100644 GIT binary patch delta 297 zcmV+^0oMN70mK53B!2{RLP=Bz2nYy#2xN!=008?*L_t(IjqQ*zZi7G&Mc?dh3M541 z9@!GIMC*HnEBFq{8FHPpZm8&2mK+c%fK36j;KE7@m-!N6rT^#s(a3p!3QYJZfZCak80Zvzyer3md^ z4#4Q62radwaU0)t5tO-gU<;|gzA@Ly;%!3a=2g8-sAUOkfVHG#ZiQ(^7OR(a9gCc_&;pNf5^4aHaBP;j^jxA}8#Ck|W00000NkvXXu0mjftp|wT delta 190 zcmV;v073u60@?wPB!8hvL_t(IjopyJ4a6V}1m{5!JY7Q44kge6ZBPa+q&D9pGI2=4 zMY`WvvW)HB^$Kc?+C zJqz>$HczlSNN(t>?Q%H8lOrck0LI}R$V5-XG5lf#rf+0`GB;UHiDvN*WS{7TW`{21 sa%0;IPOZ&$PmW&;{04rCSGN8yJ{+*0k&Z7YQ~&?~07*qoM6N<$g41DCBLDyZ diff --git a/mods/ITEMS/mcl_mushroom/textures/crimson_nylium_side_old.png b/mods/ITEMS/mcl_mushroom/textures/crimson_nylium_side_old.png new file mode 100644 index 0000000000000000000000000000000000000000..36984d69effd04929b03929dacff2bee93ca5247 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`3q4&NLo9mlPB_SWM1hCpxuc*> ztkWev)eB6y0c^TU%Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2jmD3 z3l$@OY0zrqyn{ODnt0dV_OOAm zK5p$gZ0tI0%-7Gu+Mb7XUC*c8pYXfmUFOUFE06QP6ujeB=>#0$3YAnMuGmEovfI(@ zcKjJG=j(pK#|%NHk`NLm?!Gy>7kA#mw%YRVWt+PsX?2*}GQ08yh-LyN+vTt5VOAlg@t fQgu$9PbcsJ3%4c0<~RIw00000NkvXXu0mjfZ-1gU diff --git a/mods/ITEMS/mcl_mushroom/textures/shroomlight_old.png b/mods/ITEMS/mcl_mushroom/textures/shroomlight_old.png new file mode 100644 index 0000000000000000000000000000000000000000..9e18b21c7bd26620b917ec6b21f6d7e0664838cf GIT binary patch literal 385 zcmV-{0e=38P)OOAm zK5p$gZ0tI0%-7Gu+Mb7XUC*c8pYXfmUFOUFE06QP6ujeB=>#0$3YAnMuGmEovfI(@ zcKjJG=j(pK#|%NHk`NLm?!Gy>7kA#mw%YRVWt+PsX?2*}GQ08yh-LyN+vTt5VOAlg@t fQgu$9PbcsJ3%4c0<~RIw00000NkvXXu0mjfZ-1gU literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_mushroom/textures/warped_hyphae.png b/mods/ITEMS/mcl_mushroom/textures/warped_hyphae.png index 6a8be80a7f083457b5af7eecb55edbab4b46e62c..08dacdf585500551028b08e6af285c527f82a8c6 100644 GIT binary patch literal 6259 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 wHnP6Z0l%5$jO@I4_Y2S_nEo7|o@)KE| zRKv?P_M->uy!-&@Xdz5C0Nhvz9o3cfbKOEddO)!{vM&~*ms`ki6f>HQND$#{I>AmI znMTD5(mfM9)~v%px=mx_7oXtx_S#{s-8!=bY8^YSL!u3|{m`W28MS70`3KcmxxDYk uAXyh(|Es;mJ|V__{6-aVufJ5G`klWCqQRsgZ(@P~0000%5$jP5Xvv-;M+=WUTY@6Iq>9!^<`HqX+A}`~c`^Axt&^+*k-5)s^*g z-9kQkK(RWqFBYPgTgY$}Gn$P^5aDb(!A>2SM#T!!Jrg_DtiwUNO=II1pWyiR+F`BT zI#Sr=XZtG&iP#(w-p6>+b>RH6EvzX_tj Uq#3S!U5U=%#Oy7Y$4|E>ybRexD}hc2*sM$SbyspB+s~t6PvtXEd`}i zp-7jP5g-gIrNRvs^Yrl3zfW%fTqm~xyiadfdjufMZUC_MNS56!;?^EXKb2odjIclL zxLbc-@Vt!0RJ@FA?=Y=rvo5h?tizBKIVFz+%7awX#TP${l0w)@2nix6ny*m;jg!kF?mPpn%M{Sp$^=1 zS3MM}i|zn!u%wBR1^1ZWS&QWmn0?UZ%~FGZ`5?}zU*cT)@b#JfX-6s5LJOFk82dnd z5&w_0KGYaiAZKC1)rBxzW0RcC1aPIiTi4JHJ*89&BP?liH}s*-%NUlq-#+@-@0WVS dn#6xW@dvt(1|;3@P2T_j002ovPDHLkV1h0d)DZvx delta 262 zcmV+h0r~#T1EKPM&i-+W^eQN3s|G) z1J1E0G(_iZS?CR(FSu6TJZ_(BZLT3)X#WHDfyd`&V6`z1X5#td3$9o8AS}2J{Qv*} M07*qoM6N<$g0yCPSO5S3 diff --git a/mods/ITEMS/mcl_mushroom/textures/warped_hyphae_wood_2nd.png b/mods/ITEMS/mcl_mushroom/textures/warped_hyphae_wood_2nd.png new file mode 100644 index 0000000000000000000000000000000000000000..e579559c151a68b75ae680f81d329a3785ddc356 GIT binary patch literal 434 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgf#c76d4lQ_;t`+=qydAc};Se&k% zyw~rrfk>;pO1R(+&&Z%vMpIiG1v}jnk{)?h_)2ISPFXlpLzAuZS^5Tv1dq9QRD92+ z+?D@*r+A&e-23_e7)la8%wRK2zF{3bU)159&Q6YHDhw^{-6`w1Sqo(EGbX5QzBs-6 zzW=t!OG&GX(j#v_YpvX(a(2?MH^*;UM;}*JHtnA_WgSC;psqIWqaDYO`J~0nl4iKq zef=5J{X3~fEdd;Bn1eGFgp2Gr{|9V$ds}Db8yG2?nOn6n`NFLQ=ll)_o{EyzJGZ_q zcTcR%6|s}5o|~6EJv8CytGB;*rgrChd1}NuzT_%Nh%)oKJB80jw<~`JTcLNZenLgc z(W!TSzmxw^ZOFEDoBrMhe=h70owBsFNaShv((_BTPt0|FmJ-*u$ZYr31<${|UYwpO a{y!nV%a^(H;U!>zGI+ZBxvXPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^Rf1O*l?5=duJqW}N_JV``BR5;6R zQ!9?cFc5ufMKZ__S*pTc6SeK#|qP1hubitwH*MIB7V1H#eS@a;tR>$JxYzys01PN zcB}w^TfS3i5RZ`in%+8`k}j-4v9-3tXdOW}OF%dh0IZtg|tnz+x?v{^JJ=f53a& UQ((#!9smFU07*qoM6N<$f??*b=l}o! literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_mushroom/textures/warped_nylium_side.png b/mods/ITEMS/mcl_mushroom/textures/warped_nylium_side.png index 6d974665f2835677ebbbb6af0a512af539af1567..70354cca043ed2a1f3fa887ee1c7e5ff97dff9ff 100644 GIT binary patch literal 402 zcmV;D0d4+?P)neg0 zoqmG{h_Q2&v2zxyDTz+$b^9z8#1_8gZIxyS~&&jz_a z!AxuK>e!@Be38@B8~`Zwm-B#pJpU0x_D-PjBL$E&cCoh?zx62**(KjK#v~&ASm;4T wlJ`DL0FiaLKNHc-XUbNQaIVzlsndSb7Xm1U&V+QnFaQ7m07*qoM6N<$f(37_UjP6A literal 223 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 delta 234 zcmVEDw;&r7j?;Hx(o~c*ygqDU<;_83N3907h{&rvl%4Jp|+tgq9>Eb z%mwfc3U^_TjNfcB!bfp@$Fek61y6rZK8^ugctIYUfATFm@F?14+C42Yo^Iaz2jV++ k06uASWCa)y<6ifpAM4@<`C6c|{Qv*}07*qoM6N<$f;!x5cK`qY diff --git a/mods/ITEMS/mcl_mushroom/textures/warped_wart_block_old.png b/mods/ITEMS/mcl_mushroom/textures/warped_wart_block_old.png new file mode 100644 index 0000000000000000000000000000000000000000..34bfb5eb63cad59e1855f7c4e3ff3783f379c8af GIT binary patch literal 261 zcmV+g0s8)lP)EDw;&r7j?;Hx(o~c z*ygqDU<;_83N3907naVm86?c1wxKYhCzHp_1@I0EcVUl=-)u6%M{#_|vNTr(Pk&E7 zjsaYFK^~ib@+~{?DB5M(JuNbxZr=L`;yZQ#K52Ah1sD+HUiYIP>*5CaTA;H100000 LNkvXXu0mjfkiKou literal 0 HcmV?d00001 -- 2.40.1 From 675567502103c1da65cbff34f72229ebc4178941 Mon Sep 17 00:00:00 2001 From: debiankaios Date: Sat, 17 Jul 2021 06:14:10 +0000 Subject: [PATCH 095/357] Fixed warnings Warnings because a var which not exist --- mods/ITEMS/mcl_mushroom/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_mushroom/init.lua b/mods/ITEMS/mcl_mushroom/init.lua index d9efea1dd..9fe4c658b 100644 --- a/mods/ITEMS/mcl_mushroom/init.lua +++ b/mods/ITEMS/mcl_mushroom/init.lua @@ -50,7 +50,7 @@ minetest.register_node("mcl_mushroom:warped_wart_block", { minetest.register_node("mcl_mushroom:shroomlight", { description = S("Shroomlight"), tiles = {"shroomlight.png"}, - groups = {handy=1,hoe=7,swordy=1, leafdecay=leafdecay_distance, leaves=1, deco_block=1, }, + groups = {handy=1,hoe=7,swordy=1, leafdecay=1, leafdecay_distance=1, leaves=1, deco_block=1, }, stack_max = 64, _mcl_hardness = 2, -- this is 15 in Minecraft -- 2.40.1 From 4b976a663f9e0a153ab6d11165890bcdb5399d4a Mon Sep 17 00:00:00 2001 From: debiankaios Date: Sun, 18 Jul 2021 17:20:40 +0000 Subject: [PATCH 096/357] Add twisting_vines textures --- .../mcl_mushroom/textures/twisting_vines.png | Bin 0 -> 475 bytes .../textures/twisting_vines_plant.png | Bin 0 -> 581 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 mods/ITEMS/mcl_mushroom/textures/twisting_vines.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/twisting_vines_plant.png diff --git a/mods/ITEMS/mcl_mushroom/textures/twisting_vines.png b/mods/ITEMS/mcl_mushroom/textures/twisting_vines.png new file mode 100644 index 0000000000000000000000000000000000000000..985d735bce4a49e53c39d26e729f412607f89bd2 GIT binary patch literal 475 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sBugD~Uq{1qucLG}_)Usv`g?7V`;s*4Zwp9Go`?djqeVsZNH zB>fDgK$+wA`K~TU6lJFKcxz7=6U)!c7K@ag9?rI1Va*BFNWn0+@H3mrVj}OHTEjd! z_Tki%&CcqN_k0oi!dI$w>)R#n_qBER?d^YrA1^-C{9ooR^T#;_+BVF0V(s(i8cBTr z7HlB#J)64%Dok43 z6m(9ZYv~8(aF>ls60{g{XKw3D>XbRhka6|4)mathk~sPBB|jUr@7eG65q7P=a+E)2 zV}OpB)<3Ne%+rhZP5P<-jAxqjJe4kuY1(2(qGD(M|CeF6cZTr>A8CcH+jp{_=j=@C zl;4q5dB`Nt#M)Hw=p@fYW!EFlg|i%ZdbHPX`Tp8H9LsMdOw!mm?=qLdTg$KYAGD@F zYs|EqQ3gb(zmbT^0P9NJ6;+w*3|NEQq#G-EI~_dUfxlw2jX$3<~`AoWO4$A OJcFmJpUXO@geCye48R5e literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_mushroom/textures/twisting_vines_plant.png b/mods/ITEMS/mcl_mushroom/textures/twisting_vines_plant.png new file mode 100644 index 0000000000000000000000000000000000000000..3fd68c0cd1c2a66f0318b5808841ef8ad06a3822 GIT binary patch literal 581 zcmV-L0=oT)P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m?d01m?e$8V@)00007bV*G`2jmA0 z5i=)E&hF&^00G5GL_t(I%XO1KXxl&-#eWw9s!?JGgHQXAY&a-22O^3Iil*!0yI%a~n9SS=Aio}vbb8v1a1>GIsRCj+>WVB+#8Rt`B5FTWJk0}6PtGwK_}-ov zj=F~B<`MeoSQnMF2Y()?7T|689zRsvPo%wX9B~=oLVj19JIXPg^>RMrsUZ$ TSSkz|00000NkvXXu0mjfd4&5z literal 0 HcmV?d00001 -- 2.40.1 From c3e00a1c269786d9495b75d3720d708c2b3c6b76 Mon Sep 17 00:00:00 2001 From: debiankaios Date: Mon, 19 Jul 2021 08:11:16 +0000 Subject: [PATCH 097/357] Add more decoration blocks. Added the decorations lbocks, and chancheg generation of decoration a bit. --- mods/ITEMS/mcl_mushroom/init.lua | 139 ++++++++++++++++++++++++++++++- 1 file changed, 135 insertions(+), 4 deletions(-) diff --git a/mods/ITEMS/mcl_mushroom/init.lua b/mods/ITEMS/mcl_mushroom/init.lua index 9fe4c658b..fd37800eb 100644 --- a/mods/ITEMS/mcl_mushroom/init.lua +++ b/mods/ITEMS/mcl_mushroom/init.lua @@ -36,6 +36,102 @@ minetest.register_node("mcl_mushroom:warped_fungus", { end, _mcl_blast_resistance = 0, + if pointed_thing:get_wielded_item():get_name() == "mcl_dye:white" then + itemstack:take_item() + local nodepos = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) + if nodepos.name == "mcl_mushroom:warped_nylium" or nodepos.name == "mcl_nether:netherrack" then + local random = math.random(1, 5) + if random == 1 then + generate_warped_tree(pos) + end + end + end + end, + _mcl_blast_resistance = 0, + stack_max = 64, +}) + +minetest.register_node("mcl_mushroom:twisting_vines", { + description = S("Twisting Vines"), + drawtype = "plantlike", + tiles = { "twisting_vines_plant.png" }, + inventory_image = "twisting_vines.png", + sunlight_propagates = true, + paramtype = "light", + walkable = false, + climbable = true, + buildable_to = true, + groups = {dig_immediate=3,vines=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1, shearsy = 1}, + selection_box = { + type = "fixed", + fixed = { -3/16, -0.5, -3/16, 3/16, 0.5, 3/16 }, + }, + node_placement_prediction = "", + on_rightclick = function(pos, node, pointed_thing, itemstack) + + if pointed_thing:get_wielded_item():get_name() == "mcl_mushroom:twisting_vines" then + itemstack:take_item() + grow_twisting_vines(pos, 1) + elseif pointed_thing:get_wielded_item():get_name() == "mcl_dye:white" then + itemstack:take_item() + grow_twisting_vines(pos, math.random(1, 3)) + end + end, + drop = { + max_items = 1, + items = { + {items = {"mcl_mushroom:twisting_vines"}, rarity = 3}, + } + }, + _mcl_shears_drop = true, + _mcl_silk_touch_drop = true, + _mcl_fortune_drop = { items = {{items = {"mcl_mushroom:twisting_vines"}, rarity = 3},}, + items = {{items = {"mcl_mushroom:twisting_vines"}, rarity = 1.8181818181818181},}, + "mcl_mushroom:twisting_vines", + "mcl_mushroom:twisting_vines"}, + _mcl_blast_resistance = 0, + stack_max = 64, +}) + +minetest.register_node("mcl_mushroom:nether_sprouts", { + description = S("Nether Sprouts"), + drawtype = "plantlike", + tiles = { "nether_sprouts.png" }, + inventory_image = "nether_sprouts.png", + sunlight_propagates = true, + paramtype = "light", + walkable = false, + buildable_to = true, + groups = {dig_immediate=3,vines=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1, shearsy = 1}, + selection_box = { + type = "fixed", + fixed = { -4/16, -0.5, -4/16, 4/16, 0, 4/16 }, + }, + node_placement_prediction = "", + drop = "", + _mcl_shears_drop = true, + _mcl_silk_touch_drop = false, + _mcl_blast_resistance = 0, + stack_max = 64, +}) + +minetest.register_node("mcl_mushroom:warped_roots", { + description = S("Warped Roots"), + drawtype = "plantlike", + tiles = { "warped_roots.png" }, + inventory_image = "warped_roots.png", + sunlight_propagates = true, + paramtype = "light", + walkable = false, + buildable_to = true, + groups = {dig_immediate=3,vines=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1, shearsy = 1}, + selection_box = { + type = "fixed", + fixed = { -6/16, -0.5, -6/16, 6/16, -4/16, 6/16 }, + }, + node_placement_prediction = "", + _mcl_silk_touch_drop = false, + _mcl_blast_resistance = 0, stack_max = 64, }) @@ -165,6 +261,17 @@ minetest.register_abm({ elseif randomg == 7 then local pos1 = { x = pos.x, y = pos.y + 1, z = pos.z } generate_warped_tree(pos1) +<<<<<<< HEAD +======= + elseif randomg > 15 and randomg <= 45 then + grow_twisting_vines({ x = pos.x, y = pos.y, z = pos.z } ,math.random(1, 4)) + elseif randomg > 45 and randomg <= 50 then + minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_mushroom:crimson_fungus" }) + elseif randomg > 50 and randomg <= 150 then + minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_mushroom:nether_sprouts" }) + elseif randomg > 150 and randomg <= 250 then + minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_mushroom:warped_roots" }) +>>>>>>> da0cb4853 (Add more decoration blocks.) end else minetest.swap_node({ x = pos.x, y = pos.y, z = pos.z }, { name = "mcl_nether:netherrack" }) @@ -217,6 +324,26 @@ minetest.register_node("mcl_mushroom:crimson_fungus", { stack_max = 64, }) +minetest.register_node("mcl_mushroom:crimson_roots", { + description = S("Crimson Roots"), + drawtype = "plantlike", + tiles = { "crimson_roots.png" }, + inventory_image = "crimson_roots.png", + sunlight_propagates = true, + paramtype = "light", + walkable = false, + buildable_to = true, + groups = {dig_immediate=3,vines=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1, shearsy = 1}, + selection_box = { + type = "fixed", + fixed = { -6/16, -0.5, -6/16, 6/16, -4/16, 6/16 }, + }, + node_placement_prediction = "", + _mcl_silk_touch_drop = false, + _mcl_blast_resistance = 0, + stack_max = 64, +}) + minetest.register_node("mcl_mushroom:crimson_hyphae", { description = S("Crimson Hyphae"), tiles = {"crimson_hyphae.png", @@ -319,12 +446,16 @@ minetest.register_abm({ local nodepos = minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}) if nodepos.name == "air" then minetest.swap_node({ x = pos.x, y = pos.y, z = pos.z }, { name = "mcl_mushroom:crimson_nylium" }) - local randomg = math.random(1, 40) - if randomg == 2 then + local randomg = math.random(1, 400) + if randomg <= 10 then minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_mushroom:crimson_fungus" }) - elseif randomg == 7 then + elseif randomg > 10 and randomg <= 25 then local pos1 = { x = pos.x, y = pos.y + 1, z = pos.z } generate_crimson_tree(pos1) + elseif randomg > 25 and randomg <= 30 then + minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_mushroom:warped_fungus" }) + elseif randomg > 30 and randomg <= 130 then + minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_mushroom:crimson_roots" }) end else minetest.swap_node({ x = pos.x, y = pos.y, z = pos.z }, { name = "mcl_nether:netherrack" }) @@ -593,4 +724,4 @@ minetest.register_decoration({ y_max = -28940, y_min = -29065, decoration = "mcl_mushroom:crimson_fungus", -}) \ No newline at end of file +}) -- 2.40.1 From b2b86e4fcc90480298c1c0ba89609ef270ca7ab5 Mon Sep 17 00:00:00 2001 From: debiankaios Date: Mon, 19 Jul 2021 08:12:39 +0000 Subject: [PATCH 098/357] Added textures for the sprouts and roots. --- .../mcl_mushroom/textures/crimson_roots.png | Bin 0 -> 6202 bytes .../mcl_mushroom/textures/nether_sprouts.png | Bin 0 -> 314 bytes .../ITEMS/mcl_mushroom/textures/warped_roots.png | Bin 0 -> 462 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 mods/ITEMS/mcl_mushroom/textures/crimson_roots.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/nether_sprouts.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/warped_roots.png diff --git a/mods/ITEMS/mcl_mushroom/textures/crimson_roots.png b/mods/ITEMS/mcl_mushroom/textures/crimson_roots.png new file mode 100644 index 0000000000000000000000000000000000000000..f173bfb00df7d25a014ccae0e4f58c35f8946e58 GIT binary patch literal 6202 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 Hmah3X_W@fx literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_mushroom/textures/nether_sprouts.png b/mods/ITEMS/mcl_mushroom/textures/nether_sprouts.png new file mode 100644 index 0000000000000000000000000000000000000000..27f686d57abe78eff98911a4147a6c96300d9efb GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgf#HWmSP-SF8z7=c2&JY5_^EKa|j zV90mKfXB67TjkgjzcaBnid+2FgtC3}lWE**{zCVLu|dE}p{~_#8o@JUR0Z6`j?CA2 z{k!(|f%yF^_Q^JfIsf2tS*`fx?ToLlg&K4mJsL$8T@`2%v6xd9DtKXg@)G&;zquG% zL~a^HR&jSTs1<9?4!wL-S7J_Es=9%TY3vUBbsOhjlR0qj*X7G6&NDP*8Y$n#D zYTq@*Mwg8tA#ZvPciYlid!+7^u`*cfKlHO`?kmo3FPkphId|S4=nDoPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2jmA0 z5h*BbTnVoL00B-(L_t(I%e9ifYQj(y#=jd1p-7fO$W+%pK?^Q*sXloWgP|muZijHf%^!7Yrf}~0&hLERy}*Be!`@Wd16Q6q z*Di@W?XkSOy+_RwI5*_tfG`p8_71ooqh^Wg>)HcX4tvuasnzUDvQnjCs+j)2j~{TC z6V_>uB>=d~3A>s>%@PPA4sY*dhpNyXxRqgM1Gpb!wiq#0NE-k^5b??!N~^V+ec7mY zb5^MSU_Jpr1_FSa;((XOXZ#*hVwmKKTd~1vJ!d5gsz2_>@b*rQ0sw|?!qCl99@^XM zyCjda9yO}hs0OO$p%L+L+GVdVOwyM}S*T$Gz~Qt5_v3WHY%yZ1^_-DkA`zug?`AdX z2@{c7)Kr2>+KLT6zkU!zJXbIFvZ7Z*H%sYP)#*0=0Et<`;#UePasU7T07*qoM6N<$ Ef`Y`q;Q#;t literal 0 HcmV?d00001 -- 2.40.1 From 4a727d79c7aeb3ba0369772c11b58e5e0ae7999c Mon Sep 17 00:00:00 2001 From: debiankaios Date: Mon, 19 Jul 2021 15:22:04 +0000 Subject: [PATCH 099/357] german translation german translation german translation --- mods/ITEMS/mcl_mushroom/init.lua | 4 ++-- mods/ITEMS/mcl_mushroom/locale/mcl_mushrooms.de.tr | 12 +++++++++++- mods/ITEMS/mcl_mushroom/locale/template.txt | 9 +++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/mods/ITEMS/mcl_mushroom/init.lua b/mods/ITEMS/mcl_mushroom/init.lua index fd37800eb..438659fe4 100644 --- a/mods/ITEMS/mcl_mushroom/init.lua +++ b/mods/ITEMS/mcl_mushroom/init.lua @@ -214,7 +214,7 @@ minetest.register_node("mcl_mushroom:warped_hyphae_wood", { _mcl_hardness = 2, }) -mcl_stairs.register_stair_and_slab_simple("warped_hyphae_wood", "mcl_mushroom:warped_hyphae_wood", "Warped Wood Stairs", "Warped Wood Slab", "Double Warped Wood Slab") +mcl_stairs.register_stair_and_slab_simple("warped_hyphae_wood", "mcl_mushroom:warped_hyphae_wood", S("Warped Stair"), S("Warped Slab"), S("Double Warped Slab")) minetest.register_craft({ output = "mcl_mushroom:warped_hyphae_wood 4", @@ -420,7 +420,7 @@ minetest.register_craft({ } }) -mcl_stairs.register_stair_and_slab_simple("crimson_hyphae_wood", "mcl_mushroom:crimson_hyphae_wood", "Crimson Wood Stairs", "Crimson Wood Slab", "Double Crimson Wood Slab") +mcl_stairs.register_stair_and_slab_simple("crimson_hyphae_wood", "mcl_mushroom:crimson_hyphae_wood", "Crimson Stair", "Crimson Slab", "Double Crimson Slab") minetest.register_abm({ label = "mcl_mushroom:crimson_fungus", diff --git a/mods/ITEMS/mcl_mushroom/locale/mcl_mushrooms.de.tr b/mods/ITEMS/mcl_mushroom/locale/mcl_mushrooms.de.tr index 44bc656ec..becde0256 100644 --- a/mods/ITEMS/mcl_mushroom/locale/mcl_mushrooms.de.tr +++ b/mods/ITEMS/mcl_mushroom/locale/mcl_mushrooms.de.tr @@ -1,14 +1,24 @@ # textdomain: mcl_mushroom Warped Fungus Mushroom=Wirrpilz +Twisting Vines=Zwirbelranken +Nether Sprouts=Nethersprossen +Warped Roots=Wirrwurzeln Warped Wart Block=Wirrwarzenblock Shroomlight=Pilzlicht Warped Hyphae=Wirrhyphe Warped Nylium=Wirr-Nezel Warped Checknode - only to check!=Wirr Checkblock - Nur zum checken! -Warped Hyphae Wood= Wirrhyphen Holz +Warped Hyphae Wood=Wirrhyphen Holz +Warped Stair=Wirrtreppe +Warped Slab=Wirrstufe +Double Warped Slab=Doppelte Wirrstufe Crimson Fungus Mushroom=Karmesinpilz +Crimson Roots=Karmesinwurzeln Crimson Hyphae=Karmesinhyphe Crimson Hyphae Wood=Karmesinhyphenholz +Crimson Stair=Karmesintreppe +Crimson Slab=Karmesinstufe +Double Crimson Slab=Doppelte Karmesinstufe Crimson Nylium=Karmesin-Nezel Crimson Checknode - only to check!=Karmesin Checkblock - Nur zum checken! diff --git a/mods/ITEMS/mcl_mushroom/locale/template.txt b/mods/ITEMS/mcl_mushroom/locale/template.txt index c05d8922c..67d53d790 100644 --- a/mods/ITEMS/mcl_mushroom/locale/template.txt +++ b/mods/ITEMS/mcl_mushroom/locale/template.txt @@ -1,14 +1,23 @@ # textdomain: mcl_mushroom Warped Fungus Mushroom= +Twisting Vines= +Nether Sprouts= +Warped Roots= Warped Wart Block= Shroomlight= Warped Hyphae= Warped Nylium= Warped Checknode - only to check!= Warped Hyphae Wood= +Warped Stair= +Warped Slab= Crimson Fungus Mushroom= +Crimson Roots= Crimson Hyphae= Crimson Hyphae Wood= +Crimson Stair= +Crimson Slab= +Double Crimson Slab= Crimson Nylium= Crimson Checknode - only to check!= -- 2.40.1 From 352fd7562fcb935658622a272969a9041d7cef2d Mon Sep 17 00:00:00 2001 From: kay27 Date: Wed, 8 Dec 2021 18:59:00 +0400 Subject: [PATCH 100/357] #41 Remove proprietary textures, update game screenshot --- .../textures/crimson_hyphae_old.png | Bin 318 -> 0 bytes .../textures/crimson_hyphae_side_old.png | Bin 318 -> 0 bytes .../textures/crimson_nylium_old.png | Bin 565 -> 0 bytes .../textures/crimson_nylium_side_old.png | Bin 218 -> 0 bytes .../mcl_mushroom/textures/shroomlight_old.png | Bin 385 -> 0 bytes .../textures/warped_hyphae_old.png | Bin 301 -> 0 bytes .../textures/warped_hyphae_side_old.png | Bin 322 -> 0 bytes .../textures/warped_nylium_side_old.png | Bin 223 -> 0 bytes .../textures/warped_wart_block_old.png | Bin 261 -> 0 bytes screenshot.png | Bin 88675 -> 96071 bytes 10 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 mods/ITEMS/mcl_mushroom/textures/crimson_hyphae_old.png delete mode 100644 mods/ITEMS/mcl_mushroom/textures/crimson_hyphae_side_old.png delete mode 100644 mods/ITEMS/mcl_mushroom/textures/crimson_nylium_old.png delete mode 100644 mods/ITEMS/mcl_mushroom/textures/crimson_nylium_side_old.png delete mode 100644 mods/ITEMS/mcl_mushroom/textures/shroomlight_old.png delete mode 100644 mods/ITEMS/mcl_mushroom/textures/warped_hyphae_old.png delete mode 100644 mods/ITEMS/mcl_mushroom/textures/warped_hyphae_side_old.png delete mode 100644 mods/ITEMS/mcl_mushroom/textures/warped_nylium_side_old.png delete mode 100644 mods/ITEMS/mcl_mushroom/textures/warped_wart_block_old.png diff --git a/mods/ITEMS/mcl_mushroom/textures/crimson_hyphae_old.png b/mods/ITEMS/mcl_mushroom/textures/crimson_hyphae_old.png deleted file mode 100644 index 583aa964786f49db13477b203bf9bce57fdaf388..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318 zcmV-E0m1%>P)Aj-Q8*kTm)R3=f!re}>?d9g)tOzD3Us=^`HA#W(M!e55sxZ{ zHVkd}h+yW3J0;8<(M!e9hF&UG2>VRf;7(}^y@46e9QR!>6*6lCpXlOkjoaHztOOmjriS&#Ws*P&fGnX$M2;=c+>0yuH7g5 zl7+E--F^bS)EDUP)Aj-Q8*kTm)R3=f!re}>?d9g)tOzD3Us=^`HA#W(M!e55sxZ{ zHVkd}h+yW3J0;8<(M!e9hF&UG2>VRf;7(}^y@46e9QR!>6*6lCpXlOkjoaHztOOmjriS&#Ws*P&fGnX$M2;=c+>0yuH7g5 zl7+E--F^bS)EDUVl&|0005}NklvZ_zECO)P@L6&|0Me#Binvcq5)7;eM;HM!&0|A%$gHj{ zyi+<247Va`9TkcV_oV{$rKxIs*8{FGY70v1?jzto=%tp`n65AUA#U>_ZkMh~J2dPS zY#$9uqgv9vpy~m);nrioipwui>-U9S|F3*Zgn<75Vu#pVTts8x00000NkvXXu0mjf DY6u5} diff --git a/mods/ITEMS/mcl_mushroom/textures/crimson_nylium_side_old.png b/mods/ITEMS/mcl_mushroom/textures/crimson_nylium_side_old.png deleted file mode 100644 index 36984d69effd04929b03929dacff2bee93ca5247..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`3q4&NLo9mlPB_SWM1hCpxuc*> ztkWev)eB6y0c^TU%OOAm zK5p$gZ0tI0%-7Gu+Mb7XUC*c8pYXfmUFOUFE06QP6ujeB=>#0$3YAnMuGmEovfI(@ zcKjJG=j(pK#|%NHk`NLm?!Gy>7kA#mw%YRVWt+PsX?2*}GQ08yh-LyN+vTt5VOAlg@t fQgu$9PbcsJ3%4c0<~RIw00000NkvXXu0mjfZ-1gU diff --git a/mods/ITEMS/mcl_mushroom/textures/warped_hyphae_old.png b/mods/ITEMS/mcl_mushroom/textures/warped_hyphae_old.png deleted file mode 100644 index 6a8be80a7f083457b5af7eecb55edbab4b46e62c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 301 zcmV+|0n+}7P)DGU`73sD$4v1NjxjEt>65Y~}28?8GXKCM#i; z#_REfywfM|(zZ$?X|fXaGVfr#3um>hFx~~9M3a?BtkS5L8EM}k?K>1hi(+VzPh&VG z7_YYVQ-LI?wiVU3URFdDLyLNuzXZm+;AFX1sFxY}G{Shd??FC|fk4WTWs`t*=m8%w zOWJo)W*I+~aIAnnmdi7ea7RG%5$jP5Xvv-;M+=WUTY@6Iq>9!^<`HqX+A}`~c`^Axt&^+*k-5)s^*g z-9kQkK(RWqFBYPgTgY$}Gn$P^5aDb(!A>2SM#T!!Jrg_DtiwUNO=II1pWyiR+F`BT zI#Sr=XZtG&iP#(w-p6>+b>RH6EvzX_tj Uq#%9e2=sEDw;&r7j?;Hx(o~c z*ygqDU<;_83N3907naVm86?c1wxKYhCzHp_1@I0EcVUl=-)u6%M{#_|vNTr(Pk&E7 zjsaYFK^~ib@+~{?DB5M(JuNbxZr=L`;yZQ#K52Ah1sD+HUiYIP>*5CaTA;H100000 LNkvXXu0mjfkiKou diff --git a/screenshot.png b/screenshot.png index a92bd53e5e767697add40e8bdf0befcce6ceb620..12cc5db22bd96da3e3ebfc665dcfb363e170a9f2 100644 GIT binary patch literal 96071 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

bN4B$|z0wGct`6S69S0GG?iWs5@KrOWw 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 -- 2.40.1 From b25c23f5fa595dff187cb1f02a7b56cec94165f7 Mon Sep 17 00:00:00 2001 From: 3raven Date: Sat, 19 Feb 2022 17:27:23 +0000 Subject: [PATCH 101/357] mcl_mushroom.fr.tr Translation --- .../mcl_mushroom/locale/mcl_mushroom.fr.tr | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 mods/ITEMS/mcl_mushroom/locale/mcl_mushroom.fr.tr diff --git a/mods/ITEMS/mcl_mushroom/locale/mcl_mushroom.fr.tr b/mods/ITEMS/mcl_mushroom/locale/mcl_mushroom.fr.tr new file mode 100644 index 000000000..e301a8b8a --- /dev/null +++ b/mods/ITEMS/mcl_mushroom/locale/mcl_mushroom.fr.tr @@ -0,0 +1,23 @@ +# textdomain: mcl_mushroom + +Warped Fungus Mushroom=Champignon tordu +Twisting Vines=Liane tordue +Nether Sprouts=Racines du nether +Warped Roots=Racines tordues +Warped Wart Block=Bloc de verrues tordu +Shroomlight=Champilampe +Warped Hyphae=Tige tordue +Warped Nylium=Nylium tordu +Warped Checknode - only to check!=Bloc de vérification tordu - seulement pour vérifier ! +Warped Hyphae Wood=Planches tordues +Warped Stair=Escalier tordu +Warped Slab=Dalle tordue +Crimson Fungus Mushroom=Champignon écarlate +Crimson Roots=Racines écarlates +Crimson Hyphae=Tige écarlate +Crimson Hyphae Wood=Planches écarlates +Crimson Stair=Escalier écarlate +Crimson Slab=Dalle écarlate +Double Crimson Slab=Dalle double écarlate +Crimson Nylium=Nylium écarlate +Crimson Checknode - only to check!=Bloc de vérification écarlate - seulement pour vérifier ! \ No newline at end of file -- 2.40.1 From 69da3ffc059d83df18d7e72b7632b03a74b01446 Mon Sep 17 00:00:00 2001 From: 3raven Date: Sun, 6 Mar 2022 22:54:12 +0000 Subject: [PATCH 102/357] fix texture --- .../textures/farming_crimson_fungus.png | Bin 765 -> 307 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/mods/ITEMS/mcl_mushroom/textures/farming_crimson_fungus.png b/mods/ITEMS/mcl_mushroom/textures/farming_crimson_fungus.png index 86180a8dd35f66d2c0fa8f72936974fe8eb90172..ab1771b9538549a60d49fa9c8fe9b40a366597ea 100644 GIT binary patch literal 307 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}OMp*^E0A_)VDMmI$YWqDU|=s` z;3#5ZD`Ms-W@ay8=I{{}@RJY-kPrxz5C{U2k^%uzQj_>aCyIzq5|x-DA+bCCy?(!$KpYr7D_HZWc#$SlS$&TAiGZ7+D=LwmfQVb=1W2xT#fTQtmdKI;Vst0PZtcZ~y=R literal 765 zcmeAS@N?(olHy`uVBq!ia0vp^3qY8I4M=vMPuFE&U^?RI;uumf=k0C#tdKy7V-JIu zY}g{>k*yrX>X^&iR5t0_DW?tBPOoS6)rLJEOQDqamPoD(z{g;X6D zv3N{ju`_x0y} zITa!vGk53V^>*&R_U&{>wGU?GpUJbYUXGjjs=ad6f2-NQ54&AWSam*n?rw4MrGj5L znM4w%FtAFfIxxC%1~desa@TIX_U(7=lcTH}2UdJv`xR(g(B2n2)8B1)W*7f;o-nTr zUwh0CCXokayG0i;6f^o=R&ii_#&qXx8I#C@`;4qVJea>IM>O1P;rQ^8ZN@L@l5F1w zrkuAGHe3M>{a<1WuHIP~w*1$w#q;&|?r(Rw-xAWh@4?0M)9>APX3=o?m-dCVzi!`` ze`5LMFn;*U>+4si+U==}ob~1N1_O-ffCSI0%e&3@8r@&F&TDd=oR}N-5On#wXWzT2 zKR^ClX7ciRVj?IqVS$Sj!y%??vR2@g*OB*nq=TV*-u;IK1^UZ5KJ2;ny7YdI*}JDA ljPuT$_}0!^w(oA Date: Fri, 29 Apr 2022 12:37:45 +0200 Subject: [PATCH 103/357] Bump ABM intervals to 1 second --- mods/ITEMS/mcl_mushroom/init.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/ITEMS/mcl_mushroom/init.lua b/mods/ITEMS/mcl_mushroom/init.lua index 438659fe4..59c693043 100644 --- a/mods/ITEMS/mcl_mushroom/init.lua +++ b/mods/ITEMS/mcl_mushroom/init.lua @@ -249,7 +249,7 @@ minetest.register_abm({ minetest.register_abm({ label = "mcl_mushroom:warped_checknode", nodenames = {"mcl_mushroom:warped_checknode"}, - interval = 0.1, + interval = 1, chance = 1, action = function(pos) local nodepos = minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}) @@ -440,7 +440,7 @@ minetest.register_abm({ minetest.register_abm({ label = "mcl_mushroom:crimson_checknode", nodenames = {"mcl_mushroom:crimson_checknode"}, - interval = 0.1, + interval = 1, chance = 1, action = function(pos) local nodepos = minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}) -- 2.40.1 From 653020d2efe9255e77b07e728577d948d342b9ad Mon Sep 17 00:00:00 2001 From: 3raven Date: Tue, 19 Apr 2022 21:11:01 +0000 Subject: [PATCH 104/357] Add texture files for stripped stem Add texture files for stripped stem Add texture files for stripped stem Add warped hyphae stripped and bark Same for crimson hyphae --- mods/ITEMS/mcl_mushroom/init.lua | 132 ++++++++++++++++++ .../textures/stripped_crimson_stem_side.png | Bin 0 -> 193 bytes .../textures/stripped_crimson_stem_top.png | Bin 0 -> 231 bytes .../textures/stripped_warped_stem_side.png | Bin 0 -> 200 bytes .../textures/stripped_warped_stem_top.png | Bin 0 -> 239 bytes 5 files changed, 132 insertions(+) create mode 100644 mods/ITEMS/mcl_mushroom/textures/stripped_crimson_stem_side.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/stripped_crimson_stem_top.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/stripped_warped_stem_side.png create mode 100644 mods/ITEMS/mcl_mushroom/textures/stripped_warped_stem_top.png diff --git a/mods/ITEMS/mcl_mushroom/init.lua b/mods/ITEMS/mcl_mushroom/init.lua index 59c693043..e08a2b060 100644 --- a/mods/ITEMS/mcl_mushroom/init.lua +++ b/mods/ITEMS/mcl_mushroom/init.lua @@ -205,6 +205,72 @@ minetest.register_node("mcl_mushroom:warped_checknode", { drop = "mcl_nether:netherrack" }) +--Stem bark, stripped stem and bark + +minetest.register_node("mcl_mushroom:warped_hyphae_bark", { + description = S("Warped Hyphae"), + _doc_items_longdesc = S("This is a decorative block surrounded by the bark of an hyphae."), + tiles = {"warped_hyphae_side.png"}, + paramtype2 = "facedir", + on_place = mcl_util.rotate_axis, + stack_max = 64, + groups = {handy=1,axey=1, bark=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5}, + sounds = mcl_sounds.node_sound_wood_defaults(), + is_ground_content = false, + on_rotate = on_rotate, + _mcl_blast_resistance = 2, + _mcl_hardness = 2, + _mcl_stripped_variant = "mcl_mushroom:stripped_warped_hyphae_bark", + }) + +minetest.register_craft({ + output = "mcl_mushroom:warped_hyphae_bark 3", + recipe = { + { "mcl_mushroom:warped_hyphae", "mcl_mushroom:warped_hyphae" }, + { "mcl_mushroom:warped_hyphae", "mcl_mushroom:warped_hyphae" }, + } + }) + +minetest.register_node("mcl_mushroom:stripped_warped_hyphae", { + description = description_stripped_trunk, + _doc_items_longdesc = longdesc, + _doc_items_hidden = false, + tiles = {tile_stripped_inner, tile_stripped_inner, tile_stripped_bark}, + paramtype2 = "facedir", + on_place = mcl_util.rotate_axis, + stack_max = 64, + groups = {handy=1, axey=1, tree=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5}, + sounds = mcl_sounds.node_sound_wood_defaults(), + on_rotate = on_rotate, + _mcl_blast_resistance = 2, + _mcl_hardness = 2, + }) + +minetest.register_node("mcl_mushroom:stripped_warped_hyphae_bark", { + description = description_stripped_bark, + _doc_items_longdesc = longdesc_wood, + tiles = {tile_stripped_bark}, + paramtype2 = "facedir", + on_place = mcl_util.rotate_axis, + stack_max = 64, + groups = {handy=1, axey=1, bark=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5}, + sounds = mcl_sounds.node_sound_wood_defaults(), + is_ground_content = false, + on_rotate = on_rotate, + _mcl_blast_resistance = 2, + _mcl_hardness = 2, + }) + +minetest.register_craft({ + output = "mcl_mushroom:stripped_warped_hyphae_bark 3", + recipe = { + { "mcl_mushroom:stripped_warped_hyphae", "mcl_mushroom:stripped_warped_hyphae" }, + { "mcl_mushroom:stripped_warped_hyphae", "mcl_mushroom:stripped_warped_hyphae" }, + } + }) + +--Wood + minetest.register_node("mcl_mushroom:warped_hyphae_wood", { description = S("Warped Hyphae Wood"), tiles = {"warped_hyphae_wood.png"}, @@ -359,6 +425,72 @@ minetest.register_node("mcl_mushroom:crimson_hyphae", { _mcl_hardness = 2, }) +--Stem bark, stripped stem and bark + +minetest.register_node("mcl_mushroom:crimson_hyphae_bark", { + description = S("Crimson Hyphae"), + _doc_items_longdesc = S("This is a decorative block surrounded by the bark of an hyphae."), + tiles = {"crimson_hyphae_side.png"}, + paramtype2 = "facedir", + on_place = mcl_util.rotate_axis, + stack_max = 64, + groups = {handy=1,axey=1, bark=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5}, + sounds = mcl_sounds.node_sound_wood_defaults(), + is_ground_content = false, + on_rotate = on_rotate, + _mcl_blast_resistance = 2, + _mcl_hardness = 2, + _mcl_stripped_variant = "mcl_mushroom:stripped_crimson_hyphae_bark", + }) + +minetest.register_craft({ + output = "mcl_mushroom:crimson_hyphae_bark 3", + recipe = { + { "mcl_mushroom:crimson_hyphae", "mcl_mushroom:crimson_hyphae" }, + { "mcl_mushroom:crimson_hyphae", "mcl_mushroom:crimson_hyphae" }, + } + }) + +minetest.register_node("mcl_mushroom:stripped_crimson_hyphae", { + description = S("Stripped Crimson Hyphae"), + _doc_items_longdesc = S("The stripped stem of a crimson hyphae"), + _doc_items_hidden = false, + tiles = {"stripped_crimson_stem_top.png", "stripped_crimson_stem_top.png", "stripped_crimson_stem_side.png"}, + paramtype2 = "facedir", + on_place = mcl_util.rotate_axis, + stack_max = 64, + groups = {handy=1, axey=1, tree=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5}, + sounds = mcl_sounds.node_sound_wood_defaults(), + on_rotate = on_rotate, + _mcl_blast_resistance = 2, + _mcl_hardness = 2, + }) + +minetest.register_node("mcl_mushroom:stripped_crimson_hyphae_bark", { + description = S("Stripped Crimson Hyphae Bark"), + _doc_items_longdesc = S("The stripped wood of a crimson hyphae"), + tiles = {"stripped_crimson_stem_side.png"}, + paramtype2 = "facedir", + on_place = mcl_util.rotate_axis, + stack_max = 64, + groups = {handy=1, axey=1, bark=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5}, + sounds = mcl_sounds.node_sound_wood_defaults(), + is_ground_content = false, + on_rotate = on_rotate, + _mcl_blast_resistance = 2, + _mcl_hardness = 2, + }) + +minetest.register_craft({ + output = "mcl_mushroom:stripped_crimson_hyphae_bark 3", + recipe = { + { "mcl_mushroom:stripped_crimson_hyphae", "mcl_mushroom:stripped_crimson_hyphae" }, + { "mcl_mushroom:stripped_crimson_hyphae", "mcl_mushroom:stripped_crimson_hyphae" }, + } + }) + +--Wood + minetest.register_node("mcl_mushroom:crimson_hyphae_wood", { description = S("Crimson Hyphae Wood"), tiles = {"crimson_hyphae_wood.png"}, diff --git a/mods/ITEMS/mcl_mushroom/textures/stripped_crimson_stem_side.png b/mods/ITEMS/mcl_mushroom/textures/stripped_crimson_stem_side.png new file mode 100644 index 0000000000000000000000000000000000000000..ad6a41a2ed679bb4aeba43bb934944d4abb9606c GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?bjnyzp(=aO1G^$e9Z_zZE z*!$=*P%78c#W95AI&bem!6OPhN6dV<6y&%Lw6XEsVfgkf{_@Am&dLv$R^AAjB4Ype z`o|o}i+-+_)ohy=$^J@W(w+H=eFC==>%K1%SGZcDXO&F(u;dnRk(%v3?rmrDFDxrK pdv)Qp9e3V&OHB>0vv8L9#s2-OsL-oROdvNgc)I$ztaD0e0sukTN5237 literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_mushroom/textures/stripped_crimson_stem_top.png b/mods/ITEMS/mcl_mushroom/textures/stripped_crimson_stem_top.png new file mode 100644 index 0000000000000000000000000000000000000000..21696b098b5138b428e35702de9a589d34010c68 GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(aP17(c(ln}4*Kg4@=(BZM z>g2k|-Tg+4_lxS#?*=d9fXdoET^vI=uJfKTsO-HHwJNC*h4-GEOi&M* zIG5XMVd$b1v(Q$qhsWXJ8P3q c&DP|rudmSwXID!#0Xm7n)78&qol`;+0JS7o0{{R3 literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_mushroom/textures/stripped_warped_stem_side.png b/mods/ITEMS/mcl_mushroom/textures/stripped_warped_stem_side.png new file mode 100644 index 0000000000000000000000000000000000000000..db93c05cb449ae364df6f0653b72382c070aa62d GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VWwJ`THv-GjD337CZa&=1d zaZ6wQ&%zrhTj=TH7{YO#_v}H@!wNhs7jqe{H4j{SoTqZx!GTvH_y5|K+jIUs@cz7E zp+#`b-u-RKr=&|`f2_ILT)9y1SAy7;lvV4QZYo}BvbK$T)hd*id8wdH{i@lCd0%#v x-!Qqqp!DI3#g1!>cD$V)qV@LRLAgT}|6&qk```DsaR4o6@O1TaS?83{1OR&;P*wl{ literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_mushroom/textures/stripped_warped_stem_top.png b/mods/ITEMS/mcl_mushroom/textures/stripped_warped_stem_top.png new file mode 100644 index 0000000000000000000000000000000000000000..4a8f14800e6a14771a73a98efe5712a89a97963e GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv4DbnYwKVs(vkGvvi*U7%4suBi zaw`aS%a8S~$qAX56VX!_yDn|g>NcR_PEQxd5RU7-XKeYJ97J3np609g$D*sKwuy1+ zwXV31*9^(;Qmjm#?LDKnCM{*^rMb_nPb|3;v-Ff=w%V@s3v4b+)HNwjp7~W@L~-IR z{~Kqkl1rFh9huy3w!rjP%6z`H#`(YAZ74n6R_OBZar2zzt=Wt7I-_DYEKp8yJoTGv l)BMYuC0Qa>+q Date: Wed, 20 Apr 2022 00:29:44 +0000 Subject: [PATCH 105/357] Non flammable/modify by similiraty with trees --- mods/ITEMS/mcl_mushroom/init.lua | 76 ++++++++++++++++++++++++-------- 1 file changed, 58 insertions(+), 18 deletions(-) diff --git a/mods/ITEMS/mcl_mushroom/init.lua b/mods/ITEMS/mcl_mushroom/init.lua index e08a2b060..e03253abb 100644 --- a/mods/ITEMS/mcl_mushroom/init.lua +++ b/mods/ITEMS/mcl_mushroom/init.lua @@ -154,18 +154,26 @@ minetest.register_node("mcl_mushroom:shroomlight", { }) minetest.register_node("mcl_mushroom:warped_hyphae", { - description = S("Warped Hyphae"), - tiles = {"warped_hyphae.png", - "warped_hyphae.png", - "warped_hyphae_side.png", - "warped_hyphae_side.png", - "warped_hyphae_side.png", - "warped_hyphae_side.png", - }, - groups = {handy=5,axey=1, bark=1, building_block=1, material_wood=1,}, - paramtype2 = "facedir", - stack_max = 64, - _mcl_hardness = 2, + description = S("Warped Hyphae"), + _doc_items_longdesc = S("The stem of a warped hyphae"), + _doc_items_hidden = false, + tiles = { + "warped_hyphae.png", + "warped_hyphae.png", + "warped_hyphae_side.png", + "warped_hyphae_side.png", + "warped_hyphae_side.png", + "warped_hyphae_side.png", + }, + paramtype2 = "facedir", + on_place = mcl_util.rotate_axis, + groups = {handy=1,axey=1, tree=1, building_block=1, material_wood=1}, + sounds = mcl_sounds.node_sound_wood_defaults(), + on_rotate = on_rotate, + _mcl_blast_resistance = 2, + stack_max = 64, + _mcl_hardness = 2, + _mcl_stripped_variant = stripped_variant, }) minetest.register_node("mcl_mushroom:warped_nylium", { @@ -214,7 +222,7 @@ minetest.register_node("mcl_mushroom:warped_hyphae_bark", { paramtype2 = "facedir", on_place = mcl_util.rotate_axis, stack_max = 64, - groups = {handy=1,axey=1, bark=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5}, + groups = {handy=1,axey=1, bark=1, building_block=1, material_wood=1}, sounds = mcl_sounds.node_sound_wood_defaults(), is_ground_content = false, on_rotate = on_rotate, @@ -239,7 +247,7 @@ minetest.register_node("mcl_mushroom:stripped_warped_hyphae", { paramtype2 = "facedir", on_place = mcl_util.rotate_axis, stack_max = 64, - groups = {handy=1, axey=1, tree=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5}, + groups = {handy=1, axey=1, tree=1, building_block=1, material_wood=1}, sounds = mcl_sounds.node_sound_wood_defaults(), on_rotate = on_rotate, _mcl_blast_resistance = 2, @@ -253,7 +261,7 @@ minetest.register_node("mcl_mushroom:stripped_warped_hyphae_bark", { paramtype2 = "facedir", on_place = mcl_util.rotate_axis, stack_max = 64, - groups = {handy=1, axey=1, bark=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5}, + groups = {handy=1, axey=1, bark=1, building_block=1, material_wood=1}, sounds = mcl_sounds.node_sound_wood_defaults(), is_ground_content = false, on_rotate = on_rotate, @@ -272,12 +280,21 @@ minetest.register_craft({ --Wood minetest.register_node("mcl_mushroom:warped_hyphae_wood", { +<<<<<<< HEAD description = S("Warped Hyphae Wood"), tiles = {"warped_hyphae_wood.png"}, groups = {handy=5,axey=1, flammable=3,wood=1,building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=20}, paramtype2 = "facedir", stack_max = 64, _mcl_hardness = 2, +======= + description = S("Warped Hyphae Wood"), + tiles = {"warped_hyphae_wood.png"}, + groups = {handy=5,axey=1, wood=1,building_block=1, material_wood=1}, + --paramtype2 = "facedir", + stack_max = 64, + _mcl_hardness = 2, +>>>>>>> 4850b914a (Non flammable/modify by similiraty with trees) }) mcl_stairs.register_stair_and_slab_simple("warped_hyphae_wood", "mcl_mushroom:warped_hyphae_wood", S("Warped Stair"), S("Warped Slab"), S("Double Warped Slab")) @@ -411,6 +428,7 @@ minetest.register_node("mcl_mushroom:crimson_roots", { }) minetest.register_node("mcl_mushroom:crimson_hyphae", { +<<<<<<< HEAD description = S("Crimson Hyphae"), tiles = {"crimson_hyphae.png", "crimson_hyphae.png", @@ -423,6 +441,28 @@ minetest.register_node("mcl_mushroom:crimson_hyphae", { paramtype2 = "facedir", stack_max = 64, _mcl_hardness = 2, +======= + description = S("Crimson Hyphae"), + _doc_items_longdesc = S("The stem of a crimson hyphae"), + _doc_items_hidden = false, + tiles = { + "crimson_hyphae.png", + "crimson_hyphae.png", + "crimson_hyphae_side.png", + "crimson_hyphae_side.png", + "crimson_hyphae_side.png", + "crimson_hyphae_side.png", + }, + paramtype2 = "facedir", + on_place = mcl_util.rotate_axis, + groups = {handy=1,axey=1, tree=1, building_block=1, material_wood=1}, + sounds = mcl_sounds.node_sound_wood_defaults(), + on_rotate = on_rotate, + _mcl_blast_resistance = 2, + stack_max = 64, + _mcl_hardness = 2, + _mcl_stripped_variant = stripped_variant, +>>>>>>> 4850b914a (Non flammable/modify by similiraty with trees) }) --Stem bark, stripped stem and bark @@ -434,7 +474,7 @@ minetest.register_node("mcl_mushroom:crimson_hyphae_bark", { paramtype2 = "facedir", on_place = mcl_util.rotate_axis, stack_max = 64, - groups = {handy=1,axey=1, bark=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5}, + groups = {handy=1,axey=1, bark=1, building_block=1, material_wood=1,}, sounds = mcl_sounds.node_sound_wood_defaults(), is_ground_content = false, on_rotate = on_rotate, @@ -459,7 +499,7 @@ minetest.register_node("mcl_mushroom:stripped_crimson_hyphae", { paramtype2 = "facedir", on_place = mcl_util.rotate_axis, stack_max = 64, - groups = {handy=1, axey=1, tree=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5}, + groups = {handy=1, axey=1, tree=1, building_block=1, material_wood=1}, sounds = mcl_sounds.node_sound_wood_defaults(), on_rotate = on_rotate, _mcl_blast_resistance = 2, @@ -473,7 +513,7 @@ minetest.register_node("mcl_mushroom:stripped_crimson_hyphae_bark", { paramtype2 = "facedir", on_place = mcl_util.rotate_axis, stack_max = 64, - groups = {handy=1, axey=1, bark=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5}, + groups = {handy=1, axey=1, bark=1, building_block=1, material_wood=1}, sounds = mcl_sounds.node_sound_wood_defaults(), is_ground_content = false, on_rotate = on_rotate, -- 2.40.1 From 686b62f6e3de7e8a88f32595949ce6143245c9b5 Mon Sep 17 00:00:00 2001 From: 3raven Date: Wed, 20 Apr 2022 04:32:13 +0000 Subject: [PATCH 106/357] fix fix --- mods/ITEMS/mcl_mushroom/init.lua | 50 +------------------------------- 1 file changed, 1 insertion(+), 49 deletions(-) diff --git a/mods/ITEMS/mcl_mushroom/init.lua b/mods/ITEMS/mcl_mushroom/init.lua index e03253abb..7513ce4dc 100644 --- a/mods/ITEMS/mcl_mushroom/init.lua +++ b/mods/ITEMS/mcl_mushroom/init.lua @@ -35,19 +35,6 @@ minetest.register_node("mcl_mushroom:warped_fungus", { end end, _mcl_blast_resistance = 0, - - if pointed_thing:get_wielded_item():get_name() == "mcl_dye:white" then - itemstack:take_item() - local nodepos = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) - if nodepos.name == "mcl_mushroom:warped_nylium" or nodepos.name == "mcl_nether:netherrack" then - local random = math.random(1, 5) - if random == 1 then - generate_warped_tree(pos) - end - end - end - end, - _mcl_blast_resistance = 0, stack_max = 64, }) @@ -173,7 +160,7 @@ minetest.register_node("mcl_mushroom:warped_hyphae", { _mcl_blast_resistance = 2, stack_max = 64, _mcl_hardness = 2, - _mcl_stripped_variant = stripped_variant, + _mcl_stripped_variant = "mcl_mushroom:stripped_warped_hyphae", }) minetest.register_node("mcl_mushroom:warped_nylium", { @@ -280,21 +267,12 @@ minetest.register_craft({ --Wood minetest.register_node("mcl_mushroom:warped_hyphae_wood", { -<<<<<<< HEAD description = S("Warped Hyphae Wood"), tiles = {"warped_hyphae_wood.png"}, groups = {handy=5,axey=1, flammable=3,wood=1,building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=20}, paramtype2 = "facedir", stack_max = 64, _mcl_hardness = 2, -======= - description = S("Warped Hyphae Wood"), - tiles = {"warped_hyphae_wood.png"}, - groups = {handy=5,axey=1, wood=1,building_block=1, material_wood=1}, - --paramtype2 = "facedir", - stack_max = 64, - _mcl_hardness = 2, ->>>>>>> 4850b914a (Non flammable/modify by similiraty with trees) }) mcl_stairs.register_stair_and_slab_simple("warped_hyphae_wood", "mcl_mushroom:warped_hyphae_wood", S("Warped Stair"), S("Warped Slab"), S("Double Warped Slab")) @@ -344,17 +322,6 @@ minetest.register_abm({ elseif randomg == 7 then local pos1 = { x = pos.x, y = pos.y + 1, z = pos.z } generate_warped_tree(pos1) -<<<<<<< HEAD -======= - elseif randomg > 15 and randomg <= 45 then - grow_twisting_vines({ x = pos.x, y = pos.y, z = pos.z } ,math.random(1, 4)) - elseif randomg > 45 and randomg <= 50 then - minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_mushroom:crimson_fungus" }) - elseif randomg > 50 and randomg <= 150 then - minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_mushroom:nether_sprouts" }) - elseif randomg > 150 and randomg <= 250 then - minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_mushroom:warped_roots" }) ->>>>>>> da0cb4853 (Add more decoration blocks.) end else minetest.swap_node({ x = pos.x, y = pos.y, z = pos.z }, { name = "mcl_nether:netherrack" }) @@ -428,20 +395,6 @@ minetest.register_node("mcl_mushroom:crimson_roots", { }) minetest.register_node("mcl_mushroom:crimson_hyphae", { -<<<<<<< HEAD - description = S("Crimson Hyphae"), - tiles = {"crimson_hyphae.png", - "crimson_hyphae.png", - "crimson_hyphae_side.png", - "crimson_hyphae_side.png", - "crimson_hyphae_side.png", - "crimson_hyphae_side.png", - }, - groups = {handy=5,axey=1, bark=1, building_block=1, material_wood=1,}, - paramtype2 = "facedir", - stack_max = 64, - _mcl_hardness = 2, -======= description = S("Crimson Hyphae"), _doc_items_longdesc = S("The stem of a crimson hyphae"), _doc_items_hidden = false, @@ -462,7 +415,6 @@ minetest.register_node("mcl_mushroom:crimson_hyphae", { stack_max = 64, _mcl_hardness = 2, _mcl_stripped_variant = stripped_variant, ->>>>>>> 4850b914a (Non flammable/modify by similiraty with trees) }) --Stem bark, stripped stem and bark -- 2.40.1 From 9d5bbd7d22e038c0eaf649772fe8c9b0d91a321c Mon Sep 17 00:00:00 2001 From: 3raven Date: Sun, 24 Apr 2022 16:16:33 +0000 Subject: [PATCH 107/357] Correct name --- mods/ITEMS/mcl_mushroom/init.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/ITEMS/mcl_mushroom/init.lua b/mods/ITEMS/mcl_mushroom/init.lua index 7513ce4dc..c63bede52 100644 --- a/mods/ITEMS/mcl_mushroom/init.lua +++ b/mods/ITEMS/mcl_mushroom/init.lua @@ -203,7 +203,7 @@ minetest.register_node("mcl_mushroom:warped_checknode", { --Stem bark, stripped stem and bark minetest.register_node("mcl_mushroom:warped_hyphae_bark", { - description = S("Warped Hyphae"), + description = S("Warped Hyphae Bark"), _doc_items_longdesc = S("This is a decorative block surrounded by the bark of an hyphae."), tiles = {"warped_hyphae_side.png"}, paramtype2 = "facedir", @@ -420,7 +420,7 @@ minetest.register_node("mcl_mushroom:crimson_hyphae", { --Stem bark, stripped stem and bark minetest.register_node("mcl_mushroom:crimson_hyphae_bark", { - description = S("Crimson Hyphae"), + description = S("Crimson Hyphae Bark"), _doc_items_longdesc = S("This is a decorative block surrounded by the bark of an hyphae."), tiles = {"crimson_hyphae_side.png"}, paramtype2 = "facedir", -- 2.40.1 From 6af3fecacbac35d1a58af6e4966bc0ac048dad49 Mon Sep 17 00:00:00 2001 From: cora Date: Wed, 4 May 2022 00:12:53 +0200 Subject: [PATCH 108/357] rename mcl_mushroom to mcl_crimson --- .../{mcl_mushroom => mcl_crimson}/init.lua | 190 +++++++++--------- .../locale/mcl_mushroom.fr.tr | 0 .../locale/mcl_mushrooms.de.tr | 0 .../locale/template.txt | 0 .../{mcl_mushroom => mcl_crimson}/mod.conf | 2 +- .../textures/crimson_hyphae.png | Bin .../textures/crimson_hyphae_side.png | Bin .../textures/crimson_hyphae_wood.png | Bin .../textures/crimson_nylium.png | Bin .../textures/crimson_nylium_side.png | Bin .../textures/crimson_roots.png | Bin .../textures/farming_crimson_fungus.png | Bin .../textures/farming_warped_fungus.png | Bin .../textures/nether_sprouts.png | Bin .../textures/nether_wart_block.png | Bin .../textures/shroomlight.png | Bin .../textures/stripped_crimson_stem_side.png | Bin .../textures/stripped_crimson_stem_top.png | Bin .../textures/stripped_warped_stem_side.png | Bin .../textures/stripped_warped_stem_top.png | Bin .../textures/twisting_vines.png | Bin .../textures/twisting_vines_plant.png | Bin .../textures/warped_hyphae.png | Bin .../textures/warped_hyphae_side.png | Bin .../textures/warped_hyphae_wood.png | Bin .../textures/warped_hyphae_wood_2nd.png | Bin .../textures/warped_nylium.png | Bin .../textures/warped_nylium_side.png | Bin .../textures/warped_roots.png | Bin .../textures/warped_wart_block.png | Bin 30 files changed, 96 insertions(+), 96 deletions(-) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/init.lua (81%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/locale/mcl_mushroom.fr.tr (100%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/locale/mcl_mushrooms.de.tr (100%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/locale/template.txt (100%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/mod.conf (60%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/textures/crimson_hyphae.png (100%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/textures/crimson_hyphae_side.png (100%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/textures/crimson_hyphae_wood.png (100%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/textures/crimson_nylium.png (100%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/textures/crimson_nylium_side.png (100%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/textures/crimson_roots.png (100%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/textures/farming_crimson_fungus.png (100%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/textures/farming_warped_fungus.png (100%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/textures/nether_sprouts.png (100%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/textures/nether_wart_block.png (100%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/textures/shroomlight.png (100%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/textures/stripped_crimson_stem_side.png (100%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/textures/stripped_crimson_stem_top.png (100%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/textures/stripped_warped_stem_side.png (100%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/textures/stripped_warped_stem_top.png (100%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/textures/twisting_vines.png (100%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/textures/twisting_vines_plant.png (100%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/textures/warped_hyphae.png (100%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/textures/warped_hyphae_side.png (100%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/textures/warped_hyphae_wood.png (100%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/textures/warped_hyphae_wood_2nd.png (100%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/textures/warped_nylium.png (100%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/textures/warped_nylium_side.png (100%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/textures/warped_roots.png (100%) rename mods/ITEMS/{mcl_mushroom => mcl_crimson}/textures/warped_wart_block.png (100%) diff --git a/mods/ITEMS/mcl_mushroom/init.lua b/mods/ITEMS/mcl_crimson/init.lua similarity index 81% rename from mods/ITEMS/mcl_mushroom/init.lua rename to mods/ITEMS/mcl_crimson/init.lua index c63bede52..567bae5a4 100644 --- a/mods/ITEMS/mcl_mushroom/init.lua +++ b/mods/ITEMS/mcl_crimson/init.lua @@ -6,7 +6,7 @@ local S = minetest.get_translator("mcl_mushroom") -- WARNING: The most comments are in german. Please Translate with an translater if you don't speak good german -minetest.register_node("mcl_mushroom:warped_fungus", { +minetest.register_node("mcl_crimson:warped_fungus", { description = S("Warped Fungus Mushroom"), drawtype = "plantlike", tiles = { "farming_warped_fungus.png" }, @@ -26,7 +26,7 @@ minetest.register_node("mcl_mushroom:warped_fungus", { on_rightclick = function(pos, node, pointed_thing, player, itemstack) if pointed_thing:get_wielded_item():get_name() == "mcl_dye:white" then local nodepos = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) - if nodepos.name == "mcl_mushroom:warped_nylium" or nodepos.name == "mcl_nether:netherrack" then + if nodepos.name == "mcl_crimson:warped_nylium" or nodepos.name == "mcl_nether:netherrack" then local random = math.random(1, 5) if random == 1 then generate_warped_tree(pos) @@ -38,7 +38,7 @@ minetest.register_node("mcl_mushroom:warped_fungus", { stack_max = 64, }) -minetest.register_node("mcl_mushroom:twisting_vines", { +minetest.register_node("mcl_crimson:twisting_vines", { description = S("Twisting Vines"), drawtype = "plantlike", tiles = { "twisting_vines_plant.png" }, @@ -56,7 +56,7 @@ minetest.register_node("mcl_mushroom:twisting_vines", { node_placement_prediction = "", on_rightclick = function(pos, node, pointed_thing, itemstack) - if pointed_thing:get_wielded_item():get_name() == "mcl_mushroom:twisting_vines" then + if pointed_thing:get_wielded_item():get_name() == "mcl_crimson:twisting_vines" then itemstack:take_item() grow_twisting_vines(pos, 1) elseif pointed_thing:get_wielded_item():get_name() == "mcl_dye:white" then @@ -67,20 +67,20 @@ minetest.register_node("mcl_mushroom:twisting_vines", { drop = { max_items = 1, items = { - {items = {"mcl_mushroom:twisting_vines"}, rarity = 3}, + {items = {"mcl_crimson:twisting_vines"}, rarity = 3}, } }, _mcl_shears_drop = true, _mcl_silk_touch_drop = true, - _mcl_fortune_drop = { items = {{items = {"mcl_mushroom:twisting_vines"}, rarity = 3},}, - items = {{items = {"mcl_mushroom:twisting_vines"}, rarity = 1.8181818181818181},}, - "mcl_mushroom:twisting_vines", - "mcl_mushroom:twisting_vines"}, + _mcl_fortune_drop = { items = {{items = {"mcl_crimson:twisting_vines"}, rarity = 3},}, + items = {{items = {"mcl_crimson:twisting_vines"}, rarity = 1.8181818181818181},}, + "mcl_crimson:twisting_vines", + "mcl_crimson:twisting_vines"}, _mcl_blast_resistance = 0, stack_max = 64, }) -minetest.register_node("mcl_mushroom:nether_sprouts", { +minetest.register_node("mcl_crimson:nether_sprouts", { description = S("Nether Sprouts"), drawtype = "plantlike", tiles = { "nether_sprouts.png" }, @@ -102,7 +102,7 @@ minetest.register_node("mcl_mushroom:nether_sprouts", { stack_max = 64, }) -minetest.register_node("mcl_mushroom:warped_roots", { +minetest.register_node("mcl_crimson:warped_roots", { description = S("Warped Roots"), drawtype = "plantlike", tiles = { "warped_roots.png" }, @@ -122,7 +122,7 @@ minetest.register_node("mcl_mushroom:warped_roots", { stack_max = 64, }) -minetest.register_node("mcl_mushroom:warped_wart_block", { +minetest.register_node("mcl_crimson:warped_wart_block", { description = S("Warped Wart Block"), tiles = {"warped_wart_block.png"}, groups = {handy=1,hoe=7,swordy=1, deco_block=1, }, @@ -130,7 +130,7 @@ minetest.register_node("mcl_mushroom:warped_wart_block", { _mcl_hardness = 2, }) -minetest.register_node("mcl_mushroom:shroomlight", { +minetest.register_node("mcl_crimson:shroomlight", { description = S("Shroomlight"), tiles = {"shroomlight.png"}, groups = {handy=1,hoe=7,swordy=1, leafdecay=1, leafdecay_distance=1, leaves=1, deco_block=1, }, @@ -140,7 +140,7 @@ minetest.register_node("mcl_mushroom:shroomlight", { light_source = 14, }) -minetest.register_node("mcl_mushroom:warped_hyphae", { +minetest.register_node("mcl_crimson:warped_hyphae", { description = S("Warped Hyphae"), _doc_items_longdesc = S("The stem of a warped hyphae"), _doc_items_hidden = false, @@ -160,10 +160,10 @@ minetest.register_node("mcl_mushroom:warped_hyphae", { _mcl_blast_resistance = 2, stack_max = 64, _mcl_hardness = 2, - _mcl_stripped_variant = "mcl_mushroom:stripped_warped_hyphae", + _mcl_stripped_variant = "mcl_crimson:stripped_warped_hyphae", }) -minetest.register_node("mcl_mushroom:warped_nylium", { +minetest.register_node("mcl_crimson:warped_nylium", { description = S("Warped Nylium"), tiles = {"warped_nylium.png", "mcl_nether_netherrack.png", @@ -182,7 +182,7 @@ minetest.register_node("mcl_mushroom:warped_nylium", { _mcl_silk_touch_drop = true, }) -minetest.register_node("mcl_mushroom:warped_checknode", { +minetest.register_node("mcl_crimson:warped_checknode", { description = S("Warped Checknode - only to check!"), tiles = {"mcl_nether_netherrack.png", "mcl_nether_netherrack.png", @@ -202,7 +202,7 @@ minetest.register_node("mcl_mushroom:warped_checknode", { --Stem bark, stripped stem and bark -minetest.register_node("mcl_mushroom:warped_hyphae_bark", { +minetest.register_node("mcl_crimson:warped_hyphae_bark", { description = S("Warped Hyphae Bark"), _doc_items_longdesc = S("This is a decorative block surrounded by the bark of an hyphae."), tiles = {"warped_hyphae_side.png"}, @@ -215,18 +215,18 @@ minetest.register_node("mcl_mushroom:warped_hyphae_bark", { on_rotate = on_rotate, _mcl_blast_resistance = 2, _mcl_hardness = 2, - _mcl_stripped_variant = "mcl_mushroom:stripped_warped_hyphae_bark", + _mcl_stripped_variant = "mcl_crimson:stripped_warped_hyphae_bark", }) minetest.register_craft({ - output = "mcl_mushroom:warped_hyphae_bark 3", + output = "mcl_crimson:warped_hyphae_bark 3", recipe = { - { "mcl_mushroom:warped_hyphae", "mcl_mushroom:warped_hyphae" }, - { "mcl_mushroom:warped_hyphae", "mcl_mushroom:warped_hyphae" }, + { "mcl_crimson:warped_hyphae", "mcl_crimson:warped_hyphae" }, + { "mcl_crimson:warped_hyphae", "mcl_crimson:warped_hyphae" }, } }) -minetest.register_node("mcl_mushroom:stripped_warped_hyphae", { +minetest.register_node("mcl_crimson:stripped_warped_hyphae", { description = description_stripped_trunk, _doc_items_longdesc = longdesc, _doc_items_hidden = false, @@ -241,7 +241,7 @@ minetest.register_node("mcl_mushroom:stripped_warped_hyphae", { _mcl_hardness = 2, }) -minetest.register_node("mcl_mushroom:stripped_warped_hyphae_bark", { +minetest.register_node("mcl_crimson:stripped_warped_hyphae_bark", { description = description_stripped_bark, _doc_items_longdesc = longdesc_wood, tiles = {tile_stripped_bark}, @@ -257,16 +257,16 @@ minetest.register_node("mcl_mushroom:stripped_warped_hyphae_bark", { }) minetest.register_craft({ - output = "mcl_mushroom:stripped_warped_hyphae_bark 3", + output = "mcl_crimson:stripped_warped_hyphae_bark 3", recipe = { - { "mcl_mushroom:stripped_warped_hyphae", "mcl_mushroom:stripped_warped_hyphae" }, - { "mcl_mushroom:stripped_warped_hyphae", "mcl_mushroom:stripped_warped_hyphae" }, + { "mcl_crimson:stripped_warped_hyphae", "mcl_crimson:stripped_warped_hyphae" }, + { "mcl_crimson:stripped_warped_hyphae", "mcl_crimson:stripped_warped_hyphae" }, } }) --Wood -minetest.register_node("mcl_mushroom:warped_hyphae_wood", { +minetest.register_node("mcl_crimson:warped_hyphae_wood", { description = S("Warped Hyphae Wood"), tiles = {"warped_hyphae_wood.png"}, groups = {handy=5,axey=1, flammable=3,wood=1,building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=20}, @@ -275,31 +275,31 @@ minetest.register_node("mcl_mushroom:warped_hyphae_wood", { _mcl_hardness = 2, }) -mcl_stairs.register_stair_and_slab_simple("warped_hyphae_wood", "mcl_mushroom:warped_hyphae_wood", S("Warped Stair"), S("Warped Slab"), S("Double Warped Slab")) +mcl_stairs.register_stair_and_slab_simple("warped_hyphae_wood", "mcl_crimson:warped_hyphae_wood", S("Warped Stair"), S("Warped Slab"), S("Double Warped Slab")) minetest.register_craft({ - output = "mcl_mushroom:warped_hyphae_wood 4", + output = "mcl_crimson:warped_hyphae_wood 4", recipe = { - {"mcl_mushroom:warped_hyphae"}, + {"mcl_crimson:warped_hyphae"}, } }) minetest.register_craft({ - output = "mcl_mushroom:warped_nyliumd 2", + output = "mcl_crimson:warped_nyliumd 2", recipe = { - {"mcl_mushroom:warped_wart_block"}, + {"mcl_crimson:warped_wart_block"}, {"mcl_nether:netherrack"}, } }) minetest.register_abm({ - label = "mcl_mushroom:warped_fungus", - nodenames = {"mcl_mushroom:warped_fungus"}, + label = "mcl_crimson:warped_fungus", + nodenames = {"mcl_crimson:warped_fungus"}, interval = 11, chance = 128, action = function(pos) local nodepos = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) - if nodepos.name == "mcl_mushroom:warped_nylium" or nodepos.name == "mcl_nether:netherrack" then + if nodepos.name == "mcl_crimson:warped_nylium" or nodepos.name == "mcl_nether:netherrack" then if pos.y < -28400 then generate_warped_tree(pos) end @@ -308,17 +308,17 @@ minetest.register_abm({ }) minetest.register_abm({ - label = "mcl_mushroom:warped_checknode", - nodenames = {"mcl_mushroom:warped_checknode"}, + label = "mcl_crimson:warped_checknode", + nodenames = {"mcl_crimson:warped_checknode"}, interval = 1, chance = 1, action = function(pos) local nodepos = minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}) if nodepos.name == "air" then - minetest.swap_node({ x = pos.x, y = pos.y, z = pos.z }, { name = "mcl_mushroom:warped_nylium" }) + minetest.swap_node({ x = pos.x, y = pos.y, z = pos.z }, { name = "mcl_crimson:warped_nylium" }) local randomg = math.random(1, 40) if randomg == 2 then - minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_mushroom:warped_fungus" }) + minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_crimson:warped_fungus" }) elseif randomg == 7 then local pos1 = { x = pos.x, y = pos.y + 1, z = pos.z } generate_warped_tree(pos1) @@ -331,7 +331,7 @@ minetest.register_abm({ mobs:spawn({ name = "mobs_mc:enderman", - nodes = "mcl_mushroom:warped_nylium", + nodes = "mcl_crimson:warped_nylium", max_light = 15, min_light = 0, chance = 300, @@ -341,7 +341,7 @@ mobs:spawn({ -minetest.register_node("mcl_mushroom:crimson_fungus", { +minetest.register_node("mcl_crimson:crimson_fungus", { description = S("Crimson Fungus Mushroom"), drawtype = "plantlike", tiles = { "farming_crimson_fungus.png" }, @@ -361,7 +361,7 @@ minetest.register_node("mcl_mushroom:crimson_fungus", { on_rightclick = function(pos, node, pointed_thing, player) if pointed_thing:get_wielded_item():get_name() == "mcl_dye:white" then local nodepos = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) - if nodepos.name == "mcl_mushroom:crimson_nylium" or nodepos.name == "mcl_nether:netherrack" then + if nodepos.name == "mcl_crimson:crimson_nylium" or nodepos.name == "mcl_nether:netherrack" then local random = math.random(1, 5) if random == 1 then generate_crimson_tree(pos) @@ -374,7 +374,7 @@ minetest.register_node("mcl_mushroom:crimson_fungus", { stack_max = 64, }) -minetest.register_node("mcl_mushroom:crimson_roots", { +minetest.register_node("mcl_crimson:crimson_roots", { description = S("Crimson Roots"), drawtype = "plantlike", tiles = { "crimson_roots.png" }, @@ -394,7 +394,7 @@ minetest.register_node("mcl_mushroom:crimson_roots", { stack_max = 64, }) -minetest.register_node("mcl_mushroom:crimson_hyphae", { +minetest.register_node("mcl_crimson:crimson_hyphae", { description = S("Crimson Hyphae"), _doc_items_longdesc = S("The stem of a crimson hyphae"), _doc_items_hidden = false, @@ -419,7 +419,7 @@ minetest.register_node("mcl_mushroom:crimson_hyphae", { --Stem bark, stripped stem and bark -minetest.register_node("mcl_mushroom:crimson_hyphae_bark", { +minetest.register_node("mcl_crimson:crimson_hyphae_bark", { description = S("Crimson Hyphae Bark"), _doc_items_longdesc = S("This is a decorative block surrounded by the bark of an hyphae."), tiles = {"crimson_hyphae_side.png"}, @@ -432,18 +432,18 @@ minetest.register_node("mcl_mushroom:crimson_hyphae_bark", { on_rotate = on_rotate, _mcl_blast_resistance = 2, _mcl_hardness = 2, - _mcl_stripped_variant = "mcl_mushroom:stripped_crimson_hyphae_bark", + _mcl_stripped_variant = "mcl_crimson:stripped_crimson_hyphae_bark", }) minetest.register_craft({ - output = "mcl_mushroom:crimson_hyphae_bark 3", + output = "mcl_crimson:crimson_hyphae_bark 3", recipe = { - { "mcl_mushroom:crimson_hyphae", "mcl_mushroom:crimson_hyphae" }, - { "mcl_mushroom:crimson_hyphae", "mcl_mushroom:crimson_hyphae" }, + { "mcl_crimson:crimson_hyphae", "mcl_crimson:crimson_hyphae" }, + { "mcl_crimson:crimson_hyphae", "mcl_crimson:crimson_hyphae" }, } }) -minetest.register_node("mcl_mushroom:stripped_crimson_hyphae", { +minetest.register_node("mcl_crimson:stripped_crimson_hyphae", { description = S("Stripped Crimson Hyphae"), _doc_items_longdesc = S("The stripped stem of a crimson hyphae"), _doc_items_hidden = false, @@ -458,7 +458,7 @@ minetest.register_node("mcl_mushroom:stripped_crimson_hyphae", { _mcl_hardness = 2, }) -minetest.register_node("mcl_mushroom:stripped_crimson_hyphae_bark", { +minetest.register_node("mcl_crimson:stripped_crimson_hyphae_bark", { description = S("Stripped Crimson Hyphae Bark"), _doc_items_longdesc = S("The stripped wood of a crimson hyphae"), tiles = {"stripped_crimson_stem_side.png"}, @@ -474,16 +474,16 @@ minetest.register_node("mcl_mushroom:stripped_crimson_hyphae_bark", { }) minetest.register_craft({ - output = "mcl_mushroom:stripped_crimson_hyphae_bark 3", + output = "mcl_crimson:stripped_crimson_hyphae_bark 3", recipe = { - { "mcl_mushroom:stripped_crimson_hyphae", "mcl_mushroom:stripped_crimson_hyphae" }, - { "mcl_mushroom:stripped_crimson_hyphae", "mcl_mushroom:stripped_crimson_hyphae" }, + { "mcl_crimson:stripped_crimson_hyphae", "mcl_crimson:stripped_crimson_hyphae" }, + { "mcl_crimson:stripped_crimson_hyphae", "mcl_crimson:stripped_crimson_hyphae" }, } }) --Wood -minetest.register_node("mcl_mushroom:crimson_hyphae_wood", { +minetest.register_node("mcl_crimson:crimson_hyphae_wood", { description = S("Crimson Hyphae Wood"), tiles = {"crimson_hyphae_wood.png"}, groups = {handy=5,axey=1, wood=1,building_block=1, material_wood=1,}, @@ -492,7 +492,7 @@ minetest.register_node("mcl_mushroom:crimson_hyphae_wood", { _mcl_hardness = 2, }) -minetest.register_node("mcl_mushroom:crimson_nylium", { +minetest.register_node("mcl_crimson:crimson_nylium", { description = S("Crimson Nylium"), tiles = {"crimson_nylium.png", "mcl_nether_netherrack.png", @@ -511,7 +511,7 @@ minetest.register_node("mcl_mushroom:crimson_nylium", { _mcl_silk_touch_drop = true, }) -minetest.register_node("mcl_mushroom:crimson_checknode", { +minetest.register_node("mcl_crimson:crimson_checknode", { description = S("Crimson Checknode - only to check!"), tiles = {"mcl_nether_netherrack.png", "mcl_nether_netherrack.png", @@ -530,30 +530,30 @@ minetest.register_node("mcl_mushroom:crimson_checknode", { }) minetest.register_craft({ - output = "mcl_mushroom:crimson_hyphae_wood 4", + output = "mcl_crimson:crimson_hyphae_wood 4", recipe = { - {"mcl_mushroom:crimson_hyphae"}, + {"mcl_crimson:crimson_hyphae"}, } }) minetest.register_craft({ - output = "mcl_mushroom:crimson_nyliumd 2", + output = "mcl_crimson:crimson_nyliumd 2", recipe = { {"mcl_nether:nether_wart"}, {"mcl_nether:netherrack"}, } }) -mcl_stairs.register_stair_and_slab_simple("crimson_hyphae_wood", "mcl_mushroom:crimson_hyphae_wood", "Crimson Stair", "Crimson Slab", "Double Crimson Slab") +mcl_stairs.register_stair_and_slab_simple("crimson_hyphae_wood", "mcl_crimson:crimson_hyphae_wood", "Crimson Stair", "Crimson Slab", "Double Crimson Slab") minetest.register_abm({ - label = "mcl_mushroom:crimson_fungus", - nodenames = {"mcl_mushroom:crimson_fungus"}, + label = "mcl_crimson:crimson_fungus", + nodenames = {"mcl_crimson:crimson_fungus"}, interval = 11, chance = 128, action = function(pos) local nodepos = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) - if nodepos.name == "mcl_mushroom:crimson_nylium" or nodepos.name == "mcl_nether:netherrack" then + if nodepos.name == "mcl_crimson:crimson_nylium" or nodepos.name == "mcl_nether:netherrack" then if pos.y < -28400 then generate_crimson_tree(pos) end @@ -562,24 +562,24 @@ minetest.register_abm({ }) minetest.register_abm({ - label = "mcl_mushroom:crimson_checknode", - nodenames = {"mcl_mushroom:crimson_checknode"}, + label = "mcl_crimson:crimson_checknode", + nodenames = {"mcl_crimson:crimson_checknode"}, interval = 1, chance = 1, action = function(pos) local nodepos = minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}) if nodepos.name == "air" then - minetest.swap_node({ x = pos.x, y = pos.y, z = pos.z }, { name = "mcl_mushroom:crimson_nylium" }) + minetest.swap_node({ x = pos.x, y = pos.y, z = pos.z }, { name = "mcl_crimson:crimson_nylium" }) local randomg = math.random(1, 400) if randomg <= 10 then - minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_mushroom:crimson_fungus" }) + minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_crimson:crimson_fungus" }) elseif randomg > 10 and randomg <= 25 then local pos1 = { x = pos.x, y = pos.y + 1, z = pos.z } generate_crimson_tree(pos1) elseif randomg > 25 and randomg <= 30 then - minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_mushroom:warped_fungus" }) + minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_crimson:warped_fungus" }) elseif randomg > 30 and randomg <= 130 then - minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_mushroom:crimson_roots" }) + minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_crimson:crimson_roots" }) end else minetest.swap_node({ x = pos.x, y = pos.y, z = pos.z }, { name = "mcl_nether:netherrack" }) @@ -613,12 +613,12 @@ function generate_warped_tree(pos) if not (minetest.get_node({x = pos.x, y = pos.y + 7, z = pos.z}).name == "air") then breakgrow = true end -- Holz - if not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "air") and not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "mcl_mushroom:warped_fungus") then breakgrow = true end + if not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "air") and not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "mcl_crimson:warped_fungus") then breakgrow = true end for y = pos.y + 1, pos.y + 4 do if not (minetest.get_node({x = pos.x, y = y, z = pos.z}).name == "air") then breakgrow = true end print(minetest.get_node({x = pos.x, y = y, z = pos.z}).name) end - if not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "air") and not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "mcl_mushroom:warped_fungus") then breakgrow2 = true end + if not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "air") and not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "mcl_crimson:warped_fungus") then breakgrow2 = true end print(tostring(breakgrow)) if breakgrow == false then -- Warzen @@ -626,7 +626,7 @@ function generate_warped_tree(pos) for x = pos.x - 2,pos.x + 2 do for y = pos.y + 3, pos.y + 4 do for z = pos.z - 2, pos.z + 2 do - minetest.set_node({x = x, y = y, z = z}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = x, y = y, z = z}, { name = "mcl_crimson:warped_wart_block" }) end end end @@ -635,34 +635,34 @@ function generate_warped_tree(pos) for x = pos.x - 1,pos.x + 1 do for y = pos.y + 5, pos.y + 6 do for z = pos.z - 1, pos.z + 1 do - minetest.set_node({x = x, y = y, z = z}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = x, y = y, z = z}, { name = "mcl_crimson:warped_wart_block" }) end end end -- fünfte Etage - minetest.set_node({x = pos.x, y = pos.y + 7, z = pos.z}, { name = "mcl_mushroom:warped_wart_block" }) + minetest.set_node({x = pos.x, y = pos.y + 7, z = pos.z}, { name = "mcl_crimson:warped_wart_block" }) -- Pilzlich local randomgenerate = math.random(1, 2) if randomgenerate == 1 then local randomx = math.random(-2, 2) local randomz = math.random(-2, 2) - minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_mushroom:shroomlight" }) + minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_crimson:shroomlight" }) end local randomgenerate = math.random(1, 8) if randomgenerate == 4 then local randomx = math.random(-2, 2) local randomz = math.random(-2, 2) - minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_mushroom:shroomlight" }) + minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_crimson:shroomlight" }) end -- Holz for y = pos.y, pos.y + 4 do - minetest.set_node({x = pos.x, y = y, z = pos.z}, { name = "mcl_mushroom:warped_hyphae" }) + minetest.set_node({x = pos.x, y = y, z = pos.z}, { name = "mcl_crimson:warped_hyphae" }) --print("Placed at " .. x .. " " .. y .. " " .. z) end else - if breakgrow2 == false then minetest.set_node(pos,{ name = "mcl_mushroom:warped_fungus" }) end + if breakgrow2 == false then minetest.set_node(pos,{ name = "mcl_crimson:warped_fungus" }) end end end @@ -692,12 +692,12 @@ function generate_crimson_tree(pos) if not (minetest.get_node({x = pos.x, y = pos.y + 7, z = pos.z}).name == "air") then breakgrow = true end -- Holz - if not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "air") and not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "mcl_mushroom:crimson_fungus") then breakgrow = true end + if not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "air") and not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "mcl_crimson:crimson_fungus") then breakgrow = true end for y = pos.y + 1, pos.y + 4 do if not (minetest.get_node({x = pos.x, y = y, z = pos.z}).name == "air") then breakgrow = true end print(minetest.get_node({x = pos.x, y = y, z = pos.z}).name) end - if not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "air") and not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "mcl_mushroom:crimson_fungus") then breakgrow2 = true end + if not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "air") and not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "mcl_crimson:crimson_fungus") then breakgrow2 = true end print(tostring(breakgrow)) if breakgrow == false then -- Warzen @@ -727,21 +727,21 @@ function generate_crimson_tree(pos) if randomgenerate == 1 then local randomx = math.random(-2, 2) local randomz = math.random(-2, 2) - minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_mushroom:shroomlight" }) + minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_crimson:shroomlight" }) end local randomgenerate = math.random(1, 8) if randomgenerate == 4 then local randomx = math.random(-2, 2) local randomz = math.random(-2, 2) - minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_mushroom:shroomlight" }) + minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_crimson:shroomlight" }) end -- Holz for y = pos.y, pos.y + 4 do - minetest.set_node({x = pos.x, y = y, z = pos.z}, { name = "mcl_mushroom:crimson_hyphae" }) + minetest.set_node({x = pos.x, y = y, z = pos.z}, { name = "mcl_crimson:crimson_hyphae" }) --print("Placed at " .. x .. " " .. y .. " " .. z) end else - if breakgrow2 == false then minetest.set_node(pos,{ name = "mcl_mushroom:crimson_fungus" }) end + if breakgrow2 == false then minetest.set_node(pos,{ name = "mcl_crimson:crimson_fungus" }) end end end @@ -755,7 +755,7 @@ minetest.register_biome({ name = "WarpedForest", node_filler = "mcl_nether:netherrack", node_stone = "mcl_nether:netherrack", - node_top = "mcl_mushroom:warped_nylium", + node_top = "mcl_crimson:warped_nylium", node_water = "air", node_river_water = "air", y_min = -29065, @@ -767,7 +767,7 @@ minetest.register_biome({ }) minetest.register_decoration({ deco_type = "simple", - place_on = {"mcl_mushroom:warped_nylium"}, + place_on = {"mcl_crimson:warped_nylium"}, sidelen = 16, noise_params = { offset = 0.01, @@ -780,13 +780,13 @@ minetest.register_decoration({ biomes = {"WarpedForest"}, y_min = -29065, y_max = -28940 + 80, - decoration = "mcl_mushroom:warped_fungus", + decoration = "mcl_crimson:warped_fungus", }) ]] --[[ No Ore gen for now minetest.register_ore({ ore_type = "sheet", - ore = "mcl_mushroom:warped_checknode", + ore = "mcl_crimson:warped_checknode", -- Note: Stone is included only for v6 mapgen support. Netherrack is not generated naturally -- in v6, but instead set with the on_generated function in mcl_mapgen_core. wherein = {"mcl_nether:netherrack", "mcl_core:stone"}, @@ -807,7 +807,7 @@ minetest.register_ore({ minetest.register_ore({ ore_type = "sheet", - ore = "mcl_mushroom:crimson_checknode", + ore = "mcl_crimson:crimson_checknode", -- Note: Stone is included only for v6 mapgen support. Netherrack is not generated naturally -- in v6, but instead set with the on_generated function in mcl_mapgen_core. wherein = {"mcl_nether:netherrack", "mcl_core:stone"}, @@ -829,23 +829,23 @@ minetest.register_ore({ minetest.register_decoration({ deco_type = "simple", - place_on = {"mcl_mushroom:warped_nylium"}, + place_on = {"mcl_crimson:warped_nylium"}, sidelen = 16, fill_ratio = 0.1, biomes = {"Nether"}, y_max = -28940, y_min = -29065, - decoration = "mcl_mushroom:warped_fungus", + decoration = "mcl_crimson:warped_fungus", }) minetest.register_decoration({ deco_type = "simple", - place_on = {"mcl_mushroom:crimson_nylium"}, + place_on = {"mcl_crimson:crimson_nylium"}, sidelen = 16, fill_ratio = 0.1, biomes = {"Nether"}, y_max = -28940, y_min = -29065, - decoration = "mcl_mushroom:crimson_fungus", + decoration = "mcl_crimson:crimson_fungus", }) diff --git a/mods/ITEMS/mcl_mushroom/locale/mcl_mushroom.fr.tr b/mods/ITEMS/mcl_crimson/locale/mcl_mushroom.fr.tr similarity index 100% rename from mods/ITEMS/mcl_mushroom/locale/mcl_mushroom.fr.tr rename to mods/ITEMS/mcl_crimson/locale/mcl_mushroom.fr.tr diff --git a/mods/ITEMS/mcl_mushroom/locale/mcl_mushrooms.de.tr b/mods/ITEMS/mcl_crimson/locale/mcl_mushrooms.de.tr similarity index 100% rename from mods/ITEMS/mcl_mushroom/locale/mcl_mushrooms.de.tr rename to mods/ITEMS/mcl_crimson/locale/mcl_mushrooms.de.tr diff --git a/mods/ITEMS/mcl_mushroom/locale/template.txt b/mods/ITEMS/mcl_crimson/locale/template.txt similarity index 100% rename from mods/ITEMS/mcl_mushroom/locale/template.txt rename to mods/ITEMS/mcl_crimson/locale/template.txt diff --git a/mods/ITEMS/mcl_mushroom/mod.conf b/mods/ITEMS/mcl_crimson/mod.conf similarity index 60% rename from mods/ITEMS/mcl_mushroom/mod.conf rename to mods/ITEMS/mcl_crimson/mod.conf index 46f65179c..fa2afa590 100644 --- a/mods/ITEMS/mcl_mushroom/mod.conf +++ b/mods/ITEMS/mcl_crimson/mod.conf @@ -1,2 +1,2 @@ depends = mcl_stairs, mobs_mc -name = mcl_mushroom +name = mcl_crimson diff --git a/mods/ITEMS/mcl_mushroom/textures/crimson_hyphae.png b/mods/ITEMS/mcl_crimson/textures/crimson_hyphae.png similarity index 100% rename from mods/ITEMS/mcl_mushroom/textures/crimson_hyphae.png rename to mods/ITEMS/mcl_crimson/textures/crimson_hyphae.png diff --git a/mods/ITEMS/mcl_mushroom/textures/crimson_hyphae_side.png b/mods/ITEMS/mcl_crimson/textures/crimson_hyphae_side.png similarity index 100% rename from mods/ITEMS/mcl_mushroom/textures/crimson_hyphae_side.png rename to mods/ITEMS/mcl_crimson/textures/crimson_hyphae_side.png diff --git a/mods/ITEMS/mcl_mushroom/textures/crimson_hyphae_wood.png b/mods/ITEMS/mcl_crimson/textures/crimson_hyphae_wood.png similarity index 100% rename from mods/ITEMS/mcl_mushroom/textures/crimson_hyphae_wood.png rename to mods/ITEMS/mcl_crimson/textures/crimson_hyphae_wood.png diff --git a/mods/ITEMS/mcl_mushroom/textures/crimson_nylium.png b/mods/ITEMS/mcl_crimson/textures/crimson_nylium.png similarity index 100% rename from mods/ITEMS/mcl_mushroom/textures/crimson_nylium.png rename to mods/ITEMS/mcl_crimson/textures/crimson_nylium.png diff --git a/mods/ITEMS/mcl_mushroom/textures/crimson_nylium_side.png b/mods/ITEMS/mcl_crimson/textures/crimson_nylium_side.png similarity index 100% rename from mods/ITEMS/mcl_mushroom/textures/crimson_nylium_side.png rename to mods/ITEMS/mcl_crimson/textures/crimson_nylium_side.png diff --git a/mods/ITEMS/mcl_mushroom/textures/crimson_roots.png b/mods/ITEMS/mcl_crimson/textures/crimson_roots.png similarity index 100% rename from mods/ITEMS/mcl_mushroom/textures/crimson_roots.png rename to mods/ITEMS/mcl_crimson/textures/crimson_roots.png diff --git a/mods/ITEMS/mcl_mushroom/textures/farming_crimson_fungus.png b/mods/ITEMS/mcl_crimson/textures/farming_crimson_fungus.png similarity index 100% rename from mods/ITEMS/mcl_mushroom/textures/farming_crimson_fungus.png rename to mods/ITEMS/mcl_crimson/textures/farming_crimson_fungus.png diff --git a/mods/ITEMS/mcl_mushroom/textures/farming_warped_fungus.png b/mods/ITEMS/mcl_crimson/textures/farming_warped_fungus.png similarity index 100% rename from mods/ITEMS/mcl_mushroom/textures/farming_warped_fungus.png rename to mods/ITEMS/mcl_crimson/textures/farming_warped_fungus.png diff --git a/mods/ITEMS/mcl_mushroom/textures/nether_sprouts.png b/mods/ITEMS/mcl_crimson/textures/nether_sprouts.png similarity index 100% rename from mods/ITEMS/mcl_mushroom/textures/nether_sprouts.png rename to mods/ITEMS/mcl_crimson/textures/nether_sprouts.png diff --git a/mods/ITEMS/mcl_mushroom/textures/nether_wart_block.png b/mods/ITEMS/mcl_crimson/textures/nether_wart_block.png similarity index 100% rename from mods/ITEMS/mcl_mushroom/textures/nether_wart_block.png rename to mods/ITEMS/mcl_crimson/textures/nether_wart_block.png diff --git a/mods/ITEMS/mcl_mushroom/textures/shroomlight.png b/mods/ITEMS/mcl_crimson/textures/shroomlight.png similarity index 100% rename from mods/ITEMS/mcl_mushroom/textures/shroomlight.png rename to mods/ITEMS/mcl_crimson/textures/shroomlight.png diff --git a/mods/ITEMS/mcl_mushroom/textures/stripped_crimson_stem_side.png b/mods/ITEMS/mcl_crimson/textures/stripped_crimson_stem_side.png similarity index 100% rename from mods/ITEMS/mcl_mushroom/textures/stripped_crimson_stem_side.png rename to mods/ITEMS/mcl_crimson/textures/stripped_crimson_stem_side.png diff --git a/mods/ITEMS/mcl_mushroom/textures/stripped_crimson_stem_top.png b/mods/ITEMS/mcl_crimson/textures/stripped_crimson_stem_top.png similarity index 100% rename from mods/ITEMS/mcl_mushroom/textures/stripped_crimson_stem_top.png rename to mods/ITEMS/mcl_crimson/textures/stripped_crimson_stem_top.png diff --git a/mods/ITEMS/mcl_mushroom/textures/stripped_warped_stem_side.png b/mods/ITEMS/mcl_crimson/textures/stripped_warped_stem_side.png similarity index 100% rename from mods/ITEMS/mcl_mushroom/textures/stripped_warped_stem_side.png rename to mods/ITEMS/mcl_crimson/textures/stripped_warped_stem_side.png diff --git a/mods/ITEMS/mcl_mushroom/textures/stripped_warped_stem_top.png b/mods/ITEMS/mcl_crimson/textures/stripped_warped_stem_top.png similarity index 100% rename from mods/ITEMS/mcl_mushroom/textures/stripped_warped_stem_top.png rename to mods/ITEMS/mcl_crimson/textures/stripped_warped_stem_top.png diff --git a/mods/ITEMS/mcl_mushroom/textures/twisting_vines.png b/mods/ITEMS/mcl_crimson/textures/twisting_vines.png similarity index 100% rename from mods/ITEMS/mcl_mushroom/textures/twisting_vines.png rename to mods/ITEMS/mcl_crimson/textures/twisting_vines.png diff --git a/mods/ITEMS/mcl_mushroom/textures/twisting_vines_plant.png b/mods/ITEMS/mcl_crimson/textures/twisting_vines_plant.png similarity index 100% rename from mods/ITEMS/mcl_mushroom/textures/twisting_vines_plant.png rename to mods/ITEMS/mcl_crimson/textures/twisting_vines_plant.png diff --git a/mods/ITEMS/mcl_mushroom/textures/warped_hyphae.png b/mods/ITEMS/mcl_crimson/textures/warped_hyphae.png similarity index 100% rename from mods/ITEMS/mcl_mushroom/textures/warped_hyphae.png rename to mods/ITEMS/mcl_crimson/textures/warped_hyphae.png diff --git a/mods/ITEMS/mcl_mushroom/textures/warped_hyphae_side.png b/mods/ITEMS/mcl_crimson/textures/warped_hyphae_side.png similarity index 100% rename from mods/ITEMS/mcl_mushroom/textures/warped_hyphae_side.png rename to mods/ITEMS/mcl_crimson/textures/warped_hyphae_side.png diff --git a/mods/ITEMS/mcl_mushroom/textures/warped_hyphae_wood.png b/mods/ITEMS/mcl_crimson/textures/warped_hyphae_wood.png similarity index 100% rename from mods/ITEMS/mcl_mushroom/textures/warped_hyphae_wood.png rename to mods/ITEMS/mcl_crimson/textures/warped_hyphae_wood.png diff --git a/mods/ITEMS/mcl_mushroom/textures/warped_hyphae_wood_2nd.png b/mods/ITEMS/mcl_crimson/textures/warped_hyphae_wood_2nd.png similarity index 100% rename from mods/ITEMS/mcl_mushroom/textures/warped_hyphae_wood_2nd.png rename to mods/ITEMS/mcl_crimson/textures/warped_hyphae_wood_2nd.png diff --git a/mods/ITEMS/mcl_mushroom/textures/warped_nylium.png b/mods/ITEMS/mcl_crimson/textures/warped_nylium.png similarity index 100% rename from mods/ITEMS/mcl_mushroom/textures/warped_nylium.png rename to mods/ITEMS/mcl_crimson/textures/warped_nylium.png diff --git a/mods/ITEMS/mcl_mushroom/textures/warped_nylium_side.png b/mods/ITEMS/mcl_crimson/textures/warped_nylium_side.png similarity index 100% rename from mods/ITEMS/mcl_mushroom/textures/warped_nylium_side.png rename to mods/ITEMS/mcl_crimson/textures/warped_nylium_side.png diff --git a/mods/ITEMS/mcl_mushroom/textures/warped_roots.png b/mods/ITEMS/mcl_crimson/textures/warped_roots.png similarity index 100% rename from mods/ITEMS/mcl_mushroom/textures/warped_roots.png rename to mods/ITEMS/mcl_crimson/textures/warped_roots.png diff --git a/mods/ITEMS/mcl_mushroom/textures/warped_wart_block.png b/mods/ITEMS/mcl_crimson/textures/warped_wart_block.png similarity index 100% rename from mods/ITEMS/mcl_mushroom/textures/warped_wart_block.png rename to mods/ITEMS/mcl_crimson/textures/warped_wart_block.png -- 2.40.1 From 7d653011fce368ab66121465e65205bea04dff4a Mon Sep 17 00:00:00 2001 From: cora Date: Wed, 4 May 2022 00:24:09 +0200 Subject: [PATCH 109/357] fix whitespace --- mods/ITEMS/mcl_crimson/init.lua | 842 ++++++++++++++++---------------- 1 file changed, 421 insertions(+), 421 deletions(-) diff --git a/mods/ITEMS/mcl_crimson/init.lua b/mods/ITEMS/mcl_crimson/init.lua index 567bae5a4..920665e39 100644 --- a/mods/ITEMS/mcl_crimson/init.lua +++ b/mods/ITEMS/mcl_crimson/init.lua @@ -7,7 +7,7 @@ local S = minetest.get_translator("mcl_mushroom") -- WARNING: The most comments are in german. Please Translate with an translater if you don't speak good german minetest.register_node("mcl_crimson:warped_fungus", { - description = S("Warped Fungus Mushroom"), + description = S("Warped Fungus Mushroom"), drawtype = "plantlike", tiles = { "farming_warped_fungus.png" }, inventory_image = "farming_warped_fungus.png", @@ -24,22 +24,22 @@ minetest.register_node("mcl_crimson:warped_fungus", { }, node_placement_prediction = "", on_rightclick = function(pos, node, pointed_thing, player, itemstack) - if pointed_thing:get_wielded_item():get_name() == "mcl_dye:white" then - local nodepos = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) - if nodepos.name == "mcl_crimson:warped_nylium" or nodepos.name == "mcl_nether:netherrack" then - local random = math.random(1, 5) - if random == 1 then - generate_warped_tree(pos) - end - end - end - end, + if pointed_thing:get_wielded_item():get_name() == "mcl_dye:white" then + local nodepos = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) + if nodepos.name == "mcl_crimson:warped_nylium" or nodepos.name == "mcl_nether:netherrack" then + local random = math.random(1, 5) + if random == 1 then + generate_warped_tree(pos) + end + end + end + end, _mcl_blast_resistance = 0, - stack_max = 64, + stack_max = 64, }) minetest.register_node("mcl_crimson:twisting_vines", { - description = S("Twisting Vines"), + description = S("Twisting Vines"), drawtype = "plantlike", tiles = { "twisting_vines_plant.png" }, inventory_image = "twisting_vines.png", @@ -57,11 +57,11 @@ minetest.register_node("mcl_crimson:twisting_vines", { on_rightclick = function(pos, node, pointed_thing, itemstack) if pointed_thing:get_wielded_item():get_name() == "mcl_crimson:twisting_vines" then - itemstack:take_item() - grow_twisting_vines(pos, 1) + itemstack:take_item() + grow_twisting_vines(pos, 1) elseif pointed_thing:get_wielded_item():get_name() == "mcl_dye:white" then - itemstack:take_item() - grow_twisting_vines(pos, math.random(1, 3)) + itemstack:take_item() + grow_twisting_vines(pos, math.random(1, 3)) end end, drop = { @@ -73,15 +73,15 @@ minetest.register_node("mcl_crimson:twisting_vines", { _mcl_shears_drop = true, _mcl_silk_touch_drop = true, _mcl_fortune_drop = { items = {{items = {"mcl_crimson:twisting_vines"}, rarity = 3},}, - items = {{items = {"mcl_crimson:twisting_vines"}, rarity = 1.8181818181818181},}, + items = {{items = {"mcl_crimson:twisting_vines"}, rarity = 1.8181818181818181},}, "mcl_crimson:twisting_vines", "mcl_crimson:twisting_vines"}, - _mcl_blast_resistance = 0, - stack_max = 64, + _mcl_blast_resistance = 0, + stack_max = 64, }) minetest.register_node("mcl_crimson:nether_sprouts", { - description = S("Nether Sprouts"), + description = S("Nether Sprouts"), drawtype = "plantlike", tiles = { "nether_sprouts.png" }, inventory_image = "nether_sprouts.png", @@ -98,12 +98,12 @@ minetest.register_node("mcl_crimson:nether_sprouts", { drop = "", _mcl_shears_drop = true, _mcl_silk_touch_drop = false, - _mcl_blast_resistance = 0, - stack_max = 64, + _mcl_blast_resistance = 0, + stack_max = 64, }) minetest.register_node("mcl_crimson:warped_roots", { - description = S("Warped Roots"), + description = S("Warped Roots"), drawtype = "plantlike", tiles = { "warped_roots.png" }, inventory_image = "warped_roots.png", @@ -118,26 +118,26 @@ minetest.register_node("mcl_crimson:warped_roots", { }, node_placement_prediction = "", _mcl_silk_touch_drop = false, - _mcl_blast_resistance = 0, - stack_max = 64, + _mcl_blast_resistance = 0, + stack_max = 64, }) minetest.register_node("mcl_crimson:warped_wart_block", { - description = S("Warped Wart Block"), - tiles = {"warped_wart_block.png"}, - groups = {handy=1,hoe=7,swordy=1, deco_block=1, }, - stack_max = 64, - _mcl_hardness = 2, + description = S("Warped Wart Block"), + tiles = {"warped_wart_block.png"}, + groups = {handy=1,hoe=7,swordy=1, deco_block=1, }, + stack_max = 64, + _mcl_hardness = 2, }) minetest.register_node("mcl_crimson:shroomlight", { - description = S("Shroomlight"), - tiles = {"shroomlight.png"}, - groups = {handy=1,hoe=7,swordy=1, leafdecay=1, leafdecay_distance=1, leaves=1, deco_block=1, }, - stack_max = 64, - _mcl_hardness = 2, - -- this is 15 in Minecraft - light_source = 14, + description = S("Shroomlight"), + tiles = {"shroomlight.png"}, + groups = {handy=1,hoe=7,swordy=1, leafdecay=1, leafdecay_distance=1, leaves=1, deco_block=1, }, + stack_max = 64, + _mcl_hardness = 2, + -- this is 15 in Minecraft + light_source = 14, }) minetest.register_node("mcl_crimson:warped_hyphae", { @@ -146,12 +146,12 @@ minetest.register_node("mcl_crimson:warped_hyphae", { _doc_items_hidden = false, tiles = { "warped_hyphae.png", - "warped_hyphae.png", - "warped_hyphae_side.png", - "warped_hyphae_side.png", - "warped_hyphae_side.png", - "warped_hyphae_side.png", - }, + "warped_hyphae.png", + "warped_hyphae_side.png", + "warped_hyphae_side.png", + "warped_hyphae_side.png", + "warped_hyphae_side.png", + }, paramtype2 = "facedir", on_place = mcl_util.rotate_axis, groups = {handy=1,axey=1, tree=1, building_block=1, material_wood=1}, @@ -164,40 +164,40 @@ minetest.register_node("mcl_crimson:warped_hyphae", { }) minetest.register_node("mcl_crimson:warped_nylium", { - description = S("Warped Nylium"), - tiles = {"warped_nylium.png", - "mcl_nether_netherrack.png", - "mcl_nether_netherrack.png^warped_nylium_side.png", - "mcl_nether_netherrack.png^warped_nylium_side.png", - "mcl_nether_netherrack.png^warped_nylium_side.png", - "mcl_nether_netherrack.png^warped_nylium_side.png", - }, - groups = {pickaxey=1, building_block=1, material_stone=1}, - paramtype2 = "facedir", - stack_max = 64, - _mcl_hardness = 0.4, - _mcl_blast_resistance = 0.4, - is_ground_content = true, - drop = "mcl_nether:netherrack", - _mcl_silk_touch_drop = true, + description = S("Warped Nylium"), + tiles = {"warped_nylium.png", + "mcl_nether_netherrack.png", + "mcl_nether_netherrack.png^warped_nylium_side.png", + "mcl_nether_netherrack.png^warped_nylium_side.png", + "mcl_nether_netherrack.png^warped_nylium_side.png", + "mcl_nether_netherrack.png^warped_nylium_side.png", + }, + groups = {pickaxey=1, building_block=1, material_stone=1}, + paramtype2 = "facedir", + stack_max = 64, + _mcl_hardness = 0.4, + _mcl_blast_resistance = 0.4, + is_ground_content = true, + drop = "mcl_nether:netherrack", + _mcl_silk_touch_drop = true, }) minetest.register_node("mcl_crimson:warped_checknode", { - description = S("Warped Checknode - only to check!"), - tiles = {"mcl_nether_netherrack.png", - "mcl_nether_netherrack.png", - "mcl_nether_netherrack.png", - "mcl_nether_netherrack.png", - "mcl_nether_netherrack.png", - "mcl_nether_netherrack.png", - }, - groups = {pickaxey=1, building_block=1, material_stone=1, not_in_creative_inventory=1}, - paramtype2 = "facedir", - stack_max = 64, - _mcl_hardness = 0.4, - _mcl_blast_resistance = 0.4, - is_ground_content = true, - drop = "mcl_nether:netherrack" + description = S("Warped Checknode - only to check!"), + tiles = {"mcl_nether_netherrack.png", + "mcl_nether_netherrack.png", + "mcl_nether_netherrack.png", + "mcl_nether_netherrack.png", + "mcl_nether_netherrack.png", + "mcl_nether_netherrack.png", + }, + groups = {pickaxey=1, building_block=1, material_stone=1, not_in_creative_inventory=1}, + paramtype2 = "facedir", + stack_max = 64, + _mcl_hardness = 0.4, + _mcl_blast_resistance = 0.4, + is_ground_content = true, + drop = "mcl_nether:netherrack" }) --Stem bark, stripped stem and bark @@ -267,29 +267,29 @@ minetest.register_craft({ --Wood minetest.register_node("mcl_crimson:warped_hyphae_wood", { - description = S("Warped Hyphae Wood"), - tiles = {"warped_hyphae_wood.png"}, - groups = {handy=5,axey=1, flammable=3,wood=1,building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=20}, - paramtype2 = "facedir", - stack_max = 64, - _mcl_hardness = 2, + description = S("Warped Hyphae Wood"), + tiles = {"warped_hyphae_wood.png"}, + groups = {handy=5,axey=1, flammable=3,wood=1,building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=20}, + paramtype2 = "facedir", + stack_max = 64, + _mcl_hardness = 2, }) mcl_stairs.register_stair_and_slab_simple("warped_hyphae_wood", "mcl_crimson:warped_hyphae_wood", S("Warped Stair"), S("Warped Slab"), S("Double Warped Slab")) minetest.register_craft({ - output = "mcl_crimson:warped_hyphae_wood 4", - recipe = { - {"mcl_crimson:warped_hyphae"}, - } + output = "mcl_crimson:warped_hyphae_wood 4", + recipe = { + {"mcl_crimson:warped_hyphae"}, + } }) minetest.register_craft({ - output = "mcl_crimson:warped_nyliumd 2", - recipe = { - {"mcl_crimson:warped_wart_block"}, - {"mcl_nether:netherrack"}, - } + output = "mcl_crimson:warped_nyliumd 2", + recipe = { + {"mcl_crimson:warped_wart_block"}, + {"mcl_nether:netherrack"}, + } }) minetest.register_abm({ @@ -298,13 +298,13 @@ minetest.register_abm({ interval = 11, chance = 128, action = function(pos) - local nodepos = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) - if nodepos.name == "mcl_crimson:warped_nylium" or nodepos.name == "mcl_nether:netherrack" then - if pos.y < -28400 then - generate_warped_tree(pos) - end - end - end + local nodepos = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) + if nodepos.name == "mcl_crimson:warped_nylium" or nodepos.name == "mcl_nether:netherrack" then + if pos.y < -28400 then + generate_warped_tree(pos) + end + end + end }) minetest.register_abm({ @@ -313,36 +313,36 @@ minetest.register_abm({ interval = 1, chance = 1, action = function(pos) - local nodepos = minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}) - if nodepos.name == "air" then - minetest.swap_node({ x = pos.x, y = pos.y, z = pos.z }, { name = "mcl_crimson:warped_nylium" }) - local randomg = math.random(1, 40) - if randomg == 2 then - minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_crimson:warped_fungus" }) - elseif randomg == 7 then - local pos1 = { x = pos.x, y = pos.y + 1, z = pos.z } - generate_warped_tree(pos1) - end - else - minetest.swap_node({ x = pos.x, y = pos.y, z = pos.z }, { name = "mcl_nether:netherrack" }) - end - end + local nodepos = minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}) + if nodepos.name == "air" then + minetest.swap_node({ x = pos.x, y = pos.y, z = pos.z }, { name = "mcl_crimson:warped_nylium" }) + local randomg = math.random(1, 40) + if randomg == 2 then + minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_crimson:warped_fungus" }) + elseif randomg == 7 then + local pos1 = { x = pos.x, y = pos.y + 1, z = pos.z } + generate_warped_tree(pos1) + end + else + minetest.swap_node({ x = pos.x, y = pos.y, z = pos.z }, { name = "mcl_nether:netherrack" }) + end + end }) mobs:spawn({ - name = "mobs_mc:enderman", - nodes = "mcl_crimson:warped_nylium", - max_light = 15, - min_light = 0, - chance = 300, - active_object_count = 20, - max_height = -28940, + name = "mobs_mc:enderman", + nodes = "mcl_crimson:warped_nylium", + max_light = 15, + min_light = 0, + chance = 300, + active_object_count = 20, + max_height = -28940, }) minetest.register_node("mcl_crimson:crimson_fungus", { - description = S("Crimson Fungus Mushroom"), + description = S("Crimson Fungus Mushroom"), drawtype = "plantlike", tiles = { "farming_crimson_fungus.png" }, inventory_image = "farming_crimson_fungus.png", @@ -359,23 +359,23 @@ minetest.register_node("mcl_crimson:crimson_fungus", { }, node_placement_prediction = "", on_rightclick = function(pos, node, pointed_thing, player) - if pointed_thing:get_wielded_item():get_name() == "mcl_dye:white" then - local nodepos = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) - if nodepos.name == "mcl_crimson:crimson_nylium" or nodepos.name == "mcl_nether:netherrack" then - local random = math.random(1, 5) - if random == 1 then - generate_crimson_tree(pos) - end - end - end - end, + if pointed_thing:get_wielded_item():get_name() == "mcl_dye:white" then + local nodepos = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) + if nodepos.name == "mcl_crimson:crimson_nylium" or nodepos.name == "mcl_nether:netherrack" then + local random = math.random(1, 5) + if random == 1 then + generate_crimson_tree(pos) + end + end + end + end, _mcl_blast_resistance = 0, - stack_max = 64, + stack_max = 64, }) minetest.register_node("mcl_crimson:crimson_roots", { - description = S("Crimson Roots"), + description = S("Crimson Roots"), drawtype = "plantlike", tiles = { "crimson_roots.png" }, inventory_image = "crimson_roots.png", @@ -390,8 +390,8 @@ minetest.register_node("mcl_crimson:crimson_roots", { }, node_placement_prediction = "", _mcl_silk_touch_drop = false, - _mcl_blast_resistance = 0, - stack_max = 64, + _mcl_blast_resistance = 0, + stack_max = 64, }) minetest.register_node("mcl_crimson:crimson_hyphae", { @@ -400,12 +400,12 @@ minetest.register_node("mcl_crimson:crimson_hyphae", { _doc_items_hidden = false, tiles = { "crimson_hyphae.png", - "crimson_hyphae.png", - "crimson_hyphae_side.png", - "crimson_hyphae_side.png", - "crimson_hyphae_side.png", - "crimson_hyphae_side.png", - }, + "crimson_hyphae.png", + "crimson_hyphae_side.png", + "crimson_hyphae_side.png", + "crimson_hyphae_side.png", + "crimson_hyphae_side.png", + }, paramtype2 = "facedir", on_place = mcl_util.rotate_axis, groups = {handy=1,axey=1, tree=1, building_block=1, material_wood=1}, @@ -459,7 +459,7 @@ minetest.register_node("mcl_crimson:stripped_crimson_hyphae", { }) minetest.register_node("mcl_crimson:stripped_crimson_hyphae_bark", { - description = S("Stripped Crimson Hyphae Bark"), + description = S("Stripped Crimson Hyphae Bark"), _doc_items_longdesc = S("The stripped wood of a crimson hyphae"), tiles = {"stripped_crimson_stem_side.png"}, paramtype2 = "facedir", @@ -484,64 +484,64 @@ minetest.register_craft({ --Wood minetest.register_node("mcl_crimson:crimson_hyphae_wood", { - description = S("Crimson Hyphae Wood"), - tiles = {"crimson_hyphae_wood.png"}, - groups = {handy=5,axey=1, wood=1,building_block=1, material_wood=1,}, - paramtype2 = "facedir", - stack_max = 64, - _mcl_hardness = 2, + description = S("Crimson Hyphae Wood"), + tiles = {"crimson_hyphae_wood.png"}, + groups = {handy=5,axey=1, wood=1,building_block=1, material_wood=1,}, + paramtype2 = "facedir", + stack_max = 64, + _mcl_hardness = 2, }) minetest.register_node("mcl_crimson:crimson_nylium", { - description = S("Crimson Nylium"), - tiles = {"crimson_nylium.png", - "mcl_nether_netherrack.png", - "mcl_nether_netherrack.png^crimson_nylium_side.png", - "mcl_nether_netherrack.png^crimson_nylium_side.png", - "mcl_nether_netherrack.png^crimson_nylium_side.png", - "mcl_nether_netherrack.png^crimson_nylium_side.png", - }, - groups = {pickaxey=1, building_block=1, material_stone=1}, - paramtype2 = "facedir", - stack_max = 64, - _mcl_hardness = 0.4, - _mcl_blast_resistance = 0.4, - is_ground_content = true, - drop = "mcl_nether:netherrack", - _mcl_silk_touch_drop = true, + description = S("Crimson Nylium"), + tiles = {"crimson_nylium.png", + "mcl_nether_netherrack.png", + "mcl_nether_netherrack.png^crimson_nylium_side.png", + "mcl_nether_netherrack.png^crimson_nylium_side.png", + "mcl_nether_netherrack.png^crimson_nylium_side.png", + "mcl_nether_netherrack.png^crimson_nylium_side.png", + }, + groups = {pickaxey=1, building_block=1, material_stone=1}, + paramtype2 = "facedir", + stack_max = 64, + _mcl_hardness = 0.4, + _mcl_blast_resistance = 0.4, + is_ground_content = true, + drop = "mcl_nether:netherrack", + _mcl_silk_touch_drop = true, }) minetest.register_node("mcl_crimson:crimson_checknode", { - description = S("Crimson Checknode - only to check!"), - tiles = {"mcl_nether_netherrack.png", - "mcl_nether_netherrack.png", - "mcl_nether_netherrack.png", - "mcl_nether_netherrack.png", - "mcl_nether_netherrack.png", - "mcl_nether_netherrack.png", - }, - groups = {pickaxey=1, building_block=1, material_stone=1, not_in_creative_inventory=1}, - paramtype2 = "facedir", - stack_max = 64, - _mcl_hardness = 0.4, - _mcl_blast_resistance = 0.4, - is_ground_content = true, - drop = "mcl_nether:netherrack" + description = S("Crimson Checknode - only to check!"), + tiles = {"mcl_nether_netherrack.png", + "mcl_nether_netherrack.png", + "mcl_nether_netherrack.png", + "mcl_nether_netherrack.png", + "mcl_nether_netherrack.png", + "mcl_nether_netherrack.png", + }, + groups = {pickaxey=1, building_block=1, material_stone=1, not_in_creative_inventory=1}, + paramtype2 = "facedir", + stack_max = 64, + _mcl_hardness = 0.4, + _mcl_blast_resistance = 0.4, + is_ground_content = true, + drop = "mcl_nether:netherrack" }) minetest.register_craft({ - output = "mcl_crimson:crimson_hyphae_wood 4", - recipe = { - {"mcl_crimson:crimson_hyphae"}, - } + output = "mcl_crimson:crimson_hyphae_wood 4", + recipe = { + {"mcl_crimson:crimson_hyphae"}, + } }) minetest.register_craft({ - output = "mcl_crimson:crimson_nyliumd 2", - recipe = { - {"mcl_nether:nether_wart"}, - {"mcl_nether:netherrack"}, - } + output = "mcl_crimson:crimson_nyliumd 2", + recipe = { + {"mcl_nether:nether_wart"}, + {"mcl_nether:netherrack"}, + } }) mcl_stairs.register_stair_and_slab_simple("crimson_hyphae_wood", "mcl_crimson:crimson_hyphae_wood", "Crimson Stair", "Crimson Slab", "Double Crimson Slab") @@ -552,13 +552,13 @@ minetest.register_abm({ interval = 11, chance = 128, action = function(pos) - local nodepos = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) - if nodepos.name == "mcl_crimson:crimson_nylium" or nodepos.name == "mcl_nether:netherrack" then - if pos.y < -28400 then - generate_crimson_tree(pos) - end - end - end + local nodepos = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) + if nodepos.name == "mcl_crimson:crimson_nylium" or nodepos.name == "mcl_nether:netherrack" then + if pos.y < -28400 then + generate_crimson_tree(pos) + end + end + end }) minetest.register_abm({ @@ -567,182 +567,182 @@ minetest.register_abm({ interval = 1, chance = 1, action = function(pos) - local nodepos = minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}) - if nodepos.name == "air" then - minetest.swap_node({ x = pos.x, y = pos.y, z = pos.z }, { name = "mcl_crimson:crimson_nylium" }) + local nodepos = minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}) + if nodepos.name == "air" then + minetest.swap_node({ x = pos.x, y = pos.y, z = pos.z }, { name = "mcl_crimson:crimson_nylium" }) local randomg = math.random(1, 400) - if randomg <= 10 then - minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_crimson:crimson_fungus" }) - elseif randomg > 10 and randomg <= 25 then - local pos1 = { x = pos.x, y = pos.y + 1, z = pos.z } - generate_crimson_tree(pos1) + if randomg <= 10 then + minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_crimson:crimson_fungus" }) + elseif randomg > 10 and randomg <= 25 then + local pos1 = { x = pos.x, y = pos.y + 1, z = pos.z } + generate_crimson_tree(pos1) elseif randomg > 25 and randomg <= 30 then - minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_crimson:warped_fungus" }) + minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_crimson:warped_fungus" }) elseif randomg > 30 and randomg <= 130 then - minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_crimson:crimson_roots" }) - end - else - minetest.swap_node({ x = pos.x, y = pos.y, z = pos.z }, { name = "mcl_nether:netherrack" }) - end - end + minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_crimson:crimson_roots" }) + end + else + minetest.swap_node({ x = pos.x, y = pos.y, z = pos.z }, { name = "mcl_nether:netherrack" }) + end + end }) function generate_warped_tree(pos) - breakgrow = false - breakgrow2 = false - -- Baumgenerator - -- erste und zweite Etage - for x = pos.x - 2,pos.x + 2 do - for y = pos.y + 3, pos.y + 4 do - for z = pos.z - 2, pos.z + 2 do - if not (minetest.get_node({x = x, y = y, z = z}).name == "air") then breakgrow = true end - end - end - end - - -- dritte und vierte Etage - for x = pos.x - 1,pos.x + 1 do - for y = pos.y + 5, pos.y + 6 do - for z = pos.z - 1, pos.z + 1 do - if not (minetest.get_node({x = x, y = y, z = z}).name == "air") then breakgrow = true end - end - end - end + breakgrow = false + breakgrow2 = false + -- Baumgenerator + -- erste und zweite Etage + for x = pos.x - 2,pos.x + 2 do + for y = pos.y + 3, pos.y + 4 do + for z = pos.z - 2, pos.z + 2 do + if not (minetest.get_node({x = x, y = y, z = z}).name == "air") then breakgrow = true end + end + end + end + + -- dritte und vierte Etage + for x = pos.x - 1,pos.x + 1 do + for y = pos.y + 5, pos.y + 6 do + for z = pos.z - 1, pos.z + 1 do + if not (minetest.get_node({x = x, y = y, z = z}).name == "air") then breakgrow = true end + end + end + end - -- fünfte Etage + -- fünfte Etage if not (minetest.get_node({x = pos.x, y = pos.y + 7, z = pos.z}).name == "air") then breakgrow = true end - -- Holz + -- Holz if not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "air") and not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "mcl_crimson:warped_fungus") then breakgrow = true end - for y = pos.y + 1, pos.y + 4 do - if not (minetest.get_node({x = pos.x, y = y, z = pos.z}).name == "air") then breakgrow = true end - print(minetest.get_node({x = pos.x, y = y, z = pos.z}).name) - end + for y = pos.y + 1, pos.y + 4 do + if not (minetest.get_node({x = pos.x, y = y, z = pos.z}).name == "air") then breakgrow = true end + print(minetest.get_node({x = pos.x, y = y, z = pos.z}).name) + end if not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "air") and not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "mcl_crimson:warped_fungus") then breakgrow2 = true end - print(tostring(breakgrow)) - if breakgrow == false then + print(tostring(breakgrow)) + if breakgrow == false then -- Warzen -- erste und zweite Etage - for x = pos.x - 2,pos.x + 2 do - for y = pos.y + 3, pos.y + 4 do - for z = pos.z - 2, pos.z + 2 do - minetest.set_node({x = x, y = y, z = z}, { name = "mcl_crimson:warped_wart_block" }) - end - end - end - - -- dritte und vierte Etage - for x = pos.x - 1,pos.x + 1 do - for y = pos.y + 5, pos.y + 6 do - for z = pos.z - 1, pos.z + 1 do - minetest.set_node({x = x, y = y, z = z}, { name = "mcl_crimson:warped_wart_block" }) - end - end - end + for x = pos.x - 2,pos.x + 2 do + for y = pos.y + 3, pos.y + 4 do + for z = pos.z - 2, pos.z + 2 do + minetest.set_node({x = x, y = y, z = z}, { name = "mcl_crimson:warped_wart_block" }) + end + end + end + + -- dritte und vierte Etage + for x = pos.x - 1,pos.x + 1 do + for y = pos.y + 5, pos.y + 6 do + for z = pos.z - 1, pos.z + 1 do + minetest.set_node({x = x, y = y, z = z}, { name = "mcl_crimson:warped_wart_block" }) + end + end + end - -- fünfte Etage - minetest.set_node({x = pos.x, y = pos.y + 7, z = pos.z}, { name = "mcl_crimson:warped_wart_block" }) + -- fünfte Etage + minetest.set_node({x = pos.x, y = pos.y + 7, z = pos.z}, { name = "mcl_crimson:warped_wart_block" }) - -- Pilzlich - local randomgenerate = math.random(1, 2) - if randomgenerate == 1 then - local randomx = math.random(-2, 2) - local randomz = math.random(-2, 2) - minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_crimson:shroomlight" }) - end - local randomgenerate = math.random(1, 8) - if randomgenerate == 4 then - local randomx = math.random(-2, 2) - local randomz = math.random(-2, 2) - minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_crimson:shroomlight" }) - end - -- Holz - for y = pos.y, pos.y + 4 do - minetest.set_node({x = pos.x, y = y, z = pos.z}, { name = "mcl_crimson:warped_hyphae" }) - --print("Placed at " .. x .. " " .. y .. " " .. z) - end - else - if breakgrow2 == false then minetest.set_node(pos,{ name = "mcl_crimson:warped_fungus" }) end - end + -- Pilzlich + local randomgenerate = math.random(1, 2) + if randomgenerate == 1 then + local randomx = math.random(-2, 2) + local randomz = math.random(-2, 2) + minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_crimson:shroomlight" }) + end + local randomgenerate = math.random(1, 8) + if randomgenerate == 4 then + local randomx = math.random(-2, 2) + local randomz = math.random(-2, 2) + minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_crimson:shroomlight" }) + end + -- Holz + for y = pos.y, pos.y + 4 do + minetest.set_node({x = pos.x, y = y, z = pos.z}, { name = "mcl_crimson:warped_hyphae" }) + --print("Placed at " .. x .. " " .. y .. " " .. z) + end + else + if breakgrow2 == false then minetest.set_node(pos,{ name = "mcl_crimson:warped_fungus" }) end + end end function generate_crimson_tree(pos) - breakgrow = false - breakgrow2 = false - -- Baumgenerator - -- erste und zweite Etage - for x = pos.x - 2,pos.x + 2 do - for y = pos.y + 3, pos.y + 4 do - for z = pos.z - 2, pos.z + 2 do - if not (minetest.get_node({x = x, y = y, z = z}).name == "air") then breakgrow = true end - end - end - end - - -- dritte und vierte Etage - for x = pos.x - 1,pos.x + 1 do - for y = pos.y + 5, pos.y + 6 do - for z = pos.z - 1, pos.z + 1 do - if not (minetest.get_node({x = x, y = y, z = z}).name == "air") then breakgrow = true end - end - end - end + breakgrow = false + breakgrow2 = false + -- Baumgenerator + -- erste und zweite Etage + for x = pos.x - 2,pos.x + 2 do + for y = pos.y + 3, pos.y + 4 do + for z = pos.z - 2, pos.z + 2 do + if not (minetest.get_node({x = x, y = y, z = z}).name == "air") then breakgrow = true end + end + end + end + + -- dritte und vierte Etage + for x = pos.x - 1,pos.x + 1 do + for y = pos.y + 5, pos.y + 6 do + for z = pos.z - 1, pos.z + 1 do + if not (minetest.get_node({x = x, y = y, z = z}).name == "air") then breakgrow = true end + end + end + end - -- fünfte Etage + -- fünfte Etage if not (minetest.get_node({x = pos.x, y = pos.y + 7, z = pos.z}).name == "air") then breakgrow = true end - -- Holz + -- Holz if not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "air") and not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "mcl_crimson:crimson_fungus") then breakgrow = true end - for y = pos.y + 1, pos.y + 4 do - if not (minetest.get_node({x = pos.x, y = y, z = pos.z}).name == "air") then breakgrow = true end - print(minetest.get_node({x = pos.x, y = y, z = pos.z}).name) - end + for y = pos.y + 1, pos.y + 4 do + if not (minetest.get_node({x = pos.x, y = y, z = pos.z}).name == "air") then breakgrow = true end + print(minetest.get_node({x = pos.x, y = y, z = pos.z}).name) + end if not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "air") and not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "mcl_crimson:crimson_fungus") then breakgrow2 = true end - print(tostring(breakgrow)) - if breakgrow == false then + print(tostring(breakgrow)) + if breakgrow == false then -- Warzen -- erste und zweite Etage - for x = pos.x - 2,pos.x + 2 do - for y = pos.y + 3, pos.y + 4 do - for z = pos.z - 2, pos.z + 2 do - minetest.set_node({x = x, y = y, z = z}, { name = "mcl_nether:nether_wart_block" }) - end - end - end - - -- dritte und vierte Etage - for x = pos.x - 1,pos.x + 1 do - for y = pos.y + 5, pos.y + 6 do - for z = pos.z - 1, pos.z + 1 do - minetest.set_node({x = x, y = y, z = z}, { name = "mcl_nether:nether_wart_block" }) - end - end - end + for x = pos.x - 2,pos.x + 2 do + for y = pos.y + 3, pos.y + 4 do + for z = pos.z - 2, pos.z + 2 do + minetest.set_node({x = x, y = y, z = z}, { name = "mcl_nether:nether_wart_block" }) + end + end + end + + -- dritte und vierte Etage + for x = pos.x - 1,pos.x + 1 do + for y = pos.y + 5, pos.y + 6 do + for z = pos.z - 1, pos.z + 1 do + minetest.set_node({x = x, y = y, z = z}, { name = "mcl_nether:nether_wart_block" }) + end + end + end - -- fünfte Etage - minetest.set_node({x = pos.x, y = pos.y + 7, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) + -- fünfte Etage + minetest.set_node({x = pos.x, y = pos.y + 7, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) - -- Pilzlich - local randomgenerate = math.random(1, 2) - if randomgenerate == 1 then - local randomx = math.random(-2, 2) - local randomz = math.random(-2, 2) - minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_crimson:shroomlight" }) - end - local randomgenerate = math.random(1, 8) - if randomgenerate == 4 then - local randomx = math.random(-2, 2) - local randomz = math.random(-2, 2) - minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_crimson:shroomlight" }) - end - -- Holz - for y = pos.y, pos.y + 4 do - minetest.set_node({x = pos.x, y = y, z = pos.z}, { name = "mcl_crimson:crimson_hyphae" }) - --print("Placed at " .. x .. " " .. y .. " " .. z) - end - else - if breakgrow2 == false then minetest.set_node(pos,{ name = "mcl_crimson:crimson_fungus" }) end - end + -- Pilzlich + local randomgenerate = math.random(1, 2) + if randomgenerate == 1 then + local randomx = math.random(-2, 2) + local randomz = math.random(-2, 2) + minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_crimson:shroomlight" }) + end + local randomgenerate = math.random(1, 8) + if randomgenerate == 4 then + local randomx = math.random(-2, 2) + local randomz = math.random(-2, 2) + minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_crimson:shroomlight" }) + end + -- Holz + for y = pos.y, pos.y + 4 do + minetest.set_node({x = pos.x, y = y, z = pos.z}, { name = "mcl_crimson:crimson_hyphae" }) + --print("Placed at " .. x .. " " .. y .. " " .. z) + end + else + if breakgrow2 == false then minetest.set_node(pos,{ name = "mcl_crimson:crimson_fungus" }) end + end end @@ -752,100 +752,100 @@ FIXME: Decoration don't do generate WARNING: Outdatet, the biomes gernerate now different, with Ores -- biomes in test! minetest.register_biome({ - name = "WarpedForest", - node_filler = "mcl_nether:netherrack", - node_stone = "mcl_nether:netherrack", - node_top = "mcl_crimson:warped_nylium", - node_water = "air", - node_river_water = "air", - y_min = -29065, - y_max = -28940, - heat_point = 100, - humidity_point = 0, - _mcl_biome_type = "hot", - _mcl_palette_index = 19, + name = "WarpedForest", + node_filler = "mcl_nether:netherrack", + node_stone = "mcl_nether:netherrack", + node_top = "mcl_crimson:warped_nylium", + node_water = "air", + node_river_water = "air", + y_min = -29065, + y_max = -28940, + heat_point = 100, + humidity_point = 0, + _mcl_biome_type = "hot", + _mcl_palette_index = 19, }) minetest.register_decoration({ - deco_type = "simple", - place_on = {"mcl_crimson:warped_nylium"}, - sidelen = 16, - noise_params = { - offset = 0.01, - scale = 0.0022, - spread = {x = 250, y = 250, z = 250}, - seed = 2, - octaves = 3, - persist = 0.66 - }, - biomes = {"WarpedForest"}, - y_min = -29065, - y_max = -28940 + 80, - decoration = "mcl_crimson:warped_fungus", + deco_type = "simple", + place_on = {"mcl_crimson:warped_nylium"}, + sidelen = 16, + noise_params = { + offset = 0.01, + scale = 0.0022, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"WarpedForest"}, + y_min = -29065, + y_max = -28940 + 80, + decoration = "mcl_crimson:warped_fungus", }) ]] --[[ No Ore gen for now minetest.register_ore({ - ore_type = "sheet", - ore = "mcl_crimson:warped_checknode", - -- Note: Stone is included only for v6 mapgen support. Netherrack is not generated naturally - -- in v6, but instead set with the on_generated function in mcl_mapgen_core. - wherein = {"mcl_nether:netherrack", "mcl_core:stone"}, - clust_scarcity = 14 * 14 * 14, - clust_size = 10, - y_min = -29065, - y_max = -28940, - noise_threshold = 0.0, - noise_params = { - offset = 0.5, - scale = 0.1, - spread = {x = 8, y = 8, z = 8}, - seed = 4996, - octaves = 1, - persist = 0.0 - }, + ore_type = "sheet", + ore = "mcl_crimson:warped_checknode", + -- Note: Stone is included only for v6 mapgen support. Netherrack is not generated naturally + -- in v6, but instead set with the on_generated function in mcl_mapgen_core. + wherein = {"mcl_nether:netherrack", "mcl_core:stone"}, + clust_scarcity = 14 * 14 * 14, + clust_size = 10, + y_min = -29065, + y_max = -28940, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.1, + spread = {x = 8, y = 8, z = 8}, + seed = 4996, + octaves = 1, + persist = 0.0 + }, }) minetest.register_ore({ - ore_type = "sheet", - ore = "mcl_crimson:crimson_checknode", - -- Note: Stone is included only for v6 mapgen support. Netherrack is not generated naturally - -- in v6, but instead set with the on_generated function in mcl_mapgen_core. - wherein = {"mcl_nether:netherrack", "mcl_core:stone"}, - clust_scarcity = 10 * 10 * 10, - clust_size = 10, - y_min = -29065, - y_max = -28940, - noise_threshold = 0.0, - noise_params = { - offset = 1, - scale = 0.5, - spread = {x = 12, y = 12, z = 12}, - seed = 12948, - octaves = 1, - persist = 0.0 - }, + ore_type = "sheet", + ore = "mcl_crimson:crimson_checknode", + -- Note: Stone is included only for v6 mapgen support. Netherrack is not generated naturally + -- in v6, but instead set with the on_generated function in mcl_mapgen_core. + wherein = {"mcl_nether:netherrack", "mcl_core:stone"}, + clust_scarcity = 10 * 10 * 10, + clust_size = 10, + y_min = -29065, + y_max = -28940, + noise_threshold = 0.0, + noise_params = { + offset = 1, + scale = 0.5, + spread = {x = 12, y = 12, z = 12}, + seed = 12948, + octaves = 1, + persist = 0.0 + }, }) --]] minetest.register_decoration({ - deco_type = "simple", - place_on = {"mcl_crimson:warped_nylium"}, - sidelen = 16, - fill_ratio = 0.1, - biomes = {"Nether"}, - y_max = -28940, - y_min = -29065, - decoration = "mcl_crimson:warped_fungus", + deco_type = "simple", + place_on = {"mcl_crimson:warped_nylium"}, + sidelen = 16, + fill_ratio = 0.1, + biomes = {"Nether"}, + y_max = -28940, + y_min = -29065, + decoration = "mcl_crimson:warped_fungus", }) minetest.register_decoration({ - deco_type = "simple", - place_on = {"mcl_crimson:crimson_nylium"}, - sidelen = 16, - fill_ratio = 0.1, - biomes = {"Nether"}, - y_max = -28940, - y_min = -29065, - decoration = "mcl_crimson:crimson_fungus", + deco_type = "simple", + place_on = {"mcl_crimson:crimson_nylium"}, + sidelen = 16, + fill_ratio = 0.1, + biomes = {"Nether"}, + y_max = -28940, + y_min = -29065, + decoration = "mcl_crimson:crimson_fungus", }) -- 2.40.1 From f285e18d24431e6ee3366fbb6d396b7405aaf9e2 Mon Sep 17 00:00:00 2001 From: AFCMS Date: Wed, 4 May 2022 12:23:08 +0200 Subject: [PATCH 110/357] Fix some codestyle issues with `mcl_crimson` --- mods/ITEMS/mcl_crimson/init.lua | 656 +++++++++--------- ...{mcl_mushrooms.de.tr => mcl_crimson.de.tr} | 2 +- .../{mcl_mushroom.fr.tr => mcl_crimson.fr.tr} | 2 +- mods/ITEMS/mcl_crimson/locale/template.txt | 2 +- mods/ITEMS/mcl_crimson/mod.conf | 4 +- 5 files changed, 320 insertions(+), 346 deletions(-) rename mods/ITEMS/mcl_crimson/locale/{mcl_mushrooms.de.tr => mcl_crimson.de.tr} (96%) rename mods/ITEMS/mcl_crimson/locale/{mcl_mushroom.fr.tr => mcl_crimson.fr.tr} (93%) diff --git a/mods/ITEMS/mcl_crimson/init.lua b/mods/ITEMS/mcl_crimson/init.lua index 920665e39..272adc113 100644 --- a/mods/ITEMS/mcl_crimson/init.lua +++ b/mods/ITEMS/mcl_crimson/init.lua @@ -1,4 +1,4 @@ -local S = minetest.get_translator("mcl_mushroom") +local S = minetest.get_translator("mcl_crimson") -- Warped fungus -- Crimson fungus @@ -16,7 +16,6 @@ minetest.register_node("mcl_crimson:warped_fungus", { paramtype = "light", walkable = false, groups = {dig_immediate=3,mushroom=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,enderman_takable=1,deco_block=1}, - light_source = 1, selection_box = { type = "fixed", @@ -24,18 +23,17 @@ minetest.register_node("mcl_crimson:warped_fungus", { }, node_placement_prediction = "", on_rightclick = function(pos, node, pointed_thing, player, itemstack) - if pointed_thing:get_wielded_item():get_name() == "mcl_dye:white" then - local nodepos = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) - if nodepos.name == "mcl_crimson:warped_nylium" or nodepos.name == "mcl_nether:netherrack" then - local random = math.random(1, 5) - if random == 1 then - generate_warped_tree(pos) + if pointed_thing:get_wielded_item():get_name() == "mcl_dye:white" then + local nodepos = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) + if nodepos.name == "mcl_crimson:warped_nylium" or nodepos.name == "mcl_nether:netherrack" then + local random = math.random(1, 5) + if random == 1 then + generate_warped_tree(pos) + end + end end - end - end end, _mcl_blast_resistance = 0, - stack_max = 64, }) minetest.register_node("mcl_crimson:twisting_vines", { @@ -55,29 +53,33 @@ minetest.register_node("mcl_crimson:twisting_vines", { }, node_placement_prediction = "", on_rightclick = function(pos, node, pointed_thing, itemstack) - - if pointed_thing:get_wielded_item():get_name() == "mcl_crimson:twisting_vines" then + if pointed_thing:get_wielded_item():get_name() == "mcl_crimson:twisting_vines" then itemstack:take_item() grow_twisting_vines(pos, 1) - elseif pointed_thing:get_wielded_item():get_name() == "mcl_dye:white" then + elseif pointed_thing:get_wielded_item():get_name() == "mcl_dye:white" then itemstack:take_item() grow_twisting_vines(pos, math.random(1, 3)) - end + end end, drop = { - max_items = 1, - items = { + max_items = 1, + items = { {items = {"mcl_crimson:twisting_vines"}, rarity = 3}, - } + }, }, _mcl_shears_drop = true, _mcl_silk_touch_drop = true, - _mcl_fortune_drop = { items = {{items = {"mcl_crimson:twisting_vines"}, rarity = 3},}, - items = {{items = {"mcl_crimson:twisting_vines"}, rarity = 1.8181818181818181},}, - "mcl_crimson:twisting_vines", - "mcl_crimson:twisting_vines"}, + _mcl_fortune_drop = { + items = { + {items = {"mcl_crimson:twisting_vines"}, rarity = 3}, + }, + items = { + {items = {"mcl_crimson:twisting_vines"}, rarity = 1.8181818181818181}, + }, + "mcl_crimson:twisting_vines", + "mcl_crimson:twisting_vines", + }, _mcl_blast_resistance = 0, - stack_max = 64, }) minetest.register_node("mcl_crimson:nether_sprouts", { @@ -99,7 +101,6 @@ minetest.register_node("mcl_crimson:nether_sprouts", { _mcl_shears_drop = true, _mcl_silk_touch_drop = false, _mcl_blast_resistance = 0, - stack_max = 64, }) minetest.register_node("mcl_crimson:warped_roots", { @@ -119,25 +120,22 @@ minetest.register_node("mcl_crimson:warped_roots", { node_placement_prediction = "", _mcl_silk_touch_drop = false, _mcl_blast_resistance = 0, - stack_max = 64, }) minetest.register_node("mcl_crimson:warped_wart_block", { description = S("Warped Wart Block"), tiles = {"warped_wart_block.png"}, - groups = {handy=1,hoe=7,swordy=1, deco_block=1, }, - stack_max = 64, + groups = {handy = 1, hoe = 7, swordy = 1, deco_block = 1}, _mcl_hardness = 2, }) minetest.register_node("mcl_crimson:shroomlight", { description = S("Shroomlight"), tiles = {"shroomlight.png"}, - groups = {handy=1,hoe=7,swordy=1, leafdecay=1, leafdecay_distance=1, leaves=1, deco_block=1, }, - stack_max = 64, - _mcl_hardness = 2, + groups = {handy = 1, hoe = 7, swordy = 1, leafdecay = 1, leafdecay_distance = 1, leaves = 1, deco_block = 1}, -- this is 15 in Minecraft light_source = 14, + _mcl_hardness = 2, }) minetest.register_node("mcl_crimson:warped_hyphae", { @@ -154,46 +152,38 @@ minetest.register_node("mcl_crimson:warped_hyphae", { }, paramtype2 = "facedir", on_place = mcl_util.rotate_axis, - groups = {handy=1,axey=1, tree=1, building_block=1, material_wood=1}, + groups = {handy = 1, axey = 1, tree = 1, building_block = 1, material_wood = 1}, sounds = mcl_sounds.node_sound_wood_defaults(), on_rotate = on_rotate, _mcl_blast_resistance = 2, - stack_max = 64, _mcl_hardness = 2, _mcl_stripped_variant = "mcl_crimson:stripped_warped_hyphae", }) minetest.register_node("mcl_crimson:warped_nylium", { description = S("Warped Nylium"), - tiles = {"warped_nylium.png", - "mcl_nether_netherrack.png", - "mcl_nether_netherrack.png^warped_nylium_side.png", - "mcl_nether_netherrack.png^warped_nylium_side.png", - "mcl_nether_netherrack.png^warped_nylium_side.png", - "mcl_nether_netherrack.png^warped_nylium_side.png", - }, - groups = {pickaxey=1, building_block=1, material_stone=1}, + tiles = { + "warped_nylium.png", + "mcl_nether_netherrack.png", + "mcl_nether_netherrack.png^warped_nylium_side.png", + "mcl_nether_netherrack.png^warped_nylium_side.png", + "mcl_nether_netherrack.png^warped_nylium_side.png", + "mcl_nether_netherrack.png^warped_nylium_side.png", + }, paramtype2 = "facedir", - stack_max = 64, - _mcl_hardness = 0.4, - _mcl_blast_resistance = 0.4, is_ground_content = true, drop = "mcl_nether:netherrack", + groups = {pickaxey=1, building_block=1, material_stone=1}, + _mcl_hardness = 0.4, + _mcl_blast_resistance = 0.4, _mcl_silk_touch_drop = true, }) minetest.register_node("mcl_crimson:warped_checknode", { description = S("Warped Checknode - only to check!"), - tiles = {"mcl_nether_netherrack.png", - "mcl_nether_netherrack.png", - "mcl_nether_netherrack.png", - "mcl_nether_netherrack.png", - "mcl_nether_netherrack.png", - "mcl_nether_netherrack.png", - }, - groups = {pickaxey=1, building_block=1, material_stone=1, not_in_creative_inventory=1}, + tiles = {"mcl_nether_netherrack.png"}, + groups = {pickaxey = 1, building_block = 1, material_stone = 1, not_in_creative_inventory = 1}, paramtype2 = "facedir", - stack_max = 64, _mcl_hardness = 0.4, _mcl_blast_resistance = 0.4, is_ground_content = true, @@ -203,75 +193,71 @@ minetest.register_node("mcl_crimson:warped_checknode", { --Stem bark, stripped stem and bark minetest.register_node("mcl_crimson:warped_hyphae_bark", { - description = S("Warped Hyphae Bark"), - _doc_items_longdesc = S("This is a decorative block surrounded by the bark of an hyphae."), - tiles = {"warped_hyphae_side.png"}, - paramtype2 = "facedir", - on_place = mcl_util.rotate_axis, - stack_max = 64, - groups = {handy=1,axey=1, bark=1, building_block=1, material_wood=1}, - sounds = mcl_sounds.node_sound_wood_defaults(), - is_ground_content = false, - on_rotate = on_rotate, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, - _mcl_stripped_variant = "mcl_crimson:stripped_warped_hyphae_bark", - }) + description = S("Warped Hyphae Bark"), + _doc_items_longdesc = S("This is a decorative block surrounded by the bark of an hyphae."), + tiles = {"warped_hyphae_side.png"}, + paramtype2 = "facedir", + on_place = mcl_util.rotate_axis, + groups = {handy = 1, axey = 1, bark = 1, building_block = 1, material_wood = 1}, + sounds = mcl_sounds.node_sound_wood_defaults(), + is_ground_content = false, + on_rotate = on_rotate, + _mcl_blast_resistance = 2, + _mcl_hardness = 2, + _mcl_stripped_variant = "mcl_crimson:stripped_warped_hyphae_bark", +}) minetest.register_craft({ - output = "mcl_crimson:warped_hyphae_bark 3", - recipe = { - { "mcl_crimson:warped_hyphae", "mcl_crimson:warped_hyphae" }, - { "mcl_crimson:warped_hyphae", "mcl_crimson:warped_hyphae" }, - } - }) + output = "mcl_crimson:warped_hyphae_bark 3", + recipe = { + { "mcl_crimson:warped_hyphae", "mcl_crimson:warped_hyphae" }, + { "mcl_crimson:warped_hyphae", "mcl_crimson:warped_hyphae" }, + }, +}) minetest.register_node("mcl_crimson:stripped_warped_hyphae", { - description = description_stripped_trunk, - _doc_items_longdesc = longdesc, - _doc_items_hidden = false, - tiles = {tile_stripped_inner, tile_stripped_inner, tile_stripped_bark}, - paramtype2 = "facedir", - on_place = mcl_util.rotate_axis, - stack_max = 64, - groups = {handy=1, axey=1, tree=1, building_block=1, material_wood=1}, - sounds = mcl_sounds.node_sound_wood_defaults(), - on_rotate = on_rotate, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, - }) + description = description_stripped_trunk, + _doc_items_longdesc = longdesc, + _doc_items_hidden = false, + tiles = {tile_stripped_inner, tile_stripped_inner, tile_stripped_bark}, + paramtype2 = "facedir", + on_place = mcl_util.rotate_axis, + groups = {handy = 1, axey = 1, tree = 1, building_block = 1, material_wood = 1}, + sounds = mcl_sounds.node_sound_wood_defaults(), + on_rotate = on_rotate, + _mcl_blast_resistance = 2, + _mcl_hardness = 2, +}) minetest.register_node("mcl_crimson:stripped_warped_hyphae_bark", { - description = description_stripped_bark, - _doc_items_longdesc = longdesc_wood, - tiles = {tile_stripped_bark}, - paramtype2 = "facedir", - on_place = mcl_util.rotate_axis, - stack_max = 64, - groups = {handy=1, axey=1, bark=1, building_block=1, material_wood=1}, - sounds = mcl_sounds.node_sound_wood_defaults(), - is_ground_content = false, - on_rotate = on_rotate, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, - }) + description = description_stripped_bark, + _doc_items_longdesc = longdesc_wood, + tiles = {tile_stripped_bark}, + paramtype2 = "facedir", + on_place = mcl_util.rotate_axis, + groups = {handy = 1, axey = 1, bark = 1, building_block = 1, material_wood = 1}, + sounds = mcl_sounds.node_sound_wood_defaults(), + is_ground_content = false, + on_rotate = on_rotate, + _mcl_blast_resistance = 2, + _mcl_hardness = 2, +}) minetest.register_craft({ - output = "mcl_crimson:stripped_warped_hyphae_bark 3", - recipe = { - { "mcl_crimson:stripped_warped_hyphae", "mcl_crimson:stripped_warped_hyphae" }, - { "mcl_crimson:stripped_warped_hyphae", "mcl_crimson:stripped_warped_hyphae" }, - } - }) + output = "mcl_crimson:stripped_warped_hyphae_bark 3", + recipe = { + { "mcl_crimson:stripped_warped_hyphae", "mcl_crimson:stripped_warped_hyphae" }, + { "mcl_crimson:stripped_warped_hyphae", "mcl_crimson:stripped_warped_hyphae" }, + }, +}) --Wood minetest.register_node("mcl_crimson:warped_hyphae_wood", { description = S("Warped Hyphae Wood"), tiles = {"warped_hyphae_wood.png"}, - groups = {handy=5,axey=1, flammable=3,wood=1,building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=20}, + groups = {handy = 5,axey = 1, flammable = 3, wood=1,building_block = 1, material_wood = 1, fire_encouragement = 5, fire_flammability = 20}, paramtype2 = "facedir", - stack_max = 64, _mcl_hardness = 2, }) @@ -280,16 +266,16 @@ mcl_stairs.register_stair_and_slab_simple("warped_hyphae_wood", "mcl_crimson:war minetest.register_craft({ output = "mcl_crimson:warped_hyphae_wood 4", recipe = { - {"mcl_crimson:warped_hyphae"}, - } + {"mcl_crimson:warped_hyphae"}, + }, }) minetest.register_craft({ output = "mcl_crimson:warped_nyliumd 2", recipe = { - {"mcl_crimson:warped_wart_block"}, - {"mcl_nether:netherrack"}, - } + {"mcl_crimson:warped_wart_block"}, + {"mcl_nether:netherrack"}, + }, }) minetest.register_abm({ @@ -298,13 +284,13 @@ minetest.register_abm({ interval = 11, chance = 128, action = function(pos) - local nodepos = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) - if nodepos.name == "mcl_crimson:warped_nylium" or nodepos.name == "mcl_nether:netherrack" then - if pos.y < -28400 then - generate_warped_tree(pos) + local nodepos = minetest.get_node(vector.offset(pos, 0, -1, 0)) + if nodepos.name == "mcl_crimson:warped_nylium" or nodepos.name == "mcl_nether:netherrack" then + if pos.y < -28400 then + generate_warped_tree(pos) + end end end - end }) minetest.register_abm({ @@ -313,20 +299,20 @@ minetest.register_abm({ interval = 1, chance = 1, action = function(pos) - local nodepos = minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}) - if nodepos.name == "air" then - minetest.swap_node({ x = pos.x, y = pos.y, z = pos.z }, { name = "mcl_crimson:warped_nylium" }) - local randomg = math.random(1, 40) - if randomg == 2 then - minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_crimson:warped_fungus" }) - elseif randomg == 7 then - local pos1 = { x = pos.x, y = pos.y + 1, z = pos.z } - generate_warped_tree(pos1) + local pos1 = vector.offset(pos, 0, 1, 0) + local nodepos = minetest.get_node(pos1) + if nodepos.name == "air" then + minetest.swap_node(pos, { name = "mcl_crimson:warped_nylium" }) + local randomg = math.random(1, 40) + if randomg == 2 then + minetest.set_node(pos1, { name = "mcl_crimson:warped_fungus" }) + elseif randomg == 7 then + generate_warped_tree(pos1) + end + else + minetest.swap_node(pos, { name = "mcl_nether:netherrack" }) end - else - minetest.swap_node({ x = pos.x, y = pos.y, z = pos.z }, { name = "mcl_nether:netherrack" }) - end - end + end, }) mobs:spawn({ @@ -339,8 +325,6 @@ mobs:spawn({ max_height = -28940, }) - - minetest.register_node("mcl_crimson:crimson_fungus", { description = S("Crimson Fungus Mushroom"), drawtype = "plantlike", @@ -351,7 +335,6 @@ minetest.register_node("mcl_crimson:crimson_fungus", { paramtype = "light", walkable = false, groups = {dig_immediate=3,mushroom=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,enderman_takable=1,deco_block=1}, - light_source = 1, selection_box = { type = "fixed", @@ -359,19 +342,17 @@ minetest.register_node("mcl_crimson:crimson_fungus", { }, node_placement_prediction = "", on_rightclick = function(pos, node, pointed_thing, player) - if pointed_thing:get_wielded_item():get_name() == "mcl_dye:white" then - local nodepos = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) - if nodepos.name == "mcl_crimson:crimson_nylium" or nodepos.name == "mcl_nether:netherrack" then - local random = math.random(1, 5) - if random == 1 then - generate_crimson_tree(pos) + if pointed_thing:get_wielded_item():get_name() == "mcl_dye:white" then + local nodepos = minetest.get_node(vector.offset(pos, 0, -1, 0)) + if nodepos.name == "mcl_crimson:crimson_nylium" or nodepos.name == "mcl_nether:netherrack" then + local random = math.random(1, 5) + if random == 1 then + generate_crimson_tree(pos) + end + end end - end - end end, _mcl_blast_resistance = 0, - - stack_max = 64, }) minetest.register_node("mcl_crimson:crimson_roots", { @@ -391,7 +372,6 @@ minetest.register_node("mcl_crimson:crimson_roots", { node_placement_prediction = "", _mcl_silk_touch_drop = false, _mcl_blast_resistance = 0, - stack_max = 64, }) minetest.register_node("mcl_crimson:crimson_hyphae", { @@ -408,11 +388,10 @@ minetest.register_node("mcl_crimson:crimson_hyphae", { }, paramtype2 = "facedir", on_place = mcl_util.rotate_axis, - groups = {handy=1,axey=1, tree=1, building_block=1, material_wood=1}, + groups = {handy = 1, axey = 1, tree = 1, building_block = 1, material_wood = 1}, sounds = mcl_sounds.node_sound_wood_defaults(), on_rotate = on_rotate, _mcl_blast_resistance = 2, - stack_max = 64, _mcl_hardness = 2, _mcl_stripped_variant = stripped_variant, }) @@ -420,128 +399,117 @@ minetest.register_node("mcl_crimson:crimson_hyphae", { --Stem bark, stripped stem and bark minetest.register_node("mcl_crimson:crimson_hyphae_bark", { - description = S("Crimson Hyphae Bark"), - _doc_items_longdesc = S("This is a decorative block surrounded by the bark of an hyphae."), - tiles = {"crimson_hyphae_side.png"}, - paramtype2 = "facedir", - on_place = mcl_util.rotate_axis, - stack_max = 64, - groups = {handy=1,axey=1, bark=1, building_block=1, material_wood=1,}, - sounds = mcl_sounds.node_sound_wood_defaults(), - is_ground_content = false, - on_rotate = on_rotate, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, - _mcl_stripped_variant = "mcl_crimson:stripped_crimson_hyphae_bark", - }) + description = S("Crimson Hyphae Bark"), + _doc_items_longdesc = S("This is a decorative block surrounded by the bark of an hyphae."), + tiles = {"crimson_hyphae_side.png"}, + paramtype2 = "facedir", + on_place = mcl_util.rotate_axis, + groups = {handy = 1, axey = 1, bark = 1, building_block = 1, material_wood = 1}, + sounds = mcl_sounds.node_sound_wood_defaults(), + is_ground_content = false, + on_rotate = on_rotate, + _mcl_blast_resistance = 2, + _mcl_hardness = 2, + _mcl_stripped_variant = "mcl_crimson:stripped_crimson_hyphae_bark", +}) minetest.register_craft({ - output = "mcl_crimson:crimson_hyphae_bark 3", - recipe = { - { "mcl_crimson:crimson_hyphae", "mcl_crimson:crimson_hyphae" }, - { "mcl_crimson:crimson_hyphae", "mcl_crimson:crimson_hyphae" }, - } - }) + output = "mcl_crimson:crimson_hyphae_bark 3", + recipe = { + { "mcl_crimson:crimson_hyphae", "mcl_crimson:crimson_hyphae" }, + { "mcl_crimson:crimson_hyphae", "mcl_crimson:crimson_hyphae" }, + }, +}) minetest.register_node("mcl_crimson:stripped_crimson_hyphae", { - description = S("Stripped Crimson Hyphae"), - _doc_items_longdesc = S("The stripped stem of a crimson hyphae"), - _doc_items_hidden = false, - tiles = {"stripped_crimson_stem_top.png", "stripped_crimson_stem_top.png", "stripped_crimson_stem_side.png"}, - paramtype2 = "facedir", - on_place = mcl_util.rotate_axis, - stack_max = 64, - groups = {handy=1, axey=1, tree=1, building_block=1, material_wood=1}, - sounds = mcl_sounds.node_sound_wood_defaults(), - on_rotate = on_rotate, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, - }) + description = S("Stripped Crimson Hyphae"), + _doc_items_longdesc = S("The stripped stem of a crimson hyphae"), + _doc_items_hidden = false, + tiles = {"stripped_crimson_stem_top.png", "stripped_crimson_stem_top.png", "stripped_crimson_stem_side.png"}, + paramtype2 = "facedir", + on_place = mcl_util.rotate_axis, + groups = {handy = 1, axey = 1, tree = 1, building_block = 1, material_wood = 1}, + sounds = mcl_sounds.node_sound_wood_defaults(), + on_rotate = on_rotate, + _mcl_blast_resistance = 2, + _mcl_hardness = 2, +}) minetest.register_node("mcl_crimson:stripped_crimson_hyphae_bark", { - description = S("Stripped Crimson Hyphae Bark"), - _doc_items_longdesc = S("The stripped wood of a crimson hyphae"), - tiles = {"stripped_crimson_stem_side.png"}, - paramtype2 = "facedir", - on_place = mcl_util.rotate_axis, - stack_max = 64, - groups = {handy=1, axey=1, bark=1, building_block=1, material_wood=1}, - sounds = mcl_sounds.node_sound_wood_defaults(), - is_ground_content = false, - on_rotate = on_rotate, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, - }) + description = S("Stripped Crimson Hyphae Bark"), + _doc_items_longdesc = S("The stripped wood of a crimson hyphae"), + tiles = {"stripped_crimson_stem_side.png"}, + paramtype2 = "facedir", + on_place = mcl_util.rotate_axis, + groups = {handy = 1, axey = 1, bark = 1, building_block = 1, material_wood = 1}, + sounds = mcl_sounds.node_sound_wood_defaults(), + is_ground_content = false, + on_rotate = on_rotate, + _mcl_blast_resistance = 2, + _mcl_hardness = 2, +}) minetest.register_craft({ - output = "mcl_crimson:stripped_crimson_hyphae_bark 3", - recipe = { - { "mcl_crimson:stripped_crimson_hyphae", "mcl_crimson:stripped_crimson_hyphae" }, - { "mcl_crimson:stripped_crimson_hyphae", "mcl_crimson:stripped_crimson_hyphae" }, - } - }) + output = "mcl_crimson:stripped_crimson_hyphae_bark 3", + recipe = { + { "mcl_crimson:stripped_crimson_hyphae", "mcl_crimson:stripped_crimson_hyphae" }, + { "mcl_crimson:stripped_crimson_hyphae", "mcl_crimson:stripped_crimson_hyphae" }, + }, +}) --Wood minetest.register_node("mcl_crimson:crimson_hyphae_wood", { description = S("Crimson Hyphae Wood"), tiles = {"crimson_hyphae_wood.png"}, - groups = {handy=5,axey=1, wood=1,building_block=1, material_wood=1,}, + groups = {handy = 5, axey = 1, wood = 1, building_block = 1, material_wood = 1}, paramtype2 = "facedir", - stack_max = 64, _mcl_hardness = 2, }) minetest.register_node("mcl_crimson:crimson_nylium", { description = S("Crimson Nylium"), - tiles = {"crimson_nylium.png", - "mcl_nether_netherrack.png", - "mcl_nether_netherrack.png^crimson_nylium_side.png", - "mcl_nether_netherrack.png^crimson_nylium_side.png", - "mcl_nether_netherrack.png^crimson_nylium_side.png", - "mcl_nether_netherrack.png^crimson_nylium_side.png", - }, - groups = {pickaxey=1, building_block=1, material_stone=1}, + tiles = { + "crimson_nylium.png", + "mcl_nether_netherrack.png", + "mcl_nether_netherrack.png^crimson_nylium_side.png", + "mcl_nether_netherrack.png^crimson_nylium_side.png", + "mcl_nether_netherrack.png^crimson_nylium_side.png", + "mcl_nether_netherrack.png^crimson_nylium_side.png", + }, + groups = {pickaxey = 1, building_block = 1, material_stone = 1}, paramtype2 = "facedir", - stack_max = 64, - _mcl_hardness = 0.4, - _mcl_blast_resistance = 0.4, is_ground_content = true, drop = "mcl_nether:netherrack", + _mcl_hardness = 0.4, + _mcl_blast_resistance = 0.4, _mcl_silk_touch_drop = true, }) minetest.register_node("mcl_crimson:crimson_checknode", { description = S("Crimson Checknode - only to check!"), - tiles = {"mcl_nether_netherrack.png", - "mcl_nether_netherrack.png", - "mcl_nether_netherrack.png", - "mcl_nether_netherrack.png", - "mcl_nether_netherrack.png", - "mcl_nether_netherrack.png", - }, - groups = {pickaxey=1, building_block=1, material_stone=1, not_in_creative_inventory=1}, + tiles = {"mcl_nether_netherrack.png"}, + groups = {pickaxey = 1, building_block = 1, material_stone = 1, not_in_creative_inventory = 1}, paramtype2 = "facedir", - stack_max = 64, + is_ground_content = true, + drop = "mcl_nether:netherrack", _mcl_hardness = 0.4, _mcl_blast_resistance = 0.4, - is_ground_content = true, - drop = "mcl_nether:netherrack" }) minetest.register_craft({ output = "mcl_crimson:crimson_hyphae_wood 4", recipe = { - {"mcl_crimson:crimson_hyphae"}, - } + {"mcl_crimson:crimson_hyphae"}, + }, }) minetest.register_craft({ output = "mcl_crimson:crimson_nyliumd 2", recipe = { - {"mcl_nether:nether_wart"}, - {"mcl_nether:netherrack"}, - } + {"mcl_nether:nether_wart"}, + {"mcl_nether:netherrack"}, + }, }) mcl_stairs.register_stair_and_slab_simple("crimson_hyphae_wood", "mcl_crimson:crimson_hyphae_wood", "Crimson Stair", "Crimson Slab", "Double Crimson Slab") @@ -552,13 +520,13 @@ minetest.register_abm({ interval = 11, chance = 128, action = function(pos) - local nodepos = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) - if nodepos.name == "mcl_crimson:crimson_nylium" or nodepos.name == "mcl_nether:netherrack" then - if pos.y < -28400 then - generate_crimson_tree(pos) + local nodepos = minetest.get_node(vector.offset(pos, 0, -1, 0)) + if nodepos.name == "mcl_crimson:crimson_nylium" or nodepos.name == "mcl_nether:netherrack" then + if pos.y < -28400 then + generate_crimson_tree(pos) + end end end - end }) minetest.register_abm({ @@ -567,181 +535,183 @@ minetest.register_abm({ interval = 1, chance = 1, action = function(pos) - local nodepos = minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}) - if nodepos.name == "air" then - minetest.swap_node({ x = pos.x, y = pos.y, z = pos.z }, { name = "mcl_crimson:crimson_nylium" }) + local pos1 = vector.offset(pos, 0, 1, 0) + local nodepos = minetest.get_node(pos1) + if nodepos.name == "air" then + minetest.swap_node(pos, { name = "mcl_crimson:crimson_nylium" }) + local randomg = math.random(1, 400) - if randomg <= 10 then - minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_crimson:crimson_fungus" }) - elseif randomg > 10 and randomg <= 25 then - local pos1 = { x = pos.x, y = pos.y + 1, z = pos.z } - generate_crimson_tree(pos1) + + if randomg <= 10 then + minetest.set_node(pos1, { name = "mcl_crimson:crimson_fungus" }) + elseif randomg > 10 and randomg <= 25 then + generate_crimson_tree(pos1) elseif randomg > 25 and randomg <= 30 then - minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_crimson:warped_fungus" }) + minetest.set_node(pos1, { name = "mcl_crimson:warped_fungus" }) elseif randomg > 30 and randomg <= 130 then - minetest.set_node({ x = pos.x, y = pos.y + 1, z = pos.z }, { name = "mcl_crimson:crimson_roots" }) + minetest.set_node(pos1, { name = "mcl_crimson:crimson_roots" }) + end + else + minetest.swap_node(pos, { name = "mcl_nether:netherrack" }) end - else - minetest.swap_node({ x = pos.x, y = pos.y, z = pos.z }, { name = "mcl_nether:netherrack" }) - end end }) -function generate_warped_tree(pos) - breakgrow = false - breakgrow2 = false +local function generate_warped_tree(pos) + local breakgrow = false + local breakgrow2 = false -- Baumgenerator -- erste und zweite Etage for x = pos.x - 2,pos.x + 2 do - for y = pos.y + 3, pos.y + 4 do - for z = pos.z - 2, pos.z + 2 do - if not (minetest.get_node({x = x, y = y, z = z}).name == "air") then breakgrow = true end - end + for y = pos.y + 3, pos.y + 4 do + for z = pos.z - 2, pos.z + 2 do + if not (minetest.get_node(vector.new(x, y, z)).name == "air") then breakgrow = true end end end - + end + -- dritte und vierte Etage for x = pos.x - 1,pos.x + 1 do - for y = pos.y + 5, pos.y + 6 do - for z = pos.z - 1, pos.z + 1 do - if not (minetest.get_node({x = x, y = y, z = z}).name == "air") then breakgrow = true end - end + for y = pos.y + 5, pos.y + 6 do + for z = pos.z - 1, pos.z + 1 do + if not (minetest.get_node(vector.new(x, y, z)).name == "air") then breakgrow = true end end end + end -- fünfte Etage if not (minetest.get_node({x = pos.x, y = pos.y + 7, z = pos.z}).name == "air") then breakgrow = true end - -- Holz - if not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "air") and not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "mcl_crimson:warped_fungus") then breakgrow = true end - for y = pos.y + 1, pos.y + 4 do - if not (minetest.get_node({x = pos.x, y = y, z = pos.z}).name == "air") then breakgrow = true end - print(minetest.get_node({x = pos.x, y = y, z = pos.z}).name) - end - if not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "air") and not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "mcl_crimson:warped_fungus") then breakgrow2 = true end - print(tostring(breakgrow)) + -- Holz + if not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "air") and not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "mcl_crimson:warped_fungus") then breakgrow = true end + for y = pos.y + 1, pos.y + 4 do + if not (minetest.get_node({x = pos.x, y = y, z = pos.z}).name == "air") then breakgrow = true end + --print(minetest.get_node({x = pos.x, y = y, z = pos.z}).name) + end + if not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "air") and not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "mcl_crimson:warped_fungus") then breakgrow2 = true end + --print(tostring(breakgrow)) if breakgrow == false then - -- Warzen - -- erste und zweite Etage - for x = pos.x - 2,pos.x + 2 do + -- Warzen + -- erste und zweite Etage + for x = pos.x - 2,pos.x + 2 do for y = pos.y + 3, pos.y + 4 do for z = pos.z - 2, pos.z + 2 do - minetest.set_node({x = x, y = y, z = z}, { name = "mcl_crimson:warped_wart_block" }) + minetest.set_node(vector.new(x, y, z), { name = "mcl_crimson:warped_wart_block" }) end end end - - -- dritte und vierte Etage - for x = pos.x - 1,pos.x + 1 do + + -- dritte und vierte Etage + for x = pos.x - 1,pos.x + 1 do for y = pos.y + 5, pos.y + 6 do for z = pos.z - 1, pos.z + 1 do - minetest.set_node({x = x, y = y, z = z}, { name = "mcl_crimson:warped_wart_block" }) + minetest.set_node(vector.new(x, y, z), { name = "mcl_crimson:warped_wart_block" }) end end end - - -- fünfte Etage - minetest.set_node({x = pos.x, y = pos.y + 7, z = pos.z}, { name = "mcl_crimson:warped_wart_block" }) - -- Pilzlich - local randomgenerate = math.random(1, 2) - if randomgenerate == 1 then - local randomx = math.random(-2, 2) - local randomz = math.random(-2, 2) - minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_crimson:shroomlight" }) - end - local randomgenerate = math.random(1, 8) - if randomgenerate == 4 then - local randomx = math.random(-2, 2) - local randomz = math.random(-2, 2) - minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_crimson:shroomlight" }) - end - -- Holz - for y = pos.y, pos.y + 4 do - minetest.set_node({x = pos.x, y = y, z = pos.z}, { name = "mcl_crimson:warped_hyphae" }) - --print("Placed at " .. x .. " " .. y .. " " .. z) - end + -- fünfte Etage + minetest.set_node({x = pos.x, y = pos.y + 7, z = pos.z}, { name = "mcl_crimson:warped_wart_block" }) + + -- Pilzlich + local randomgenerate = math.random(1, 2) + if randomgenerate == 1 then + local randomx = math.random(-2, 2) + local randomz = math.random(-2, 2) + minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_crimson:shroomlight" }) + end + local randomgenerate = math.random(1, 8) + if randomgenerate == 4 then + local randomx = math.random(-2, 2) + local randomz = math.random(-2, 2) + minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_crimson:shroomlight" }) + end + -- Holz + for y = pos.y, pos.y + 4 do + minetest.set_node({x = pos.x, y = y, z = pos.z}, { name = "mcl_crimson:warped_hyphae" }) + --print("Placed at " .. x .. " " .. y .. " " .. z) + end else - if breakgrow2 == false then minetest.set_node(pos,{ name = "mcl_crimson:warped_fungus" }) end + if breakgrow2 == false then minetest.set_node(pos, { name = "mcl_crimson:warped_fungus" }) end end end function generate_crimson_tree(pos) - breakgrow = false - breakgrow2 = false + local breakgrow = false + local breakgrow2 = false -- Baumgenerator -- erste und zweite Etage for x = pos.x - 2,pos.x + 2 do - for y = pos.y + 3, pos.y + 4 do - for z = pos.z - 2, pos.z + 2 do - if not (minetest.get_node({x = x, y = y, z = z}).name == "air") then breakgrow = true end - end + for y = pos.y + 3, pos.y + 4 do + for z = pos.z - 2, pos.z + 2 do + if not (minetest.get_node(vector.new(x, y, z)).name == "air") then breakgrow = true end end end - + end + -- dritte und vierte Etage for x = pos.x - 1,pos.x + 1 do - for y = pos.y + 5, pos.y + 6 do - for z = pos.z - 1, pos.z + 1 do - if not (minetest.get_node({x = x, y = y, z = z}).name == "air") then breakgrow = true end - end + for y = pos.y + 5, pos.y + 6 do + for z = pos.z - 1, pos.z + 1 do + if not (minetest.get_node(vector.new(x, y, z)).name == "air") then breakgrow = true end end end - + end + -- fünfte Etage if not (minetest.get_node({x = pos.x, y = pos.y + 7, z = pos.z}).name == "air") then breakgrow = true end - -- Holz - if not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "air") and not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "mcl_crimson:crimson_fungus") then breakgrow = true end - for y = pos.y + 1, pos.y + 4 do - if not (minetest.get_node({x = pos.x, y = y, z = pos.z}).name == "air") then breakgrow = true end - print(minetest.get_node({x = pos.x, y = y, z = pos.z}).name) - end - if not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "air") and not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "mcl_crimson:crimson_fungus") then breakgrow2 = true end - print(tostring(breakgrow)) + -- Holz + if not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "air") and not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "mcl_crimson:crimson_fungus") then breakgrow = true end + for y = pos.y + 1, pos.y + 4 do + if not (minetest.get_node({x = pos.x, y = y, z = pos.z}).name == "air") then breakgrow = true end + --print(minetest.get_node({x = pos.x, y = y, z = pos.z}).name) + end + if not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "air") and not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "mcl_crimson:crimson_fungus") then breakgrow2 = true end + --print(tostring(breakgrow)) if breakgrow == false then - -- Warzen - -- erste und zweite Etage - for x = pos.x - 2,pos.x + 2 do + -- Warzen + -- erste und zweite Etage + for x = pos.x - 2,pos.x + 2 do for y = pos.y + 3, pos.y + 4 do for z = pos.z - 2, pos.z + 2 do minetest.set_node({x = x, y = y, z = z}, { name = "mcl_nether:nether_wart_block" }) end end end - - -- dritte und vierte Etage - for x = pos.x - 1,pos.x + 1 do + + -- dritte und vierte Etage + for x = pos.x - 1,pos.x + 1 do for y = pos.y + 5, pos.y + 6 do for z = pos.z - 1, pos.z + 1 do minetest.set_node({x = x, y = y, z = z}, { name = "mcl_nether:nether_wart_block" }) end end end - - -- fünfte Etage - minetest.set_node({x = pos.x, y = pos.y + 7, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) - -- Pilzlich - local randomgenerate = math.random(1, 2) - if randomgenerate == 1 then - local randomx = math.random(-2, 2) - local randomz = math.random(-2, 2) - minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_crimson:shroomlight" }) - end - local randomgenerate = math.random(1, 8) - if randomgenerate == 4 then - local randomx = math.random(-2, 2) - local randomz = math.random(-2, 2) - minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_crimson:shroomlight" }) - end - -- Holz - for y = pos.y, pos.y + 4 do - minetest.set_node({x = pos.x, y = y, z = pos.z}, { name = "mcl_crimson:crimson_hyphae" }) - --print("Placed at " .. x .. " " .. y .. " " .. z) - end + -- fünfte Etage + minetest.set_node({x = pos.x, y = pos.y + 7, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) + + -- Pilzlich + local randomgenerate = math.random(1, 2) + if randomgenerate == 1 then + local randomx = math.random(-2, 2) + local randomz = math.random(-2, 2) + minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_crimson:shroomlight" }) + end + local randomgenerate = math.random(1, 8) + if randomgenerate == 4 then + local randomx = math.random(-2, 2) + local randomz = math.random(-2, 2) + minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_crimson:shroomlight" }) + end + -- Holz + for y = pos.y, pos.y + 4 do + minetest.set_node({x = pos.x, y = y, z = pos.z}, { name = "mcl_crimson:crimson_hyphae" }) + --print("Placed at " .. x .. " " .. y .. " " .. z) + end else - if breakgrow2 == false then minetest.set_node(pos,{ name = "mcl_crimson:crimson_fungus" }) end + if breakgrow2 == false then minetest.set_node(pos, { name = "mcl_crimson:crimson_fungus" }) end end end @@ -827,6 +797,7 @@ minetest.register_ore({ }) --]] +--[[ minetest.register_decoration({ deco_type = "simple", place_on = {"mcl_crimson:warped_nylium"}, @@ -849,3 +820,4 @@ minetest.register_decoration({ y_min = -29065, decoration = "mcl_crimson:crimson_fungus", }) +]] \ No newline at end of file diff --git a/mods/ITEMS/mcl_crimson/locale/mcl_mushrooms.de.tr b/mods/ITEMS/mcl_crimson/locale/mcl_crimson.de.tr similarity index 96% rename from mods/ITEMS/mcl_crimson/locale/mcl_mushrooms.de.tr rename to mods/ITEMS/mcl_crimson/locale/mcl_crimson.de.tr index becde0256..480094dbd 100644 --- a/mods/ITEMS/mcl_crimson/locale/mcl_mushrooms.de.tr +++ b/mods/ITEMS/mcl_crimson/locale/mcl_crimson.de.tr @@ -1,4 +1,4 @@ -# textdomain: mcl_mushroom +# textdomain: mcl_crimson Warped Fungus Mushroom=Wirrpilz Twisting Vines=Zwirbelranken diff --git a/mods/ITEMS/mcl_crimson/locale/mcl_mushroom.fr.tr b/mods/ITEMS/mcl_crimson/locale/mcl_crimson.fr.tr similarity index 93% rename from mods/ITEMS/mcl_crimson/locale/mcl_mushroom.fr.tr rename to mods/ITEMS/mcl_crimson/locale/mcl_crimson.fr.tr index e301a8b8a..41f151617 100644 --- a/mods/ITEMS/mcl_crimson/locale/mcl_mushroom.fr.tr +++ b/mods/ITEMS/mcl_crimson/locale/mcl_crimson.fr.tr @@ -1,4 +1,4 @@ -# textdomain: mcl_mushroom +# textdomain: mcl_crimson Warped Fungus Mushroom=Champignon tordu Twisting Vines=Liane tordue diff --git a/mods/ITEMS/mcl_crimson/locale/template.txt b/mods/ITEMS/mcl_crimson/locale/template.txt index 67d53d790..386bc5160 100644 --- a/mods/ITEMS/mcl_crimson/locale/template.txt +++ b/mods/ITEMS/mcl_crimson/locale/template.txt @@ -1,4 +1,4 @@ -# textdomain: mcl_mushroom +# textdomain: mcl_crimson Warped Fungus Mushroom= Twisting Vines= diff --git a/mods/ITEMS/mcl_crimson/mod.conf b/mods/ITEMS/mcl_crimson/mod.conf index fa2afa590..4dbf770c3 100644 --- a/mods/ITEMS/mcl_crimson/mod.conf +++ b/mods/ITEMS/mcl_crimson/mod.conf @@ -1,2 +1,4 @@ -depends = mcl_stairs, mobs_mc name = mcl_crimson +author = debiankaios +depends = mcl_stairs, mobs_mc, mcl_util + -- 2.40.1 From 489ee80490f01bd8106fa2b12c832452a9612aa0 Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 26 May 2022 19:33:02 +0200 Subject: [PATCH 111/357] remove enderman spawning --- mods/ITEMS/mcl_crimson/init.lua | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/mods/ITEMS/mcl_crimson/init.lua b/mods/ITEMS/mcl_crimson/init.lua index 272adc113..eef765bb5 100644 --- a/mods/ITEMS/mcl_crimson/init.lua +++ b/mods/ITEMS/mcl_crimson/init.lua @@ -315,16 +315,6 @@ minetest.register_abm({ end, }) -mobs:spawn({ - name = "mobs_mc:enderman", - nodes = "mcl_crimson:warped_nylium", - max_light = 15, - min_light = 0, - chance = 300, - active_object_count = 20, - max_height = -28940, -}) - minetest.register_node("mcl_crimson:crimson_fungus", { description = S("Crimson Fungus Mushroom"), drawtype = "plantlike", -- 2.40.1 From 1c3a6f8a19dac0c3905e8da850e0b57700b15275 Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 26 May 2022 19:47:35 +0200 Subject: [PATCH 112/357] replace algorithmic fungus gen by schematic it was always the same anyways (except for the shroomlight) --- mods/ITEMS/mcl_crimson/init.lua | 175 ++---------------- .../schematics/crimson_mushroom.mts | Bin 0 -> 169 bytes .../schematics/warped_mushroom.mts | Bin 0 -> 167 bytes 3 files changed, 12 insertions(+), 163 deletions(-) create mode 100644 mods/ITEMS/mcl_crimson/schematics/crimson_mushroom.mts create mode 100644 mods/ITEMS/mcl_crimson/schematics/warped_mushroom.mts diff --git a/mods/ITEMS/mcl_crimson/init.lua b/mods/ITEMS/mcl_crimson/init.lua index eef765bb5..3853c88cd 100644 --- a/mods/ITEMS/mcl_crimson/init.lua +++ b/mods/ITEMS/mcl_crimson/init.lua @@ -1,10 +1,17 @@ -local S = minetest.get_translator("mcl_crimson") +local modname = minetest.get_current_modname() +local S = minetest.get_translator(modname) +local modpath = minetest.get_modpath(modname) +-- Warped and Crimson fungus +-- by debiankaios +-- adapted for mcl2 by cora --- Warped fungus --- Crimson fungus ---Functions and Biomes +local function generate_warped_tree(pos) + minetest.place_schematic(vector.offset(pos,-2,0,-2),modpath.."/schematics/warped_mushroom.mts") +end --- WARNING: The most comments are in german. Please Translate with an translater if you don't speak good german +function generate_crimson_tree(pos) + minetest.place_schematic(vector.offset(pos,-2,0,-2),modpath.."/schematics/crimson_mushroom.mts") +end minetest.register_node("mcl_crimson:warped_fungus", { description = S("Warped Fungus Mushroom"), @@ -547,164 +554,6 @@ minetest.register_abm({ end }) -local function generate_warped_tree(pos) - local breakgrow = false - local breakgrow2 = false - -- Baumgenerator - -- erste und zweite Etage - for x = pos.x - 2,pos.x + 2 do - for y = pos.y + 3, pos.y + 4 do - for z = pos.z - 2, pos.z + 2 do - if not (minetest.get_node(vector.new(x, y, z)).name == "air") then breakgrow = true end - end - end - end - - -- dritte und vierte Etage - for x = pos.x - 1,pos.x + 1 do - for y = pos.y + 5, pos.y + 6 do - for z = pos.z - 1, pos.z + 1 do - if not (minetest.get_node(vector.new(x, y, z)).name == "air") then breakgrow = true end - end - end - end - - -- fünfte Etage - if not (minetest.get_node({x = pos.x, y = pos.y + 7, z = pos.z}).name == "air") then breakgrow = true end - - -- Holz - if not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "air") and not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "mcl_crimson:warped_fungus") then breakgrow = true end - for y = pos.y + 1, pos.y + 4 do - if not (minetest.get_node({x = pos.x, y = y, z = pos.z}).name == "air") then breakgrow = true end - --print(minetest.get_node({x = pos.x, y = y, z = pos.z}).name) - end - if not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "air") and not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "mcl_crimson:warped_fungus") then breakgrow2 = true end - --print(tostring(breakgrow)) - if breakgrow == false then - -- Warzen - -- erste und zweite Etage - for x = pos.x - 2,pos.x + 2 do - for y = pos.y + 3, pos.y + 4 do - for z = pos.z - 2, pos.z + 2 do - minetest.set_node(vector.new(x, y, z), { name = "mcl_crimson:warped_wart_block" }) - end - end - end - - -- dritte und vierte Etage - for x = pos.x - 1,pos.x + 1 do - for y = pos.y + 5, pos.y + 6 do - for z = pos.z - 1, pos.z + 1 do - minetest.set_node(vector.new(x, y, z), { name = "mcl_crimson:warped_wart_block" }) - end - end - end - - -- fünfte Etage - minetest.set_node({x = pos.x, y = pos.y + 7, z = pos.z}, { name = "mcl_crimson:warped_wart_block" }) - - -- Pilzlich - local randomgenerate = math.random(1, 2) - if randomgenerate == 1 then - local randomx = math.random(-2, 2) - local randomz = math.random(-2, 2) - minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_crimson:shroomlight" }) - end - local randomgenerate = math.random(1, 8) - if randomgenerate == 4 then - local randomx = math.random(-2, 2) - local randomz = math.random(-2, 2) - minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_crimson:shroomlight" }) - end - -- Holz - for y = pos.y, pos.y + 4 do - minetest.set_node({x = pos.x, y = y, z = pos.z}, { name = "mcl_crimson:warped_hyphae" }) - --print("Placed at " .. x .. " " .. y .. " " .. z) - end - else - if breakgrow2 == false then minetest.set_node(pos, { name = "mcl_crimson:warped_fungus" }) end - end -end - -function generate_crimson_tree(pos) - local breakgrow = false - local breakgrow2 = false - -- Baumgenerator - -- erste und zweite Etage - for x = pos.x - 2,pos.x + 2 do - for y = pos.y + 3, pos.y + 4 do - for z = pos.z - 2, pos.z + 2 do - if not (minetest.get_node(vector.new(x, y, z)).name == "air") then breakgrow = true end - end - end - end - - -- dritte und vierte Etage - for x = pos.x - 1,pos.x + 1 do - for y = pos.y + 5, pos.y + 6 do - for z = pos.z - 1, pos.z + 1 do - if not (minetest.get_node(vector.new(x, y, z)).name == "air") then breakgrow = true end - end - end - end - - -- fünfte Etage - if not (minetest.get_node({x = pos.x, y = pos.y + 7, z = pos.z}).name == "air") then breakgrow = true end - - -- Holz - if not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "air") and not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "mcl_crimson:crimson_fungus") then breakgrow = true end - for y = pos.y + 1, pos.y + 4 do - if not (minetest.get_node({x = pos.x, y = y, z = pos.z}).name == "air") then breakgrow = true end - --print(minetest.get_node({x = pos.x, y = y, z = pos.z}).name) - end - if not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "air") and not (minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "mcl_crimson:crimson_fungus") then breakgrow2 = true end - --print(tostring(breakgrow)) - if breakgrow == false then - -- Warzen - -- erste und zweite Etage - for x = pos.x - 2,pos.x + 2 do - for y = pos.y + 3, pos.y + 4 do - for z = pos.z - 2, pos.z + 2 do - minetest.set_node({x = x, y = y, z = z}, { name = "mcl_nether:nether_wart_block" }) - end - end - end - - -- dritte und vierte Etage - for x = pos.x - 1,pos.x + 1 do - for y = pos.y + 5, pos.y + 6 do - for z = pos.z - 1, pos.z + 1 do - minetest.set_node({x = x, y = y, z = z}, { name = "mcl_nether:nether_wart_block" }) - end - end - end - - -- fünfte Etage - minetest.set_node({x = pos.x, y = pos.y + 7, z = pos.z}, { name = "mcl_nether:nether_wart_block" }) - - -- Pilzlich - local randomgenerate = math.random(1, 2) - if randomgenerate == 1 then - local randomx = math.random(-2, 2) - local randomz = math.random(-2, 2) - minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_crimson:shroomlight" }) - end - local randomgenerate = math.random(1, 8) - if randomgenerate == 4 then - local randomx = math.random(-2, 2) - local randomz = math.random(-2, 2) - minetest.set_node({x = pos.x + randomx, y = pos.y + 3, z = pos.z + randomz}, { name = "mcl_crimson:shroomlight" }) - end - -- Holz - for y = pos.y, pos.y + 4 do - minetest.set_node({x = pos.x, y = y, z = pos.z}, { name = "mcl_crimson:crimson_hyphae" }) - --print("Placed at " .. x .. " " .. y .. " " .. z) - end - else - if breakgrow2 == false then minetest.set_node(pos, { name = "mcl_crimson:crimson_fungus" }) end - end -end - --[[ FIXME: Biomes are to rare diff --git a/mods/ITEMS/mcl_crimson/schematics/crimson_mushroom.mts b/mods/ITEMS/mcl_crimson/schematics/crimson_mushroom.mts new file mode 100644 index 0000000000000000000000000000000000000000..ff2ba058cbd97a106d1cba951d4918f4845a6b6d GIT binary patch literal 169 zcmeYb3HD`RVPIw8U|_9>0wA9`F|&w4CO0`JJ}V)4Gl+v^ zlZ!HQi}UlWiZhDx^K)}D(=$pKq>v?`3gR;=3o;T@E9N989N?B%IDzwA(vkIz3<*b= uBqy9Xn#XMHC+1;ld`Bg1&ojZtMW61tud1wY_-nwZ(sFSD8-w$<0wA9`F|&w4JU2NfKDj6}w>Uq~syL%4KR-7oGd-h(K^9q} zJh7-CH6 Date: Fri, 27 May 2022 02:06:55 +0200 Subject: [PATCH 113/357] make nether mushroom rotation random --- mods/ITEMS/mcl_crimson/init.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/ITEMS/mcl_crimson/init.lua b/mods/ITEMS/mcl_crimson/init.lua index 3853c88cd..9e7be2b58 100644 --- a/mods/ITEMS/mcl_crimson/init.lua +++ b/mods/ITEMS/mcl_crimson/init.lua @@ -6,11 +6,11 @@ local modpath = minetest.get_modpath(modname) -- adapted for mcl2 by cora local function generate_warped_tree(pos) - minetest.place_schematic(vector.offset(pos,-2,0,-2),modpath.."/schematics/warped_mushroom.mts") + minetest.place_schematic(vector.offset(pos,-2,0,-2),modpath.."/schematics/warped_mushroom.mts","random") end function generate_crimson_tree(pos) - minetest.place_schematic(vector.offset(pos,-2,0,-2),modpath.."/schematics/crimson_mushroom.mts") + minetest.place_schematic(vector.offset(pos,-2,0,-2),modpath.."/schematics/crimson_mushroom.mts","random") end minetest.register_node("mcl_crimson:warped_fungus", { -- 2.40.1 From 3c79685c484084280d3c1a3ea10a43bbc71e32d3 Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 16 Jun 2022 22:17:11 +0200 Subject: [PATCH 114/357] Add main nether biomes Add nether forests Add soulsand valley decorations Add Basalt Delta basics --- .../mcl_blackstone_nether_fossil_1.mts | Bin 0 -> 78 bytes .../mcl_blackstone_nether_fossil_2.mts | Bin 0 -> 112 bytes .../mcl_blackstone_nether_fossil_3.mts | Bin 0 -> 116 bytes .../mcl_blackstone_nether_fossil_4.mts | Bin 0 -> 123 bytes mods/ITEMS/mcl_crimson/init.lua | 159 +---------- mods/MAPGEN/mcl_biomes/init.lua | 269 +++++++++++++++++- mods/MAPGEN/mcl_biomes/mod.conf | 2 +- 7 files changed, 269 insertions(+), 161 deletions(-) create mode 100644 mods/ITEMS/mcl_blackstone/schematics/mcl_blackstone_nether_fossil_1.mts create mode 100644 mods/ITEMS/mcl_blackstone/schematics/mcl_blackstone_nether_fossil_2.mts create mode 100644 mods/ITEMS/mcl_blackstone/schematics/mcl_blackstone_nether_fossil_3.mts create mode 100644 mods/ITEMS/mcl_blackstone/schematics/mcl_blackstone_nether_fossil_4.mts diff --git a/mods/ITEMS/mcl_blackstone/schematics/mcl_blackstone_nether_fossil_1.mts b/mods/ITEMS/mcl_blackstone/schematics/mcl_blackstone_nether_fossil_1.mts new file mode 100644 index 0000000000000000000000000000000000000000..7ec39bacffc1ed9623caff7428926d9ff074ff89 GIT binary patch literal 78 zcmeYb3HD`RVPFPA-un7_1||mP#LOZF;oRh$_~iVeRI8-?ywv!loc!eMiaE&%4vako gXF85Zi)EcsTvH^#B5Yt8)#bn_9V^MuvQJ1308*D1J^%m! literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_blackstone/schematics/mcl_blackstone_nether_fossil_2.mts b/mods/ITEMS/mcl_blackstone/schematics/mcl_blackstone_nether_fossil_2.mts new file mode 100644 index 0000000000000000000000000000000000000000..bafc88993850e8a746706e8d181da94a5677ecca GIT binary patch literal 112 zcmeYb3HD`RVPFMf-g+QlU}9iS%q(IM&P~pVPtGq&wMxp*ON~#;$xqI%n3J5Kz#*|v zMR`g}OSkf7iNGgrXQi{AEo?4Q&|+Uy#Ad+kGR3*#aF{GxLUO``hm49A4<05uKjYIa O<#AcT%#atLcG1D%t literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_crimson/init.lua b/mods/ITEMS/mcl_crimson/init.lua index 9e7be2b58..6963f4c35 100644 --- a/mods/ITEMS/mcl_crimson/init.lua +++ b/mods/ITEMS/mcl_crimson/init.lua @@ -139,7 +139,7 @@ minetest.register_node("mcl_crimson:warped_wart_block", { minetest.register_node("mcl_crimson:shroomlight", { description = S("Shroomlight"), tiles = {"shroomlight.png"}, - groups = {handy = 1, hoe = 7, swordy = 1, leafdecay = 1, leafdecay_distance = 1, leaves = 1, deco_block = 1}, + groups = {handy = 1, hoe = 7, swordy = 1, leafdecay = 5, leaves = 1, deco_block = 1}, -- this is 15 in Minecraft light_source = 14, _mcl_hardness = 2, @@ -300,28 +300,6 @@ minetest.register_abm({ end }) -minetest.register_abm({ - label = "mcl_crimson:warped_checknode", - nodenames = {"mcl_crimson:warped_checknode"}, - interval = 1, - chance = 1, - action = function(pos) - local pos1 = vector.offset(pos, 0, 1, 0) - local nodepos = minetest.get_node(pos1) - if nodepos.name == "air" then - minetest.swap_node(pos, { name = "mcl_crimson:warped_nylium" }) - local randomg = math.random(1, 40) - if randomg == 2 then - minetest.set_node(pos1, { name = "mcl_crimson:warped_fungus" }) - elseif randomg == 7 then - generate_warped_tree(pos1) - end - else - minetest.swap_node(pos, { name = "mcl_nether:netherrack" }) - end - end, -}) - minetest.register_node("mcl_crimson:crimson_fungus", { description = S("Crimson Fungus Mushroom"), drawtype = "plantlike", @@ -525,138 +503,3 @@ minetest.register_abm({ end end }) - -minetest.register_abm({ - label = "mcl_crimson:crimson_checknode", - nodenames = {"mcl_crimson:crimson_checknode"}, - interval = 1, - chance = 1, - action = function(pos) - local pos1 = vector.offset(pos, 0, 1, 0) - local nodepos = minetest.get_node(pos1) - if nodepos.name == "air" then - minetest.swap_node(pos, { name = "mcl_crimson:crimson_nylium" }) - - local randomg = math.random(1, 400) - - if randomg <= 10 then - minetest.set_node(pos1, { name = "mcl_crimson:crimson_fungus" }) - elseif randomg > 10 and randomg <= 25 then - generate_crimson_tree(pos1) - elseif randomg > 25 and randomg <= 30 then - minetest.set_node(pos1, { name = "mcl_crimson:warped_fungus" }) - elseif randomg > 30 and randomg <= 130 then - minetest.set_node(pos1, { name = "mcl_crimson:crimson_roots" }) - end - else - minetest.swap_node(pos, { name = "mcl_nether:netherrack" }) - end - end -}) - - ---[[ -FIXME: Biomes are to rare -FIXME: Decoration don't do generate -WARNING: Outdatet, the biomes gernerate now different, with Ores --- biomes in test! -minetest.register_biome({ - name = "WarpedForest", - node_filler = "mcl_nether:netherrack", - node_stone = "mcl_nether:netherrack", - node_top = "mcl_crimson:warped_nylium", - node_water = "air", - node_river_water = "air", - y_min = -29065, - y_max = -28940, - heat_point = 100, - humidity_point = 0, - _mcl_biome_type = "hot", - _mcl_palette_index = 19, -}) -minetest.register_decoration({ - deco_type = "simple", - place_on = {"mcl_crimson:warped_nylium"}, - sidelen = 16, - noise_params = { - offset = 0.01, - scale = 0.0022, - spread = {x = 250, y = 250, z = 250}, - seed = 2, - octaves = 3, - persist = 0.66 - }, - biomes = {"WarpedForest"}, - y_min = -29065, - y_max = -28940 + 80, - decoration = "mcl_crimson:warped_fungus", -}) -]] ---[[ No Ore gen for now -minetest.register_ore({ - ore_type = "sheet", - ore = "mcl_crimson:warped_checknode", - -- Note: Stone is included only for v6 mapgen support. Netherrack is not generated naturally - -- in v6, but instead set with the on_generated function in mcl_mapgen_core. - wherein = {"mcl_nether:netherrack", "mcl_core:stone"}, - clust_scarcity = 14 * 14 * 14, - clust_size = 10, - y_min = -29065, - y_max = -28940, - noise_threshold = 0.0, - noise_params = { - offset = 0.5, - scale = 0.1, - spread = {x = 8, y = 8, z = 8}, - seed = 4996, - octaves = 1, - persist = 0.0 - }, -}) - -minetest.register_ore({ - ore_type = "sheet", - ore = "mcl_crimson:crimson_checknode", - -- Note: Stone is included only for v6 mapgen support. Netherrack is not generated naturally - -- in v6, but instead set with the on_generated function in mcl_mapgen_core. - wherein = {"mcl_nether:netherrack", "mcl_core:stone"}, - clust_scarcity = 10 * 10 * 10, - clust_size = 10, - y_min = -29065, - y_max = -28940, - noise_threshold = 0.0, - noise_params = { - offset = 1, - scale = 0.5, - spread = {x = 12, y = 12, z = 12}, - seed = 12948, - octaves = 1, - persist = 0.0 - }, -}) ---]] - ---[[ -minetest.register_decoration({ - deco_type = "simple", - place_on = {"mcl_crimson:warped_nylium"}, - sidelen = 16, - fill_ratio = 0.1, - biomes = {"Nether"}, - y_max = -28940, - y_min = -29065, - decoration = "mcl_crimson:warped_fungus", -}) - - -minetest.register_decoration({ - deco_type = "simple", - place_on = {"mcl_crimson:crimson_nylium"}, - sidelen = 16, - fill_ratio = 0.1, - biomes = {"Nether"}, - y_max = -28940, - y_min = -29065, - decoration = "mcl_crimson:crimson_fungus", -}) -]] \ No newline at end of file diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index f198e09fa..9e52a5274 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -9,6 +9,8 @@ local generate_fallen_logs = minetest.settings:get_bool("mcl_generate_fallen_log local mod_mcl_structures = minetest.get_modpath("mcl_structures") local mod_mcl_core = minetest.get_modpath("mcl_core") local mod_mcl_mushrooms = minetest.get_modpath("mcl_mushrooms") +local mod_mcl_crimson = minetest.get_modpath("mcl_crimson") +local mod_mcl_blackstone = minetest.get_modpath("mcl_blackstone") -- Jungle bush schematic. In PC/Java Edition it's Jungle Wood + Oak Leaves local jungle_bush_schematic = mod_mcl_core.."/schematics/mcl_core_jungle_bush_oak_leaves.mts" @@ -1490,14 +1492,147 @@ local function register_dimension_biomes() node_river_water = "air", node_cave_liquid = "air", y_min = mcl_vars.mg_nether_min, - -- FIXME: For some reason the Nether stops generating early if this constant is not added. - -- Figure out why. + y_max = mcl_vars.mg_nether_max + 80, heat_point = 100, humidity_point = 0, _mcl_biome_type = "hot", _mcl_palette_index = 17, }) + minetest.register_biome({ + name = "SoulsandValley", + node_filler = "mcl_nether:netherrack", + node_stone = "mcl_nether:netherrack", + node_top = "mcl_blackstone:soul_soil", + node_water = "air", + node_river_water = "air", + node_cave_liquid = "air", + y_min = mcl_vars.mg_nether_min, + + y_max = mcl_vars.mg_nether_max + 80, + heat_point = 80, + humidity_point = 20, + _mcl_biome_type = "hot", + _mcl_palette_index = 17, + }) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_nether:netherrack","mcl_nether:glowstone"}, + sidelen = 16, + fill_ratio = 10, + biomes = { "SoulsandValley" }, + y_min = -31000, + y_max = mcl_vars.mg_nether_max, + decoration = "mcl_blackstone:soul_soil", + flags = "all_floors, all_ceilings", + param2 = 0, + }) + minetest.register_biome({ + name = "CrimsonForest", + node_filler = "mcl_nether:netherrack", + node_stone = "mcl_nether:netherrack", + node_top = "mcl_crimson:crimson_nylium", + node_water = "air", + node_river_water = "air", + node_cave_liquid = "air", + y_min = mcl_vars.mg_nether_min, + + y_max = mcl_vars.mg_nether_max + 80, + heat_point = 60, + humidity_point = 40, + _mcl_biome_type = "hot", + _mcl_palette_index = 17, + }) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_nether:netherrack","mcl_nether:glowstone"}, + sidelen = 16, + fill_ratio = 10, + biomes = { "CrimsonForest" }, + y_min = -31000, + y_max = mcl_vars.mg_nether_max, + decoration = "mcl_crimson:crimson_nylium", + flags = "all_floors, all_ceilings", + param2 = 0, + }) + minetest.register_biome({ + name = "WarpedForest", + node_filler = "mcl_nether:netherrack", + node_stone = "mcl_nether:netherrack", + node_top = "mcl_crimson:warped_nylium", + node_water = "air", + node_river_water = "air", + node_cave_liquid = "air", + y_min = mcl_vars.mg_nether_min, + y_max = mcl_vars.mg_nether_max + 80, + heat_point = 40, + humidity_point = 60, + _mcl_biome_type = "hot", + _mcl_palette_index = 17, + }) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_nether:netherrack","mcl_nether:glowstone"}, + sidelen = 16, + fill_ratio = 10, + biomes = { "WarpedForest" }, + y_min = -31000, + y_max = mcl_vars.mg_nether_max, + decoration = "mcl_crimson:warped_nylium", + flags = "all_floors, all_ceilings", + param2 = 0, + }) + minetest.register_biome({ + name = "BasaltDelta", + node_filler = "mcl_nether:netherrack", + node_stone = "mcl_nether:netherrack", + node_top = "mcl_blackstone:basalt", + node_water = "air", + node_river_water = "air", + node_cave_liquid = "air", + y_min = mcl_vars.mg_nether_min, + y_max = mcl_vars.mg_nether_max + 80, + heat_point = 20, + humidity_point = 80, + _mcl_biome_type = "hot", + _mcl_palette_index = 17, + }) + + + minetest.register_ore({ + ore_type = "blob", + ore = "mcl_blackstone:blackstone", + wherein = { "mcl_nether:netherrack" }, + clust_scarcity = 100, + clust_num_ores = 100, + clust_size = 10, + biomes = { "BasaltDelta" }, + y_min = mcl_vars.mg_nether_min, + y_max = mcl_vars.mg_nether_max + 80, + noise_params = { + offset = 0, + scale = 1, + spread = { x = 250, y = 250, z = 250 }, + seed = 12345, + octaves = 3, + persist = 0.6, + lacunarity = 2, + flags = "defaults", + } + }) + + minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_nether:netherrack","mcl_nether:glowstone","mcl_blackstone:blackstone"}, + sidelen = 16, + fill_ratio = 10, + biomes = { "BasaltDelta" }, + y_min = -31000, + y_max = mcl_vars.mg_nether_max, + decoration = "mcl_blackstone:basalt", + flags = "all_floors, all_ceilings", + param2 = 0, + }) --[[ THE END ]] minetest.register_biome({ @@ -3913,6 +4048,136 @@ local function register_dimension_decorations() --[[ NETHER ]] -- TODO: Nether + -- WARPED FOREST + minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_crimson:warped_nylium"}, + sidelen = 16, + fill_ratio = 0.02, + biomes = {"WarpedForest"}, + y_min = mcl_vars.mg_lava_nether_max + 1, + flags = "all_floors", + decoration = "mcl_crimson:warped_fungus", + }) + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"mcl_crimson:warped_nylium"}, + sidelen = 16, + fill_ratio = 0.022, + biomes = {"WarpedForest"}, + y_min = mcl_vars.mg_lava_nether_max + 1, + flags = "all_floors, place_center_x, place_center_z", + schematic = mod_mcl_crimson.."/schematics/warped_mushroom.mts", + size = {x = 5, y = 8, z = 5}, + rotation = "random", + }) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_crimson:warped_nylium","mcl_crimson:twisting_vines"}, + sidelen = 16, + fill_ratio = 0.012, + biomes = {"WarpedForest"}, + y_min = mcl_vars.mg_lava_nether_max + 1, + flags = "all_floors", + height = 3, + max_height = 5, + decoration = "mcl_crimson:twisting_vines", + }) + -- CRIMSON FOREST + minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_crimson:crimson_nylium"}, + sidelen = 16, + fill_ratio = 0.02, + biomes = {"CrimsonForest"}, + y_min = mcl_vars.mg_lava_nether_max + 1, + flags = "all_floors", + decoration = "mcl_crimson:crimson_fungus", + }) + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"mcl_crimson:crimson_nylium"}, + sidelen = 16, + fill_ratio = 0.022, + biomes = {"CrimsonForest"}, + y_min = mcl_vars.mg_lava_nether_max + 1, + flags = "all_floors, place_center_x, place_center_z", + schematic = mod_mcl_crimson.."/schematics/crimson_mushroom.mts", + size = {x = 5, y = 8, z = 5}, + rotation = "random", + }) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_crimson:crimson_nylium"}, + sidelen = 16, + fill_ratio = 0.012, + biomes = {"CrimsonForest"}, + y_min = mcl_vars.mg_lava_nether_max + 1, + flags = "all_floors", + max_height = 5, + decoration = "mcl_crimson:crimson_roots", + }) + --SOULSAND VALLEY + minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_blackstone:soul_soil","mcl_nether:soulsand"}, + sidelen = 16, + fill_ratio = 0.012, + biomes = {"SoulsandValley"}, + y_min = mcl_vars.mg_lava_nether_max + 1, + flags = "all_floors", + max_height = 5, + decoration = "mcl_blackstone:soul_fire", + }) + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"mcl_blackstone:soul_soil","mcl_nether:soulsand"}, + sidelen = 16, + fill_ratio = 0.000212, + biomes = {"SoulsandValley"}, + y_min = mcl_vars.mg_lava_nether_max + 1, + flags = "all_floors, place_center_x, place_center_z", + schematic = mod_mcl_blackstone.."/schematics/mcl_blackstone_nether_fossil_1.mts", + size = {x = 5, y = 8, z = 5}, + rotation = "random", + }) + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"mcl_blackstone:soul_soil","mcl_nether:soulsand"}, + sidelen = 16, + fill_ratio = 0.0002233, + biomes = {"SoulsandValley"}, + y_min = mcl_vars.mg_lava_nether_max + 1, + flags = "all_floors, place_center_x, place_center_z", + schematic = mod_mcl_blackstone.."/schematics/mcl_blackstone_nether_fossil_2.mts", + size = {x = 5, y = 8, z = 5}, + rotation = "random", + }) + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"mcl_blackstone:soul_soil","mcl_nether:soulsand"}, + sidelen = 16, + fill_ratio = 0.000225, + biomes = {"SoulsandValley"}, + y_min = mcl_vars.mg_lava_nether_max + 1, + flags = "all_floors, place_center_x, place_center_z", + schematic = mod_mcl_blackstone.."/schematics/mcl_blackstone_nether_fossil_3.mts", + size = {x = 5, y = 8, z = 5}, + rotation = "random", + }) + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"mcl_blackstone:soul_soil","mcl_nether:soulsand"}, + sidelen = 16, + fill_ratio = 0.00022323, + biomes = {"SoulsandValley"}, + y_min = mcl_vars.mg_lava_nether_max + 1, + flags = "all_floors, place_center_x, place_center_z", + schematic = mod_mcl_blackstone.."/schematics/mcl_blackstone_nether_fossil_4.mts", + size = {x = 5, y = 8, z = 5}, + rotation = "random", + }) + --[[ THE END ]] -- Chorus plant diff --git a/mods/MAPGEN/mcl_biomes/mod.conf b/mods/MAPGEN/mcl_biomes/mod.conf index 0c6095f3d..b02d78e05 100644 --- a/mods/MAPGEN/mcl_biomes/mod.conf +++ b/mods/MAPGEN/mcl_biomes/mod.conf @@ -1,4 +1,4 @@ name = mcl_biomes author = maikerumine description = Adds the various biomes and biome-related things for non-v6 map generators. -depends = mcl_init, mcl_mapgen_core, mcl_core, mcl_worlds, mcl_farming, mcl_flowers, mcl_end, mcl_ocean +depends = mcl_init, mcl_mapgen_core, mcl_core, mcl_worlds, mcl_farming, mcl_flowers, mcl_end, mcl_ocean, mcl_crimson, mcl_blackstone -- 2.40.1 From 8efbd89b6a664e1ee854380d8667eaf099474920 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 17 Jun 2022 03:09:40 +0200 Subject: [PATCH 115/357] Add basalt columns & lava pools --- mods/ENTITIES/mcl_mobs/spawning.lua | 3 + mods/ENTITIES/mobs_mc/enderman.lua | 2 + mods/ENTITIES/mobs_mc/skeleton+stray.lua | 2 + mods/MAPGEN/mcl_biomes/init.lua | 26 ++++++- mods/MAPGEN/mcl_surface_pools/init.lua | 87 ++++++++++++++++++++++-- 5 files changed, 113 insertions(+), 7 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/spawning.lua b/mods/ENTITIES/mcl_mobs/spawning.lua index 71f4ec859..8fa2e7a8a 100644 --- a/mods/ENTITIES/mcl_mobs/spawning.lua +++ b/mods/ENTITIES/mcl_mobs/spawning.lua @@ -189,6 +189,9 @@ local list_of_all_biomes = { "MesaBryce", "JungleEdge", "SavannaM", + "Nether", + "WarpedForest", + "SoulsandValley" } -- count how many mobs are in an area diff --git a/mods/ENTITIES/mobs_mc/enderman.lua b/mods/ENTITIES/mobs_mc/enderman.lua index 9ed59bb1f..2391c4b21 100644 --- a/mods/ENTITIES/mobs_mc/enderman.lua +++ b/mods/ENTITIES/mobs_mc/enderman.lua @@ -751,6 +751,8 @@ mcl_mobs:spawn_specific( "JungleM_underground", "ExtremeHillsM_underground", "JungleEdgeM_underground", +"Nether", +"WarpedForest" }, 0, 7, diff --git a/mods/ENTITIES/mobs_mc/skeleton+stray.lua b/mods/ENTITIES/mobs_mc/skeleton+stray.lua index aab719b1c..ccfae401a 100644 --- a/mods/ENTITIES/mobs_mc/skeleton+stray.lua +++ b/mods/ENTITIES/mobs_mc/skeleton+stray.lua @@ -286,6 +286,8 @@ mcl_mobs:spawn_specific( "JungleM_underground", "ExtremeHillsM_underground", "JungleEdgeM_underground", +"Nether", +"SoulsandValley" }, 0, 7, diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index 9e52a5274..136780477 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -4083,6 +4083,17 @@ local function register_dimension_decorations() max_height = 5, decoration = "mcl_crimson:twisting_vines", }) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_crimson:warped_nylium"}, + sidelen = 16, + fill_ratio = 0.0812, + biomes = {"WarpedForest"}, + y_min = mcl_vars.mg_lava_nether_max + 1, + flags = "all_floors", + max_height = 5, + decoration = "mcl_crimson:warped_roots", + }) -- CRIMSON FOREST minetest.register_decoration({ deco_type = "simple", @@ -4110,19 +4121,30 @@ local function register_dimension_decorations() deco_type = "simple", place_on = {"mcl_crimson:crimson_nylium"}, sidelen = 16, - fill_ratio = 0.012, + fill_ratio = 0.082, biomes = {"CrimsonForest"}, y_min = mcl_vars.mg_lava_nether_max + 1, flags = "all_floors", max_height = 5, decoration = "mcl_crimson:crimson_roots", }) + + minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_crimson:crimson_nylium"}, + sidelen = 16, + fill_ratio = 0.052, + biomes = {"CrimsonForest"}, + y_min = mcl_vars.mg_lava_nether_max + 1, + flags = "all_floors", + decoration = "mcl_crimson:nether_sprouts", + }) --SOULSAND VALLEY minetest.register_decoration({ deco_type = "simple", place_on = {"mcl_blackstone:soul_soil","mcl_nether:soulsand"}, sidelen = 16, - fill_ratio = 0.012, + fill_ratio = 0.082, biomes = {"SoulsandValley"}, y_min = mcl_vars.mg_lava_nether_max + 1, flags = "all_floors", diff --git a/mods/MAPGEN/mcl_surface_pools/init.lua b/mods/MAPGEN/mcl_surface_pools/init.lua index ed42f52bb..2c5fa9254 100644 --- a/mods/MAPGEN/mcl_surface_pools/init.lua +++ b/mods/MAPGEN/mcl_surface_pools/init.lua @@ -22,13 +22,13 @@ local function airtower(pos) end end -local function makelake(pos,size,liquid,border,pr) +local function makelake(pos,size,liquid,placein,border,pr) local node_under = minetest.get_node(vector.offset(pos,0,1,0)) local p1 = vector.offset(pos,-size,-size,-size) local p2 = vector.offset(pos,size,size,size) - local nn = minetest.find_nodes_in_area(p1,p2,{"group:material_stone", "group:sand", "group:dirt"}) + local nn = minetest.find_nodes_in_area(p1,p2,placein) table.sort(nn,function(a, b) - return vector.distance(pos, a) < vector.distance(pos, b) + return vector.distance(vector.new(pos.x,0,pos.z), a) < vector.distance(vector.new(pos.x,0,pos.z), b) end) if not nn[1] then return end local y = pos.y + 1 @@ -82,7 +82,7 @@ mcl_structures.register_structure("lavapool",{ y_max = mcl_vars.mg_overworld_max, y_min = minetest.get_mapgen_setting("water_level"), place_func = function(pos,def,pr) - return makelake(pos,5,"mcl_core:lava_source","mcl_core:stone",pr) + return makelake(pos,5,"mcl_core:lava_source","mcl_core:stone",{"group:material_stone", "group:sand", "group:dirt"},pr) end }) @@ -101,6 +101,83 @@ mcl_structures.register_structure("water_lake",{ y_max = mcl_vars.mg_overworld_max, y_min = minetest.get_mapgen_setting("water_level"), place_func = function(pos,def,pr) - return makelake(pos,5,"mcl_core:water_source",nil,pr) + return makelake(pos,5,"mcl_core:water_source",{"group:material_stone", "group:sand", "group:dirt"},nil,pr) + end +}) + + +mcl_structures.register_structure("basalt_column",{ + place_on = {"mcl_blackstone:blackstone","mcl_blackstone:basalt"}, + spawn_by = {"air"}, + num_spawn_by = 2, + noise_params = { + offset = 0, + scale = 0.01, + spread = {x = 250, y = 250, z = 250}, + seed = 78375213, + octaves = 5, + persist = 0.1, + flags = "absvalue", + }, + flags = "all_floors", + y_max = mcl_vars.mg_nether_max, + y_min = mcl_vars.mg_lava_nether_max + 1, + biomes = { "BasaltDelta" }, + place_func = function(pos,def,pr) + local nn = minetest.find_nodes_in_area(vector.offset(pos,-5,-1,-5),vector.offset(pos,5,-1,5),{"air","mcl_blackstone:basalt","mcl_blackstone:blackstone"}) + table.sort(nn,function(a, b) + return vector.distance(vector.new(pos.x,0,pos.z), a) < vector.distance(vector.new(pos.x,0,pos.z), b) + end) + if #nn < 1 then return false end + for i=1,pr:next(1,#nn) do + local dst=vector.distance(pos,nn[i]) + for ii=0,pr:next(1,15)-dst do + set_node_no_bedrock(vector.new(nn[i].x,nn[i].y + ii,nn[i].z),{name="mcl_blackstone:basalt"}) + end + end + return true + end +}) + +mcl_structures.register_structure("netherlavapool",{ + place_on = {"mcl_blackstone:blackstone","mcl_blackstone:basalt"}, + spawn_by = {"mcl_blackstone:basalt","mcl_blackstone:blackstone"}, + num_spawn_by = 2, + noise_params = { + offset = 0, + scale = 0.01, + spread = {x = 250, y = 250, z = 250}, + seed = 78375213, + octaves = 5, + persist = 0.1, + flags = "absvalue", + }, + flags = "all_floors", + y_max = mcl_vars.mg_nether_max, + y_min = mcl_vars.mg_lava_nether_max + 1, + biomes = { "BasaltDelta" }, + place_func = function(pos,def,pr) + local nn = minetest.find_nodes_in_area(vector.offset(pos,-15,-1,-15),vector.offset(pos,15,-1,15),{"mcl_blackstone:basalt","mcl_blackstone:blackstone"}) + table.sort(nn,function(a, b) + return vector.distance(vector.new(pos.x,0,pos.z), a) < vector.distance(vector.new(pos.x,0,pos.z), b) + end) + if #nn < 1 then return false end + local lava = {} + for i=1,pr:next(1,#nn) do + set_node_no_bedrock(nn[i],{name="mcl_nether:nether_lava_source"}) + table.insert(lava,nn[i]) + end + for _,v in pairs(lava) do + for _,vv in pairs(adjacents) do + local p = vector.add(v,vv) + if minetest.get_node(p).name ~= "mcl_nether:nether_lava_source" then + set_node_no_bedrock(p,{name="mcl_blackstone:basalt"}) + end + end + if math.random(3) == 1 then + set_node_no_bedrock(v,{name="mcl_nether:magma"}) + end + end + return true end }) -- 2.40.1 From db9fba70ddae0036631b6dbc6673924fa4339d8a Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 17 Jun 2022 15:54:36 +0200 Subject: [PATCH 116/357] some biome tweaks, add nether gold --- mods/ITEMS/mcl_blackstone/init.lua | 31 +------------ mods/ITEMS/mcl_crimson/init.lua | 3 +- mods/MAPGEN/mcl_biomes/init.lua | 70 ++++++++++++++++++++++++++---- 3 files changed, 64 insertions(+), 40 deletions(-) diff --git a/mods/ITEMS/mcl_blackstone/init.lua b/mods/ITEMS/mcl_blackstone/init.lua index 8c69b903d..cfdd87837 100644 --- a/mods/ITEMS/mcl_blackstone/init.lua +++ b/mods/ITEMS/mcl_blackstone/init.lua @@ -323,36 +323,7 @@ for s=1, #specialstones do end if minetest.settings:get_bool("mcl_generate_ores", true) then - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_blackstone:blackstone_gilded", - wherein = "mcl_blackstone:blackstone", - clust_scarcity = 4775, - clust_num_ores = 2, - clust_size = 2, - y_min = mcl_vars.mg_nether_min, - y_max = mcl_vars.mg_nether_max, - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_blackstone:nether_gold", - wherein = "mcl_nether:netherrack", - clust_scarcity = 830, - clust_num_ores = 5, - clust_size = 3, - y_min = mcl_vars.mg_nether_min, - y_max = mcl_vars.mg_nether_max, - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_blackstone:nether_gold", - wherein = "mcl_nether:netherrack", - clust_scarcity = 1660, - clust_num_ores = 4, - clust_size = 2, - y_min = mcl_vars.mg_nether_min, - y_max = mcl_vars.mg_nether_max, - }) + end --]] --soul torch diff --git a/mods/ITEMS/mcl_crimson/init.lua b/mods/ITEMS/mcl_crimson/init.lua index 6963f4c35..18072982d 100644 --- a/mods/ITEMS/mcl_crimson/init.lua +++ b/mods/ITEMS/mcl_crimson/init.lua @@ -140,8 +140,7 @@ minetest.register_node("mcl_crimson:shroomlight", { description = S("Shroomlight"), tiles = {"shroomlight.png"}, groups = {handy = 1, hoe = 7, swordy = 1, leafdecay = 5, leaves = 1, deco_block = 1}, - -- this is 15 in Minecraft - light_source = 14, + light_source = minetest.LIGHT_MAX, _mcl_hardness = 2, }) diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index 136780477..f7ab76877 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -1527,6 +1527,28 @@ local function register_dimension_biomes() flags = "all_floors, all_ceilings", param2 = 0, }) + + minetest.register_ore({ + ore_type = "blob", + ore = "mcl_nether:soul_sand", + wherein = { "mcl_nether:netherrack", "mcl_blackstone:soul_soil" }, + clust_scarcity = 100, + clust_num_ores = 100, + clust_size = 10, + biomes = { "SoulsandValley" }, + y_min = mcl_vars.mg_nether_min, + y_max = mcl_vars.mg_nether_max + 80, + noise_params = { + offset = 0, + scale = 1, + spread = { x = 250, y = 250, z = 250 }, + seed = 12345, + octaves = 3, + persist = 0.6, + lacunarity = 2, + flags = "defaults", + } + }) minetest.register_biome({ name = "CrimsonForest", node_filler = "mcl_nether:netherrack", @@ -1552,7 +1574,7 @@ local function register_dimension_biomes() y_min = -31000, y_max = mcl_vars.mg_nether_max, decoration = "mcl_crimson:crimson_nylium", - flags = "all_floors, all_ceilings", + flags = "all_floors", param2 = 0, }) minetest.register_biome({ @@ -1579,7 +1601,7 @@ local function register_dimension_biomes() y_min = -31000, y_max = mcl_vars.mg_nether_max, decoration = "mcl_crimson:warped_nylium", - flags = "all_floors, all_ceilings", + flags = "all_floors", param2 = 0, }) minetest.register_biome({ @@ -1598,7 +1620,6 @@ local function register_dimension_biomes() _mcl_palette_index = 17, }) - minetest.register_ore({ ore_type = "blob", ore = "mcl_blackstone:blackstone", @@ -1621,7 +1642,7 @@ local function register_dimension_biomes() } }) - minetest.register_decoration({ + minetest.register_decoration({ deco_type = "simple", place_on = {"mcl_nether:netherrack","mcl_nether:glowstone","mcl_blackstone:blackstone"}, sidelen = 16, @@ -1716,6 +1737,39 @@ local function register_biome_ores() "MesaPlateauFM", "MesaPlateauFM_sandlevel", "MesaPlateauFM_ocean", }, }) end + --nether gold + if mg_name ~= "v6" then + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_blackstone:blackstone_gilded", + wherein = "mcl_blackstone:blackstone", + clust_scarcity = 4775, + clust_num_ores = 2, + clust_size = 2, + y_min = mcl_vars.mg_nether_min, + y_max = mcl_vars.mg_nether_max, + }) + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_blackstone:nether_gold", + wherein = "mcl_nether:netherrack", + clust_scarcity = 830, + clust_num_ores = 5, + clust_size = 3, + y_min = mcl_vars.mg_nether_min, + y_max = mcl_vars.mg_nether_max, + }) + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_blackstone:nether_gold", + wherein = "mcl_nether:netherrack", + clust_scarcity = 1660, + clust_num_ores = 4, + clust_size = 2, + y_min = mcl_vars.mg_nether_min, + y_max = mcl_vars.mg_nether_max, + }) + end end -- Register “fake” ores directly related to the biomes. These are mostly low-level landscape alternations @@ -4046,7 +4100,6 @@ end -- Decorations in non-Overworld dimensions local function register_dimension_decorations() --[[ NETHER ]] - -- TODO: Nether -- WARPED FOREST minetest.register_decoration({ @@ -4066,6 +4119,7 @@ local function register_dimension_decorations() fill_ratio = 0.022, biomes = {"WarpedForest"}, y_min = mcl_vars.mg_lava_nether_max + 1, + y_max = mcl_vars.mg_nether_max - 10, flags = "all_floors, place_center_x, place_center_z", schematic = mod_mcl_crimson.."/schematics/warped_mushroom.mts", size = {x = 5, y = 8, z = 5}, @@ -4112,6 +4166,7 @@ local function register_dimension_decorations() fill_ratio = 0.022, biomes = {"CrimsonForest"}, y_min = mcl_vars.mg_lava_nether_max + 1, + y_max = mcl_vars.mg_nether_max - 10, flags = "all_floors, place_center_x, place_center_z", schematic = mod_mcl_crimson.."/schematics/crimson_mushroom.mts", size = {x = 5, y = 8, z = 5}, @@ -4142,9 +4197,9 @@ local function register_dimension_decorations() --SOULSAND VALLEY minetest.register_decoration({ deco_type = "simple", - place_on = {"mcl_blackstone:soul_soil","mcl_nether:soulsand"}, + place_on = {"mcl_blackstone:soul_soil","mcl_nether:soul_sand"}, sidelen = 16, - fill_ratio = 0.082, + fill_ratio = 0.062, biomes = {"SoulsandValley"}, y_min = mcl_vars.mg_lava_nether_max + 1, flags = "all_floors", @@ -4281,4 +4336,3 @@ if mg_name ~= "singlenode" then end end - -- 2.40.1 From 48189cb3a76fc385981d5b9bee8ccfb9e5c4a86a Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 17 Jun 2022 23:12:37 +0200 Subject: [PATCH 117/357] fix lighting issue for placed schematics warped and crimson shroomlight would not work correctly before because they're placed after light calculation is done apparently --- mods/MAPGEN/mcl_biomes/init.lua | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index f7ab76877..ea2322a9a 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -4114,6 +4114,7 @@ local function register_dimension_decorations() }) minetest.register_decoration({ deco_type = "schematic", + name = "mcl_biomes:warped_tree", place_on = {"mcl_crimson:warped_nylium"}, sidelen = 16, fill_ratio = 0.022, @@ -4161,6 +4162,7 @@ local function register_dimension_decorations() }) minetest.register_decoration({ deco_type = "schematic", + name = "mcl_biomes:crimson_tree", place_on = {"mcl_crimson:crimson_nylium"}, sidelen = 16, fill_ratio = 0.022, @@ -4317,10 +4319,14 @@ if mg_name ~= "singlenode" then -- Overworld decorations for v6 are handled in mcl_mapgen_core - if deco_id_chorus_plant then + local deco_id_crimson_tree =minetest.get_decoration_id("mcl_biomes:crimson_tree") + local deco_id_warped_tree =minetest.get_decoration_id("mcl_biomes:warped_tree") + minetest.set_gen_notify({decoration=true}, { deco_id_crimson_tree }) + minetest.set_gen_notify({decoration=true}, { deco_id_warped_tree }) + if deco_id_chorus_plant or deco_id_crimson_tree or deco_id_warped_tree then mcl_mapgen_core.register_generator("chorus_grow", nil, function(minp, maxp, blockseed) + if minp.y > -26900 then return end local gennotify = minetest.get_mapgen_object("gennotify") - --local poslist = {} local pr = PseudoRandom(blockseed + 14) for _, pos in ipairs(gennotify["decoration#"..deco_id_chorus_plant] or {}) do local x, y, z = pos.x, pos.y, pos.z @@ -4332,6 +4338,13 @@ if mg_name ~= "singlenode" then end end end + if minp.y > mcl_vars.mg_nether_max then return end + for _, pos in ipairs(gennotify["decoration#"..deco_id_crimson_tree] or {}) do + minetest.fix_light(vector.offset(pos,-8,-8,-8),vector.offset(pos,8,8,8)) + end + for _, pos in ipairs(gennotify["decoration#"..deco_id_warped_tree] or {}) do + minetest.fix_light(vector.offset(pos,-8,-8,-8),vector.offset(pos,8,8,8)) + end end) end -- 2.40.1 From a0264ed5e0503f8da27849bedd24301cce973c0b Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 17 Jun 2022 23:30:00 +0200 Subject: [PATCH 118/357] tweak biome distribution to be more like mc according to https://www.reddit.com/r/Minecraft/comments/gjeuww/how_the_nether_biomes_are_distributed/ --- mods/MAPGEN/mcl_biomes/init.lua | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index ea2322a9a..ed4c1f14a 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -1510,8 +1510,8 @@ local function register_dimension_biomes() y_min = mcl_vars.mg_nether_min, y_max = mcl_vars.mg_nether_max + 80, - heat_point = 80, - humidity_point = 20, + heat_point = 77, + humidity_point = 33, _mcl_biome_type = "hot", _mcl_palette_index = 17, }) @@ -1561,7 +1561,7 @@ local function register_dimension_biomes() y_max = mcl_vars.mg_nether_max + 80, heat_point = 60, - humidity_point = 40, + humidity_point = 47, _mcl_biome_type = "hot", _mcl_palette_index = 17, }) @@ -1587,8 +1587,8 @@ local function register_dimension_biomes() node_cave_liquid = "air", y_min = mcl_vars.mg_nether_min, y_max = mcl_vars.mg_nether_max + 80, - heat_point = 40, - humidity_point = 60, + heat_point = 37, + humidity_point = 70, _mcl_biome_type = "hot", _mcl_palette_index = 17, }) @@ -1614,7 +1614,7 @@ local function register_dimension_biomes() node_cave_liquid = "air", y_min = mcl_vars.mg_nether_min, y_max = mcl_vars.mg_nether_max + 80, - heat_point = 20, + heat_point = 27, humidity_point = 80, _mcl_biome_type = "hot", _mcl_palette_index = 17, -- 2.40.1 From d9a74ac18075aee27d922162eb2a926bbace3f93 Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 18 Jun 2022 01:46:31 +0200 Subject: [PATCH 119/357] rename mcl_surface_pools -> mcl_terrain_features --- .../textures/crimson_stem_stripped_side.png | Bin 0 -> 193 bytes .../textures/crimson_stem_stripped_top.png | Bin 0 -> 6699 bytes .../textures/stripped_crimson_stem.png | Bin 0 -> 6365 bytes .../textures/stripped_warped_stem.png | Bin 0 -> 6600 bytes .../textures/warped_stem_stripped_side.png | Bin 0 -> 200 bytes .../textures/warped_stem_stripped_top.png | Bin 0 -> 7039 bytes .../init.lua | 0 .../mod.conf | 2 +- 8 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 mods/ITEMS/mcl_crimson/textures/crimson_stem_stripped_side.png create mode 100644 mods/ITEMS/mcl_crimson/textures/crimson_stem_stripped_top.png create mode 100644 mods/ITEMS/mcl_crimson/textures/stripped_crimson_stem.png create mode 100644 mods/ITEMS/mcl_crimson/textures/stripped_warped_stem.png create mode 100644 mods/ITEMS/mcl_crimson/textures/warped_stem_stripped_side.png create mode 100644 mods/ITEMS/mcl_crimson/textures/warped_stem_stripped_top.png rename mods/MAPGEN/{mcl_surface_pools => mcl_terrain_features}/init.lua (100%) rename mods/MAPGEN/{mcl_surface_pools => mcl_terrain_features}/mod.conf (63%) diff --git a/mods/ITEMS/mcl_crimson/textures/crimson_stem_stripped_side.png b/mods/ITEMS/mcl_crimson/textures/crimson_stem_stripped_side.png new file mode 100644 index 0000000000000000000000000000000000000000..ad6a41a2ed679bb4aeba43bb934944d4abb9606c GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?bjnyzp(=aO1G^$e9Z_zZE z*!$=*P%78c#W95AI&bem!6OPhN6dV<6y&%Lw6XEsVfgkf{_@Am&dLv$R^AAjB4Ype z`o|o}i+-+_)ohy=$^J@W(w+H=eFC==>%K1%SGZcDXO&F(u;dnRk(%v3?rmrDFDxrK pdv)Qp9e3V&OHB>0vv8L9#s2-OsL-oROdvNgc)I$ztaD0e0sukTN5237 literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_crimson/textures/crimson_stem_stripped_top.png b/mods/ITEMS/mcl_crimson/textures/crimson_stem_stripped_top.png new file mode 100644 index 0000000000000000000000000000000000000000..313ae0f5aa60001f2f59a41a8d5eb4773f5145c5 GIT binary patch literal 6699 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 literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_crimson/textures/stripped_warped_stem.png b/mods/ITEMS/mcl_crimson/textures/stripped_warped_stem.png new file mode 100644 index 0000000000000000000000000000000000000000..88a7a8d336829ed45885abbc68ca78d39bd2e208 GIT binary patch literal 6600 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 Oi{bbNvk!W&Nd6a;zRP?7 literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_crimson/textures/warped_stem_stripped_side.png b/mods/ITEMS/mcl_crimson/textures/warped_stem_stripped_side.png new file mode 100644 index 0000000000000000000000000000000000000000..db93c05cb449ae364df6f0653b72382c070aa62d GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VWwJ`THv-GjD337CZa&=1d zaZ6wQ&%zrhTj=TH7{YO#_v}H@!wNhs7jqe{H4j{SoTqZx!GTvH_y5|K+jIUs@cz7E zp+#`b-u-RKr=&|`f2_ILT)9y1SAy7;lvV4QZYo}BvbK$T)hd*id8wdH{i@lCd0%#v x-!Qqqp!DI3#g1!>cD$V)qV@LRLAgT}|6&qk```DsaR4o6@O1TaS?83{1OR&;P*wl{ literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_crimson/textures/warped_stem_stripped_top.png b/mods/ITEMS/mcl_crimson/textures/warped_stem_stripped_top.png new file mode 100644 index 0000000000000000000000000000000000000000..2e2c35b7c460d17b630b75758b5ca853c8f301f4 GIT binary patch literal 7039 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 T^+{z=s$ev)g`P* Date: Sat, 18 Jun 2022 01:48:33 +0200 Subject: [PATCH 120/357] fix style details and mistakes in mcl_crimson --- mods/ITEMS/mcl_crimson/init.lua | 58 +++++++-------------------------- 1 file changed, 12 insertions(+), 46 deletions(-) diff --git a/mods/ITEMS/mcl_crimson/init.lua b/mods/ITEMS/mcl_crimson/init.lua index 18072982d..9b2a33bb9 100644 --- a/mods/ITEMS/mcl_crimson/init.lua +++ b/mods/ITEMS/mcl_crimson/init.lua @@ -6,11 +6,11 @@ local modpath = minetest.get_modpath(modname) -- adapted for mcl2 by cora local function generate_warped_tree(pos) - minetest.place_schematic(vector.offset(pos,-2,0,-2),modpath.."/schematics/warped_mushroom.mts","random") + minetest.place_schematic(pos,modpath.."/schematics/warped_mushroom.mts","random",nil,false,"place_center_x,place_center_z") end function generate_crimson_tree(pos) - minetest.place_schematic(vector.offset(pos,-2,0,-2),modpath.."/schematics/crimson_mushroom.mts","random") + minetest.place_schematic(pos,modpath.."/schematics/crimson_mushroom.mts","random",nil,false,"place_center_x,place_center_z") end minetest.register_node("mcl_crimson:warped_fungus", { @@ -160,7 +160,6 @@ minetest.register_node("mcl_crimson:warped_hyphae", { on_place = mcl_util.rotate_axis, groups = {handy = 1, axey = 1, tree = 1, building_block = 1, material_wood = 1}, sounds = mcl_sounds.node_sound_wood_defaults(), - on_rotate = on_rotate, _mcl_blast_resistance = 2, _mcl_hardness = 2, _mcl_stripped_variant = "mcl_crimson:stripped_warped_hyphae", @@ -185,17 +184,6 @@ minetest.register_node("mcl_crimson:warped_nylium", { _mcl_silk_touch_drop = true, }) -minetest.register_node("mcl_crimson:warped_checknode", { - description = S("Warped Checknode - only to check!"), - tiles = {"mcl_nether_netherrack.png"}, - groups = {pickaxey = 1, building_block = 1, material_stone = 1, not_in_creative_inventory = 1}, - paramtype2 = "facedir", - _mcl_hardness = 0.4, - _mcl_blast_resistance = 0.4, - is_ground_content = true, - drop = "mcl_nether:netherrack" -}) - --Stem bark, stripped stem and bark minetest.register_node("mcl_crimson:warped_hyphae_bark", { @@ -207,7 +195,6 @@ minetest.register_node("mcl_crimson:warped_hyphae_bark", { groups = {handy = 1, axey = 1, bark = 1, building_block = 1, material_wood = 1}, sounds = mcl_sounds.node_sound_wood_defaults(), is_ground_content = false, - on_rotate = on_rotate, _mcl_blast_resistance = 2, _mcl_hardness = 2, _mcl_stripped_variant = "mcl_crimson:stripped_warped_hyphae_bark", @@ -222,29 +209,27 @@ minetest.register_craft({ }) minetest.register_node("mcl_crimson:stripped_warped_hyphae", { - description = description_stripped_trunk, - _doc_items_longdesc = longdesc, + description = S("Stripped warped hyphae"), + _doc_items_longdesc = S("The stripped hyphae of a warped fungus"), _doc_items_hidden = false, - tiles = {tile_stripped_inner, tile_stripped_inner, tile_stripped_bark}, + tiles = {"warped_stem_stripped_top.png", "crimson_stem_warped_top.png", "warped_stem_stripped_side.png"}, paramtype2 = "facedir", on_place = mcl_util.rotate_axis, groups = {handy = 1, axey = 1, tree = 1, building_block = 1, material_wood = 1}, sounds = mcl_sounds.node_sound_wood_defaults(), - on_rotate = on_rotate, _mcl_blast_resistance = 2, _mcl_hardness = 2, }) minetest.register_node("mcl_crimson:stripped_warped_hyphae_bark", { - description = description_stripped_bark, - _doc_items_longdesc = longdesc_wood, - tiles = {tile_stripped_bark}, + description = S("Stripped warped hyphae bark"), + _doc_items_longdesc = S("The stripped hyphae bark of a warped fungus"), + tiles = {"crimson_stem_stripped_side.png"}, paramtype2 = "facedir", on_place = mcl_util.rotate_axis, groups = {handy = 1, axey = 1, bark = 1, building_block = 1, material_wood = 1}, sounds = mcl_sounds.node_sound_wood_defaults(), is_ground_content = false, - on_rotate = on_rotate, _mcl_blast_resistance = 2, _mcl_hardness = 2, }) @@ -257,8 +242,6 @@ minetest.register_craft({ }, }) ---Wood - minetest.register_node("mcl_crimson:warped_hyphae_wood", { description = S("Warped Hyphae Wood"), tiles = {"warped_hyphae_wood.png"}, @@ -277,7 +260,7 @@ minetest.register_craft({ }) minetest.register_craft({ - output = "mcl_crimson:warped_nyliumd 2", + output = "mcl_crimson:warped_nylium 2", recipe = { {"mcl_crimson:warped_wart_block"}, {"mcl_nether:netherrack"}, @@ -364,7 +347,6 @@ minetest.register_node("mcl_crimson:crimson_hyphae", { on_place = mcl_util.rotate_axis, groups = {handy = 1, axey = 1, tree = 1, building_block = 1, material_wood = 1}, sounds = mcl_sounds.node_sound_wood_defaults(), - on_rotate = on_rotate, _mcl_blast_resistance = 2, _mcl_hardness = 2, _mcl_stripped_variant = stripped_variant, @@ -381,7 +363,6 @@ minetest.register_node("mcl_crimson:crimson_hyphae_bark", { groups = {handy = 1, axey = 1, bark = 1, building_block = 1, material_wood = 1}, sounds = mcl_sounds.node_sound_wood_defaults(), is_ground_content = false, - on_rotate = on_rotate, _mcl_blast_resistance = 2, _mcl_hardness = 2, _mcl_stripped_variant = "mcl_crimson:stripped_crimson_hyphae_bark", @@ -399,12 +380,11 @@ minetest.register_node("mcl_crimson:stripped_crimson_hyphae", { description = S("Stripped Crimson Hyphae"), _doc_items_longdesc = S("The stripped stem of a crimson hyphae"), _doc_items_hidden = false, - tiles = {"stripped_crimson_stem_top.png", "stripped_crimson_stem_top.png", "stripped_crimson_stem_side.png"}, + tiles = {"crimson_stem_stripped_top.png", "crimson_stem_stripped_top.png", "crimson_stem_stripped_side.png"}, paramtype2 = "facedir", on_place = mcl_util.rotate_axis, groups = {handy = 1, axey = 1, tree = 1, building_block = 1, material_wood = 1}, sounds = mcl_sounds.node_sound_wood_defaults(), - on_rotate = on_rotate, _mcl_blast_resistance = 2, _mcl_hardness = 2, }) @@ -412,13 +392,12 @@ minetest.register_node("mcl_crimson:stripped_crimson_hyphae", { minetest.register_node("mcl_crimson:stripped_crimson_hyphae_bark", { description = S("Stripped Crimson Hyphae Bark"), _doc_items_longdesc = S("The stripped wood of a crimson hyphae"), - tiles = {"stripped_crimson_stem_side.png"}, + tiles = {"crimson_stem_stripped_side.png"}, paramtype2 = "facedir", on_place = mcl_util.rotate_axis, groups = {handy = 1, axey = 1, bark = 1, building_block = 1, material_wood = 1}, sounds = mcl_sounds.node_sound_wood_defaults(), is_ground_content = false, - on_rotate = on_rotate, _mcl_blast_resistance = 2, _mcl_hardness = 2, }) @@ -431,8 +410,6 @@ minetest.register_craft({ }, }) ---Wood - minetest.register_node("mcl_crimson:crimson_hyphae_wood", { description = S("Crimson Hyphae Wood"), tiles = {"crimson_hyphae_wood.png"}, @@ -460,17 +437,6 @@ minetest.register_node("mcl_crimson:crimson_nylium", { _mcl_silk_touch_drop = true, }) -minetest.register_node("mcl_crimson:crimson_checknode", { - description = S("Crimson Checknode - only to check!"), - tiles = {"mcl_nether_netherrack.png"}, - groups = {pickaxey = 1, building_block = 1, material_stone = 1, not_in_creative_inventory = 1}, - paramtype2 = "facedir", - is_ground_content = true, - drop = "mcl_nether:netherrack", - _mcl_hardness = 0.4, - _mcl_blast_resistance = 0.4, -}) - minetest.register_craft({ output = "mcl_crimson:crimson_hyphae_wood 4", recipe = { @@ -479,7 +445,7 @@ minetest.register_craft({ }) minetest.register_craft({ - output = "mcl_crimson:crimson_nyliumd 2", + output = "mcl_crimson:crimson_nylium 2", recipe = { {"mcl_nether:nether_wart"}, {"mcl_nether:netherrack"}, -- 2.40.1 From 01eea4ab8a4000774fc301a851623a6031875d47 Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 18 Jun 2022 01:49:18 +0200 Subject: [PATCH 121/357] prevent nether trees from growing through bedrock --- mods/MAPGEN/mcl_biomes/init.lua | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index ed4c1f14a..3d1653846 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -4109,6 +4109,7 @@ local function register_dimension_decorations() fill_ratio = 0.02, biomes = {"WarpedForest"}, y_min = mcl_vars.mg_lava_nether_max + 1, + y_max = mcl_vars.mg_lava_nether_max - 10, flags = "all_floors", decoration = "mcl_crimson:warped_fungus", }) @@ -4149,6 +4150,16 @@ local function register_dimension_decorations() max_height = 5, decoration = "mcl_crimson:warped_roots", }) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_crimson:crimson_nylium"}, + sidelen = 16, + fill_ratio = 0.052, + biomes = {"WarpedForest"}, + y_min = mcl_vars.mg_lava_nether_max + 1, + flags = "all_floors", + decoration = "mcl_crimson:nether_sprouts", + }) -- CRIMSON FOREST minetest.register_decoration({ deco_type = "simple", @@ -4157,6 +4168,7 @@ local function register_dimension_decorations() fill_ratio = 0.02, biomes = {"CrimsonForest"}, y_min = mcl_vars.mg_lava_nether_max + 1, + y_max = mcl_vars.mg_lava_nether_max - 10, flags = "all_floors", decoration = "mcl_crimson:crimson_fungus", }) @@ -4186,16 +4198,6 @@ local function register_dimension_decorations() decoration = "mcl_crimson:crimson_roots", }) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"mcl_crimson:crimson_nylium"}, - sidelen = 16, - fill_ratio = 0.052, - biomes = {"CrimsonForest"}, - y_min = mcl_vars.mg_lava_nether_max + 1, - flags = "all_floors", - decoration = "mcl_crimson:nether_sprouts", - }) --SOULSAND VALLEY minetest.register_decoration({ deco_type = "simple", -- 2.40.1 From fefb15f2a833b7a1e1e7576c4f82895fad8053f3 Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 18 Jun 2022 14:28:05 +0200 Subject: [PATCH 122/357] Add new fungus tree schematics --- mods/ITEMS/mcl_crimson/init.lua | 4 +- .../schematics/crimson_fungus_1.mts | Bin 0 -> 200 bytes .../schematics/crimson_fungus_2.mts | Bin 0 -> 208 bytes .../schematics/crimson_fungus_3.mts | Bin 0 -> 273 bytes .../schematics/crimson_mushroom.mts | Bin 169 -> 0 bytes .../schematics/warped_fungus_1.mts | Bin 0 -> 209 bytes .../schematics/warped_fungus_2.mts | Bin 0 -> 193 bytes .../schematics/warped_fungus_3.mts | Bin 0 -> 223 bytes .../schematics/warped_mushroom.mts | Bin 167 -> 0 bytes mods/MAPGEN/mcl_biomes/init.lua | 96 ++++++++++++++---- mods/MAPGEN/mcl_geodes/init.lua | 2 - 11 files changed, 81 insertions(+), 21 deletions(-) create mode 100644 mods/ITEMS/mcl_crimson/schematics/crimson_fungus_1.mts create mode 100644 mods/ITEMS/mcl_crimson/schematics/crimson_fungus_2.mts create mode 100644 mods/ITEMS/mcl_crimson/schematics/crimson_fungus_3.mts delete mode 100644 mods/ITEMS/mcl_crimson/schematics/crimson_mushroom.mts create mode 100644 mods/ITEMS/mcl_crimson/schematics/warped_fungus_1.mts create mode 100644 mods/ITEMS/mcl_crimson/schematics/warped_fungus_2.mts create mode 100644 mods/ITEMS/mcl_crimson/schematics/warped_fungus_3.mts delete mode 100644 mods/ITEMS/mcl_crimson/schematics/warped_mushroom.mts diff --git a/mods/ITEMS/mcl_crimson/init.lua b/mods/ITEMS/mcl_crimson/init.lua index 9b2a33bb9..a7fe33f71 100644 --- a/mods/ITEMS/mcl_crimson/init.lua +++ b/mods/ITEMS/mcl_crimson/init.lua @@ -212,7 +212,7 @@ minetest.register_node("mcl_crimson:stripped_warped_hyphae", { description = S("Stripped warped hyphae"), _doc_items_longdesc = S("The stripped hyphae of a warped fungus"), _doc_items_hidden = false, - tiles = {"warped_stem_stripped_top.png", "crimson_stem_warped_top.png", "warped_stem_stripped_side.png"}, + tiles = {"warped_stem_stripped_top.png", "warped_stem_stripped_top.png", "warped_stem_stripped_side.png"}, paramtype2 = "facedir", on_place = mcl_util.rotate_axis, groups = {handy = 1, axey = 1, tree = 1, building_block = 1, material_wood = 1}, @@ -349,7 +349,7 @@ minetest.register_node("mcl_crimson:crimson_hyphae", { sounds = mcl_sounds.node_sound_wood_defaults(), _mcl_blast_resistance = 2, _mcl_hardness = 2, - _mcl_stripped_variant = stripped_variant, + _mcl_stripped_variant = "mcl_crimson:stripped_crimson_hyphae", }) --Stem bark, stripped stem and bark diff --git a/mods/ITEMS/mcl_crimson/schematics/crimson_fungus_1.mts b/mods/ITEMS/mcl_crimson/schematics/crimson_fungus_1.mts new file mode 100644 index 0000000000000000000000000000000000000000..a61712fef3802fbc332eacdf57d548af07641d55 GIT binary patch literal 200 zcmeYb3HD`RVPIw8U|_9>0wA9`F|&w4CO0`JJ}V)4Gf07C zlZ!HQi}UlWpmcmjWkE(_DuXz(TyaKGetvFFW_m_R#hj}Fj(iOYJlS6#{@vB~V9lYH zmdUEOr7lfnQ(*Ppn$FtexqD~rZ~Yw2XD!v6UOBrLJ0wA9`F|&w4CO0`JJ}V)4Gf07C zlZ!HQi}UlWpmcmjWkE(_DuXz(TyaKGetvFFW_m_R#hkkn0=W(ta5$G*SFE#}^XO8h z_xIf*mmCf&honr{H|g2LJ(jgopWR(5`E!O^?~+`pO6%_5wbRZ&d296J`>ScD?1=_5 kyKk@RKfZ&<>`s2>#nlOqDz}Hs@%TOK9DfO8(l$9x05MouxBvhE literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_crimson/schematics/crimson_fungus_3.mts b/mods/ITEMS/mcl_crimson/schematics/crimson_fungus_3.mts new file mode 100644 index 0000000000000000000000000000000000000000..84f8fa791e276979db2eb451e3e57b3d39f0d6db GIT binary patch literal 273 zcmeYb3HD`RVPI$AWniyI20%gP#LOZFncU=@_`KATjMO442o+zRSX2_9l#`#F%^(Gm zO)kpJEzZxgg3|FBl?54zsSM)Ca>W@%`T4mynduoN6?5K(yya_9;FwZX5V!Z{mC_%b zm;OB7T6#}m!R4YnrYoUS*3CPm{f6mal$Ma7kma7jO}&n`ZfGk)c-pcm{a@9NsB z_xMYZ{gdjf1%&Guz-TbEzi@apT6yk$l9b0;)2C)=cdwC@H0>@Il{ literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_crimson/schematics/crimson_mushroom.mts b/mods/ITEMS/mcl_crimson/schematics/crimson_mushroom.mts deleted file mode 100644 index ff2ba058cbd97a106d1cba951d4918f4845a6b6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169 zcmeYb3HD`RVPIw8U|_9>0wA9`F|&w4CO0`JJ}V)4Gl+v^ zlZ!HQi}UlWiZhDx^K)}D(=$pKq>v?`3gR;=3o;T@E9N989N?B%IDzwA(vkIz3<*b= uBqy9Xn#XMHC+1;ld`Bg1&ojZtMW61tud1wY_-nwZ(sFSD8-w$<0wA9`F|&w4Ha9sZKDj6}w>Uq~sywl%AT=c(NR`AV<>V)4 zGe}~Q&ZsQNNK9oAN0utiD9X>z&B;v9D5;opHNcVYfC9(j+lPODP4!?|HsS4#SqaTs zLtMoaHrzcmEC0Y9L92`6((f0i7_=R+(UhC~>2=n&XV$Z8OuzmAeyll4=33^JD@xAZ f#}-GfXj-_-bc=W7)n89{&RZYwM@IbUMMVw(i1b?F literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_crimson/schematics/warped_fungus_2.mts b/mods/ITEMS/mcl_crimson/schematics/warped_fungus_2.mts new file mode 100644 index 0000000000000000000000000000000000000000..564731158990f9d900c96f316339d095f18c9513 GIT binary patch literal 193 zcmeYb3HD`RVPIuoV_>ZZ10at%F|&w4Ha9sZKDj6}w>Uq~sywl%AT=c(NR`AV<>V)4 zGl(Ng7iSdZ=jY~Rre~BeNFqx>^<`8RWF)3m%sK1l$albiW75}$HMQPXv?8~cY)@=j z!nkTC!y*MP!&kQ%Z`q}_-<;8x-Wrhc`P*@?t6%T0Yco-K;i4YbvEBNG-=?HqBfqRg R8k<+Y()z3HCnPA$0|1@?P6Ge{ literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_crimson/schematics/warped_fungus_3.mts b/mods/ITEMS/mcl_crimson/schematics/warped_fungus_3.mts new file mode 100644 index 0000000000000000000000000000000000000000..079631a20b410fd6061f69c6bdceea7384102ca6 GIT binary patch literal 223 zcmeYb3HD`RVPIw8VPLIC0zfh5#LOZF+1%uu_~fF@+~WK^tMbI6g4C3FAXO5dl#`#F z%^;2}U7S&rpP!qPnVwO?Ac-si)t6COkdc^LG3V`sK)wSC9L|Z>7UA)30g4=_{>1uv z*sod75g?$(_cMb1RBh-nmg5J{?T?wh@b`^{79vT?Xa7I&sk&Vee}3)$dDiDOE}!60 rn#5@HZSn=9FVB8!U-Y%^2o{p%-NvPICpCU+zQpgX7nrNAst5r9BnVpb literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_crimson/schematics/warped_mushroom.mts b/mods/ITEMS/mcl_crimson/schematics/warped_mushroom.mts deleted file mode 100644 index 76d59be0e899614f8677c054383fc31d78296928..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167 zcmeYb3HD`RVPIw8U|_9>0wA9`F|&w4JU2NfKDj6}w>Uq~syL%4KR-7oGd-h(K^9q} zJh7-CH6 -26900 then return end @@ -4341,11 +4404,10 @@ if mg_name ~= "singlenode" then end end if minp.y > mcl_vars.mg_nether_max then return end - for _, pos in ipairs(gennotify["decoration#"..deco_id_crimson_tree] or {}) do - minetest.fix_light(vector.offset(pos,-8,-8,-8),vector.offset(pos,8,8,8)) - end - for _, pos in ipairs(gennotify["decoration#"..deco_id_warped_tree] or {}) do - minetest.fix_light(vector.offset(pos,-8,-8,-8),vector.offset(pos,8,8,8)) + for _,f in pairs(deco_ids_fungus) do + for _, pos in ipairs(gennotify["decoration#"..f] or {}) do + minetest.fix_light(vector.offset(pos,-8,-8,-8),vector.offset(pos,8,8,8)) + end end end) end diff --git a/mods/MAPGEN/mcl_geodes/init.lua b/mods/MAPGEN/mcl_geodes/init.lua index 84acd973b..c03173367 100644 --- a/mods/MAPGEN/mcl_geodes/init.lua +++ b/mods/MAPGEN/mcl_geodes/init.lua @@ -76,10 +76,8 @@ mcl_structures.register_structure("geode",{ flags = "absvalue", }, flags = "place_center_x, place_center_z, force_placement", - biomes = ocean_biomes, y_max = -24, y_min = mcl_vars.mg_overworld_min, - filenames = schems, y_offset = function(pr) return pr:next(-4,-2) end, place_func = function(pos,def,pr) local p = vector.new(pos.x + pr:next(-30,30),pos.y,pos.z + pr:next(-30,30)) -- 2.40.1 From 0890c719a3f7d925ec0a521127e194aadabe0585 Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 18 Jun 2022 16:01:25 +0200 Subject: [PATCH 123/357] Add basalt pillars --- mods/MAPGEN/mcl_biomes/init.lua | 18 +++---- mods/MAPGEN/mcl_terrain_features/init.lua | 57 +++++++++++++++++++---- 2 files changed, 58 insertions(+), 17 deletions(-) diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index 5be23e766..3f846b2b6 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -1533,8 +1533,8 @@ local function register_dimension_biomes() ore = "mcl_nether:soul_sand", wherein = { "mcl_nether:netherrack", "mcl_blackstone:soul_soil" }, clust_scarcity = 100, - clust_num_ores = 100, - clust_size = 10, + clust_num_ores = 225, + clust_size = 15, biomes = { "SoulsandValley" }, y_min = mcl_vars.mg_nether_min, y_max = mcl_vars.mg_nether_max + 80, @@ -1623,10 +1623,10 @@ local function register_dimension_biomes() minetest.register_ore({ ore_type = "blob", ore = "mcl_blackstone:blackstone", - wherein = { "mcl_nether:netherrack" }, + wherein = {"mcl_nether:netherrack","mcl_nether:glowstone","mcl_core:gravel","mcl_nether:soul_sand"}, clust_scarcity = 100, - clust_num_ores = 100, - clust_size = 10, + clust_num_ores = 400, + clust_size = 20, biomes = { "BasaltDelta" }, y_min = mcl_vars.mg_nether_min, y_max = mcl_vars.mg_nether_max + 80, @@ -1644,14 +1644,14 @@ local function register_dimension_biomes() minetest.register_decoration({ deco_type = "simple", - place_on = {"mcl_nether:netherrack","mcl_nether:glowstone","mcl_blackstone:blackstone"}, + place_on = {"mcl_nether:netherrack","mcl_nether:glowstone","mcl_blackstone:nether_gold","mcl_nether:quartz_ore","mcl_core:gravel","mcl_nether:soul_sand","mcl_blackstone:blackstone"}, sidelen = 16, fill_ratio = 10, biomes = { "BasaltDelta" }, y_min = -31000, y_max = mcl_vars.mg_nether_max, decoration = "mcl_blackstone:basalt", - flags = "all_floors, all_ceilings", + flags = "all_floors", param2 = 0, }) @@ -4163,8 +4163,8 @@ local function register_dimension_decorations() biomes = {"WarpedForest"}, y_min = mcl_vars.mg_lava_nether_max + 1, flags = "all_floors", - height = 3, - max_height = 5, + height = 2, + height_max = 8, decoration = "mcl_crimson:twisting_vines", }) minetest.register_decoration({ diff --git a/mods/MAPGEN/mcl_terrain_features/init.lua b/mods/MAPGEN/mcl_terrain_features/init.lua index 2c5fa9254..4375e869d 100644 --- a/mods/MAPGEN/mcl_terrain_features/init.lua +++ b/mods/MAPGEN/mcl_terrain_features/init.lua @@ -10,6 +10,13 @@ local adjacents = { vector.new(0,-1,0) } +local plane_adjacents = { + vector.new(1,0,0), + vector.new(-1,0,0), + vector.new(0,0,1), + vector.new(0,0,-1), +} + local function set_node_no_bedrock(pos,node) local n = minetest.get_node(pos) if n.name == "mcl_core:bedrock" then return end @@ -92,7 +99,7 @@ mcl_structures.register_structure("water_lake",{ offset = 0, scale = 0.000032, spread = {x = 250, y = 250, z = 250}, - seed = 734341353, + seed = 756641353, octaves = 3, persist = 0.001, flags = "absvalue", @@ -112,9 +119,9 @@ mcl_structures.register_structure("basalt_column",{ num_spawn_by = 2, noise_params = { offset = 0, - scale = 0.01, + scale = 0.02, spread = {x = 250, y = 250, z = 250}, - seed = 78375213, + seed = 7225213, octaves = 5, persist = 0.1, flags = "absvalue", @@ -130,16 +137,50 @@ mcl_structures.register_structure("basalt_column",{ end) if #nn < 1 then return false end for i=1,pr:next(1,#nn) do - local dst=vector.distance(pos,nn[i]) - for ii=0,pr:next(1,15)-dst do - set_node_no_bedrock(vector.new(nn[i].x,nn[i].y + ii,nn[i].z),{name="mcl_blackstone:basalt"}) + if minetest.get_node(vector.offset(nn[i],0,-1,0)).name ~= "air" then + local dst=vector.distance(pos,nn[i]) + for ii=0,pr:next(2,14)-dst do + set_node_no_bedrock(vector.new(nn[i].x,nn[i].y + ii,nn[i].z),{name="mcl_blackstone:basalt"}) + end + end + end + return true + end +}) +mcl_structures.register_structure("basalt_pillar",{ + place_on = {"mcl_blackstone:blackstone","mcl_blackstone:basalt"}, + noise_params = { + offset = 0, + scale = 0.001, + spread = {x = 250, y = 250, z = 250}, + seed = 783213, + octaves = 5, + persist = 0.1, + flags = "absvalue", + }, + flags = "all_floors", + y_max = mcl_vars.mg_nether_max, + y_min = mcl_vars.mg_lava_nether_max + 1, + biomes = { "BasaltDelta" }, + place_func = function(pos,def,pr) + local nn = minetest.find_nodes_in_area(vector.offset(pos,-2,-1,-2),vector.offset(pos,2,-1,2),{"air","mcl_blackstone:basalt","mcl_blackstone:blackstone"}) + table.sort(nn,function(a, b) + return vector.distance(vector.new(pos.x,0,pos.z), a) < vector.distance(vector.new(pos.x,0,pos.z), b) + end) + if #nn < 1 then return false end + for i=1,pr:next(1,#nn) do + if minetest.get_node(vector.offset(nn[i],0,-1,0)).name ~= "air" then + local dst=vector.distance(pos,nn[i]) + for ii=0,pr:next(19,34)-dst do + set_node_no_bedrock(vector.new(nn[i].x,nn[i].y + ii,nn[i].z),{name="mcl_blackstone:basalt"}) + end end end return true end }) -mcl_structures.register_structure("netherlavapool",{ +mcl_structures.register_structure("lavadelta",{ place_on = {"mcl_blackstone:blackstone","mcl_blackstone:basalt"}, spawn_by = {"mcl_blackstone:basalt","mcl_blackstone:blackstone"}, num_spawn_by = 2, @@ -157,7 +198,7 @@ mcl_structures.register_structure("netherlavapool",{ y_min = mcl_vars.mg_lava_nether_max + 1, biomes = { "BasaltDelta" }, place_func = function(pos,def,pr) - local nn = minetest.find_nodes_in_area(vector.offset(pos,-15,-1,-15),vector.offset(pos,15,-1,15),{"mcl_blackstone:basalt","mcl_blackstone:blackstone"}) + local nn = minetest.find_nodes_in_area_under_air(vector.offset(pos,-10,-1,-10),vector.offset(pos,10,-1,10),{"mcl_blackstone:basalt","mcl_blackstone:blackstone"}) table.sort(nn,function(a, b) return vector.distance(vector.new(pos.x,0,pos.z), a) < vector.distance(vector.new(pos.x,0,pos.z), b) end) -- 2.40.1 From 5b366c692de4e178d4b698ca642a48c3c558b4ef Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 18 Jun 2022 16:28:03 +0200 Subject: [PATCH 124/357] Enable mob spawning in new biomes lower ghast spawning chance --- mods/ENTITIES/mobs_mc/enderman.lua | 23 ++++++++++++++++++---- mods/ENTITIES/mobs_mc/ghast.lua | 8 +++++--- mods/ENTITIES/mobs_mc/skeleton+stray.lua | 6 ++---- mods/ENTITIES/mobs_mc/slime+magma_cube.lua | 9 ++++++--- mods/ENTITIES/mobs_mc/zombiepig.lua | 3 ++- 5 files changed, 34 insertions(+), 15 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/enderman.lua b/mods/ENTITIES/mobs_mc/enderman.lua index 2391c4b21..4dcd6693c 100644 --- a/mods/ENTITIES/mobs_mc/enderman.lua +++ b/mods/ENTITIES/mobs_mc/enderman.lua @@ -751,8 +751,6 @@ mcl_mobs:spawn_specific( "JungleM_underground", "ExtremeHillsM_underground", "JungleEdgeM_underground", -"Nether", -"WarpedForest" }, 0, 7, @@ -768,15 +766,32 @@ mcl_mobs:spawn_specific( "nether", "ground", { -"Nether" +"Nether", +"SoulsandValley", }, 0, -7, +minetest.LIGHT_MAX+1, 30, 27500, 4, mcl_vars.mg_nether_min, mcl_vars.mg_nether_max) +-- Warped Forest spawn (common) +mcl_mobs:spawn_specific( +"mobs_mc:enderman", +"nether", +"ground", +{ +"WarpedForest" +}, +0, +minetest.LIGHT_MAX+1, +30, +5000, +4, +mcl_vars.mg_nether_min, +mcl_vars.mg_nether_max) + -- spawn eggs mcl_mobs:register_egg("mobs_mc:enderman", S("Enderman"), "mobs_mc_spawn_icon_enderman.png", 0) diff --git a/mods/ENTITIES/mobs_mc/ghast.lua b/mods/ENTITIES/mobs_mc/ghast.lua index fd77b9ed8..6e2ea927c 100644 --- a/mods/ENTITIES/mobs_mc/ghast.lua +++ b/mods/ENTITIES/mobs_mc/ghast.lua @@ -81,12 +81,14 @@ mcl_mobs:spawn_specific( "nether", "ground", { -"Nether" +"Nether", +"SoulsandValley", +"BasaltDelta", }, 0, -minetest.LIGHT_MAX+1, +7, 30, -18000, +72000, 2, mcl_vars.mg_nether_min, mcl_vars.mg_nether_max) diff --git a/mods/ENTITIES/mobs_mc/skeleton+stray.lua b/mods/ENTITIES/mobs_mc/skeleton+stray.lua index ccfae401a..005bed66d 100644 --- a/mods/ENTITIES/mobs_mc/skeleton+stray.lua +++ b/mods/ENTITIES/mobs_mc/skeleton+stray.lua @@ -286,8 +286,6 @@ mcl_mobs:spawn_specific( "JungleM_underground", "ExtremeHillsM_underground", "JungleEdgeM_underground", -"Nether", -"SoulsandValley" }, 0, 7, @@ -304,10 +302,10 @@ mcl_mobs:spawn_specific( "nether", "ground", { -"Nether" +"SoulsandValley", }, 0, -7, +minetest.LIGHT_MAX+1, 30, 10000, 3, diff --git a/mods/ENTITIES/mobs_mc/slime+magma_cube.lua b/mods/ENTITIES/mobs_mc/slime+magma_cube.lua index 0c6c1ee1e..911ae15e8 100644 --- a/mods/ENTITIES/mobs_mc/slime+magma_cube.lua +++ b/mods/ENTITIES/mobs_mc/slime+magma_cube.lua @@ -402,7 +402,8 @@ mcl_mobs:spawn_specific( "nether", "ground", { -"Nether" +"Nether", +"BasaltDelta", }, 0, minetest.LIGHT_MAX+1, @@ -418,7 +419,8 @@ mcl_mobs:spawn_specific( "nether", "ground", { -"Nether" +"Nether", +"BasaltDelta", }, 0, minetest.LIGHT_MAX+1, @@ -433,7 +435,8 @@ mcl_mobs:spawn_specific( "nether", "ground", { -"Nether" +"Nether", +"BasaltDelta", }, 0, minetest.LIGHT_MAX+1, diff --git a/mods/ENTITIES/mobs_mc/zombiepig.lua b/mods/ENTITIES/mobs_mc/zombiepig.lua index 3d0b4f183..b054734bc 100644 --- a/mods/ENTITIES/mobs_mc/zombiepig.lua +++ b/mods/ENTITIES/mobs_mc/zombiepig.lua @@ -118,7 +118,8 @@ mcl_mobs:spawn_specific( "nether", "ground", { -"Nether" +"Nether", +"CrimsonForest", }, 0, minetest.LIGHT_MAX+1, -- 2.40.1 From 41f708e03e32b5ba99a6d61aa64b930433c0b248 Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 18 Jun 2022 21:38:20 +0200 Subject: [PATCH 125/357] Regular decorations for legacy nether(except v6) minetest supports this now --- mods/MAPGEN/mcl_biomes/init.lua | 61 +++++++++++++++- mods/MAPGEN/mcl_mapgen_core/init.lua | 105 +++++++++++++-------------- 2 files changed, 112 insertions(+), 54 deletions(-) diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index 3f846b2b6..392f79038 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -1499,6 +1499,20 @@ local function register_dimension_biomes() _mcl_biome_type = "hot", _mcl_palette_index = 17, }) + + minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_nether:netherrack","mcl_nether:glowstone","mcl_blackstone:nether_gold","mcl_nether:quartz_ore","mcl_core:gravel","mcl_nether:soul_sand"}, + sidelen = 16, + fill_ratio = 10, + biomes = { "Nether" }, + y_min = -31000, + y_max = mcl_vars.mg_nether_max, + decoration = "mcl_nether:netherrack", + flags = "all_floors", + param2 = 0, + }) + minetest.register_biome({ name = "SoulsandValley", node_filler = "mcl_nether:netherrack", @@ -4100,6 +4114,51 @@ end -- Decorations in non-Overworld dimensions local function register_dimension_decorations() --[[ NETHER ]] + --NETHER WASTES (Nether) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_nether:netherrack","mcl_nether:magma"}, + sidelen = 16, + fill_ratio = 0.04, + biomes = {"Nether"}, + y_min = mcl_vars.mg_lava_nether_max + 1, + y_max = mcl_vars.mg_nether_max - 1, + flags = "all_floors", + decoration = "mcl_fire:eternal_fire", + }) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_nether:netherrack"}, + sidelen = 16, + fill_ratio = 0.013, + biomes = {"Nether"}, + y_min = mcl_vars.mg_lava_nether_max + 1, + y_max = mcl_vars.mg_nether_max - 1, + flags = "all_floors", + decoration = "mcl_mushrooms:mushroom_brown", + }) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_nether:netherrack"}, + sidelen = 16, + fill_ratio = 0.012, + biomes = {"Nether"}, + y_min = mcl_vars.mg_lava_nether_max + 1, + y_max = mcl_vars.mg_nether_max - 1, + flags = "all_floors", + decoration = "mcl_mushrooms:mushroom_red", + }) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_nether:soul_sand"}, + sidelen = 16, + fill_ratio = 0.0032, + biomes = {"Nether","SoulsandValley"}, + y_min = mcl_vars.mg_lava_nether_max + 1, + y_max = mcl_vars.mg_nether_max - 1, + flags = "all_floors", + decoration = "mcl_nether:nether_wart", + }) -- WARPED FOREST minetest.register_decoration({ @@ -4109,7 +4168,7 @@ local function register_dimension_decorations() fill_ratio = 0.02, biomes = {"WarpedForest"}, y_min = mcl_vars.mg_lava_nether_max + 1, - y_max = mcl_vars.mg_lava_nether_max - 10, + y_max = mcl_vars.mg_nether_max - 10, flags = "all_floors", decoration = "mcl_crimson:warped_fungus", }) diff --git a/mods/MAPGEN/mcl_mapgen_core/init.lua b/mods/MAPGEN/mcl_mapgen_core/init.lua index d9494d18b..2bbcab1cf 100644 --- a/mods/MAPGEN/mcl_mapgen_core/init.lua +++ b/mods/MAPGEN/mcl_mapgen_core/init.lua @@ -1754,70 +1754,69 @@ else nether_wart_chance = 170 end -- Generate Nether decorations manually: Eternal fire, mushrooms, nether wart --- Minetest's API does not support decorations in caves yet. :-( +-- (only v6) local function generate_nether_decorations(minp, maxp, seed) - local pr_nether = PseudoRandom(seed+667) + if mg_name == "v6" then + local pr_nether = PseudoRandom(seed+667) - if minp.y > mcl_vars.mg_nether_max or maxp.y < mcl_vars.mg_nether_min then - return - end - - minetest.log("action", "[mcl_mapgen_core] Nether decorations " .. minetest.pos_to_string(minp) .. " ... " .. minetest.pos_to_string(maxp)) - - -- TODO: Generate everything based on Perlin noise instead of PseudoRandom - - local bpos - local rack = minetest.find_nodes_in_area_under_air(minp, maxp, {"mcl_nether:netherrack"}) - local magma = minetest.find_nodes_in_area_under_air(minp, maxp, {"mcl_nether:magma"}) - local ssand = minetest.find_nodes_in_area_under_air(minp, maxp, {"mcl_nether:soul_sand"}) - - -- Helper function to spawn “fake” decoration - local function special_deco(nodes, spawn_func) - for n = 1, #nodes do - bpos = {x = nodes[n].x, y = nodes[n].y + 1, z = nodes[n].z } - - spawn_func(bpos) + if minp.y > mcl_vars.mg_nether_max or maxp.y < mcl_vars.mg_nether_min then + return end - end + minetest.log("action", "[mcl_mapgen_core] Nether decorations " .. minetest.pos_to_string(minp) .. " ... " .. minetest.pos_to_string(maxp)) - -- Eternal fire on netherrack - special_deco(rack, function(bpos) - -- Eternal fire on netherrack - if pr_nether:next(1,100) <= 3 then - minetest.set_node(bpos, {name = "mcl_fire:eternal_fire"}) - end - end) + -- TODO: Generate everything based on Perlin noise instead of PseudoRandom - -- Eternal fire on magma cubes - special_deco(magma, function(bpos) - if pr_nether:next(1,150) == 1 then - minetest.set_node(bpos, {name = "mcl_fire:eternal_fire"}) - end - end) + local bpos + local rack = minetest.find_nodes_in_area_under_air(minp, maxp, {"mcl_nether:netherrack"}) + local magma = minetest.find_nodes_in_area_under_air(minp, maxp, {"mcl_nether:magma"}) + local ssand = minetest.find_nodes_in_area_under_air(minp, maxp, {"mcl_nether:soul_sand"}) - -- Mushrooms on netherrack - -- Note: Spawned *after* the fire because of light level checks - special_deco(rack, function(bpos) - local l = minetest.get_node_light(bpos, 0.5) - if bpos.y > mcl_vars.mg_lava_nether_max + 6 and l and l <= 12 and pr_nether:next(1,1000) <= 4 then - -- TODO: Make mushrooms appear in groups, use Perlin noise - if pr_nether:next(1,2) == 1 then - minetest.set_node(bpos, {name = "mcl_mushrooms:mushroom_brown"}) - else - minetest.set_node(bpos, {name = "mcl_mushrooms:mushroom_red"}) + -- Helper function to spawn “fake” decoration + local function special_deco(nodes, spawn_func) + for n = 1, #nodes do + bpos = {x = nodes[n].x, y = nodes[n].y + 1, z = nodes[n].z } + + spawn_func(bpos) end end - end) + -- Eternal fire on netherrack + special_deco(rack, function(bpos) + -- Eternal fire on netherrack + if pr_nether:next(1,100) <= 3 then + minetest.set_node(bpos, {name = "mcl_fire:eternal_fire"}) + end + end) - -- Nether wart on soul sand - -- TODO: Spawn in Nether fortresses - special_deco(ssand, function(bpos) - if pr_nether:next(1, nether_wart_chance) == 1 then - minetest.set_node(bpos, {name = "mcl_nether:nether_wart"}) - end - end) + -- Eternal fire on magma cubes + special_deco(magma, function(bpos) + if pr_nether:next(1,150) == 1 then + minetest.set_node(bpos, {name = "mcl_fire:eternal_fire"}) + end + end) + -- Mushrooms on netherrack + -- Note: Spawned *after* the fire because of light level checks + special_deco(rack, function(bpos) + local l = minetest.get_node_light(bpos, 0.5) + if bpos.y > mcl_vars.mg_lava_nether_max + 6 and l and l <= 12 and pr_nether:next(1,1000) <= 4 then + -- TODO: Make mushrooms appear in groups, use Perlin noise + if pr_nether:next(1,2) == 1 then + minetest.set_node(bpos, {name = "mcl_mushrooms:mushroom_brown"}) + else + minetest.set_node(bpos, {name = "mcl_mushrooms:mushroom_red"}) + end + end + end) + + -- Nether wart on soul sand + -- TODO: Spawn in Nether fortresses + special_deco(ssand, function(bpos) + if pr_nether:next(1, nether_wart_chance) == 1 then + minetest.set_node(bpos, {name = "mcl_nether:nether_wart"}) + end + end) + end end minetest.register_on_generated(function(minp, maxp, blockseed) -- 2.40.1 From ecf6236152160be3aa84194009d5bef234785d1a Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 19 Jun 2022 00:05:47 +0200 Subject: [PATCH 126/357] Set fog color according to nether biome --- mods/ENVIRONMENT/mcl_weather/skycolor.lua | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/mods/ENVIRONMENT/mcl_weather/skycolor.lua b/mods/ENVIRONMENT/mcl_weather/skycolor.lua index 7b6183d44..54751007b 100644 --- a/mods/ENVIRONMENT/mcl_weather/skycolor.lua +++ b/mods/ENVIRONMENT/mcl_weather/skycolor.lua @@ -146,8 +146,25 @@ mcl_weather.skycolor = { player:set_stars({visible = false}) mcl_weather.skycolor.override_day_night_ratio(player, 0.5) elseif dim == "nether" then - player:set_sky({ type = "plain", - base_color = "#300808", + local nether_sky = { + Nether = "#300808", + BasaltDelta = "#685F70", + SoulsandValley = "#1B4745", + CrimsonForest = "#330303", + WarpedForest = "#1A051A" + } + local biometint = nether_sky[minetest.get_biome_name(minetest.get_biome_data(player:get_pos()).biome)] + + player:set_sky({ + type = "regular", + sky_color = { + day_sky = "#300808", + day_horizon = biometint, + dawn_sky = "#300808", + dawn_horizon = biometint, + night_sky = "#300808", + night_horizon = biometint, + }, clouds = false, }) player:set_sun({visible = false , sunrise_visible = false}) -- 2.40.1 From 31b94f5b2266b4ed46d9585480a9d92289312fa9 Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 19 Jun 2022 00:17:43 +0200 Subject: [PATCH 127/357] Add "nether outpost" As a temporary solution until large nether fortresses are there. This is just a little tower containing some warts and a blaze spawner. --- mods/ITEMS/mcl_crimson/init.lua | 4 +- mods/MAPGEN/mcl_nether_fortresses/init.lua | 36 ++++++++++++++++++ mods/MAPGEN/mcl_nether_fortresses/mod.conf | 3 ++ .../schematics/nether_outpost.mts | Bin 0 -> 1392 bytes mods/MAPGEN/mcl_structures/api.lua | 4 ++ 5 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 mods/MAPGEN/mcl_nether_fortresses/init.lua create mode 100644 mods/MAPGEN/mcl_nether_fortresses/mod.conf create mode 100644 mods/MAPGEN/mcl_nether_fortresses/schematics/nether_outpost.mts diff --git a/mods/ITEMS/mcl_crimson/init.lua b/mods/ITEMS/mcl_crimson/init.lua index a7fe33f71..73c7f787d 100644 --- a/mods/ITEMS/mcl_crimson/init.lua +++ b/mods/ITEMS/mcl_crimson/init.lua @@ -6,11 +6,11 @@ local modpath = minetest.get_modpath(modname) -- adapted for mcl2 by cora local function generate_warped_tree(pos) - minetest.place_schematic(pos,modpath.."/schematics/warped_mushroom.mts","random",nil,false,"place_center_x,place_center_z") + minetest.place_schematic(pos,modpath.."/schematics/warped_fungus_1.mts","random",nil,false,"place_center_x,place_center_z") end function generate_crimson_tree(pos) - minetest.place_schematic(pos,modpath.."/schematics/crimson_mushroom.mts","random",nil,false,"place_center_x,place_center_z") + minetest.place_schematic(pos,modpath.."/schematics/crimson_fungus_1.mts","random",nil,false,"place_center_x,place_center_z") end minetest.register_node("mcl_crimson:warped_fungus", { diff --git a/mods/MAPGEN/mcl_nether_fortresses/init.lua b/mods/MAPGEN/mcl_nether_fortresses/init.lua new file mode 100644 index 000000000..8910669cd --- /dev/null +++ b/mods/MAPGEN/mcl_nether_fortresses/init.lua @@ -0,0 +1,36 @@ +local modname = minetest.get_current_modname() +local modpath = minetest.get_modpath(modname) + +mcl_structures.register_structure("nether_outpost",{ + place_on = {"mcl_nether:netherrack","mcl_crimson:crimson_nylium","mcl_crimson:warped_nylium","mcl_blackstone:basalt","mcl_blackstone:soul_soil"}, + noise_params = { + offset = 0, + scale = 0.00022, + spread = {x = 250, y = 250, z = 250}, + seed = 333, + octaves = 1, + persist = 0.0001, + flags = "absvalue", + }, + flags = "all_floors", + biomes = {"Nether","SoulsandValley","WarpedForest","CrimsonForest","BasaltDelta"}, + on_place = function(pos,def,pr) + local sidelen = 15 + local node = minetest.get_node(vector.offset(pos,1,1,0)) + local solid = minetest.find_nodes_in_area(vector.offset(pos,-sidelen/2,-1,-sidelen/2),vector.offset(pos,sidelen/2,-1,sidelen/2),{"group:solid"}) + local air = minetest.find_nodes_in_area(vector.offset(pos,-sidelen/2,1,-sidelen/2),vector.offset(pos,sidelen/2,4,sidelen/2),{"air"}) + if #solid < ( sidelen * sidelen ) or + #air < (sidelen * sidelen ) then return false end + minetest.bulk_set_node(solid,node) + return true + end, + y_min = mcl_vars.mg_lava_nether_max, + y_max = mcl_vars.mg_nether_max - 30, + filenames = { modpath.."/schematics/nether_outpost.mts" }, + y_offset = 0, + after_place = function(pos) + local sp = minetest.find_nodes_in_area(pos,vector.offset(pos,0,20,0),{"mcl_mobspawners:spawner"}) + if not sp[1] then return end + mcl_mobspawners.setup_spawner(sp[1], "mobs_mc:blaze", 0, minetest.LIGHT_MAX+1, 10, 3, -1) + end +}) diff --git a/mods/MAPGEN/mcl_nether_fortresses/mod.conf b/mods/MAPGEN/mcl_nether_fortresses/mod.conf new file mode 100644 index 000000000..7d1565ff3 --- /dev/null +++ b/mods/MAPGEN/mcl_nether_fortresses/mod.conf @@ -0,0 +1,3 @@ +name = mcl_nether_fortresses +author = cora +depends = mcl_init, mcl_structures, mcl_mobspawners diff --git a/mods/MAPGEN/mcl_nether_fortresses/schematics/nether_outpost.mts b/mods/MAPGEN/mcl_nether_fortresses/schematics/nether_outpost.mts new file mode 100644 index 0000000000000000000000000000000000000000..7fba741bffc627745bed98dad8e688552a64664e GIT binary patch literal 1392 zcmeYb3HD`RVc=!pXW*?z1q@OQ%!!#r49dC5Iq}6MKxVNOn2OI!Ey+kNicc!aOwNwa zFD*$eVvxnFh(QV@U7nbeQ*2d~ngY=e(Qe2f4w8ciSs|N@N0TWYITMIm(o*x1Q;Sgy zj0cMm@=s=79?(Cy9c;uPjpSgUZ%~4RK?F%MJtx1sxFkO>l|cq13Jb%W#3WQbC?Sk4 z8=sP2nv|1@VsLSODbTpYyc7lrBK~+0%0(SVRt3OD2NMC(u5HtQDDkgGDw1qO3F!0&IX696*wqL@{5u) z@Wh!##hkYhy^|Iz@bq2T{cdgC_U*S{-Mjqh)p0E^j?SiAr|w9#@jYz*BP7FBaKTB- zVP^b(aoM6Kp}GnGio@bK(=Qb}iM%vC@mN>mL91ijnLql9r!M_j!1`e77bC%ylfGTi z`4oL8c+t7nJ3CHDH-~83$WB;4WBQS8ljgJ;oHLqheR4+J*%+y!)QQ@=pJ#0n@G9Oc z5jbz&z3`(7tDLW<{qqoGxU{%Q=F18B2cEOucb*QM$s085&4tg;K7770WhJ}kt>4T! zr#FgawS=VjZ~dfF^gQ=fPhK#0sFQBU{RLu&K3`K7m+qZcpj#slna{trmFsEawI&m` z9fC7Y`~8_#p3k?{LEGZ#?hDTsn7v)Wx>M|(^sO?}-v4?I-&t>e-n}7Q_kp?a+E%Lx zV&S(-6BzG4zRq;)+SNm!zBeUJ@N${^6sv6@bpW-C$^`1J# z7eA#}a;wg#Ot<+ui*|jJy??I0Rm1x;``U$T|GS@>x`plb7jfgD9ej+DhPRY+j6O1K zRdKU+OFp7iQk|0K=D&qoiZ=o%V7+9vM3U?Gj9$seFFKE9W}IP?TAN;QMWBD$%ZyC^ zlZUQs+VE@|Yutow!D4qdF52emnY^i?p3$2pX@gRSyVxDADXitGAN1DnPd)x4@<6=W z>Z*U6oI7^EQQIs~{ae`W)?*?2lP(_JdnX<^eZ^$){L?PGCm2qge4=u)_1(OL+qL%6 zIng_+zc9S}{ZrtAW@2vlvGc_XCES-^Y*9PP;KyKdnR#ARfA@K3yGRcsh21(|W>tH) zy^xQrF#F3NxnX{5?B)vzZl0?jy|}Wq!t12d Date: Sun, 19 Jun 2022 13:27:12 +0200 Subject: [PATCH 128/357] readd grow_twisting_vines func --- mods/ITEMS/mcl_crimson/init.lua | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/mods/ITEMS/mcl_crimson/init.lua b/mods/ITEMS/mcl_crimson/init.lua index 73c7f787d..bb8736ae1 100644 --- a/mods/ITEMS/mcl_crimson/init.lua +++ b/mods/ITEMS/mcl_crimson/init.lua @@ -13,6 +13,21 @@ function generate_crimson_tree(pos) minetest.place_schematic(pos,modpath.."/schematics/crimson_fungus_1.mts","random",nil,false,"place_center_x,place_center_z") end +function grow_twisting_vines(pos, moreontop) + local y = pos.y + 1 + while not (moreontop == 0) do + if minetest.get_node({x = pos.x, y = y, z = pos.z}).name == "air" then + minetest.set_node({x = pos.x, y = y, z = pos.z}, {name="mcl_crimson:twisting_vines"}) + moreontop = moreontop - 1 + y = y + 1 + elseif minetest.get_node({x = pos.x, y = y, z = pos.z}).name == "mcl_crimson:twisting_vines" then + y = y + 1 + else + moreontop = 0 + end + end +end + minetest.register_node("mcl_crimson:warped_fungus", { description = S("Warped Fungus Mushroom"), drawtype = "plantlike", -- 2.40.1 From ca27237ffc9ee61afb15c994a889fb743c99aeed Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 19 Jun 2022 22:19:46 +0200 Subject: [PATCH 129/357] Tweak particle spawner settings --- mods/ENVIRONMENT/mcl_weather/rain.lua | 20 +++++++++----------- mods/ENVIRONMENT/mcl_weather/snow.lua | 6 +++--- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/mods/ENVIRONMENT/mcl_weather/rain.lua b/mods/ENVIRONMENT/mcl_weather/rain.lua index f0be39f6c..039b02dd2 100644 --- a/mods/ENVIRONMENT/mcl_weather/rain.lua +++ b/mods/ENVIRONMENT/mcl_weather/rain.lua @@ -1,5 +1,5 @@ -local PARTICLES_COUNT_RAIN = 800 -local PARTICLES_COUNT_THUNDER = 1200 +local PARTICLES_COUNT_RAIN = 500 +local PARTICLES_COUNT_THUNDER = 900 local get_connected_players = minetest.get_connected_players @@ -20,22 +20,20 @@ mcl_weather.rain = { init_done = false, } local update_sound={} -local vel=math.random(0,3) -local falling_speed=math.random(10,15) -local size = math.random(1,3) + local psdef= { amount = mcl_weather.rain.particles_count, time=0, minpos = vector.new(-15,20,-15), maxpos = vector.new(15,25,15), - minvel = vector.new(-2,-falling_speed-2,-2), - maxvel = vector.new(2,-falling_speed+2,2), + minvel = vector.new(-2,-17,-2), + maxvel = vector.new(2,-8,2), minacc = vector.new(0,0,0), maxacc = vector.new(0,-0.5,0), - minexptime = 15, - maxexptime = 30, - minsize = size, - maxsize= size*2, + minexptime = 1, + maxexptime = 4, + minsize = 4, + maxsize= 8, collisiondetection = true, collision_removal = true, vertical = true, diff --git a/mods/ENVIRONMENT/mcl_weather/snow.lua b/mods/ENVIRONMENT/mcl_weather/snow.lua index a55428996..cb4c6ba06 100644 --- a/mods/ENVIRONMENT/mcl_weather/snow.lua +++ b/mods/ENVIRONMENT/mcl_weather/snow.lua @@ -14,9 +14,9 @@ local psdef= { maxvel = vector.new(0.2,-4,0.2), minacc = vector.new(0,-1,0), maxacc = vector.new(0,-4,0), - minexptime = 15, - maxexptime = 30, - minsize = 0.5, + minexptime = 3, + maxexptime = 5, + minsize = 2, maxsize = 5, collisiondetection = true, collision_removal = true, -- 2.40.1 From d9da50e2926c13502052f765d695db4a8b6a8484 Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 19 Jun 2022 22:25:50 +0200 Subject: [PATCH 130/357] Properly check for sound update (fix warning) --- mods/ENVIRONMENT/mcl_weather/rain.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mods/ENVIRONMENT/mcl_weather/rain.lua b/mods/ENVIRONMENT/mcl_weather/rain.lua index 039b02dd2..97e674404 100644 --- a/mods/ENVIRONMENT/mcl_weather/rain.lua +++ b/mods/ENVIRONMENT/mcl_weather/rain.lua @@ -68,9 +68,10 @@ end -- no no no NO NO f*.. no. no manual particle creatin' PLS!! this sends EVERY particle over the net. function mcl_weather.rain.add_rain_particles(player) mcl_weather.rain.last_rp_count = mcl_weather.rain.particles_count + local l = false for k,v in pairs(textures) do psdef.texture=v - mcl_weather.add_spawner_player(player,"rain"..k,psdef) + l = l or mcl_weather.add_spawner_player(player,"rain"..k,psdef) end if l then update_sound[player:get_player_name()]=true -- 2.40.1 From 30e543d4d21c6bf379548f3e5866942eacdd0243 Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 19 Jun 2022 22:35:49 +0200 Subject: [PATCH 131/357] Add settings to change weather particle amounts --- mods/ENVIRONMENT/mcl_weather/rain.lua | 4 ++-- mods/ENVIRONMENT/mcl_weather/snow.lua | 4 ++-- settingtypes.txt | 9 +++++++++ 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/mods/ENVIRONMENT/mcl_weather/rain.lua b/mods/ENVIRONMENT/mcl_weather/rain.lua index 97e674404..717f2fd52 100644 --- a/mods/ENVIRONMENT/mcl_weather/rain.lua +++ b/mods/ENVIRONMENT/mcl_weather/rain.lua @@ -1,5 +1,5 @@ -local PARTICLES_COUNT_RAIN = 500 -local PARTICLES_COUNT_THUNDER = 900 +local PARTICLES_COUNT_RAIN = tonumber(minetest.settings:get("mcl_weather_rain_particles")) or 500 +local PARTICLES_COUNT_THUNDER = tonumber(minetest.settings:get("mcl_weather_thunder_particles")) or 900 local get_connected_players = minetest.get_connected_players diff --git a/mods/ENVIRONMENT/mcl_weather/snow.lua b/mods/ENVIRONMENT/mcl_weather/snow.lua index cb4c6ba06..f169620dd 100644 --- a/mods/ENVIRONMENT/mcl_weather/snow.lua +++ b/mods/ENVIRONMENT/mcl_weather/snow.lua @@ -2,11 +2,11 @@ local get_connected_players = minetest.get_connected_players mcl_weather.snow = {} -mcl_weather.snow.particles_count = 15 +local PARTICLES_COUNT_SNOW = tonumber(minetest.settings:get("mcl_weather_snow_particles")) or 99 mcl_weather.snow.init_done = false local psdef= { - amount = 99, + amount = PARTICLES_COUNT_SNOW, time = 0, --stay on til we turn it off minpos = vector.new(-25,20,-25), maxpos =vector.new(25,25,25), diff --git a/settingtypes.txt b/settingtypes.txt index 8a0ebcce8..035d56a1c 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -20,6 +20,15 @@ enable_fire (Destructive and spreading fire) bool true # If enabled, the weather will change naturally over time. mcl_doWeatherCycle (Change weather) bool true +# Amount of rain particles. You can reduce this to get better FPS (default: 500) +mcl_weather_rain_particles (Rain particles) int 500 0 + +# Amount of thunder particles. You can reduce this to get better FPS (default: 900) +mcl_weather_thunder_particles (Thunder particles) int 900 0 + +# Amount of snow particles. You can reduce this to get better FPS (default: 100) +mcl_weather_snow_particles (Snow particles) int 100 0 + # If enabled, breaking blocks will cause them to drop as item. # Note that blocks never have drops when in Creative Mode. mcl_doTileDrops (Blocks have drops) bool true -- 2.40.1 From dcc7df5f02ebd031d993c04f089a03079a4cb4eb Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 20 Jun 2022 13:31:58 +0200 Subject: [PATCH 132/357] Add setting for nether dust too plus slightly tweak the wording for thunder setting --- mods/ENVIRONMENT/mcl_weather/nether_dust.lua | 4 +++- settingtypes.txt | 7 +++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/mods/ENVIRONMENT/mcl_weather/nether_dust.lua b/mods/ENVIRONMENT/mcl_weather/nether_dust.lua index a90c8e96e..2a90b2215 100644 --- a/mods/ENVIRONMENT/mcl_weather/nether_dust.lua +++ b/mods/ENVIRONMENT/mcl_weather/nether_dust.lua @@ -1,8 +1,10 @@ mcl_weather.nether_dust = {} mcl_weather.nether_dust.particlespawners = {} +local PARTICLES_COUNT_NETHER_DUST = tonumber(minetest.settings:get("mcl_weather_rain_particles")) or 150 + local psdef= { - amount = 150, + amount = PARTICLES_COUNT_NETHER_DUST, time = 0, minpos = vector.new(-15,-15,-15), maxpos =vector.new(15,15,15), diff --git a/settingtypes.txt b/settingtypes.txt index 035d56a1c..b35e5c7f0 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -23,12 +23,15 @@ mcl_doWeatherCycle (Change weather) bool true # Amount of rain particles. You can reduce this to get better FPS (default: 500) mcl_weather_rain_particles (Rain particles) int 500 0 -# Amount of thunder particles. You can reduce this to get better FPS (default: 900) -mcl_weather_thunder_particles (Thunder particles) int 900 0 +# Amount of thunderstorm rain particles. You can reduce this to get better FPS (default: 900) +mcl_weather_thunder_particles (Thunderstorm rain particles) int 900 0 # Amount of snow particles. You can reduce this to get better FPS (default: 100) mcl_weather_snow_particles (Snow particles) int 100 0 +# Amount of nether dust particles. You can reduce this to get better FPS (default: 150) +mcl_weather_snow_particles (Nether dust particles) int 150 0 + # If enabled, breaking blocks will cause them to drop as item. # Note that blocks never have drops when in Creative Mode. mcl_doTileDrops (Blocks have drops) bool true -- 2.40.1 From e3c5b2cbb50012ba7f86207581d085b579f8da67 Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 19 Jun 2022 21:21:49 +0200 Subject: [PATCH 133/357] Fix crash on ghast explosions In certain situations the arrow can be invalidated until its get_pos() is called here - e.g. when the player wears over- enchanted blast protection (65k in this case). This uses the player position for the explosion in these cases --- mods/ENTITIES/mobs_mc/ghast.lua | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/mods/ENTITIES/mobs_mc/ghast.lua b/mods/ENTITIES/mobs_mc/ghast.lua index 6e2ea927c..d08b0055c 100644 --- a/mods/ENTITIES/mobs_mc/ghast.lua +++ b/mods/ENTITIES/mobs_mc/ghast.lua @@ -107,7 +107,12 @@ mcl_mobs:register_arrow("mobs_mc:fireball", { full_punch_interval = 1.0, damage_groups = {fleshy = 6}, }, nil) - mcl_mobs:boom(self, self.object:get_pos(), 1, true) + local p = self.object:get_pos() + if p then + mcl_mobs:boom(self, p, 1, true) + else + mcl_mobs:boom(self, player:get_pos(), 1, true) + end end, hit_mob = function(self, mob) -- 2.40.1 From 99469ff1c5541ac419dfe4e85e524a15eaf97267 Mon Sep 17 00:00:00 2001 From: TheRandomLegoBrick Date: Mon, 20 Jun 2022 12:46:59 -0700 Subject: [PATCH 134/357] Add grindstones --- mods/ENTITIES/mobs_mc/villager.lua | 2 +- mods/ITEMS/mcl_grindstone/init.lua | 39 ++++++++++++++++++ mods/ITEMS/mcl_grindstone/mod.conf | 3 ++ .../textures/grindstone_front.png | Bin 0 -> 420 bytes .../textures/grindstone_side.png | Bin 0 -> 416 bytes .../textures/grindstone_top.png | Bin 0 -> 339 bytes 6 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 mods/ITEMS/mcl_grindstone/init.lua create mode 100644 mods/ITEMS/mcl_grindstone/mod.conf create mode 100644 mods/ITEMS/mcl_grindstone/textures/grindstone_front.png create mode 100644 mods/ITEMS/mcl_grindstone/textures/grindstone_side.png create mode 100644 mods/ITEMS/mcl_grindstone/textures/grindstone_top.png diff --git a/mods/ENTITIES/mobs_mc/villager.lua b/mods/ENTITIES/mobs_mc/villager.lua index c077ca944..1d62082c9 100644 --- a/mods/ENTITIES/mobs_mc/villager.lua +++ b/mods/ENTITIES/mobs_mc/villager.lua @@ -427,7 +427,7 @@ local professions = { "mobs_mc_villager_weaponsmith.png", "mobs_mc_villager_weaponsmith.png", }, - jobsite = "mcl_furnaces:furnace", --FIXME: grindstone + jobsite = "mcl_grindstone:grindstone", trades = { { { { "mcl_core:coal_lump", 15, 15 }, E1 }, diff --git a/mods/ITEMS/mcl_grindstone/init.lua b/mods/ITEMS/mcl_grindstone/init.lua new file mode 100644 index 000000000..52c5b2e99 --- /dev/null +++ b/mods/ITEMS/mcl_grindstone/init.lua @@ -0,0 +1,39 @@ +local S = minetest.get_translator(minetest.get_current_modname()) + +minetest.register_node("mcl_grindstone:grindstone", { + description = S("Grindstone"), + _tt_help = S("Used to disenchant/fix tools"), + _doc_items_longdesc = S("This is currently a decorative block which serves as the weapon smith's work station. In minecraft this is used to disenchant/fix tools howerver this has not yet been implemented"), + tiles = { + "grindstone_top.png", + "grindstone_top.png", + "grindstone_side.png", + "grindstone_side.png", + "grindstone_front.png", + "grindstone_front.png" + }, + drawtype = "nodebox", + paramtype2 = "facedir", + node_box = { + type = "fixed", + -- created with nodebox editor + fixed = { + {-0.25, -0.25, -0.375, 0.25, 0.5, 0.375}, + {-0.375, -0.0625, -0.1875, -0.25, 0.3125, 0.1875}, + {0.25, -0.0625, -0.1875, 0.375, 0.3125, 0.1875}, + {0.25, -0.5, -0.125, 0.375, -0.0625, 0.125}, + {-0.375, -0.5, -0.125, -0.25, -0.0625, 0.125}, + } + }, + groups = {pickaxey = 1, deco_block = 1}, + _mcl_blast_resistance = 6, + _mcl_hardness = 2 +}) + +minetest.register_craft({ + output = "mcl_grindstone:grindstone", + recipe = { + { "mcl_core:stick", "mcl_stairs:slab_stone_rough", "mcl_core:stick"}, + { "group:wood", "", "group:wood"}, + } +}) \ No newline at end of file diff --git a/mods/ITEMS/mcl_grindstone/mod.conf b/mods/ITEMS/mcl_grindstone/mod.conf new file mode 100644 index 000000000..154de013f --- /dev/null +++ b/mods/ITEMS/mcl_grindstone/mod.conf @@ -0,0 +1,3 @@ +name = mcl_grindstone +author = TheRandomLegoBrick +description = Adds a cool looking block for the weaponsmiths jobsite \ No newline at end of file diff --git a/mods/ITEMS/mcl_grindstone/textures/grindstone_front.png b/mods/ITEMS/mcl_grindstone/textures/grindstone_front.png new file mode 100644 index 0000000000000000000000000000000000000000..ec72b0470dec597fb74b9d59468e9e96de59dc8b GIT binary patch literal 420 zcmV;V0bBlwP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0Xa!TK~y+TeNjzL zgFqNX?R0>KPzrUShwuU{Jb){g?mU54@-SS(g)ud1p-3nQVS%r{uLD8j%NOR&oA><; zbJF*{bwrXRd7kh0d#yFLMNvdi6a+yW$20(^vX0O+4Zcb#ZYP)~pggLAbY18BKE*L4 z;qK-d;dvgnK-;z$2?XN9{VjsJBrF!rdc7h?ZCc68vaIW`?RH0H7zrxAya0iba1(T> zs>2Z>36Kyd299AU{)wRjrZRUh*GIvDGCHsb~)Ve_7ql{k!*v!Tk< z^DBa)Bxp5L>I@_Cz09kjAw)e_2r81`xK6kVK=5!d;crq0(81R8%ZqbvXIxxIXW8e~ z52%ds7%pEnZ{*SeZr8QRe*U#Js6BsuzB>aOgTp|w4vc3Tf=Yve*jk@vx O0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0X0cPK~y+TZIUrg z!$1&47lfU7BSV}Jpyw9I5)}mn1r-e~H%ktH=#h|o0Uv;ZhQc8@lCgtuVV*pjjamFP z8jt_(%%2&1uW1^kRGOwmQG{Vg+=Y;M;y8}+CLu|ZJkRU8CiXlJZvhDtMUf=z3oH0( zQI;i_EX>&!2l7BS%QD~hU!LZ|RMkd;>$?ZM?e>oX;NEiiiIwFB6A~R61MCuL#zacZ zW)nG8n#f}uY?GJV4Ltd(zh(n1G=Npy%O=ez}^RWQFs7q?dz zS`Vx08^3sbHtZJe41jz1>2xfw4tf#*~&YBZ{WA^v!I$9#Gf!9l~m(F|s z(9C!8vdl>;mGiV2%(TALp1)igyHoob)1}Fx$uh?+`bsU1bL3tB{IsNJk%u17VFzys znNOVzbMv>jQ<*;r0Q=&#f9R&zUc`Fm|jmdKI;Vst0OB=*5dZ)H literal 0 HcmV?d00001 -- 2.40.1 From 6ec9765b58c8a65f7c10006cf2e0a13b9e1a3a87 Mon Sep 17 00:00:00 2001 From: TheRandomLegoBrick Date: Mon, 20 Jun 2022 13:31:23 -0700 Subject: [PATCH 135/357] Fix indentation --- mods/ITEMS/mcl_grindstone/init.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mods/ITEMS/mcl_grindstone/init.lua b/mods/ITEMS/mcl_grindstone/init.lua index 52c5b2e99..f373070cd 100644 --- a/mods/ITEMS/mcl_grindstone/init.lua +++ b/mods/ITEMS/mcl_grindstone/init.lua @@ -1,7 +1,7 @@ local S = minetest.get_translator(minetest.get_current_modname()) minetest.register_node("mcl_grindstone:grindstone", { - description = S("Grindstone"), + description = S("Grindstone"), _tt_help = S("Used to disenchant/fix tools"), _doc_items_longdesc = S("This is currently a decorative block which serves as the weapon smith's work station. In minecraft this is used to disenchant/fix tools howerver this has not yet been implemented"), tiles = { @@ -13,10 +13,10 @@ minetest.register_node("mcl_grindstone:grindstone", { "grindstone_front.png" }, drawtype = "nodebox", - paramtype2 = "facedir", + paramtype2 = "facedir", node_box = { type = "fixed", - -- created with nodebox editor + -- created with nodebox editor fixed = { {-0.25, -0.25, -0.375, 0.25, 0.5, 0.375}, {-0.375, -0.0625, -0.1875, -0.25, 0.3125, 0.1875}, -- 2.40.1 From f6599d237ebe47f91192bf0f6e734edbc094b3c2 Mon Sep 17 00:00:00 2001 From: MysticTempest Date: Tue, 21 Jun 2022 00:36:13 -0500 Subject: [PATCH 136/357] Fix smokers, & blast_furnaces to work at twice the rate of a furnace. --- mods/ITEMS/mcl_blast_furnace/init.lua | 8 ++++---- mods/ITEMS/mcl_smoker/init.lua | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/mods/ITEMS/mcl_blast_furnace/init.lua b/mods/ITEMS/mcl_blast_furnace/init.lua index 168c28bd5..b8bbe001f 100644 --- a/mods/ITEMS/mcl_blast_furnace/init.lua +++ b/mods/ITEMS/mcl_blast_furnace/init.lua @@ -288,7 +288,8 @@ local function blast_furnace_node_timer(pos, elapsed) -- Cooking -- - local el = elapsed_game_time + -- Run the blast_furnace at twice the speed of a furnace. + local el = elapsed_game_time * 2 -- Check if we have cookable content: cookable local aftercooked @@ -329,13 +330,12 @@ local function blast_furnace_node_timer(pos, elapsed) elseif active then el = math.min(el, fuel_totaltime - fuel_time) -- The furnace is currently active and has enough fuel - fuel_time = (fuel_time + el) *2 --multiply speed of fuel consumption to match proper output + fuel_time = fuel_time + el end -- If there is a cookable item then check if it is ready yet if cookable and active then - -- In the src_time variable, the *2 is the multiplication that makes the blast furnace work faster than a normal furnace. - src_time = (src_time + el)*2 + src_time = src_time + el -- Place result in dst list if done if src_time >= cooked.time then inv:add_item("dst", cooked.item) diff --git a/mods/ITEMS/mcl_smoker/init.lua b/mods/ITEMS/mcl_smoker/init.lua index e45a2712c..696df4917 100644 --- a/mods/ITEMS/mcl_smoker/init.lua +++ b/mods/ITEMS/mcl_smoker/init.lua @@ -288,7 +288,8 @@ local function smoker_node_timer(pos, elapsed) -- Cooking -- - local el = elapsed_game_time + -- Run the smoker at twice the speed of a furnace. + local el = elapsed_game_time * 2 -- Check if we have cookable content: cookable local aftercooked @@ -329,13 +330,12 @@ local function smoker_node_timer(pos, elapsed) elseif active then el = math.min(el, fuel_totaltime - fuel_time) -- The furnace is currently active and has enough fuel - fuel_time = ( fuel_time + el ) * 2 + fuel_time = fuel_time + el end -- If there is a cookable item then check if it is ready yet if cookable and active then - -- In the src_time variable, the *2 is the multiplication that makes the smoker work faster than a normal furnace. - src_time = (src_time + el)*2 + src_time = src_time + el -- Place result in dst list if done if src_time >= cooked.time then inv:add_item("dst", cooked.item) -- 2.40.1 From 820b97f065a5c9ca76516d1937e72fae78b1a6de Mon Sep 17 00:00:00 2001 From: cora Date: Tue, 21 Jun 2022 12:52:54 +0200 Subject: [PATCH 137/357] fix soem codestyle stuff in mcl_cauldrons --- mods/ITEMS/mcl_cauldrons/init.lua | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/mods/ITEMS/mcl_cauldrons/init.lua b/mods/ITEMS/mcl_cauldrons/init.lua index 55866f5cc..e78b0ce3f 100644 --- a/mods/ITEMS/mcl_cauldrons/init.lua +++ b/mods/ITEMS/mcl_cauldrons/init.lua @@ -5,7 +5,7 @@ local S = minetest.get_translator(minetest.get_current_modname()) -- TODO: Extinguish fire of burning entities -- Convenience function because the cauldron nodeboxes are very similar -local create_cauldron_nodebox = function(water_level) +local function create_cauldron_nodebox(water_level) local floor_y if water_level == 0 then -- empty floor_y = -0.1875 @@ -36,10 +36,6 @@ local create_cauldron_nodebox = function(water_level) } end -local cauldron_nodeboxes = {} -for w=0,3 do - cauldron_nodeboxes[w] = create_cauldron_nodebox(w) -end -- Empty cauldron @@ -55,7 +51,7 @@ minetest.register_node("mcl_cauldrons:cauldron", { paramtype = "light", is_ground_content = false, groups = {pickaxey=1, deco_block=1, cauldron=1}, - node_box = cauldron_nodeboxes[0], + node_box = create_cauldron_nodebox(0), selection_box = { type = "regular" }, tiles = { "mcl_cauldrons_cauldron_inner.png^mcl_cauldrons_cauldron_top.png", @@ -68,7 +64,7 @@ minetest.register_node("mcl_cauldrons:cauldron", { }) -- Template function for cauldrons with water -local register_filled_cauldron = function(water_level, description, river_water) +local function register_filled_cauldron(water_level, description, river_water) local id = "mcl_cauldrons:cauldron_"..water_level local water_tex if river_water then @@ -85,8 +81,8 @@ local register_filled_cauldron = function(water_level, description, river_water) paramtype = "light", is_ground_content = false, groups = {pickaxey=1, not_in_creative_inventory=1, cauldron=(1+water_level), cauldron_filled=water_level, comparator_signal=water_level}, - node_box = cauldron_nodeboxes[water_level], - collision_box = cauldron_nodeboxes[0], + node_box = create_cauldron_nodebox(water_level), + collision_box = create_cauldron_nodebox(0), selection_box = { type = "regular" }, tiles = { "("..water_tex..")^mcl_cauldrons_cauldron_top.png", -- 2.40.1 From 9937224997bd604c5bfd04d0ff68e18317c18493 Mon Sep 17 00:00:00 2001 From: cora Date: Tue, 21 Jun 2022 12:58:19 +0200 Subject: [PATCH 138/357] Add lava filled cauldron --- mods/ITEMS/mcl_cauldrons/init.lua | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/mods/ITEMS/mcl_cauldrons/init.lua b/mods/ITEMS/mcl_cauldrons/init.lua index e78b0ce3f..02cc41d52 100644 --- a/mods/ITEMS/mcl_cauldrons/init.lua +++ b/mods/ITEMS/mcl_cauldrons/init.lua @@ -64,12 +64,15 @@ minetest.register_node("mcl_cauldrons:cauldron", { }) -- Template function for cauldrons with water -local function register_filled_cauldron(water_level, description, river_water) +local function register_filled_cauldron(water_level, description, liquid) local id = "mcl_cauldrons:cauldron_"..water_level local water_tex - if river_water then + if liquid == "river_water" then id = id .. "r" water_tex = "default_river_water_source_animated.png^[verticalframe:16:0" + elseif liquid == "lava" then + id = id .. "_lava" + water_tex = "default_lava_source_animated.png^[verticalframe:16:0" else water_tex = "default_water_source_animated.png^[verticalframe:16:0" end @@ -106,10 +109,14 @@ register_filled_cauldron(1, S("Cauldron (1/3 Water)")) register_filled_cauldron(2, S("Cauldron (2/3 Water)")) register_filled_cauldron(3, S("Cauldron (3/3 Water)")) +register_filled_cauldron(1, S("Cauldron (1/3 Lava)"),"lava") +register_filled_cauldron(2, S("Cauldron (2/3 Lava)"),"lava") +register_filled_cauldron(3, S("Cauldron (3/3 Lava)"),"lava") + if minetest.get_modpath("mclx_core") then - register_filled_cauldron(1, S("Cauldron (1/3 River Water)"), true) - register_filled_cauldron(2, S("Cauldron (2/3 River Water)"), true) - register_filled_cauldron(3, S("Cauldron (3/3 River Water)"), true) + register_filled_cauldron(1, S("Cauldron (1/3 River Water)"),"river_water") + register_filled_cauldron(2, S("Cauldron (2/3 River Water)"),"river_water") + register_filled_cauldron(3, S("Cauldron (3/3 River Water)"),"river_water") end minetest.register_craft({ -- 2.40.1 From 7a8d20e1243b885de90afb0f92b567f5ffc9cfa9 Mon Sep 17 00:00:00 2001 From: cora Date: Tue, 21 Jun 2022 13:05:24 +0200 Subject: [PATCH 139/357] take lava from cauldron with bucket --- mods/ITEMS/mcl_buckets/init.lua | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mods/ITEMS/mcl_buckets/init.lua b/mods/ITEMS/mcl_buckets/init.lua index 85215caaf..f70767e52 100644 --- a/mods/ITEMS/mcl_buckets/init.lua +++ b/mods/ITEMS/mcl_buckets/init.lua @@ -282,6 +282,12 @@ local function on_place_bucket_empty(itemstack, user, pointed_thing) new_bucket = ItemStack("mcl_buckets:bucket_river_water") end sound_take("mclx_core:river_water_source", pointed_thing.under) + elseif nn == "mcl_cauldrons:cauldron_3_lava" then + set_node(pointed_thing.under, {name="mcl_cauldrons:cauldron"}) + if not is_creative_enabled(user:get_player_name()) then + new_bucket = ItemStack("mcl_buckets:bucket_lava") + end + sound_take("mcl_core:lava_source", pointed_thing.under) end if new_bucket then return give_bucket(new_bucket, itemstack, user) -- 2.40.1 From 685cba682139bbf78b1aa563a7f4b1cfaa127596 Mon Sep 17 00:00:00 2001 From: cora Date: Tue, 21 Jun 2022 13:42:25 +0200 Subject: [PATCH 140/357] Allow placing lava into cauldrons --- mods/ITEMS/mcl_buckets/register.lua | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/mods/ITEMS/mcl_buckets/register.lua b/mods/ITEMS/mcl_buckets/register.lua index 1a7c8fe14..15eb4e550 100644 --- a/mods/ITEMS/mcl_buckets/register.lua +++ b/mods/ITEMS/mcl_buckets/register.lua @@ -29,11 +29,21 @@ if mod_mcl_core then end end, source_take = {"mcl_core:lava_source", "mcl_nether:nether_lava_source"}, - on_take = function(user) - if has_awards and user and user:is_player() then - awards.unlock(user:get_player_name(), "mcl:hotStuff") - end - end, + on_take = function(user) + if has_awards and user and user:is_player() then + awards.unlock(user:get_player_name(), "mcl:hotStuff") + end + end, + extra_check = function(pos, placer) + local nn = minetest.get_node(pos).name + if minetest.get_item_group(nn, "cauldron") ~= 0 then + if nn ~= "mcl_cauldrons:cauldron_3_lava" then + minetest.set_node(pos, {name="mcl_cauldrons:cauldron_3_lava"}) + end + sound_place("mcl_core:lava_source", pos) + return false, true + end + end, bucketname = "mcl_buckets:bucket_lava", inventory_image = "bucket_lava.png", name = S("Lava Bucket"), -- 2.40.1 From 3a7022ab66b430a7bbe06d93135942a9ea184c82 Mon Sep 17 00:00:00 2001 From: cora Date: Tue, 21 Jun 2022 13:51:06 +0200 Subject: [PATCH 141/357] Clean up buckets and cauldrons a little bit --- mods/ITEMS/mcl_buckets/init.lua | 23 +++++++++-------------- mods/ITEMS/mcl_buckets/register.lua | 7 ------- mods/ITEMS/mcl_cauldrons/init.lua | 20 ++++++-------------- 3 files changed, 15 insertions(+), 35 deletions(-) diff --git a/mods/ITEMS/mcl_buckets/init.lua b/mods/ITEMS/mcl_buckets/init.lua index f70767e52..148df7711 100644 --- a/mods/ITEMS/mcl_buckets/init.lua +++ b/mods/ITEMS/mcl_buckets/init.lua @@ -29,15 +29,15 @@ local is_creative_enabled = minetest.is_creative_enabled local is_protected = minetest.is_protected local record_protection_violation = minetest.record_protection_violation -if mod_mcl_core then - minetest.register_craft({ - output = "mcl_buckets:bucket_empty 1", - recipe = { - {"mcl_core:iron_ingot", "", "mcl_core:iron_ingot"}, - {"", "mcl_core:iron_ingot", ""}, - }, - }) -end + +minetest.register_craft({ + output = "mcl_buckets:bucket_empty 1", + recipe = { + {"mcl_core:iron_ingot", "", "mcl_core:iron_ingot"}, + {"", "mcl_core:iron_ingot", ""}, + }, +}) + mcl_buckets = { liquids = {}, @@ -88,9 +88,7 @@ end local pointable_sources = {} local function bucket_raycast(user) - --local pos = user:get_pos() local pos = user:get_pos() - --local pos = vector.add(user:get_pos(), user:get_bone_position("Head_Control")) pos.y = pos.y + user:get_properties().eye_height local look_dir = user:get_look_dir() look_dir = vector.multiply(look_dir, 5) @@ -100,7 +98,6 @@ local function bucket_raycast(user) if ray then for pointed_thing in ray do if pointed_thing and pointable_sources[get_node(pointed_thing.above).name] then - --minetest.chat_send_all("found!") return {under=pointed_thing.under,above=pointed_thing.above} end end @@ -242,7 +239,6 @@ local function on_place_bucket_empty(itemstack, user, pointed_thing) if liquid_name then local liquid_def = mcl_buckets.liquids[liquid_name] if liquid_def then - --minetest.chat_send_all("test") -- Fill bucket, but not in Creative Mode -- FIXME: remove this line --if not is_creative_enabled(user:get_player_name()) then @@ -372,7 +368,6 @@ minetest.register_craftitem("mcl_buckets:bucket_empty", { _doc_items_longdesc = S("A bucket can be used to collect and release liquids."), _doc_items_usagehelp = S("Punch a liquid source to collect it. You can then use the filled bucket to place the liquid somewhere else."), _tt_help = S("Collects liquids"), - --liquids_pointable = true, inventory_image = "bucket.png", stack_max = 16, _on_dispense = function(stack, pos, droppos, dropnode, dropdir) diff --git a/mods/ITEMS/mcl_buckets/register.lua b/mods/ITEMS/mcl_buckets/register.lua index 15eb4e550..365966724 100644 --- a/mods/ITEMS/mcl_buckets/register.lua +++ b/mods/ITEMS/mcl_buckets/register.lua @@ -10,13 +10,6 @@ local function sound_place(itemname, pos) end end ---[[local sound_take = function(itemname, pos) - local def = minetest.registered_nodes[itemname] - if def and def.sounds and def.sounds.dug then - minetest.sound_play(def.sounds.dug, {gain=1.0, pos = pos, pitch = 1 + math.random(-10, 10)*0.005}, true) - end -end]] - if mod_mcl_core then -- Lava bucket mcl_buckets.register_liquid({ diff --git a/mods/ITEMS/mcl_cauldrons/init.lua b/mods/ITEMS/mcl_cauldrons/init.lua index 02cc41d52..cbe19138e 100644 --- a/mods/ITEMS/mcl_cauldrons/init.lua +++ b/mods/ITEMS/mcl_cauldrons/init.lua @@ -36,8 +36,6 @@ local function create_cauldron_nodebox(water_level) } end - - -- Empty cauldron minetest.register_node("mcl_cauldrons:cauldron", { description = S("Cauldron"), @@ -105,18 +103,12 @@ local function register_filled_cauldron(water_level, description, liquid) end -- Filled cauldrons (3 levels) -register_filled_cauldron(1, S("Cauldron (1/3 Water)")) -register_filled_cauldron(2, S("Cauldron (2/3 Water)")) -register_filled_cauldron(3, S("Cauldron (3/3 Water)")) - -register_filled_cauldron(1, S("Cauldron (1/3 Lava)"),"lava") -register_filled_cauldron(2, S("Cauldron (2/3 Lava)"),"lava") -register_filled_cauldron(3, S("Cauldron (3/3 Lava)"),"lava") - -if minetest.get_modpath("mclx_core") then - register_filled_cauldron(1, S("Cauldron (1/3 River Water)"),"river_water") - register_filled_cauldron(2, S("Cauldron (2/3 River Water)"),"river_water") - register_filled_cauldron(3, S("Cauldron (3/3 River Water)"),"river_water") +for i=1,3 do + register_filled_cauldron(i, S("Cauldron (" ..i .. "/3 Water)")) + register_filled_cauldron(i, S("Cauldron (" ..i .. "/3 Water)"),"lava") + if minetest.get_modpath("mclx_core") then + register_filled_cauldron(i, S("Cauldron (" ..i .. "/3 Water)"),"river_water") + end end minetest.register_craft({ -- 2.40.1 From 1401f398ae53b9e902bf4490a722d2f8f3b954ad Mon Sep 17 00:00:00 2001 From: cora Date: Tue, 21 Jun 2022 14:24:15 +0200 Subject: [PATCH 142/357] globalstep instead of abm to extinguish objects --- mods/ITEMS/mcl_cauldrons/init.lua | 35 +++++++++++++++++++------------ 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/mods/ITEMS/mcl_cauldrons/init.lua b/mods/ITEMS/mcl_cauldrons/init.lua index cbe19138e..1832103fa 100644 --- a/mods/ITEMS/mcl_cauldrons/init.lua +++ b/mods/ITEMS/mcl_cauldrons/init.lua @@ -120,19 +120,28 @@ minetest.register_craft({ } }) -minetest.register_abm({ - label = "cauldrons", - nodenames = {"group:cauldron_filled"}, - interval = 0.5, - chance = 1, - action = function(pos, node) - for _, obj in pairs(minetest.get_objects_inside_radius(pos, 0.4)) do - if mcl_burning.is_burning(obj) then - mcl_burning.extinguish(obj) - local new_group = minetest.get_item_group(node.name, "cauldron_filled") - 1 - minetest.swap_node(pos, {name = "mcl_cauldrons:cauldron" .. (new_group == 0 and "" or "_" .. new_group)}) - break +local function cauldron_extinguish(obj,pos) + local node = minetest.get_node(pos) + if mcl_burning.is_burning(obj) then + mcl_burning.extinguish(obj) + local new_group = minetest.get_item_group(node.name, "cauldron_filled") - 1 + minetest.swap_node(pos, {name = "mcl_cauldrons:cauldron" .. (new_group == 0 and "" or "_" .. new_group)}) + end +end + +minetest.register_globalstep(function(dtime) + for _,pl in pairs(minetest.get_connected_players()) do + local n = minetest.find_node_near(pl:get_pos(),0.4,{"group:cauldron_filled"},true) + if n and not minetest.get_node(n).name:find("lava") then + cauldron_extinguish(pl,n) + end + end + for _,ent in pairs(minetest.luaentities) do + if ent.object:get_pos() then + local n = minetest.find_node_near(ent.object:get_pos(),0.4,{"group:cauldron_filled"},true) + if n and not minetest.get_node(n).name:find("lava") then + cauldron_extinguish(ent.object,n) end end end -}) +end) -- 2.40.1 From ca6cf81e24a0b15bee6a315394de9f6848db7d8a Mon Sep 17 00:00:00 2001 From: cora Date: Wed, 22 Jun 2022 11:56:25 +0200 Subject: [PATCH 143/357] set objects on fire when in lava cauldron --- mods/ITEMS/mcl_cauldrons/init.lua | 10 +++++++++- mods/ITEMS/mcl_cauldrons/mod.conf | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/mods/ITEMS/mcl_cauldrons/init.lua b/mods/ITEMS/mcl_cauldrons/init.lua index 1832103fa..6a8270794 100644 --- a/mods/ITEMS/mcl_cauldrons/init.lua +++ b/mods/ITEMS/mcl_cauldrons/init.lua @@ -129,18 +129,26 @@ local function cauldron_extinguish(obj,pos) end end +local etime = 0 minetest.register_globalstep(function(dtime) + etime = dtime + etime + if etime < 0.5 then return end + etime = 0 for _,pl in pairs(minetest.get_connected_players()) do local n = minetest.find_node_near(pl:get_pos(),0.4,{"group:cauldron_filled"},true) if n and not minetest.get_node(n).name:find("lava") then cauldron_extinguish(pl,n) + elseif n and minetest.get_node(n).name:find("lava") then + mcl_burning.set_on_fire(pl, 5) end end for _,ent in pairs(minetest.luaentities) do - if ent.object:get_pos() then + if ent.object:get_pos() and ent.is_mob then local n = minetest.find_node_near(ent.object:get_pos(),0.4,{"group:cauldron_filled"},true) if n and not minetest.get_node(n).name:find("lava") then cauldron_extinguish(ent.object,n) + elseif n and minetest.get_node(n).name:find("lava") then + mcl_burning.set_on_fire(ent.object, 5) end end end diff --git a/mods/ITEMS/mcl_cauldrons/mod.conf b/mods/ITEMS/mcl_cauldrons/mod.conf index 4787d60f9..36d5b303b 100644 --- a/mods/ITEMS/mcl_cauldrons/mod.conf +++ b/mods/ITEMS/mcl_cauldrons/mod.conf @@ -1,3 +1,3 @@ name = mcl_cauldrons depends = mcl_core, mcl_sounds -optional_depends = mclx_core, doc +optional_depends = mclx_core, doc, mcl_burning -- 2.40.1 From f883b4580934a21d8e3177a16973ac5531223795 Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 23 Jun 2022 14:01:05 +0200 Subject: [PATCH 144/357] Add coral reefs --- mods/MAPGEN/mcl_biomes/init.lua | 136 ++++++++++++++++++ .../mcl_structures/schematics/coral_cora.mts | Bin 0 -> 719 bytes .../mcl_structures_coral_brain_1.mts | Bin 0 -> 157 bytes .../mcl_structures_coral_brain_2.mts | Bin 0 -> 124 bytes .../mcl_structures_coral_bubble_1.mts | Bin 0 -> 146 bytes .../mcl_structures_coral_bubble_2.mts | Bin 0 -> 129 bytes .../mcl_structures_coral_fire_1.mts | Bin 0 -> 152 bytes .../mcl_structures_coral_fire_2.mts | Bin 0 -> 127 bytes .../mcl_structures_coral_horn_1.mts | Bin 0 -> 152 bytes .../mcl_structures_coral_horn_2.mts | Bin 0 -> 125 bytes .../mcl_structures_coral_tube_1.mts | Bin 0 -> 138 bytes .../mcl_structures_coral_tube_2.mts | Bin 0 -> 126 bytes 12 files changed, 136 insertions(+) create mode 100644 mods/MAPGEN/mcl_structures/schematics/coral_cora.mts create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_coral_brain_1.mts create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_coral_brain_2.mts create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_coral_bubble_1.mts create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_coral_bubble_2.mts create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_coral_fire_1.mts create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_coral_fire_2.mts create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_coral_horn_1.mts create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_coral_horn_2.mts create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_coral_tube_1.mts create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_coral_tube_2.mts diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index 392f79038..c4e11a958 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -2495,9 +2495,145 @@ local function register_seagrass_decoration(grasstype, offset, scale, biomes) end end +local warm_oceans = { + "JungleEdgeM_ocean", + "Jungle_deep_ocean", + "Savanna_ocean", + "MesaPlateauF_ocean", + "Swampland_ocean", + "Mesa_ocean", + "Plains_ocean", + "MesaPlateauFM_ocean", + "MushroomIsland_ocean", + "SavannaM_ocean", + "JungleEdge_ocean", + "MesaBryce_ocean", + "Jungle_ocean", + "Desert_ocean", + "JungleM_ocean", +} +local corals = { + "brain", + "horn", + "bubble", + "tube", + "fire" +} +local function register_coral_decos(ck) + local c = corals[ck] + local noise = { + offset = -0.0085, + scale = 0.002, + spread = {x = 25, y = 120, z = 25}, + seed = 235, + octaves = 5, + persist = 1.8, + lacunarity = 3.5, + flags = "absvalue" + } + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"group:sand","mcl_core:gravel"}, + sidelen = 80, + noise_params = noise, + biomes = warm_oceans, + y_min = OCEAN_MIN, + y_max = -8, + schematic = mod_mcl_structures.."/schematics/mcl_structures_coral_"..c.."_1.mts", + rotation = "random", + flags = "all_floors,force_placement", + }) + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"group:sand","mcl_core:gravel"}, + noise_params = noise, + sidelen = 80, + biomes = warm_oceans, + y_min = OCEAN_MIN, + y_max = -8, + schematic = mod_mcl_structures.."/schematics/mcl_structures_coral_"..c.."_2.mts", + rotation = "random", + flags = "all_floors,force_placement", + }) + + minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_ocean:"..c.."_coral_block"}, + sidelen = 16, + fill_ratio = 3, + y_min = OCEAN_MIN, + y_max = 1, + decoration = "mcl_ocean:"..c.."_coral", + biomes = warm_oceans, + flags = "force_placement, all_floors", + height = 1, + height_max = 1, + }) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_ocean:horn_coral_block"}, + sidelen = 16, + fill_ratio = 7, + y_min = OCEAN_MIN, + y_max = 1, + decoration = "mcl_ocean:"..c.."_coral_fan", + biomes = warm_oceans, + flags = "force_placement, all_floors", + height = 1, + height_max = 1, + }) +end local function register_decorations() + -- Coral Reefs + for k,_ in pairs(corals) do + register_coral_decos(k) + end + minetest.register_decoration({ + deco_type = "simple", + place_on = {"group:sand","mcl_core:gravel"}, + sidelen = 16, + noise_params = noise, + y_min = OCEAN_MIN, + y_max = -5, + decoration = "mcl_ocean:dead_brain_coral_block", + biomes = warm_oceans, + flags = "force_placement", + height = 1, + height_max = 1, + place_offset_y = -1, + }) + + minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_ocean:dead_brain_coral_block"}, + sidelen = 16, + fill_ratio = 10, + y_min = OCEAN_MIN, + y_max = 1, + decoration = "mcl_ocean:sea_pickle_1_dead_brain_coral_block", + biomes = warm_oceans, + flags = "force_placement, all_floors", + height = 1, + height_max = 1, + place_offset_y = -1, + }) + --rare CORAl + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"group:sand","mcl_core:gravel"}, + fill_ratio = 0.0001, + sidelen = 80, + biomes = warm_oceans, + y_min = OCEAN_MIN, + y_max = -8, + schematic = mod_mcl_structures.."/schematics/coral_cora.mts", + rotation = "random", + flags = "place_center_x,place_center_z, force_placement", + }) + + -- Large ice spike minetest.register_decoration({ deco_type = "schematic", diff --git a/mods/MAPGEN/mcl_structures/schematics/coral_cora.mts b/mods/MAPGEN/mcl_structures/schematics/coral_cora.mts new file mode 100644 index 0000000000000000000000000000000000000000..8ee97182094687f97337715c8583f6f74dbd3887 GIT binary patch literal 719 zcmeYb3HD`RVc=t6W8kR=0|r3`=ETe*2C3ZSocR3Y)WkfijQpa!_~iVe#GLq~oc!c$ z1_`WkX^D9ZBG_aY#1NuMrAbLSsSwkU?LZcf2bm;;T@R)U(lU#n=7IGgxf@9a;%;dq zGm8>4Q9UJzT@vILQLIwPo<&#%@lot)U3ec`uI}Vl(7F6`{QKU#5n{FvZ`we42p_96GR>`ajAvHB`QpMmB$=7 z#r}!$otv-TTSXsco|hBD_Rr)^c<-l=r@mZbQO@cKyc%%9$^6)zteMZdpNVWQ*?hXK zaMj$8vp?>AcKFCIkKWF*JvuwTo>5KZ)%vk)mUgYJEzkC+e$H9@C6dZlsxa?vYp!)j zQ(3I3ths2X;KYe4V%;<1LeksJS()>Vw6di$BIYgjZQ7Su@~+4K7HeDb?+cPF*6LTv z-KR(%W%(vNr!Zh|e}UXX{}8iTzjIG5p73+=XYtou%cIxZW_wSwxn9b6>f9B#GdJd( ldAT;D=68nvR=(pw3q$#G*=i4cD+xZ~tyT1c_4_mh768??B|iWF literal 0 HcmV?d00001 diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_coral_brain_1.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_coral_brain_1.mts new file mode 100644 index 0000000000000000000000000000000000000000..03e1ddfb621c637646b1faafc1db38d6062a994c GIT binary patch literal 157 zcmeYb3HD`RVPIxpWniuc0T3rKvxq@DH#sLhKRGoq&nl@XF*7edIlm||Cq5}BKRKI0 z61!wtVjhDiR;h|P$q5e3Jv=@oBW?WR=*kPbF(MMvFLjXUEgU~tGB!zBgMsD>9 S4_r)T_$m}c7+im`tN{RRr89s4 literal 0 HcmV?d00001 diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_coral_brain_2.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_coral_brain_2.mts new file mode 100644 index 0000000000000000000000000000000000000000..f40af2ec3375bf6be90662128275ca39b1e33eea GIT binary patch literal 124 zcmeYb3HD`RVPFD6#`=07i#ai~h(S6xIVV0pIW;lQDyb+jGcP_lzbG*$J}DLS>;wQz$tlGE literal 0 HcmV?d00001 diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_coral_bubble_1.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_coral_bubble_1.mts new file mode 100644 index 0000000000000000000000000000000000000000..1111368e877da436b84bb6ac4d79fb82dc7fb869 GIT binary patch literal 146 zcmeYb3HD`RVPFQq`uchhGcmJ>K`J*nCq6$pH8IaBsWd4mCpA7fzbG*$J}ohiK?a9h zQciwyHiH;;*@`*I2@Z@s0kb&0jF=UbnXMW+uQ(Uj3K%GGHZpMgXe#sjbg?t^m@qE| E0Q|5m!vFvP literal 0 HcmV?d00001 diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_coral_bubble_2.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_coral_bubble_2.mts new file mode 100644 index 0000000000000000000000000000000000000000..c3cf1012e3bc6827183080c6a986348bf509f183 GIT binary patch literal 129 zcmeYb3HD`RVPIxpVqmPV2eA?}ix^~blXK$plT#D(tddHTl5$exlkB!lD(CM5uwp($nn literal 0 HcmV?d00001 diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_coral_horn_1.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_coral_horn_1.mts new file mode 100644 index 0000000000000000000000000000000000000000..03c8f0e851a8205b14e91d4910ffdc6ff9daf7c4 GIT binary patch literal 152 zcmeYb3HD`R0YYX5=KA`25F;_Oh(RhhIVV0pIW;lQDkHxrFFrZHC^08KDJMTUn?VGd z9D@Wl(fG8)yox!=2?+@)4GeBoApoK0Hp>72 literal 0 HcmV?d00001 diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_coral_horn_2.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_coral_horn_2.mts new file mode 100644 index 0000000000000000000000000000000000000000..8d2ec7f2bddee696bab204bc8fc8df0b256cdd8b GIT binary patch literal 125 zcmeYb3HD`RVPIrnVqmVX2ePDclXK$plT#D(tTOV8^5T>8ixP9V3UeZOU$d7lbn!{kdly;z?O9ER~4H;O3H)81QrGn6DAP=m=Y;> literal 0 HcmV?d00001 diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_coral_tube_1.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_coral_tube_1.mts new file mode 100644 index 0000000000000000000000000000000000000000..89d08e9eac40597cc04b005da5788f4748ae2caf GIT binary patch literal 138 zcmeYb3HD`RVPIllW?-(buLm-j6Elk#L~@gJ;`5VJ6Z5P}N|RFKlkCEir9HgzbzK>(f`X8%Ro69P~P Date: Thu, 23 Jun 2022 17:18:01 +0200 Subject: [PATCH 145/357] add all sizes of sea pickles not just 1 --- mods/MAPGEN/mcl_biomes/init.lua | 44 ++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index c4e11a958..023cd3de9 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -2609,7 +2609,7 @@ local function register_decorations() deco_type = "simple", place_on = {"mcl_ocean:dead_brain_coral_block"}, sidelen = 16, - fill_ratio = 10, + fill_ratio = 3, y_min = OCEAN_MIN, y_max = 1, decoration = "mcl_ocean:sea_pickle_1_dead_brain_coral_block", @@ -2619,6 +2619,48 @@ local function register_decorations() height_max = 1, place_offset_y = -1, }) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_ocean:dead_brain_coral_block"}, + sidelen = 16, + fill_ratio = 3, + y_min = OCEAN_MIN, + y_max = 1, + decoration = "mcl_ocean:sea_pickle_2_dead_brain_coral_block", + biomes = warm_oceans, + flags = "force_placement, all_floors", + height = 1, + height_max = 1, + place_offset_y = -1, + }) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_ocean:dead_brain_coral_block"}, + sidelen = 16, + fill_ratio = 2, + y_min = OCEAN_MIN, + y_max = 1, + decoration = "mcl_ocean:sea_pickle_3_dead_brain_coral_block", + biomes = warm_oceans, + flags = "force_placement, all_floors", + height = 1, + height_max = 1, + place_offset_y = -1, + }) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_ocean:dead_brain_coral_block"}, + sidelen = 16, + fill_ratio = 2, + y_min = OCEAN_MIN, + y_max = 1, + decoration = "mcl_ocean:sea_pickle_4_dead_brain_coral_block", + biomes = warm_oceans, + flags = "force_placement, all_floors", + height = 1, + height_max = 1, + place_offset_y = -1, + }) --rare CORAl minetest.register_decoration({ deco_type = "schematic", -- 2.40.1 From a6e2c94028a13b442b0d66175cb32c8a33212219 Mon Sep 17 00:00:00 2001 From: MysticTempest Date: Fri, 24 Jun 2022 05:38:26 -0500 Subject: [PATCH 146/357] Tweak hunger/health mechanics: Ensure hunger is always ticking away, and ensure that health regen is quicker when hunger bar is full. And, tweak saturation to partially use up hunger to heal; instead of healing on top of hunger. --- mods/PLAYER/mcl_hunger/api.lua | 8 ++++++-- mods/PLAYER/mcl_hunger/init.lua | 13 ++++++++++--- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/mods/PLAYER/mcl_hunger/api.lua b/mods/PLAYER/mcl_hunger/api.lua index 20937023a..60c21df90 100644 --- a/mods/PLAYER/mcl_hunger/api.lua +++ b/mods/PLAYER/mcl_hunger/api.lua @@ -33,8 +33,9 @@ if mcl_hunger.active then hunger = math.min(20, math.max(0, hunger)) player:get_meta():set_string("mcl_hunger:hunger", tostring(hunger)) if update_hudbars ~= false then - hb.change_hudbar(player, "hunger", hunger) - mcl_hunger.update_saturation_hud(player, nil, hunger) + -- math.floor(hunger) to stop the hunger float value from breaking the hud. + hb.change_hudbar(player, "hunger", math.floor(hunger)) + mcl_hunger.update_saturation_hud(player, nil, math.floor(hunger)) end return true end @@ -68,6 +69,9 @@ if mcl_hunger.active then local s = mcl_hunger.get_saturation(player) if s > 0 then mcl_hunger.set_saturation(player, math.max(s - 1.0, 0)) + h = mcl_hunger.get_hunger(player) + h = math.max(h-0.25, 0) + mcl_hunger.set_hunger(player, h) satuchanged = true elseif s <= 0.0001 then h = mcl_hunger.get_hunger(player) diff --git a/mods/PLAYER/mcl_hunger/init.lua b/mods/PLAYER/mcl_hunger/init.lua index 21c1e0860..373979cd0 100644 --- a/mods/PLAYER/mcl_hunger/init.lua +++ b/mods/PLAYER/mcl_hunger/init.lua @@ -28,6 +28,7 @@ mcl_hunger.EXHAUST_SWIM = 10 -- player movement in water mcl_hunger.EXHAUST_SPRINT = 100 -- sprint (per node) mcl_hunger.EXHAUST_DAMAGE = 100 -- taking damage (protected by armor) mcl_hunger.EXHAUST_REGEN = 6000 -- Regenerate 1 HP +mcl_hunger.EXHAUST_HUNGER = 5 -- Natural hunger overtime. mcl_hunger.EXHAUST_LVL = 4000 -- at what exhaustion player saturation gets lowered mcl_hunger.SATURATION_INIT = 5 -- Initial saturation for new/respawning players @@ -147,7 +148,13 @@ minetest.register_globalstep(function(dtime) if food_tick_timer > 4.0 then food_tick_timer = 0 - if food_level >= 18 then -- slow regenration + -- let hunger work always + if player_health > 0 and player_health <= 20 then + mcl_hunger.exhaust(player_name, mcl_hunger.EXHAUST_HUNGER) --natural hunger overtime always ticking. + mcl_hunger.update_exhaustion_hud(player, mcl_hunger.get_exhaustion(player)) + end + + if food_level >= 18 and food_level < 20 then -- slow regenration if player_health > 0 and player_health < 20 then player:set_hp(player_health+1) mcl_hunger.exhaust(player_name, mcl_hunger.EXHAUST_REGEN) @@ -164,10 +171,10 @@ minetest.register_globalstep(function(dtime) end end - elseif food_tick_timer > 0.5 and food_level == 20 and food_saturation_level >= 6 then -- fast regeneration + elseif food_tick_timer > 0.5 and food_level == 20 or food_saturation_level > 0 then -- fast regeneration if player_health > 0 and player_health < 20 then food_tick_timer = 0 - player:set_hp(player_health+1) + player:set_hp(player_health+1.5) mcl_hunger.exhaust(player_name, mcl_hunger.EXHAUST_REGEN) mcl_hunger.update_exhaustion_hud(player, mcl_hunger.get_exhaustion(player)) end -- 2.40.1 From e3abe725228ce0c678761cb49772af25e71ace7a Mon Sep 17 00:00:00 2001 From: MysticTempest Date: Sat, 25 Jun 2022 01:41:10 -0500 Subject: [PATCH 147/357] Fix healing speed, and saturation usage again; to be more accurate. --- mods/PLAYER/mcl_hunger/api.lua | 10 +++------- mods/PLAYER/mcl_hunger/init.lua | 10 +++++----- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/mods/PLAYER/mcl_hunger/api.lua b/mods/PLAYER/mcl_hunger/api.lua index 60c21df90..3c9cd97e9 100644 --- a/mods/PLAYER/mcl_hunger/api.lua +++ b/mods/PLAYER/mcl_hunger/api.lua @@ -33,9 +33,8 @@ if mcl_hunger.active then hunger = math.min(20, math.max(0, hunger)) player:get_meta():set_string("mcl_hunger:hunger", tostring(hunger)) if update_hudbars ~= false then - -- math.floor(hunger) to stop the hunger float value from breaking the hud. - hb.change_hudbar(player, "hunger", math.floor(hunger)) - mcl_hunger.update_saturation_hud(player, nil, math.floor(hunger)) + hb.change_hudbar(player, "hunger", hunger) + mcl_hunger.update_saturation_hud(player, nil, hunger) end return true end @@ -68,10 +67,7 @@ if mcl_hunger.active then local satuchanged = false local s = mcl_hunger.get_saturation(player) if s > 0 then - mcl_hunger.set_saturation(player, math.max(s - 1.0, 0)) - h = mcl_hunger.get_hunger(player) - h = math.max(h-0.25, 0) - mcl_hunger.set_hunger(player, h) + mcl_hunger.set_saturation(player, math.max(s - 1.5, 0)) satuchanged = true elseif s <= 0.0001 then h = mcl_hunger.get_hunger(player) diff --git a/mods/PLAYER/mcl_hunger/init.lua b/mods/PLAYER/mcl_hunger/init.lua index 373979cd0..0cae89a7d 100644 --- a/mods/PLAYER/mcl_hunger/init.lua +++ b/mods/PLAYER/mcl_hunger/init.lua @@ -28,7 +28,7 @@ mcl_hunger.EXHAUST_SWIM = 10 -- player movement in water mcl_hunger.EXHAUST_SPRINT = 100 -- sprint (per node) mcl_hunger.EXHAUST_DAMAGE = 100 -- taking damage (protected by armor) mcl_hunger.EXHAUST_REGEN = 6000 -- Regenerate 1 HP -mcl_hunger.EXHAUST_HUNGER = 5 -- Natural hunger overtime. +mcl_hunger.EXHAUST_HUNGER = 5 -- Hunger status effect at base level. mcl_hunger.EXHAUST_LVL = 4000 -- at what exhaustion player saturation gets lowered mcl_hunger.SATURATION_INIT = 5 -- Initial saturation for new/respawning players @@ -150,11 +150,11 @@ minetest.register_globalstep(function(dtime) -- let hunger work always if player_health > 0 and player_health <= 20 then - mcl_hunger.exhaust(player_name, mcl_hunger.EXHAUST_HUNGER) --natural hunger overtime always ticking. + --mcl_hunger.exhaust(player_name, mcl_hunger.EXHAUST_HUNGER) -- later for hunger status effect mcl_hunger.update_exhaustion_hud(player, mcl_hunger.get_exhaustion(player)) end - if food_level >= 18 and food_level < 20 then -- slow regenration + if food_level >= 18 then -- slow regeneration if player_health > 0 and player_health < 20 then player:set_hp(player_health+1) mcl_hunger.exhaust(player_name, mcl_hunger.EXHAUST_REGEN) @@ -171,10 +171,10 @@ minetest.register_globalstep(function(dtime) end end - elseif food_tick_timer > 0.5 and food_level == 20 or food_saturation_level > 0 then -- fast regeneration + elseif food_tick_timer > 0.5 and food_level == 20 and food_saturation_level > 0 then -- fast regeneration if player_health > 0 and player_health < 20 then food_tick_timer = 0 - player:set_hp(player_health+1.5) + player:set_hp(player_health+1) mcl_hunger.exhaust(player_name, mcl_hunger.EXHAUST_REGEN) mcl_hunger.update_exhaustion_hud(player, mcl_hunger.get_exhaustion(player)) end -- 2.40.1 From 2e0fa714ed476906b659aaa3e2cc059faeaac491 Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Sat, 25 Jun 2022 15:42:52 -0600 Subject: [PATCH 148/357] Nautilus Shell Item. Shell Texture by RandomLegoBrick. --- mods/ITEMS/mcl_fishing/init.lua | 1 + mods/ITEMS/mcl_mobitems/init.lua | 9 +++++++++ mods/ITEMS/mcl_mobitems/locale/template.txt | 4 ++++ .../textures/mcl_mobitems_nautilus_shell.png | Bin 0 -> 495 bytes 4 files changed, 14 insertions(+) create mode 100644 mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_nautilus_shell.png diff --git a/mods/ITEMS/mcl_fishing/init.lua b/mods/ITEMS/mcl_fishing/init.lua index efc66e00e..20f4e6f26 100644 --- a/mods/ITEMS/mcl_fishing/init.lua +++ b/mods/ITEMS/mcl_fishing/init.lua @@ -111,6 +111,7 @@ local fish = function(itemstack, player, pointed_thing) { itemstring = "mcl_mobs:nametag", }, { itemstring = "mcl_mobitems:saddle", }, { itemstring = "mcl_flowers:waterlily", }, + { itemstring = "mcl_mobitems:nautilus_shell", }, }, stacks_min = 1, stacks_max = 1, diff --git a/mods/ITEMS/mcl_mobitems/init.lua b/mods/ITEMS/mcl_mobitems/init.lua index 6b3c9bec4..38d4a4e63 100644 --- a/mods/ITEMS/mcl_mobitems/init.lua +++ b/mods/ITEMS/mcl_mobitems/init.lua @@ -327,6 +327,15 @@ minetest.register_tool("mcl_mobitems:carrot_on_a_stick", { _mcl_toollike_wield = true, }) +minetest.register_craftitem("mcl_mobitems:nautilus_shell", { + description = S("Nautilus Shell"), + _tt_help = S("Used to craft a conduit"), + _doc_items_longdesc = S("The Nautilus Shell is used to craft a conduit. They can be obtained by fishing or killing a drowned that is wielding a shell."), + inventory_image = "mcl_mobitems_nautilus_shell.png", + groups = { craftitem=1 }, + stack_max = 64, +}) + local horse_armor_use = S("Place it on a horse to put on the horse armor. Donkeys and mules can't wear horse armor.") minetest.register_craftitem("mcl_mobitems:iron_horse_armor", { diff --git a/mods/ITEMS/mcl_mobitems/locale/template.txt b/mods/ITEMS/mcl_mobitems/locale/template.txt index a3066dd1b..3f9cf1054 100644 --- a/mods/ITEMS/mcl_mobitems/locale/template.txt +++ b/mods/ITEMS/mcl_mobitems/locale/template.txt @@ -93,6 +93,10 @@ A carrot on a stick can be used on saddled pigs to ride them.= Place it on a saddled pig to mount it. You can now ride the pig like a horse. Pigs will also walk towards you when you just wield the carrot on a stick.= +Nautilus Shell= +Used to craft a conduit= +The Nautilus Shell is used to craft a conduit. They can be obtained by fishing or killing a drowned that is wielding a shell.= + Iron Horse Armor= Iron horse armor can be worn by horses to increase their protection from harm a bit.= Golden Horse Armor= diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_nautilus_shell.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_nautilus_shell.png new file mode 100644 index 0000000000000000000000000000000000000000..34c4db041f43679b526b8402e69baa69bb999f78 GIT binary patch literal 495 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0fb3JK~y+TW1ti; zLTOy!Ka_?64E5LyfNScl&tgzkkOs5wK6uJd+&B%)1_HP~bOZixnBU6q{=;Vm9?_Ky zp)vR2h9HYU0fy!OS1ncq*$&1)gZ}T^rV3^Q4MAapFjO4_3y6S$uW!N`_HJDZW;=UV zgJ}>jFx$=G~1SD27fcPMA_u*5ZVT)110~s(u zX|QIHMi2%8kjBKq4u&sZzk~TO&5xeG0@E-63ka}(fMLKOEW`q|@is$2Y6!!G*=xX( zg=wJ-GLoWTHV8mt10@i_0SI(9IPgGx5Z=30^*>NEoR5Uz0PX@<7=XM03~{jFr Date: Sat, 25 Jun 2022 16:41:32 -0600 Subject: [PATCH 149/357] Heart of the Sea Item. Item Texture by RandomLegoBrick. --- mods/ITEMS/mcl_mobitems/init.lua | 9 +++++++++ mods/ITEMS/mcl_mobitems/locale/template.txt | 2 ++ .../textures/mcl_mobitems_heart_of_the_sea.png | Bin 0 -> 440 bytes 3 files changed, 11 insertions(+) create mode 100644 mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_heart_of_the_sea.png diff --git a/mods/ITEMS/mcl_mobitems/init.lua b/mods/ITEMS/mcl_mobitems/init.lua index 38d4a4e63..2f3bd3c01 100644 --- a/mods/ITEMS/mcl_mobitems/init.lua +++ b/mods/ITEMS/mcl_mobitems/init.lua @@ -336,6 +336,15 @@ minetest.register_craftitem("mcl_mobitems:nautilus_shell", { stack_max = 64, }) +minetest.register_craftitem("mcl_mobitems:heart_of_the_sea", { + description = S("Heart of the Sea"), + _tt_help = S("Used to craft a conduit"), + _doc_items_longdesc = S("The Heart of the Sea is used to craft a conduit. They can be obtained by finding them in a buried treasure chest."), + inventory_image = "mcl_mobitems_heart_of_the_sea.png", + groups = { craftitem=1 }, + stack_max = 64, +}) + local horse_armor_use = S("Place it on a horse to put on the horse armor. Donkeys and mules can't wear horse armor.") minetest.register_craftitem("mcl_mobitems:iron_horse_armor", { diff --git a/mods/ITEMS/mcl_mobitems/locale/template.txt b/mods/ITEMS/mcl_mobitems/locale/template.txt index 3f9cf1054..690ae3fac 100644 --- a/mods/ITEMS/mcl_mobitems/locale/template.txt +++ b/mods/ITEMS/mcl_mobitems/locale/template.txt @@ -96,6 +96,8 @@ Place it on a saddled pig to mount it. You can now ride the pig like a horse. Pi Nautilus Shell= Used to craft a conduit= The Nautilus Shell is used to craft a conduit. They can be obtained by fishing or killing a drowned that is wielding a shell.= +Heart of the Sea= +The Heart of the Sea is used to craft a conduit. They can be obtained by finding them in a buried treasure chest.= Iron Horse Armor= Iron horse armor can be worn by horses to increase their protection from harm a bit.= diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_heart_of_the_sea.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_heart_of_the_sea.png new file mode 100644 index 0000000000000000000000000000000000000000..4f6affbf123f6d2eeb69bdbd9fc6bea0183af14f GIT binary patch literal 440 zcmV;p0Z0CcP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0ZmCnK~y+TW1ti; zLTL;jYT^DL$^?VgCw5|0iy;Wpm|0l}=HI#VnBn=0Hw;$}9{}^w4MO37H0#(pFnD>` zFqjx=G3-Bdn&I$~^H5m`02zdA2oscsYqqs91Z&0xKx&Y^2R8r)9PLcOG%nj=UV#Cy zQ;=;J7ZYaq_U#A5wjD>n3P1p+Y1d>E21C<^@n#z`Y_bVbOE`boGCbZ7_hY@%QKV@Tf!y z5DHvawjo#EfFAJ`2*_8+n)5CCZe0c6b}fYSv`Y#d-d41hF(0J3Hfz%T#? iU Date: Sat, 25 Jun 2022 16:47:48 -0600 Subject: [PATCH 150/357] Heart of the Sea Textures by RandomLegoBrick --- .../textures/mcl_mobitems_heart_of_the_sea.png | Bin 440 -> 399 bytes .../mcl_mobitems_heart_of_the_sea_split.png | Bin 0 -> 440 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_heart_of_the_sea_split.png diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_heart_of_the_sea.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_heart_of_the_sea.png index 4f6affbf123f6d2eeb69bdbd9fc6bea0183af14f..7e8983d3389082b4b80f800ff8a0360a39727d69 100644 GIT binary patch delta 218 zcmV<0044vp1CIlcRskfDS8IPZ+pz(#Q;=;J7ZYaq_U#A5wjD>n3b27+Uq3V4I(HWA z6%-eMY(IMJ0#3~!jbC0r2Wy4_xB-$9B4B5OLL40+YkY9yCIhFK3{(a!43PZ{(gf3Z zMQ53s?gTz-)wR{QdboJSs6_0ohKO$Tq?>|NZ$L zOv3<1LPEC<24EWh{rZ8DkWdT&0azkoV&eewVF08N1n?$hWPqI7Kmc7Ml>h?+0O?<# UT6+h!;{X5v07*qoM6N<$f`xHeA^-pY delta 259 zcmV+e0sQ`t1Goc_Rsl_sS8IPR+hJaT0kBh$Z5J04X888)2g9}fEHP*}jdASodNb~Y@;LHO0-EQVJ{ zTNorI`N3-3a?gM@bBf7;`5=Jeg6Zx3U>f99aWP&7hX2nP82&LZh}m~-0E@#k{`vkD zOoIU2KOmD~(R2QE^?#6UFo3S{_viQUs6+`65PPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0ZmCnK~y+TW1ti; zLTL;jYT^DL$^?VgCw5|0iy;Wpm|0l}=HI#VnBn=0Hw;$}9{}^w4MO37H0#(pFnD>` zFqjx=G3-Bdn&I$~^H5m`02zdA2oscsYqqs91Z&0xKx&Y^2R8r)9PLcOG%nj=UV#Cy zQ;=;J7ZYaq_U#A5wjD>n3P1p+Y1d>E21C<^@n#z`Y_bVbOE`boGCbZ7_hY@%QKV@Tf!y z5DHvawjo#EfFAJ`2*_8+n)5CCZe0c6b}fYSv`Y#d-d41hF(0J3Hfz%T#? iU Date: Sat, 25 Jun 2022 16:54:19 -0600 Subject: [PATCH 151/357] Nautilus Shell Texture, by RandomLegoBrick --- .../textures/mcl_mobitems_nautilus_shell.png | Bin 495 -> 536 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_nautilus_shell.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_nautilus_shell.png index 34c4db041f43679b526b8402e69baa69bb999f78..62e2ffc1006e9c508c04d81482bc3c2500ff9264 100644 GIT binary patch delta 460 zcmV;-0W<#Z1DFJmR)4KYL_t(IPh+4IFhXgpz{du$4;EVP>&&itSQ*tj6qpJ z8qB`?;3>n}ou|NTWP_NXG#G$1m!$_Xq=vgN6z04IYXE5k0U-fCuows+Tfz*b!GZ0KV&#}^&W$rVKjrM_eqAS^WHK@i10CJ=xlOsNN`Fg5n&HdO{|%3yJZofu z>IZ|bZ^9XxYuAF=wax2+BtMvKV78l~rimZ!C77!~0PGi#?I33h3h;sjyJoHjdjkaS zK77is@5FVi;Q7sCokOx^I-sMG$Lzmsrv}V zpI;?_HM21MVi4kGWsni$hN?yYumKn%0gRme!!^NA=Q2Y-9C>$6-PO8WNT{9H`0|NkSB&;Dpb#{aR0000?>>0S zP~12T%mxCuK6C^AZ>#4|5q(m1lbP8K!g78+olR; z0}Vl8gD_Mb0}F_Nfv<1E8TM{n3uZfeSA%H~FfiNA;N*21?tdDPcVGZ!!2kLE6%2v` zybPaTB`^deRx^P3AaM8LQ=nmsQNjZmFhOasW{^e@1_6-9#KI1SFJHfd`7q6op1uOp zFaQe(uz!GIz#uHd0<`fqLqTc?!-Uyuz>ZQF zg@L#4{-9_U;Nu2*jhBIwgB_{@0pNj%48DHnfwCCDHVX>!GJOC36X*gCs3-y;8^8#Q zf#1JAgJ}=|Is5(l&kVwX{0!3 Date: Sun, 26 Jun 2022 00:39:31 +0200 Subject: [PATCH 152/357] Fix zombie villager curing (crash) --- mods/ENTITIES/mobs_mc/villager_zombie.lua | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/villager_zombie.lua b/mods/ENTITIES/mobs_mc/villager_zombie.lua index 3dece8c29..daeed9e9a 100644 --- a/mods/ENTITIES/mobs_mc/villager_zombie.lua +++ b/mods/ENTITIES/mobs_mc/villager_zombie.lua @@ -119,20 +119,7 @@ mcl_mobs:register_mob("mobs_mc:villager_zombie", { villager_obj:set_yaw(yaw) villager.target_yaw = yaw villager.nametag = self.nametag - local texture = self.base_texture[1]:gsub("zombie", "villager") - if texture == "mobs_mc_villager_villager.png" then - texture = "mobs_mc_villager.png" - end - local textures = {texture} - villager.base_texture = textures - villager_obj:set_properties({textures = textures}) - local matches = {} - for prof, tex in pairs(professions) do - if texture == tex then - table.insert(matches, prof) - end - end - villager._profession = matches[math.random(#matches)] + villager._profession = "unemployed" self._curing = nil mcl_burning.extinguish(obj) obj:remove() -- 2.40.1 From d9e40d52235bf6dc0e9a69ae4c9e14ccaeca3af7 Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 26 Jun 2022 11:19:21 +0200 Subject: [PATCH 153/357] set profession first in on_spawn --- mods/ENTITIES/mobs_mc/villager.lua | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/villager.lua b/mods/ENTITIES/mobs_mc/villager.lua index 1d62082c9..1c2cffb9b 100644 --- a/mods/ENTITIES/mobs_mc/villager.lua +++ b/mods/ENTITIES/mobs_mc/villager.lua @@ -1362,17 +1362,17 @@ mcl_mobs:register_mob("mobs_mc:villager", { end, on_spawn = function(self) - if self._id then - set_textures(self) - return - end - self._id=minetest.sha1(minetest.get_gametime()..minetest.pos_to_string(self.object:get_pos())..tostring(math.random())) if not self._profession then self._profession = "unemployed" if math.random(100) == 1 then self._profession = "nitwit" end end + if self._id then + set_textures(self) + return + end + self._id=minetest.sha1(minetest.get_gametime()..minetest.pos_to_string(self.object:get_pos())..tostring(math.random())) set_textures(self) end, on_die = function(self, pos) -- 2.40.1 From f1e5790308e274e248eea2e2e7e2003af5d48675 Mon Sep 17 00:00:00 2001 From: TheRandomLegoBrick Date: Mon, 27 Jun 2022 10:17:33 -0700 Subject: [PATCH 154/357] Update textures for nautilus shell and heart of the sea --- .../textures/mcl_mobitems_heart_of_the_sea.png | Bin 399 -> 350 bytes .../textures/mcl_mobitems_nautilus_shell.png | Bin 536 -> 548 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_heart_of_the_sea.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_heart_of_the_sea.png index 7e8983d3389082b4b80f800ff8a0360a39727d69..b558939638cb0155d75c526ae48652aea6a423d2 100644 GIT binary patch delta 274 zcmV+t0qy>e1Kt9VReu2UNkl3g1;k$T0)nR!yntda zHi95pXk{T@KtaJGglPQbjr+o8lVG7AER#v{y%|Wt00tcGOu;lZ+pz(#Q;=;J7ZYaq_U#A5wtpQ*zzVQ|Utd2n+&Xs_ z>=hIjfNVc{>;g{BAdO#MKL=}u0k{E@5+Yz{gF+k~AZvVZ<0b>Am<&_~Eew$T4AKPC zc;nU!a>c*7|j0l?F(1~48UxJY5e{9Jv=HgVgcEi$Tq?>|NZ$L zOv3<1LPEC<20UOI|NZ)bl8{gg00CGcVPfL|^I-s_5d`oiWn_Sy+CTtZBb5LH0|4n? Vpjvwew&MT*002ovPDHLkV1hang>(P_ diff --git a/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_nautilus_shell.png b/mods/ITEMS/mcl_mobitems/textures/mcl_mobitems_nautilus_shell.png index 62e2ffc1006e9c508c04d81482bc3c2500ff9264..aa415508df2ddf29ac2df803aa01b7b3e0212474 100644 GIT binary patch delta 472 zcmV;}0Vn>L1f&FzR)4ukL_t(IPh+4IFhXezkniR8AIfByxNR3sbu3UC4qzIqTFSwE zC;*Fv+8glMly`jwi$DPrlm-KkW{^fZUJ-`>JO~WpgTz-KyzmLC6b|49z%+w2AcGri zlNrp*bHL&td1SAF0E!Eabj}6S*3IQ$jWEE<@STD2%Nr;U6@P#O2WC6S0FY)F02#9W z)gvem0?-2#B@jWHkJffF2y=3Q`5?`uGiEYuKK+1UMnN0{yR-pV92qc!2qiJm217Fg z25tcn2014i1`%6x22n$0hPCUrGyIe{VOYCzEyJm+4;h}^J&rv(Bdsm|uMLm-fAQ$v z|1WM`1mgnCLHmIt~GBE!B#_;7g1H+Sv zb0IEa<6=;__JAR%GK1mw;};DlZ{KZ%YD0Aa)R}Ov2vMd+GQ50^i2oPg85oiaQb5fA zFqdHD1+XF3khGup;1*cy^QOaK@4W=_B}9e6VlaR;U|;}O3?KrOfdK%uzO7f>V*3mL O0000du$4;EVP>&&itSQ*tj6qpJ z8qB`?;3>n}ou|NTWP_NXG#G$1m!$_Xq=vgN6z04IYXE5k0U-fCuows+Tfz*b!GZ0KV&#}^&W$rVKjrM_eqAS^WHK@i10CJ=xlOsNN`Fg5n&HdO{|%3yJZofu z>IZ|bZ^9XxYuAF=wax2+BtMvKV78l~rimZ!C77!~0PGi#?I33h3h;sjyJoHjdjkaS zK77is@5FVi;Q7sCokOx^I-sMG$Lzmsrv}V zpI;?_HM21MVi4kGWsni$hN?yYumKn%0gRme!!^NA=Q2Y-9C>$6-PO8WNT{9H`0|NkSB&;Dpb#{aR0000 Date: Thu, 30 Jun 2022 01:43:22 +0200 Subject: [PATCH 155/357] Add crying obsidian --- mods/ITEMS/mcl_core/nodes_base.lua | 13 +++++++++++++ .../textures/mcl_core_crying_obsidian.png | Bin 0 -> 250 bytes 2 files changed, 13 insertions(+) create mode 100644 mods/ITEMS/mcl_core/textures/mcl_core_crying_obsidian.png diff --git a/mods/ITEMS/mcl_core/nodes_base.lua b/mods/ITEMS/mcl_core/nodes_base.lua index 005b00525..957b1f24a 100644 --- a/mods/ITEMS/mcl_core/nodes_base.lua +++ b/mods/ITEMS/mcl_core/nodes_base.lua @@ -831,6 +831,19 @@ minetest.register_node("mcl_core:obsidian", { end, }) +minetest.register_node("mcl_core:crying_obsidian", { + description = S("Crying Obsidian"), + _doc_items_longdesc = S("Crying obsidian is a luminous obsidian that can generate as part of ruined portals."), + tiles = {"default_obsidian.png^mcl_core_crying_obsidian.png"}, + is_ground_content = false, + light_source = 10, + sounds = mcl_sounds.node_sound_stone_defaults(), + stack_max = 64, + groups = {pickaxey=5, building_block=1, material_stone=1}, + _mcl_blast_resistance = 1200, + _mcl_hardness = 50, +}) + minetest.register_node("mcl_core:ice", { description = S("Ice"), _doc_items_longdesc = S("Ice is a solid block usually found in cold areas. It melts near block light sources at a light level of 12 or higher. When it melts or is broken while resting on top of another block, it will turn into a water source."), diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_crying_obsidian.png b/mods/ITEMS/mcl_core/textures/mcl_core_crying_obsidian.png new file mode 100644 index 0000000000000000000000000000000000000000..6229fe08add9b25be90417e112520c5333b38758 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sEXfH33KJw={CLG}_)Usv`g99-Od7E2_Q5`aQgo-U3d7N?UF z7BHx6So`n1M`v29nm3zUlBkh^fx(r36ArH1H}mny|18_C{{JX><;+Kx)i%ODNe9;l zEQ)as5SZ@Gv2((L;6g^X8ny>KCP|As6E83(Es|coD6LQZ|3+2=;cW~@rm4OAXYKd5 oLD|bz&vnP1mPLZ|nPwbh$V>5Na1*?97U&8FPgg&ebxsLQ06)1_&j0`b literal 0 HcmV?d00001 -- 2.40.1 From 78e187537f9b4116f9a36a8fd5a9fcc9ab870e9c Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 30 Jun 2022 01:25:55 +0200 Subject: [PATCH 156/357] Add crying obsidian particle effect --- mods/ITEMS/mcl_core/functions.lua | 41 ++++++++++++++++++ .../mcl_core_crying_obsidian_tear.png | Bin 0 -> 91 bytes .../mcl_core_crying_obsidian_tear2.png | Bin 0 -> 86 bytes .../mcl_core_crying_obsidian_tear3.png | Bin 0 -> 83 bytes 4 files changed, 41 insertions(+) create mode 100644 mods/ITEMS/mcl_core/textures/mcl_core_crying_obsidian_tear.png create mode 100644 mods/ITEMS/mcl_core/textures/mcl_core_crying_obsidian_tear2.png create mode 100644 mods/ITEMS/mcl_core/textures/mcl_core_crying_obsidian_tear3.png diff --git a/mods/ITEMS/mcl_core/functions.lua b/mods/ITEMS/mcl_core/functions.lua index fc08a0957..48719d96e 100644 --- a/mods/ITEMS/mcl_core/functions.lua +++ b/mods/ITEMS/mcl_core/functions.lua @@ -1698,3 +1698,44 @@ function mcl_core.after_snow_destruct(pos) local node = minetest.get_node(npos) mcl_core.clear_snow_dirt(npos, node) end + + +-- Obsidian crying + +local crying_obsidian_tears = { + "mcl_core_crying_obsidian_tear.png", + "mcl_core_crying_obsidian_tear2.png", + "mcl_core_crying_obsidian_tear3.png" +} + +local psdef = { + amount = 10, + time = 0.9, --everything longer than 1 is a coord exploit + minvel = vector.new(0,-0.15,0), + maxvel = vector.new(0,-0.001,0), + minacc = vector.new(0,-0.1,0), + maxacc = vector.new(0,-0.001,0), + minexptime = 1, + maxexptime = 6, + minsize = 0.1, + maxsize = 0.25, + collisiondetection = true, + collision_removal = true, + object_collision = true, + vertical = true, +} + +minetest.register_abm({ + label = "Obsidian cries", + nodenames = {"mcl_core:crying_obsidian"}, + interval = 60, + chance = 10, + action = function(pos, node) + psdef.minpos = vector.offset(pos,-0.6,-0.51,-0.6) + psdef.maxpos = vector.offset(pos,0.6,-0.51,0.6) + for _,t in pairs(crying_obsidian_tears) do + psdef.texture = t + minetest.add_particlespawner(psdef) + end + end +}) diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_crying_obsidian_tear.png b/mods/ITEMS/mcl_core/textures/mcl_core_crying_obsidian_tear.png new file mode 100644 index 0000000000000000000000000000000000000000..94d9bd21a144595e901bb17602460e27daee5a3d GIT binary patch literal 91 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y-!3HF~bz9kil#-{5V+hCfWRHaC+8K;oGp5Yc mNz7q8me!|UAZY;-lwg>r&Stai=HZ7x)eN4lelF{r5}E))v=+($ literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_crying_obsidian_tear2.png b/mods/ITEMS/mcl_core/textures/mcl_core_crying_obsidian_tear2.png new file mode 100644 index 0000000000000000000000000000000000000000..07d1978ba23a617431a2da41091d30c61f416f11 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-c!3HFEzPi^4q+~r^978y+Cno@bM?!RM+s2uX iPfD^$^fxv(GBN~tv3@`LcGW7NLIzJ)KbLh*2~7ZTpBTyj literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_crying_obsidian_tear3.png b/mods/ITEMS/mcl_core/textures/mcl_core_crying_obsidian_tear3.png new file mode 100644 index 0000000000000000000000000000000000000000..ea0f58393c9f01294b071249ff0fc4d6dab73d65 GIT binary patch literal 83 zcmeAS@N?(olHy`uVBq!ia0vp^Od!m`1|*BN@u~nRDNh&25RU7~2|(bH5M4Xhurc>* dX{wqx8-rphi$O@~f>%IQ44$rjF6*2UngF9R6UYDn literal 0 HcmV?d00001 -- 2.40.1 From ce2531a488fba149ad2da25c136a8a270066fd77 Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 30 Jun 2022 14:00:55 +0200 Subject: [PATCH 157/357] Add correct respawn anchor recipe --- mods/ITEMS/mcl_beds/respawn_anchor.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mods/ITEMS/mcl_beds/respawn_anchor.lua b/mods/ITEMS/mcl_beds/respawn_anchor.lua index 469a8ba4f..a19a986ce 100644 --- a/mods/ITEMS/mcl_beds/respawn_anchor.lua +++ b/mods/ITEMS/mcl_beds/respawn_anchor.lua @@ -88,11 +88,11 @@ for i=0,4 do end -minetest.register_craft({ --TODO: Please change this crafting recipe once crying obsidian is implemented! +minetest.register_craft({ output = "mcl_beds:respawn_anchor", recipe = { - {"mcl_core:obsidian", "mcl_core:obsidian", "mcl_core:obsidian"}, + {"mcl_core:crying_obsidian", "mcl_core:crying_obsidian", "mcl_core:crying_obsidian"}, {"mcl_nether:glowstone", "mcl_nether:glowstone", "mcl_nether:glowstone"}, - {"mcl_core:obsidian", "mcl_core:obsidian", "mcl_core:obsidian"} + {"mcl_core:crying_obsidian", "mcl_core:crying_obsidian", "mcl_core:crying_obsidian"} } }) -- 2.40.1 From 817fb83ba6146285af08389008e94c857f7999ad Mon Sep 17 00:00:00 2001 From: cora Date: Wed, 29 Jun 2022 18:13:02 +0200 Subject: [PATCH 158/357] Fix Anvil stacking dupe II This guarantees that the anvil logic never overstacks the output slot --- mods/ITEMS/mcl_anvils/init.lua | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/mods/ITEMS/mcl_anvils/init.lua b/mods/ITEMS/mcl_anvils/init.lua index d3b32b844..a56299cd9 100644 --- a/mods/ITEMS/mcl_anvils/init.lua +++ b/mods/ITEMS/mcl_anvils/init.lua @@ -84,6 +84,19 @@ local function distinguish_tool_and_material(input1, input2) end end +-- Helper function to make sure update_anvil_slots NEVER overstacks the output slot +local function fix_stack_size(stack) + if not stack or stack == "" then return "" end + local count = stack:get_count() + local max_count = stack:get_stack_max() + + if count > max_count then + stack:set_count(max_count) + count = max_count + end + return count +end + -- Update the inventory slots of an anvil node. -- meta: Metadata of anvil node local function update_anvil_slots(meta) @@ -213,6 +226,7 @@ local function update_anvil_slots(meta) -- Set the new output slot if new_output then + fix_stack_size(new_output) inv:set_stack("output", 1, new_output) end end -- 2.40.1 From 92992cb44ecfa2332bdbadc4d071b04e34581e67 Mon Sep 17 00:00:00 2001 From: Code-Sploit Date: Wed, 14 Apr 2021 12:20:53 +0000 Subject: [PATCH 159/357] Add ancient debris --- mods/ITEMS/mcl_nether/init.lua | 15 +++++++++++++++ .../textures/mcl_nether_ancient_debris_side.png | Bin 0 -> 8573 bytes .../textures/mcl_nether_ancient_debris_top.png | Bin 0 -> 7800 bytes 3 files changed, 15 insertions(+) create mode 100644 mods/ITEMS/mcl_nether/textures/mcl_nether_ancient_debris_side.png create mode 100644 mods/ITEMS/mcl_nether/textures/mcl_nether_ancient_debris_top.png diff --git a/mods/ITEMS/mcl_nether/init.lua b/mods/ITEMS/mcl_nether/init.lua index 2d8def90d..679524d98 100644 --- a/mods/ITEMS/mcl_nether/init.lua +++ b/mods/ITEMS/mcl_nether/init.lua @@ -51,6 +51,21 @@ minetest.register_node("mcl_nether:quartz_ore", { _mcl_fortune_drop = mcl_core.fortune_drop_ore }) +minetest.register_node("mcl_nether:ancient_debris", { + description = S("Ancient Debris"), + _doc_items_longdesc = S("Ancient debris can be found in the nether and is very very rare."), + stack_max = 64, + tiles = {"mcl_nether_ancient_debris_top.png", "mcl_nether_ancient_debris_side.png"}, + is_ground_content = true, + groups = {pickaxey=4, building_block=1, material_stone=1, xp=0}, + drop = 'mcl_nether:ancient_debris', + sounds = mcl_sounds.node_sound_stone_defaults(), + _mcl_blast_resistance = 1200, + _mcl_hardness = 30, + _mcl_silk_touch_drop = true, + _mcl_fortune_drop = mcl_core.fortune_drop_ore +}) + -- For eternal fire on top of netherrack and magma blocks -- (this code does not require a dependency on mcl_fire) local function eternal_after_destruct(pos, oldnode) diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_ancient_debris_side.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_ancient_debris_side.png new file mode 100644 index 0000000000000000000000000000000000000000..230f2cce361c510162b332ee4c028b5f68d74ca2 GIT binary patch literal 8573 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 X74wsmTiyLS0RSk=Yrsln%|red>vFFm literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_ancient_debris_top.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_ancient_debris_top.png new file mode 100644 index 0000000000000000000000000000000000000000..d354cc8a268c3c08ce8b724c504e03c47cebef38 GIT binary patch literal 7800 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 UB&(FQ`TcJgqNT4{rfwJhAB*}(+5i9m literal 0 HcmV?d00001 -- 2.40.1 From f0f52713f7915dfd1cc511c8509c2c92bb8db5b7 Mon Sep 17 00:00:00 2001 From: Code-Sploit Date: Wed, 14 Apr 2021 11:42:28 +0000 Subject: [PATCH 160/357] Add code for netherite armor --- mods/ITEMS/mcl_armor/register.lua | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/mods/ITEMS/mcl_armor/register.lua b/mods/ITEMS/mcl_armor/register.lua index 1f9ce7b02..1d3414339 100644 --- a/mods/ITEMS/mcl_armor/register.lua +++ b/mods/ITEMS/mcl_armor/register.lua @@ -81,6 +81,21 @@ mcl_armor.register_set({ craft_material = "mcl_core:diamond", }) +mcl_armor.register_set({ + name = "netherite", + description = "Netherite", + durability = 555, + enchantability = 10, + points = { + head = 3, + torso = 8, + legs = 6, + feet = 3, + }, + toughness = 2, + craft_material = "mcl_nether:netherite_ingot", +}) + mcl_armor.register_protection_enchantment({ id = "projectile_protection", name = S("Projectile Protection"), -- 2.40.1 From 57ebfbfb56574f338828151076511ff491959d07 Mon Sep 17 00:00:00 2001 From: Code-Sploit Date: Wed, 14 Apr 2021 11:44:50 +0000 Subject: [PATCH 161/357] Add first part of netherite armor textures --- .../textures/mcl_armor_inv_boots_netherite.png | Bin 0 -> 173 bytes .../mcl_armor_inv_chestplate_netherite.png | Bin 0 -> 244 bytes .../textures/mcl_armor_inv_helmet_netherite.png | Bin 0 -> 162 bytes .../textures/mcl_armor_inv_leggings_netherite.png | Bin 0 -> 176 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 mods/ITEMS/mcl_armor/textures/mcl_armor_inv_boots_netherite.png create mode 100644 mods/ITEMS/mcl_armor/textures/mcl_armor_inv_chestplate_netherite.png create mode 100644 mods/ITEMS/mcl_armor/textures/mcl_armor_inv_helmet_netherite.png create mode 100644 mods/ITEMS/mcl_armor/textures/mcl_armor_inv_leggings_netherite.png diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_boots_netherite.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_boots_netherite.png new file mode 100644 index 0000000000000000000000000000000000000000..ec4183ed782bce5bc7b48d36bdee8bcd2a1bd070 GIT binary patch literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`C7v#hAr_~T6C~me1UNt5-?isZ zeat5X%L!6!HC(4Qo!TJ9G+9_&Njak$pAhT)idcykhikKjHBr?6&ogLW|nhJRjl Vx-DE&yMgvIc)I$ztaD0e0sti_Ip_cY literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_chestplate_netherite.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_chestplate_netherite.png new file mode 100644 index 0000000000000000000000000000000000000000..f2f0ad5a953c213c783ba635e50ddbab19f87b8f GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`yFFbTLo9mFPPFA~HsER9$t29Z zg2%(Br(>>eH ze8bDNPP#DJ3i8Dq%5C=U%$&LZ?7_0uYYkf8B)8QnWjTm$&367i-O6INzopr0Q`Di!~g&Q literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_helmet_netherite.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_helmet_netherite.png new file mode 100644 index 0000000000000000000000000000000000000000..17bf7f8011479ddbab6596e149bc749fab84a32f GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`nVv3=Ar_~T6C~z2xW+xSH}lz& zR&M?K|Gs(qG;V~1f8W1j!GromrqffW{_W@OZk1*bQqSNx!B8?gaaQ6C4d#Tpww(;e z)K4-@aGJsGkTZ$L!HlJ?lgs0YgNu2?3WpZSCSSob3T=T6j0|j1RR(+w4|0K)GI+ZB KxvX*?re z{FuMs*^Lc1{-;K!Ch#ORZ&<%vUt;#FSC7nD(ik?WrM$^Y_n*UfLds!=4s$}6qr{Vv zMZ66++tvsiQ9H>{(z@eFW-^1$gA02bd}Wq1zWB&%+>l_^&}w1EyrDDMltEHhNM444 ZVam(J%#k^|@jxdqc)I$ztaD0e0ssolJ$V2C literal 0 HcmV?d00001 -- 2.40.1 From 3f30251f260314b3a4c859f03d55b91daed5ae3f Mon Sep 17 00:00:00 2001 From: Code-Sploit Date: Wed, 14 Apr 2021 11:46:34 +0000 Subject: [PATCH 162/357] Add second part of netherite armor textures --- .../mcl_armor/mcl_armor_chestplate_netherite.png | Bin 0 -> 494 bytes .../mcl_armor/mcl_armor_helmet_netherite.png | Bin 0 -> 472 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 mods/ITEMS/mcl_armor/mcl_armor_chestplate_netherite.png create mode 100644 mods/ITEMS/mcl_armor/mcl_armor_helmet_netherite.png diff --git a/mods/ITEMS/mcl_armor/mcl_armor_chestplate_netherite.png b/mods/ITEMS/mcl_armor/mcl_armor_chestplate_netherite.png new file mode 100644 index 0000000000000000000000000000000000000000..c2eb42facea0a0c9901dec4b7d65067e9b4930ae GIT binary patch literal 494 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(nJuC&U#<$A-n)8(5cR zm3dm)2fFyF$SWABtN;K1U+UguTc9*!NswPKgTu2MX&_FLx4R2R+r6n(Kn{C}r>`sf zQx-mMMN`k}^Ugq_!=5gVAr`0KPTa`VY#`z)FZ*iFv65>EXLWuuHNR)Rq*jt^Y!l9T z<^6i4EgD_+4`k1k>@eTMAY-{ndfI!AUH1eF{3B*M2s3!)G>NKi*HPcKVP--srvO`) ztlZWef_L98I+&{N^0@Np+H(0t>gQSxE!eQmV5_L6)mOD$$7TwIuKSv*w4Oyd>2zmP zcv_No?SHH7TQVe0FLu(7nN%w4z|?K-5qGlj#gkW=i?WvFsO81v$H>3fdsASNmF)D3 zrP1;NSLg4qVZ558{XHl6@N1xVR7+eVN>UO_QmvAUQh^kMk%5t+u7QcJp-G6Lp_Q?* rm8r3|fq|8Q!7Khs859k<`6-!cmAEy`4m!91sDZ)L)z4*}Q$iB}x09tT literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_armor/mcl_armor_helmet_netherite.png b/mods/ITEMS/mcl_armor/mcl_armor_helmet_netherite.png new file mode 100644 index 0000000000000000000000000000000000000000..f3b054735233d34317eca43a98d65323a27db20a GIT binary patch literal 472 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(m)iC&U#<8>y??8(5cR zl?A%^d0N`XhQ+GLD{ygf{r~@e{U%R2pbEy4AirP+hi5m^K%69RcNfl&Hw05c96aLcP!Xs}U!=SX$$9Tb`y9yo!r}d%qVOKW>{^`F_iqDPO;@=5HvhecAP>cyUpxsGg_vle2yjXIRZOoE4_T`1uQG?tE~n zP5P@`h1GiDk9CHci|dV6?`OA3wqp}wZg`m=v&NM>z&0^Q=MC$`iE=N4TsBVtx>~iw zHKHUXu_V9nO2Eg V!|b4g3xFCJJYD@<);T3K0RRJhoUi}@ literal 0 HcmV?d00001 -- 2.40.1 From 8ee792e965082042ec76ca504ca7791bfa5e2a9d Mon Sep 17 00:00:00 2001 From: Code-Sploit Date: Wed, 14 Apr 2021 11:54:42 +0000 Subject: [PATCH 163/357] Add correct textures for netherite armor --- .../textures/mcl_armor_boots_netherite.png | Bin 0 -> 385 bytes .../textures/mcl_armor_chestplate_netherite.png | Bin 0 -> 494 bytes .../textures/mcl_armor_helmet_netherite.png | Bin 0 -> 472 bytes .../textures/mcl_armor_leggings_netherite.png | Bin 0 -> 458 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 mods/ITEMS/mcl_armor/textures/mcl_armor_boots_netherite.png create mode 100644 mods/ITEMS/mcl_armor/textures/mcl_armor_chestplate_netherite.png create mode 100644 mods/ITEMS/mcl_armor/textures/mcl_armor_helmet_netherite.png create mode 100644 mods/ITEMS/mcl_armor/textures/mcl_armor_leggings_netherite.png diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_boots_netherite.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_boots_netherite.png new file mode 100644 index 0000000000000000000000000000000000000000..245512c28c194446c675d68b8c8da7e7471e1353 GIT binary patch literal 385 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(m)iC&U#(|3JMyj ztJ@n`ds^BDy7g<1k;Ci-G#BFEM`1O(g&2oNaGVPIJN zpDTCWMW1G%@v0@R5hW>!C8<`)MX5lF!N|bKP}jgj*U%)y(9p`**viyc+rYrez~B{s gr3{LO-29Zxv`X9>W(OTy0Mx+X>FVdQ&MBb@09T1@_W%F@ literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_chestplate_netherite.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_chestplate_netherite.png new file mode 100644 index 0000000000000000000000000000000000000000..c2eb42facea0a0c9901dec4b7d65067e9b4930ae GIT binary patch literal 494 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(nJuC&U#<$A-n)8(5cR zm3dm)2fFyF$SWABtN;K1U+UguTc9*!NswPKgTu2MX&_FLx4R2R+r6n(Kn{C}r>`sf zQx-mMMN`k}^Ugq_!=5gVAr`0KPTa`VY#`z)FZ*iFv65>EXLWuuHNR)Rq*jt^Y!l9T z<^6i4EgD_+4`k1k>@eTMAY-{ndfI!AUH1eF{3B*M2s3!)G>NKi*HPcKVP--srvO`) ztlZWef_L98I+&{N^0@Np+H(0t>gQSxE!eQmV5_L6)mOD$$7TwIuKSv*w4Oyd>2zmP zcv_No?SHH7TQVe0FLu(7nN%w4z|?K-5qGlj#gkW=i?WvFsO81v$H>3fdsASNmF)D3 zrP1;NSLg4qVZ558{XHl6@N1xVR7+eVN>UO_QmvAUQh^kMk%5t+u7QcJp-G6Lp_Q?* rm8r3|fq|8Q!7Khs859k<`6-!cmAEy`4m!91sDZ)L)z4*}Q$iB}x09tT literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_helmet_netherite.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_helmet_netherite.png new file mode 100644 index 0000000000000000000000000000000000000000..f3b054735233d34317eca43a98d65323a27db20a GIT binary patch literal 472 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(m)iC&U#<8>y??8(5cR zl?A%^d0N`XhQ+GLD{ygf{r~@e{U%R2pbEy4AirP+hi5m^K%69RcNfl&Hw05c96aLcP!Xs}U!=SX$$9Tb`y9yo!r}d%qVOKW>{^`F_iqDPO;@=5HvhecAP>cyUpxsGg_vle2yjXIRZOoE4_T`1uQG?tE~n zP5P@`h1GiDk9CHci|dV6?`OA3wqp}wZg`m=v&NM>z&0^Q=MC$`iE=N4TsBVtx>~iw zHKHUXu_V9nO2Eg V!|b4g3xFCJJYD@<);T3K0RRJhoUi}@ literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_leggings_netherite.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_leggings_netherite.png new file mode 100644 index 0000000000000000000000000000000000000000..3ddff72e3e8632345fbae461132e1f04ed3484f3 GIT binary patch literal 458 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(m@lC&U#?NMQuIx`)__!5KJ*&?<1BGUKx;TbdoK8-VU|r0>%E86Ag~>Jfc!FzksNfu~BQ1AY zkF>CO7ieX8`e^2O=9C{^sc<;i%eBpYmwFy+uJK)?TR~}$%A9YXG23Xyd523xSW#d( zld~d+PI`g{`{N>kR+gSAiW`>hxx?I|YHg*KWV$j?XY=CZs6{T1di)I6a9v`#oL0ib zY3g`TWewMqo~b>J9w$9KJtZS$7zBLOU;mwS))?qW)e_f;l9a@fRIB8oR3OD*WME{d zYha>lXcA&*Xk~0{WooQ#U|?ln@QS}u21P?|eoAIqC2kF~gAOhLYGCkm^>bP0l+XkK DK~slK literal 0 HcmV?d00001 -- 2.40.1 From 338114aecc714cda4b7f51ced8f1bda3f08ae453 Mon Sep 17 00:00:00 2001 From: Code-Sploit Date: Wed, 14 Apr 2021 12:35:15 +0000 Subject: [PATCH 164/357] Add: Netherite scrap, Netherite ingot. Add crafting recipe for netherite ingot. --- mods/ITEMS/mcl_nether/init.lua | 34 +++++++++++++++++- .../textures/mcl_nether_netherite_ingot.png | Bin 0 -> 222 bytes .../textures/mcl_nether_netherite_scrap.png | Bin 0 -> 207 bytes 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 mods/ITEMS/mcl_nether/textures/mcl_nether_netherite_ingot.png create mode 100644 mods/ITEMS/mcl_nether/textures/mcl_nether_netherite_scrap.png diff --git a/mods/ITEMS/mcl_nether/init.lua b/mods/ITEMS/mcl_nether/init.lua index 679524d98..14ac215b3 100644 --- a/mods/ITEMS/mcl_nether/init.lua +++ b/mods/ITEMS/mcl_nether/init.lua @@ -266,6 +266,22 @@ minetest.register_craftitem("mcl_nether:quartz", { groups = { craftitem = 1 }, }) +minetest.register_craftitem("mcl_nether:netherite_scrap", { + description = S("Netherite Scrap"), + _doc_items_longdesc = S("Netherite scrap is a crafting ingredient for netherite ingots."), + inventory_image = "mcl_nether_netherite_scrap.png", + stack_max = 64, + groups = { craftitem = 1 }, +}) + +minetest.register_craftitem("mcl_nether:netherite_ingot", { + description = S("Netherite Ingot"), + _doc_items_longdesc = S("Netherite ingots can be used with a smithing table to upgrade items to netherite."), + inventory_image = "mcl_nether_netherite_ingot.png", + stack_max = 64, + groups = { craftitem = 1 }, +}) + minetest.register_craftitem("mcl_nether:netherbrick", { description = S("Nether Brick"), _doc_items_longdesc = S("Nether bricks are the main crafting ingredient for crafting nether brick blocks and nether fences."), @@ -282,7 +298,14 @@ minetest.register_craft({ }) minetest.register_craft({ - output = "mcl_nether:quartz_block", + type = "cooking", + output = "mcl_nether:netherite_scrap", + recipe = "mcl_nether:ancient_debris", + cooktime = 10, +}) + +minetest.register_craft({ + output = 'mcl_nether:quartz_block', recipe = { {"mcl_nether:quartz", "mcl_nether:quartz"}, {"mcl_nether:quartz", "mcl_nether:quartz"}, @@ -352,5 +375,14 @@ minetest.register_craft({ } }) +minetest.register_craft({ + output = "mcl_nether:netherite_ingot", + recipe = { + {'mcl_nether:netherite_scrap', 'mcl_nether:netherite_scrap', 'mcl_nether:netherite_scrap'}, + {'mcl_nether:netherite_scrap', 'mcl_core:gold_ingot', 'mcl_core:gold_ingot'}, + {'mcl_core:gold_ingot', 'mcl_core:gold_ingot', ''}, + } +}) + dofile(minetest.get_modpath(minetest.get_current_modname()).."/nether_wart.lua") dofile(minetest.get_modpath(minetest.get_current_modname()).."/lava.lua") diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_netherite_ingot.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_netherite_ingot.png new file mode 100644 index 0000000000000000000000000000000000000000..90aab05632a87b234c41c5179621f895f26c38e1 GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`OFdm2Lo7~ToqU?>kb!{fZ|<9~ zqe{}tC*^f$N5LK@p_H;y64`v zbane(Bj&HZz?13uP?k%g<+ltI=X9TRb+OwMesntVJ^cRgLRpf8s_w7Z{^xe;CP=wE zwnuP&7ht^R%3!ucRWLSsPeZ$aVe~}P8H!zJ7IJ5uzZ#_YDsgwh|KL@v85{fOzv1rp WelqP~Y-R?~!3>_RelF{r5}E+ams-gH literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_netherite_scrap.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_netherite_scrap.png new file mode 100644 index 0000000000000000000000000000000000000000..f72e21d08278b0604d54ee3898b27af602d06106 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`(>z@qLo7}wCoEtum?Hd_|4>Ty zoLgb+$6TbF))`*C`>=jZ=ehs8T0H)=9WZGUX)^Fo_A%yYzG1=3$azTQfXSmnaZ;Q9 zhqCMxY-_MMv2DTau62U0#+wus!Vj1zN;iZn?@~0lz95@rqv4!BIW~pf6SESeCdRg2 z6_}BhBa#0gv76P2(ZhgoqR6KmOhUFg9_N@-vQ^j_7@F8mMQtgZEe3QUgQu&X%Q~lo FCIIXRNuB@z literal 0 HcmV?d00001 -- 2.40.1 From 9c0e9964a61950c374b46b7a623d3483f5d0fe7c Mon Sep 17 00:00:00 2001 From: Code-Sploit Date: Fri, 16 Apr 2021 11:47:21 +0000 Subject: [PATCH 165/357] Add smithing table W.I.P --- mods/ITEMS/mcl_smithing_table/init.lua | 43 ++++++++++++++++++ .../locale/mcl_anvils.de.tr | 16 +++++++ .../locale/mcl_anvils.es.tr | 15 ++++++ .../locale/mcl_anvils.fr.tr | 16 +++++++ .../locale/mcl_anvils.ru.tr | 16 +++++++ .../mcl_smithing_table/locale/template.txt | 16 +++++++ mods/ITEMS/mcl_smithing_table/mod.conf | 2 + .../textures/mcl_smithing_table_bottom.png | Bin 0 -> 206 bytes .../textures/mcl_smithing_table_front.png | Bin 0 -> 312 bytes .../textures/mcl_smithing_table_inventory.png | Bin 0 -> 699 bytes .../textures/mcl_smithing_table_side.png | Bin 0 -> 315 bytes .../textures/mcl_smithing_table_top.png | Bin 0 -> 260 bytes 12 files changed, 124 insertions(+) create mode 100644 mods/ITEMS/mcl_smithing_table/init.lua create mode 100644 mods/ITEMS/mcl_smithing_table/locale/mcl_anvils.de.tr create mode 100644 mods/ITEMS/mcl_smithing_table/locale/mcl_anvils.es.tr create mode 100644 mods/ITEMS/mcl_smithing_table/locale/mcl_anvils.fr.tr create mode 100644 mods/ITEMS/mcl_smithing_table/locale/mcl_anvils.ru.tr create mode 100644 mods/ITEMS/mcl_smithing_table/locale/template.txt create mode 100644 mods/ITEMS/mcl_smithing_table/mod.conf create mode 100644 mods/ITEMS/mcl_smithing_table/textures/mcl_smithing_table_bottom.png create mode 100644 mods/ITEMS/mcl_smithing_table/textures/mcl_smithing_table_front.png create mode 100644 mods/ITEMS/mcl_smithing_table/textures/mcl_smithing_table_inventory.png create mode 100644 mods/ITEMS/mcl_smithing_table/textures/mcl_smithing_table_side.png create mode 100644 mods/ITEMS/mcl_smithing_table/textures/mcl_smithing_table_top.png diff --git a/mods/ITEMS/mcl_smithing_table/init.lua b/mods/ITEMS/mcl_smithing_table/init.lua new file mode 100644 index 000000000..b57842d0f --- /dev/null +++ b/mods/ITEMS/mcl_smithing_table/init.lua @@ -0,0 +1,43 @@ +local formspec = "size[9,9]" .. + "label[0,4.0;" .. minetest.formspec_escape(minetest.colorize(mcl_colors.DARK_GRAY, "Inventory")) .. "]" .. + "list[current_player;main;0,4.5;9,3;9]" .. + mcl_formspec.get_itemslot_bg(0,4.5,9,3) .. + "list[current_player;main;0,7.74;9,1;]" .. + mcl_formspec.get_itemslot_bg(0,7.74,9,1) .. + "list[context;input;1,2.5;1,1;]" .. + mcl_formspec.get_itemslot_bg(1,2.5,1,1) .. + "list[context;input;4,2.5;1,1;1]" .. + mcl_formspec.get_itemslot_bg(4,2.5,1,1) .. + "list[context;output;8,2.5;1,1;]" .. + mcl_formspec.get_itemslot_bg(8,2.5,1,1) .. + "label[3,0.1;" .. minetest.formspec_escape(minetest.colorize(mcl_colors.DARK_GRAY, "Upgrade Gear")) .. "]" .. + "button[7,0.7;2,1;name_button;" .. minetest.formspec_escape("Upgrade Gear") .. "]" .. + "listring[context;output]".. + "listring[current_player;main]".. + "listring[context;input]".. + "listring[current_player;main]" + + +local function upgrade(itemstack) + itemstack:set_name(itemstack:get_name():gsub("diamond", "netherite")) +end + +minetest.register_node("mcl_smithing_table:table", { + description = "Smithing table", + + stack_max = 64, + groups = {pickaxey = 2, deco_block = true}, + + tiles = { + "mcl_smithing_table_top.png", "mcl_smithing_table_front.png", "mcl_smithing_table_side.png", + "mcl_smithing_table_side.png", "mcl_smithing_table_side.png", "mcl_smithing_table_side.png", + "mcl_smithing_table_side.png", "mcl_smithing_table_side.png", "mcl_smithing_table_bottom.png" + }, + + on_construct = function(pos) + minetest.get_meta(pos):set_string("formspec", formspec) + end, + + _mcl_blast_resistance = 2.5, + _mcl_hardness = 2.5 +}) \ No newline at end of file diff --git a/mods/ITEMS/mcl_smithing_table/locale/mcl_anvils.de.tr b/mods/ITEMS/mcl_smithing_table/locale/mcl_anvils.de.tr new file mode 100644 index 000000000..9e7d88337 --- /dev/null +++ b/mods/ITEMS/mcl_smithing_table/locale/mcl_anvils.de.tr @@ -0,0 +1,16 @@ +# textdomain: mcl_anvils +Set Name=Name setzen +Repair and Name=Reparieren und benennen +Inventory=Inventar +Anvil=Amboss +The anvil allows you to repair tools and armor, and to give names to items. It has a limited durability, however. Don't let it fall on your head, it could be quite painful!=Der Amboss ermöglicht es, Werkzeuge und Rüstung zu reparieren und Gegenstände zu benennen. Er hat jedoch eine begrenzte Lebensdauer. Lassen Sie ihn nicht auf Ihren Kopf fallen, das könnte ziemlich schmerzhaft sein! +To use an anvil, rightclick it. An anvil has 2 input slots (on the left) and one output slot.=Um einen Amboss zu benutzen, rechtsklicken Sie auf ihn. Ein Amboss hat 2 Eingabeplätze (links) und einen Ausgabeplatz (rechts). +To rename items, put an item stack in one of the item slots while keeping the other input slot empty. Type in a name, hit enter or “Set Name”, then take the renamed item from the output slot.=Um Gegenstände umzubenennen, platzieren Sie einen Gegenstand in einen der Eingangsplätze und lassen Sie den anderen frei. Geben Sie einen Namen ein und drücken Sie die Eingabetaste oder „Name setzen”, dann nehmen Sie den umbenannten Gegenstand an sich. +There are two possibilities to repair tools (and armor):=Es gibt zwei Möglichkeiten, Werkzeuge (und Rüstung) zu reparieren: +• Tool + Tool: Place two tools of the same type in the input slots. The “health” of the repaired tool is the sum of the “health” of both input tools, plus a 12% bonus.=• Werkzeug + Werkzeug: Platzieren sie zwei gleiche Werkzeuge in die Eingangsplätze. Der Zustand des reparierten Werkzeugs ist die Summe des Zustands beider Eingangswerkzeuge, plus einem Bonus von 12%. +• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.=• Werkzeug + Material: Einige Werkzeuge können auch repariert werden, indem man sie mit einem Gegenstand, aus dem sie gemacht worden sind, kombiniert. Zum Beispiel können Eisenspitzhacken mit Eisenbarren repariert werden. Dadurch wird das Werkzeug um 25% repariert. +Armor counts as a tool. It is possible to repair and rename a tool in a single step.=Rüstung zählt als Werkzeug. Es ist möglich, ein Werkzeug in einem Arbeitsschritt zu reparieren und zu benennen. +The anvil has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the anvil gets damaged. Anvils also have a chance of being damaged when they fall by more than 1 block. If a very damaged anvil is damaged again, it is destroyed.=Der Amboss hat begrenze Lebensdauer und 3 Schadensstufen: Kein Schaden, leicht beschädigt, und stark beschädigt. Jedes mal, wenn Sie etwas reparieren oder umbenennen, gibt es eine 12%-ige Chance, dass der Amboss Schaden nimmt. Ambosse können auch beschädigt werden, wenn sie um mehr als 1 Block fallen. Wenn ein sehr beschädigter Amboss erneut beschädigt wird, wird er zerstört. +Slightly Damaged Anvil=Leicht beschädigter Amboss +Very Damaged Anvil=Stark beschädigter Amboss +Repair and rename items=Für die Reparatur und Umbenennung von Gegenständen diff --git a/mods/ITEMS/mcl_smithing_table/locale/mcl_anvils.es.tr b/mods/ITEMS/mcl_smithing_table/locale/mcl_anvils.es.tr new file mode 100644 index 000000000..7212b92ba --- /dev/null +++ b/mods/ITEMS/mcl_smithing_table/locale/mcl_anvils.es.tr @@ -0,0 +1,15 @@ +# textdomain: mcl_anvils +Set Name=Establece un nombre +Repair and Name=Reparar y nombrar +Inventory=Inventario +Anvil=Yunque +The anvil allows you to repair tools and armor, and to give names to items. It has a limited durability, however. Don't let it fall on your head, it could be quite painful!=El yunque le permite reparar herramientas y armaduras, y dar nombres a los elementos. Sin embargo, tiene una durabilidad limitada. No lo dejes caer sobre tu cabeza, ¡podría ser bastante doloroso! +To use an anvil, rightclick it. An anvil has 2 input slots (on the left) and one output slot.=Para usar un yunque, haga clic derecho sobre él. Un yunque tiene 2 ranuras de entrada (a la izquierda) y una ranura de salida. +To rename items, put an item stack in one of the item slots while keeping the other input slot empty. Type in a name, hit enter or “Set Name”, then take the renamed item from the output slot.=Para cambiar el nombre de los elementos, coloque una pila de elementos en una de las ranuras de elementos mientras mantiene vacía la otra ranura de entrada. Escriba un nombre, presione enter o "Establecer nombre", luego obtenga el elemento renombrado en la ranura de salida. +There are two possibilities to repair tools (and armor):=Hay dos posibilidades para reparar herramientas (y armaduras): +• Tool + Tool: Place two tools of the same type in the input slots. The “health” of the repaired tool is the sum of the “health” of both input tools, plus a 12% bonus.=• Herramienta + Herramienta: Coloque dos herramientas del mismo tipo en las ranuras de entrada. La "salud" de la herramienta reparada es la suma de la "salud" de ambas herramientas, con un bono del 12%. +• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.=• Herramienta + Material: Algunas herramientas también pueden repararse combinándolas con un elemento del que está hecho. Por ejemplo, los picos de hierro pueden repararse con lingotes de hierro. Esto repara la herramienta en un 25%. +Armor counts as a tool. It is possible to repair and rename a tool in a single step.=La armadura cuenta como una herramienta. Es posible reparar y cambiar el nombre de una herramienta en un solo paso. +The anvil has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the anvil gets damaged. Anvils also have a chance of being damaged when they fall by more than 1 block. If a very damaged anvil is damaged again, it is destroyed.=El yunque tiene una durabilidad limitada y 3 niveles de daño: sin daños, ligeramente dañado y muy dañado. Cada vez que reparas o cambias el nombre de algo, hay un 12% de posibilidades de que el yunque se dañe. Los yunques también tienen la posibilidad de dañarse cuando caen en más de 1 bloque. Si un yunque muy dañado se daña nuevamente, se destruye. +Slightly Damaged Anvil=Yunque dañado +Very Damaged Anvil=Yunque muy dañado diff --git a/mods/ITEMS/mcl_smithing_table/locale/mcl_anvils.fr.tr b/mods/ITEMS/mcl_smithing_table/locale/mcl_anvils.fr.tr new file mode 100644 index 000000000..1f03de8e5 --- /dev/null +++ b/mods/ITEMS/mcl_smithing_table/locale/mcl_anvils.fr.tr @@ -0,0 +1,16 @@ +# textdomain: mcl_anvils +Set Name=Définir le Nom +Repair and Name=Réparation et Nomme +Inventory=Inventaire +Anvil=Enclume +The anvil allows you to repair tools and armor, and to give names to items. It has a limited durability, however. Don't let it fall on your head, it could be quite painful!=L'enclume vous permet de réparer des outils et des armures, et de donner des noms à des objets. Il a cependant une durabilité limitée. Ne la laissez pas tomber sur la tête, cela pourrait être assez douloureux! +To use an anvil, rightclick it. An anvil has 2 input slots (on the left) and one output slot.=Pour utiliser une enclume, faites un clic droit dessus. Une enclume a 2 emplacements d'entrée (à gauche) et un emplacement de sortie. +To rename items, put an item stack in one of the item slots while keeping the other input slot empty. Type in a name, hit enter or “Set Name”, then take the renamed item from the output slot.=Pour renommer des objets, placez une pile d'objets dans l'un des emplacements d'objets tout en laissant l'autre emplacement d'entrée vide. Tapez un nom, appuyez sur Entrée ou sur «Définir le nom», puis prenez l'élément renommé dans l'emplacement de sortie. +There are two possibilities to repair tools (and armor):=Il existe deux possibilités pour réparer les outils (et les armures): +• Tool + Tool: Place two tools of the same type in the input slots. The “health” of the repaired tool is the sum of the “health” of both input tools, plus a 12% bonus.=• Outil + Outil: Placez deux outils du même type dans les emplacements d'entrée. La "santé" de l'outil réparé est la somme de la "santé" des deux outils d'entrée, plus un bonus de 12%. +• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.=• Outil + Matériel: Certains outils peuvent également être réparés en les combinant avec un élément dont il est fait. Par exemple, les pioches de fer peuvent être réparées avec des lingots de fer. Cela répare l'outil de 25%. +Armor counts as a tool. It is possible to repair and rename a tool in a single step.=L'armure compte comme un outil. Il est possible de réparer et de renommer un outil en une seule étape. +The anvil has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the anvil gets damaged. Anvils also have a chance of being damaged when they fall by more than 1 block. If a very damaged anvil is damaged again, it is destroyed.=L'enclume a une durabilité limitée et 3 niveaux de dommages: en bon état, légèrement endommagé et très endommagé. Chaque fois que vous réparez ou renommez quelque chose, il y a 12% de chances que l'enclume soit endommagée. Les enclumes ont également une chance d'être endommagées lorsqu'elles tombent de plus d'un bloc. Si une enclume très endommagée est à nouveau endommagée, elle est détruite. +Slightly Damaged Anvil=Enclume Légèrement Endommagée +Very Damaged Anvil=Enclume Très Endommagée +Repair and rename items=Réparer et renommer des objets diff --git a/mods/ITEMS/mcl_smithing_table/locale/mcl_anvils.ru.tr b/mods/ITEMS/mcl_smithing_table/locale/mcl_anvils.ru.tr new file mode 100644 index 000000000..20281bd6b --- /dev/null +++ b/mods/ITEMS/mcl_smithing_table/locale/mcl_anvils.ru.tr @@ -0,0 +1,16 @@ +# textdomain: mcl_anvils +Set Name=Дать имя +Repair and Name=Починить и дать имя +Inventory=Инвентарь +Anvil=Наковальня +The anvil allows you to repair tools and armor, and to give names to items. It has a limited durability, however. Don't let it fall on your head, it could be quite painful!=Наковальня позволяет ремонтировать инструменты и защиту, а также давать имена предметам. Но она имеет ограниченный срок службы. Не дайте ей упасть вам на голову, это может быть больно! +To use an anvil, rightclick it. An anvil has 2 input slots (on the left) and one output slot.=Чтобы воспользоваться наковальней, кликните по ней правой кнопкой. Наковальня имеет два входных отсека (слева) и один выходной. +To rename items, put an item stack in one of the item slots while keeping the other input slot empty. Type in a name, hit enter or “Set Name”, then take the renamed item from the output slot.=Для переименования положите стопку предметов в один отсек, второй оставьте пустым. Наберите имя, нажмите [Enter] или “Дать имя” и заберите переименованные предметы из выходного отсека. +There are two possibilities to repair tools (and armor):=Есть два способа отремонтировать инструменты (и защиту): +• Tool + Tool: Place two tools of the same type in the input slots. The “health” of the repaired tool is the sum of the “health” of both input tools, plus a 12% bonus.=• Инструмент + Инструмент: Положите два инструмента одного типа во входные отсеки. “Здоровье” отремонтированного инструмента будет равно сумме “здоровья” каждого из них, плюс 12% бонус. +• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.=• Инструмент + Материал: Некоторые инструменты можно также ремонтировать, добавляя к ним предмет, из которого они сделаны. Например, железные кирки ремонтируются добавлением слитков железа. Таким способом инструмент восстанавливается на 25%. +Armor counts as a tool. It is possible to repair and rename a tool in a single step.=Защиты считается за инструмент. Можно ремонтировать и переименовывать за одно действие. +The anvil has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the anvil gets damaged. Anvils also have a chance of being damaged when they fall by more than 1 block. If a very damaged anvil is damaged again, it is destroyed.=Наковальня имеет ограниченный срок службы и 3 уровня износа: новая, немного изношенная, сильно повреждённая. Каждый раз, ремонтируя или переименовывая что-либо, вы имеете 12-процентный шанс повредить наковальню. Наковальни также могут повреждаться, когда они падают с высоте более 1 блока. Если повреждённая наковальня повреждается снова, то она уничтожается. +Slightly Damaged Anvil=Немного изношенная наковальня +Very Damaged Anvil=Сильно повреждённая наковальня +Repair and rename items=Ремонтирует и переименовывает предметы diff --git a/mods/ITEMS/mcl_smithing_table/locale/template.txt b/mods/ITEMS/mcl_smithing_table/locale/template.txt new file mode 100644 index 000000000..ebc741c00 --- /dev/null +++ b/mods/ITEMS/mcl_smithing_table/locale/template.txt @@ -0,0 +1,16 @@ +# textdomain: mcl_anvils +Set Name= +Repair and Name= +Inventory= +Anvil= +The anvil allows you to repair tools and armor, and to give names to items. It has a limited durability, however. Don't let it fall on your head, it could be quite painful!= +To use an anvil, rightclick it. An anvil has 2 input slots (on the left) and one output slot.= +To rename items, put an item stack in one of the item slots while keeping the other input slot empty. Type in a name, hit enter or “Set Name”, then take the renamed item from the output slot.= +There are two possibilities to repair tools (and armor):= +• Tool + Tool: Place two tools of the same type in the input slots. The “health” of the repaired tool is the sum of the “health” of both input tools, plus a 12% bonus.= +• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.= +Armor counts as a tool. It is possible to repair and rename a tool in a single step.= +The anvil has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the anvil gets damaged. Anvils also have a chance of being damaged when they fall by more than 1 block. If a very damaged anvil is damaged again, it is destroyed.= +Slightly Damaged Anvil= +Very Damaged Anvil= +Repair and rename items= diff --git a/mods/ITEMS/mcl_smithing_table/mod.conf b/mods/ITEMS/mcl_smithing_table/mod.conf new file mode 100644 index 000000000..aee93fa65 --- /dev/null +++ b/mods/ITEMS/mcl_smithing_table/mod.conf @@ -0,0 +1,2 @@ +name = mcl_smithing_table +depends = mcl_colors, mcl_formspec diff --git a/mods/ITEMS/mcl_smithing_table/textures/mcl_smithing_table_bottom.png b/mods/ITEMS/mcl_smithing_table/textures/mcl_smithing_table_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..59833b5ea20686a3eae16a005d9abec43bcd9022 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Q$1ZALo9leCrq05oBvSUr=Ws2 zD$0DvUewHx=xBSH++g^{mF1w2f>hhZpC^(Em>txbSR6_wOw!?M+sQCn!iT?$@r2*e zc1N~@F^3s0a|o$iW!S)-P^Wa1VaC!F>4rzFGZ;l$8CS9`sA!zyu;d2Anz#koCWo#p zl4#Jssno5UZm@yz#Z1n4Hm7OFPxKlHe@x9xG4qjUklR_Tv#IaRJ)i>_JYD@<);T3K F0RY}yN}2!w literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_smithing_table/textures/mcl_smithing_table_front.png b/mods/ITEMS/mcl_smithing_table/textures/mcl_smithing_table_front.png new file mode 100644 index 0000000000000000000000000000000000000000..55875ef5459ab6e0bc4ac530c51d8b97e044ff7b GIT binary patch literal 312 zcmV-80muG{P)m-ckEr&y1TnCUc7kj z+`0e%|96?pEC&=~ED7=pW^j0RBMrn!@^*J&=wOxg0CG4BJR*x37`TN&n2}-D90{Nx zdx@v7EBg~>VJ|yWWQ_p4Dl_cCpp* zqK?M=v(oa+fx2l59@yWJzvrO7$*(=Y>SC#om--<;rk#?S7c0Hn+rT;pH44^~(Bf+9l8B zdoC9MIjgL7(}A2FmrH=0EbCklXUpXZAVTx$7=_s?9xNb#jStr25PfrPnHx ffiXE8K+RV9+KToW>o zyX+Vj=`ya?nZy_^*mKJ7mASwK#h}+8Y0lWfLl_4Z`eJUh>ve>r)s7a35I^ttg207* z&}{@o#R8J+xTky{xs1LDa1Uy<2T00v5}&VkycDH^uHU9ZSpz6!jMGH`jgsbd5-qYL z=If{kKppXHz7hCT)|&4D*2RJf{MA3jR%7ei0s;9*6tG^=M8@7bQ2|^-u4DW`z zI}XAy5JY_%s1Q^nq5;t$lro~u1-O3;nn<&H-q=u#{8{hw+GCgJw0xx7eGYkUe!W+D zOgUC^@_2bvYQ;PbfCJ~@8X{!3KdfTRkf?ykSxVM!8Lr%7ngYku5R2Sb>+%V$jzEAG zs+MXbLfTsBz^_E!jVsvzXxqPgh$HZU(4Jm0 zD~LPj9ieAo1>jTmvu*8|Eesn~ZvH5O Date: Wed, 14 Apr 2021 13:07:25 +0000 Subject: [PATCH 166/357] Add netherite tools --- mods/ITEMS/mcl_farming/hoes.lua | 21 +++++ mods/ITEMS/mcl_tools/init.lua | 86 +++++++++++++++++- .../textures/default_tool_netheriteaxe.png | Bin 0 -> 184 bytes .../textures/default_tool_netheritepick.png | Bin 0 -> 188 bytes .../textures/default_tool_netheriteshovel.png | Bin 0 -> 161 bytes .../textures/default_tool_netheritesword.png | Bin 0 -> 210 bytes 6 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 mods/ITEMS/mcl_tools/textures/default_tool_netheriteaxe.png create mode 100644 mods/ITEMS/mcl_tools/textures/default_tool_netheritepick.png create mode 100644 mods/ITEMS/mcl_tools/textures/default_tool_netheriteshovel.png create mode 100644 mods/ITEMS/mcl_tools/textures/default_tool_netheritesword.png diff --git a/mods/ITEMS/mcl_farming/hoes.lua b/mods/ITEMS/mcl_farming/hoes.lua index d2250eb70..9a8883609 100644 --- a/mods/ITEMS/mcl_farming/hoes.lua +++ b/mods/ITEMS/mcl_farming/hoes.lua @@ -272,4 +272,25 @@ minetest.register_craft({ {"mcl_core:stick", ""}, {"mcl_core:stick", ""} } +}) + +minetest.register_tool("mcl_farming:hoe_netherite", { + description = S("Netherite Hoe"), + _tt_help = hoe_tt.."\n"..S("Uses: @1", uses.netherite), + _doc_items_longdesc = hoe_longdesc, + _doc_items_usagehelp = hoe_usagehelp, + inventory_image = "farming_tool_netheritehoe.png", + wield_scale = mcl_vars.tool_wield_scale, + on_place = hoe_on_place_function(uses.netherite), + groups = { tool=1, hoe=1, enchantability=10 }, + tool_capabilities = { + full_punch_interval = 0.25, + damage_groups = { fleshy = 4, }, + punch_attack_uses = uses.netherite, + }, + _repair_material = "mcl_nether:netherite_ingot", + _mcl_toollike_wield = true, + _mcl_diggroups = { + hoey = { speed = 8, level = 5, uses = 2031 } + }, }) diff --git a/mods/ITEMS/mcl_tools/init.lua b/mods/ITEMS/mcl_tools/init.lua index cbee8e3d0..aadf90e0d 100644 --- a/mods/ITEMS/mcl_tools/init.lua +++ b/mods/ITEMS/mcl_tools/init.lua @@ -177,7 +177,28 @@ minetest.register_tool("mcl_tools:pick_diamond", { }, }) -local function make_grass_path(itemstack, placer, pointed_thing) +minetest.register_tool("mcl_tools:pick_netherite", { + description = S("Netherite Pickaxe"), + _doc_items_longdesc = pickaxe_longdesc, + inventory_image = "default_tool_netheritepick.png", + wield_scale = wield_scale, + groups = { tool=1, pickaxe=1, dig_speed_class=5, enchantability=10 }, + tool_capabilities = { + -- 1/1.2 + full_punch_interval = 0.83333333, + max_drop_level=5, + damage_groups = {fleshy=6}, + punch_attack_uses = 1016, + }, + sound = { breaks = "default_tool_breaks" }, + _repair_material = "mcl_nether:netherite_ingot", + _mcl_toollike_wield = true, + _mcl_diggroups = { + pickaxey = { speed = 8, level = 5, uses = 2031 } + }, +}) + +local make_grass_path = function(itemstack, placer, pointed_thing) -- Use pointed node's on_rightclick function first, if present local node = minetest.get_node(pointed_thing.under) if placer and not placer:get_player_control().sneak then @@ -353,6 +374,28 @@ minetest.register_tool("mcl_tools:shovel_diamond", { }, }) +minetest.register_tool("mcl_tools:shovel_netherite", { + description = S("Netherite Shovel"), + _doc_items_longdesc = shovel_longdesc, + _doc_items_usagehelp = shovel_use, + inventory_image = "default_tool_netheriteshovel.png", + wield_scale = wield_scale, + groups = { tool=1, shovel=1, dig_speed_class=5, enchantability=10 }, + tool_capabilities = { + full_punch_interval = 1, + max_drop_level=5, + damage_groups = {fleshy=5}, + punch_attack_uses = 1016, + }, + on_place = make_grass_path, + sound = { breaks = "default_tool_breaks" }, + _repair_material = "mcl_nether:netherite_ingot", + _mcl_toollike_wield = true, + _mcl_diggroups = { + shovely = { speed = 8, level = 5, uses = 2031 } + }, +}) + -- Axes local function make_stripped_trunk(itemstack, placer, pointed_thing) if pointed_thing.type ~= "node" then return end @@ -485,6 +528,27 @@ minetest.register_tool("mcl_tools:axe_diamond", { }, }) +minetest.register_tool("mcl_tools:axe_netherite", { + description = S("Netherite Axe"), + _doc_items_longdesc = axe_longdesc, + inventory_image = "default_tool_netheriteaxe.png", + wield_scale = wield_scale, + groups = { tool=1, axe=1, dig_speed_class=5, enchantability=10 }, + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=5, + damage_groups = {fleshy=10}, + punch_attack_uses = 1016, + }, + on_place = make_stripped_trunk, + sound = { breaks = "default_tool_breaks" }, + _repair_material = "mcl_nether:netherite_ingot", + _mcl_toollike_wield = true, + _mcl_diggroups = { + axey = { speed = 8, level = 5, uses = 2031 } + }, +}) + -- Swords minetest.register_tool("mcl_tools:sword_wood", { description = S("Wooden Sword"), @@ -587,6 +651,26 @@ minetest.register_tool("mcl_tools:sword_diamond", { swordy_cobweb = { speed = 8, level = 5, uses = 1562 } }, }) +minetest.register_tool("mcl_tools:sword_netherite", { + description = S("Netherite Sword"), + _doc_items_longdesc = sword_longdesc, + inventory_image = "default_tool_netheritesword.png", + wield_scale = wield_scale, + groups = { weapon=1, sword=1, dig_speed_class=5, enchantability=10 }, + tool_capabilities = { + full_punch_interval = 0.625, + max_drop_level=5, + damage_groups = {fleshy=9}, + punch_attack_uses = 2032, + }, + sound = { breaks = "default_tool_breaks" }, + _repair_material = "mcl_nether:netherite_ingot", + _mcl_toollike_wield = true, + _mcl_diggroups = { + swordy = { speed = 8, level = 5, uses = 1562 }, + swordy_cobweb = { speed = 8, level = 5, uses = 1562 } + }, +}) --Shears minetest.register_tool("mcl_tools:shears", { diff --git a/mods/ITEMS/mcl_tools/textures/default_tool_netheriteaxe.png b/mods/ITEMS/mcl_tools/textures/default_tool_netheriteaxe.png new file mode 100644 index 0000000000000000000000000000000000000000..322bf45130946f4750019b2329efac3edcf6dc18 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`^`0({Ar_~T6Be+4xK#3k|4>SH z-s(K&*CKc|}85y?e53N1+t9>yJPox*RqCL{^8 zWts(rtKSuP6FI>lQI6P_i7r|)2!(e1Hq=93-lnPp`KYVn)5F8#`IvqvUD gg?WFVdQ&MBb@0F=2wcK`qY literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_tools/textures/default_tool_netheritepick.png b/mods/ITEMS/mcl_tools/textures/default_tool_netheritepick.png new file mode 100644 index 0000000000000000000000000000000000000000..088283b0bf6ab4c414f001edadb471075b34ec0b GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`&7LlfAr_~T6C}1A@V@-e-b&50 zIJ#6?Mtq6*pMKu%R_P_{SA3bT;XH-4<-v{n$M|wQHm)|F;lF9R!?r^_iZ>Z1JYx}7 z7MU)P%i&?XX|tn=hEInP!_BlA5*@r;5lw6hZu?APR5*KW+O-H#K@)~0H*Yf5hdjL6 mb2@F3^XwD`@4}MvB@DX3`5G$j>x+TTVeoYIb6Mw<&;$Uge?p@G literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_tools/textures/default_tool_netheriteshovel.png b/mods/ITEMS/mcl_tools/textures/default_tool_netheriteshovel.png new file mode 100644 index 0000000000000000000000000000000000000000..0cbaf61a0a2bd39536af45962bd4a6aab1c8d85c GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`8J;eVAr_~T6C{ETcwc^K&og=H z&b7OE`=+wC{F}VS(o9FJhx-zDhdIL%$t8?SF5W-ZSHkSz5FglSboS`Fa|ym8nQR|D zugytFa+%e8V%A#SwJ+C5E)i^*D?8`pc1g3DCxfS} KpUXO@geCxgk~#nY literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_tools/textures/default_tool_netheritesword.png b/mods/ITEMS/mcl_tools/textures/default_tool_netheritesword.png new file mode 100644 index 0000000000000000000000000000000000000000..4bc0809b12478fa4d29150871df6b303dec9cebe GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Gd*1#Lo7}wCnzviWLo`cPuyg( zJ#>5H#!U?u>NlB)FA<-R$KX@Epj*CjmgBZ2lje*`rpMckHkmeO%$c>ZRjY&lQpS>X z|L)&E#<%~h!R&;#2}>mJu2+y+(y4Ox1Y3i_$ypm&rB2TJDmwL_`V5Ii(?fe4wkRr` zJ-Y5(0k48o3#SxQw_Ub(_8P84wuhz-D$5r!8}d#3&ystPnL+1rUrq}1`y)U{GI+ZB KxvX Date: Wed, 14 Apr 2021 13:08:31 +0000 Subject: [PATCH 167/357] Add netherite hoe texture --- .../textures/farming_tool_netheritehoe.png | Bin 0 -> 167 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 mods/ITEMS/mcl_farming/textures/farming_tool_netheritehoe.png diff --git a/mods/ITEMS/mcl_farming/textures/farming_tool_netheritehoe.png b/mods/ITEMS/mcl_farming/textures/farming_tool_netheritehoe.png new file mode 100644 index 0000000000000000000000000000000000000000..b41b1eef3d1d4c6bbf9e502c92967100991aa5ba GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`d7dtgAr_~T6Bej`xU}Ur|KXI( zyw!Ql$(wj4iV6PZKg9ZyHNm;(%GLj`wYC2G8yNob-{iP4abrSrSM1z_ZIj+eO*pII z{3rK~hdINuoEg(SuK7&doM<+A=}e{Bb7eIy Date: Wed, 14 Apr 2021 13:10:07 +0000 Subject: [PATCH 168/357] Fix crash in netherite hoe by adding netherite to uses{} --- mods/ITEMS/mcl_farming/hoes.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mods/ITEMS/mcl_farming/hoes.lua b/mods/ITEMS/mcl_farming/hoes.lua index 9a8883609..d988fa8be 100644 --- a/mods/ITEMS/mcl_farming/hoes.lua +++ b/mods/ITEMS/mcl_farming/hoes.lua @@ -54,7 +54,8 @@ local uses = { stone = 132, iron = 251, gold = 33, - diamond = 1562, + diamond = 1562, + netherite = 2031, } local hoe_tt = S("Turns block into farmland") @@ -291,6 +292,6 @@ minetest.register_tool("mcl_farming:hoe_netherite", { _repair_material = "mcl_nether:netherite_ingot", _mcl_toollike_wield = true, _mcl_diggroups = { - hoey = { speed = 8, level = 5, uses = 2031 } + hoey = { speed = 8, level = 5, uses = uses.netherite } }, }) -- 2.40.1 From 3b2a34c670e3bfabbf51055919af64a027298886 Mon Sep 17 00:00:00 2001 From: Code-Sploit Date: Fri, 16 Apr 2021 14:00:14 +0000 Subject: [PATCH 169/357] Add first try of code for smithing table (Thanks to Fleckenstein), add _mcl_upgradable and _mcl_upgrade_item to every diamond tool/armor piece --- mods/ITEMS/mcl_farming/hoes.lua | 6 +- mods/ITEMS/mcl_smithing_table/init.lua | 139 ++++++++++++++++++++++--- mods/ITEMS/mcl_tools/init.lua | 8 ++ 3 files changed, 136 insertions(+), 17 deletions(-) diff --git a/mods/ITEMS/mcl_farming/hoes.lua b/mods/ITEMS/mcl_farming/hoes.lua index d988fa8be..e023f123e 100644 --- a/mods/ITEMS/mcl_farming/hoes.lua +++ b/mods/ITEMS/mcl_farming/hoes.lua @@ -256,6 +256,8 @@ minetest.register_tool("mcl_farming:hoe_diamond", { _mcl_diggroups = { hoey = { speed = 8, level = 5, uses = 1562 } }, + _mcl_upgradable = true, + _mcl_upgrade_item = "mcl_farming:hoe_netherite" }) minetest.register_craft({ @@ -272,7 +274,7 @@ minetest.register_craft({ {"mcl_core:diamond", "mcl_core:diamond"}, {"mcl_core:stick", ""}, {"mcl_core:stick", ""} - } + } }) minetest.register_tool("mcl_farming:hoe_netherite", { @@ -294,4 +296,4 @@ minetest.register_tool("mcl_farming:hoe_netherite", { _mcl_diggroups = { hoey = { speed = 8, level = 5, uses = uses.netherite } }, -}) +}) diff --git a/mods/ITEMS/mcl_smithing_table/init.lua b/mods/ITEMS/mcl_smithing_table/init.lua index b57842d0f..adbac011b 100644 --- a/mods/ITEMS/mcl_smithing_table/init.lua +++ b/mods/ITEMS/mcl_smithing_table/init.lua @@ -1,43 +1,152 @@ +--[[ +By EliasFleckenstein03 and Code-Sploit +]] + +--[[ +Netherite item / node strings + +Nodes: + +Ancient Debris mcl_nether:ancient_debris +Netherite Ingot mcl_nether:netherite_ingot +Netherite Scrap mcl_nether:netherite_scrap +Netherite Block mcl_nether:netheriteblock + +Items: + +Netherite Sword mcl_tools:sword_netherite +Netherite Pickaxe mcl_tools:pick_netherite +Netherite Axe mcl_tools:axe_netherite +Netherite Shovel mcl_tools:shovel_netherite +Netherite Hoe mcl_farming:hoe_netherite + +Netherite Helmet mcl_armor:helmet_netherite +Netherite Chestplate mcl_armor:chestplate_netherite +Netherite Leggings mcl_armor:leggings_netherite +Netherite Boots mcl_armor:boots_netherite +]] + +local S = minetest.get_translator("mcl_smithing_table") +mcl_smithing_table = {} + +-- Function to upgrade diamond tool/armor to netherite tool/armor +function mcl_smithing_table.upgrade_item(itemstack) + itemstack = ItemStack(itemstack) -- Copy the stack + + local def = itemstack:get_definition() + + if not def or not def._mcl_upgradeable then + return + end + + local itemname = itemstack:get_name() + + local upgrade_item = def._mcl_upgrade_item or itemname:gsub("diamond", "netherite") + + if upgrade_item == itemname then + return + end + + itemstack:set_name(upgrade_item) + + -- Reload the ToolTips of the tool + + tt.reload_itemstack_description(itemstack) + + -- Only return itemstack if upgrade was successfull + return itemstack +end + +-- Badly copied over from mcl_anvils + local formspec = "size[9,9]" .. - "label[0,4.0;" .. minetest.formspec_escape(minetest.colorize(mcl_colors.DARK_GRAY, "Inventory")) .. "]" .. + "label[0,4.0;" .. minetest.formspec_escape(minetest.colorize(mcl_colors.DARK_GRAY, S("Inventory"))) .. "]" .. "list[current_player;main;0,4.5;9,3;9]" .. mcl_formspec.get_itemslot_bg(0,4.5,9,3) .. "list[current_player;main;0,7.74;9,1;]" .. mcl_formspec.get_itemslot_bg(0,7.74,9,1) .. - "list[context;input;1,2.5;1,1;]" .. + "list[context;diamond_item;1,2.5;1,1;]" .. mcl_formspec.get_itemslot_bg(1,2.5,1,1) .. - "list[context;input;4,2.5;1,1;1]" .. + "list[context;netherite;4,2.5;1,1;]" .. mcl_formspec.get_itemslot_bg(4,2.5,1,1) .. - "list[context;output;8,2.5;1,1;]" .. + "list[context;upgraded_item;8,2.5;1,1;]" .. mcl_formspec.get_itemslot_bg(8,2.5,1,1) .. - "label[3,0.1;" .. minetest.formspec_escape(minetest.colorize(mcl_colors.DARK_GRAY, "Upgrade Gear")) .. "]" .. - "button[7,0.7;2,1;name_button;" .. minetest.formspec_escape("Upgrade Gear") .. "]" .. + "label[3,0.1;" .. minetest.formspec_escape(minetest.colorize(mcl_colors.DARK_GRAY, S("Upgrade Gear"))) .. "]" .. "listring[context;output]".. "listring[current_player;main]".. "listring[context;input]".. "listring[current_player;main]" +local function reset_upgraded_item(pos) + local inv = minetest.get_meta(pos):get_inventory() + local upgraded_item -local function upgrade(itemstack) - itemstack:set_name(itemstack:get_name():gsub("diamond", "netherite")) + if inv:get_stack("netherite", 1):get_name() == "mcl_nether:netherite_ingot" then + upgraded_item = mcl_smithing_table.upgrade_item(inv:get_stack("diamond_item", 1)) + end + + inv:set_stack("upgraded_item", 1, upgraded_item) end minetest.register_node("mcl_smithing_table:table", { - description = "Smithing table", + description = S("Smithing table"), + -- ToDo: Add _doc_items_longdesc and _doc_items_usagehelp stack_max = 64, - groups = {pickaxey = 2, deco_block = true}, + groups = {pickaxey = 2, deco_block = 1}, tiles = { "mcl_smithing_table_top.png", "mcl_smithing_table_front.png", "mcl_smithing_table_side.png", - "mcl_smithing_table_side.png", "mcl_smithing_table_side.png", "mcl_smithing_table_side.png", - "mcl_smithing_table_side.png", "mcl_smithing_table_side.png", "mcl_smithing_table_bottom.png" + "mcl_smithing_table_side.png", "mcl_smithing_table_side.png", "mcl_smithing_table_side.png" }, + sounds = mcl_sounds.node_sound_metal_defaults(), + on_construct = function(pos) - minetest.get_meta(pos):set_string("formspec", formspec) - end, + local meta = minetest.get_meta(pos) + meta:set_string("formspec", formspec) + + local inv = meta:get_inventory() + + inv:set_size("diamond_item", 1) + inv:set_size("netherite", 1) + inv:set_size("upgraded_item", 1) + end, + + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + if listname == "diamond_item" and mcl_smithing_table.upgrade_item(stack) or listname == "netherite" and stack:get_name() == "mcl_nether:netherite_ingot" then + return stack:get_count() + end + + return 0 + end, + + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + return 0 + end, + + on_metadata_inventory_put = reset_upgraded_item, + + on_metadata_inventory_take = function(pos, listname, index, stack, player) + local inv = minetest.get_meta(pos):get_inventory() + + local function take_item(listname) + local itemstack = inv:get_stack(listname, 1) + itemstack:take_item() + inv:set_stack(listname, 1, itemstack) + end + + if listname == "upgraded_item" then + take_item("diamond_item") + take_item("netherite") + + -- ToDo: make epic sound + minetest.sound_play("mcl_smithing_table_upgrade", {pos = pos, max_hear_distance = 16}) + end + + reset_upgraded_item(pos) + end, _mcl_blast_resistance = 2.5, _mcl_hardness = 2.5 -}) \ No newline at end of file +}) diff --git a/mods/ITEMS/mcl_tools/init.lua b/mods/ITEMS/mcl_tools/init.lua index aadf90e0d..6d959cd10 100644 --- a/mods/ITEMS/mcl_tools/init.lua +++ b/mods/ITEMS/mcl_tools/init.lua @@ -175,6 +175,8 @@ minetest.register_tool("mcl_tools:pick_diamond", { _mcl_diggroups = { pickaxey = { speed = 8, level = 5, uses = 1562 } }, + _mcl_upgradable = true, + _mcl_upgrade_item = "mcl_tools:pick_netherite" }) minetest.register_tool("mcl_tools:pick_netherite", { @@ -372,6 +374,8 @@ minetest.register_tool("mcl_tools:shovel_diamond", { _mcl_diggroups = { shovely = { speed = 8, level = 5, uses = 1562 } }, + _mcl_upgradable = true, + _mcl_upgrade_item = "mcl_tools:shovel_netherite" }) minetest.register_tool("mcl_tools:shovel_netherite", { @@ -526,6 +530,8 @@ minetest.register_tool("mcl_tools:axe_diamond", { _mcl_diggroups = { axey = { speed = 8, level = 5, uses = 1562 } }, + _mcl_upgradable = true, + _mcl_upgrade_item = "mcl_tools:axe_netherite" }) minetest.register_tool("mcl_tools:axe_netherite", { @@ -650,6 +656,8 @@ minetest.register_tool("mcl_tools:sword_diamond", { swordy = { speed = 8, level = 5, uses = 1562 }, swordy_cobweb = { speed = 8, level = 5, uses = 1562 } }, + _mcl_upgradable = true, + _mcl_upgrade_item = "mcl_tools:sword_netherite" }) minetest.register_tool("mcl_tools:sword_netherite", { description = S("Netherite Sword"), -- 2.40.1 From 808093235326715f5f1054883bd7deb2df4f3562 Mon Sep 17 00:00:00 2001 From: Code-Sploit Date: Thu, 22 Apr 2021 12:07:30 +0000 Subject: [PATCH 170/357] Fix not able to put diamond tools in the smithing_table --- mods/ITEMS/mcl_smithing_table/init.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_smithing_table/init.lua b/mods/ITEMS/mcl_smithing_table/init.lua index adbac011b..02112ab14 100644 --- a/mods/ITEMS/mcl_smithing_table/init.lua +++ b/mods/ITEMS/mcl_smithing_table/init.lua @@ -35,7 +35,7 @@ function mcl_smithing_table.upgrade_item(itemstack) local def = itemstack:get_definition() - if not def or not def._mcl_upgradeable then + if not def or not def._mcl_upgradable then return end @@ -58,6 +58,7 @@ function mcl_smithing_table.upgrade_item(itemstack) end -- Badly copied over from mcl_anvils +-- ToDo: Make better formspec local formspec = "size[9,9]" .. "label[0,4.0;" .. minetest.formspec_escape(minetest.colorize(mcl_colors.DARK_GRAY, S("Inventory"))) .. "]" .. -- 2.40.1 From af2a4b1de02057311071b17bb4b318931b53e6d8 Mon Sep 17 00:00:00 2001 From: Code-Sploit Date: Thu, 22 Apr 2021 12:11:47 +0000 Subject: [PATCH 171/357] Add crafting recipe for smithing table --- mods/ITEMS/mcl_smithing_table/init.lua | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mods/ITEMS/mcl_smithing_table/init.lua b/mods/ITEMS/mcl_smithing_table/init.lua index 02112ab14..e8eb26128 100644 --- a/mods/ITEMS/mcl_smithing_table/init.lua +++ b/mods/ITEMS/mcl_smithing_table/init.lua @@ -151,3 +151,12 @@ minetest.register_node("mcl_smithing_table:table", { _mcl_blast_resistance = 2.5, _mcl_hardness = 2.5 }) + +minetest.register_craft({ + output = "mcl_smithing_table:table", + recipe = { + {"mcl_core:iron_ingot", "mcl_core:iron_ingot", ""}, + {"group:wood", "group:wood", ""}, + {"group:wood", "group:wood", ""} + } +}) -- 2.40.1 From e8cedbc553b4fc83a1bb9225422e1336d86d376b Mon Sep 17 00:00:00 2001 From: Code-Sploit Date: Sun, 2 May 2021 08:11:11 +0000 Subject: [PATCH 172/357] Remove unnessacary comments in mcl_smithing_table/init.lua --- mods/ITEMS/mcl_smithing_table/init.lua | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/mods/ITEMS/mcl_smithing_table/init.lua b/mods/ITEMS/mcl_smithing_table/init.lua index e8eb26128..820ba1f78 100644 --- a/mods/ITEMS/mcl_smithing_table/init.lua +++ b/mods/ITEMS/mcl_smithing_table/init.lua @@ -2,30 +2,6 @@ By EliasFleckenstein03 and Code-Sploit ]] ---[[ -Netherite item / node strings - -Nodes: - -Ancient Debris mcl_nether:ancient_debris -Netherite Ingot mcl_nether:netherite_ingot -Netherite Scrap mcl_nether:netherite_scrap -Netherite Block mcl_nether:netheriteblock - -Items: - -Netherite Sword mcl_tools:sword_netherite -Netherite Pickaxe mcl_tools:pick_netherite -Netherite Axe mcl_tools:axe_netherite -Netherite Shovel mcl_tools:shovel_netherite -Netherite Hoe mcl_farming:hoe_netherite - -Netherite Helmet mcl_armor:helmet_netherite -Netherite Chestplate mcl_armor:chestplate_netherite -Netherite Leggings mcl_armor:leggings_netherite -Netherite Boots mcl_armor:boots_netherite -]] - local S = minetest.get_translator("mcl_smithing_table") mcl_smithing_table = {} -- 2.40.1 From 688d1e3f7e90cde64925e8958814aa2d6d38e91e Mon Sep 17 00:00:00 2001 From: Code-Sploit Date: Wed, 14 Apr 2021 13:12:44 +0000 Subject: [PATCH 173/357] Add correct durability for netherite sword --- mods/ITEMS/mcl_tools/init.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mods/ITEMS/mcl_tools/init.lua b/mods/ITEMS/mcl_tools/init.lua index 6d959cd10..a1292cb71 100644 --- a/mods/ITEMS/mcl_tools/init.lua +++ b/mods/ITEMS/mcl_tools/init.lua @@ -669,14 +669,14 @@ minetest.register_tool("mcl_tools:sword_netherite", { full_punch_interval = 0.625, max_drop_level=5, damage_groups = {fleshy=9}, - punch_attack_uses = 2032, + punch_attack_uses = 2031, }, sound = { breaks = "default_tool_breaks" }, _repair_material = "mcl_nether:netherite_ingot", _mcl_toollike_wield = true, _mcl_diggroups = { - swordy = { speed = 8, level = 5, uses = 1562 }, - swordy_cobweb = { speed = 8, level = 5, uses = 1562 } + swordy = { speed = 8, level = 5, uses = 2031 }, + swordy_cobweb = { speed = 8, level = 5, uses = 2031 } }, }) -- 2.40.1 From bbf63cf66b887831042804bfb9a77cba71a987e8 Mon Sep 17 00:00:00 2001 From: Code-Sploit Date: Thu, 15 Apr 2021 15:45:48 +0000 Subject: [PATCH 174/357] Add netheriteblock --- mods/ITEMS/mcl_nether/init.lua | 15 +++++++++++++++ .../textures/mcl_nether_netheriteblock.png | Bin 0 -> 425 bytes 2 files changed, 15 insertions(+) create mode 100644 mods/ITEMS/mcl_nether/textures/mcl_nether_netheriteblock.png diff --git a/mods/ITEMS/mcl_nether/init.lua b/mods/ITEMS/mcl_nether/init.lua index 14ac215b3..4891c3dd3 100644 --- a/mods/ITEMS/mcl_nether/init.lua +++ b/mods/ITEMS/mcl_nether/init.lua @@ -66,6 +66,21 @@ minetest.register_node("mcl_nether:ancient_debris", { _mcl_fortune_drop = mcl_core.fortune_drop_ore }) +minetest.register_node("mcl_nether:netheriteblock", { + description = S("Netherite Block"), + _doc_items_longdesc = S("Netherite block is very hard and can be made of 9 netherite ingots."), + stack_max = 64, + tiles = {"mcl_nether_netheriteblock.png"}, + is_ground_content = true, + groups = {pickaxey=4, building_block=1, material_stone=1, xp = 0}, + drop = 'mcl_nether:netheriteblock', + sounds = mcl_sounds.node_sound_stone_defaults(), + _mcl_blast_resistance = 1200, + _mcl_hardness = 50, + _mcl_silk_touch_drop = true, + _mcl_fortune_drop = mcl_core.fortune_drop_ore +}) + -- For eternal fire on top of netherrack and magma blocks -- (this code does not require a dependency on mcl_fire) local function eternal_after_destruct(pos, oldnode) diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_netheriteblock.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_netheriteblock.png new file mode 100644 index 0000000000000000000000000000000000000000..60957f01794f9ecc0ad1eb8ce72749060c7d435b GIT binary patch literal 425 zcmV;a0apHrP)Px$V@X6oR5*==lfi1^Fc5}62Mx8YxGcWxW$8oo-1mQgLg~4^ZDF%Z99c3Wa1V+U zIaykPk&yoRX67H$8Q1Cabmb1%K7!>8DqPa zaU6Mje`DCEM=?@@WL5$F}Jpii8behWht`@2$ zdeim=Qdbkt=VtNfxsn1fDFl*vN#*3QPG%^tan{{b8g!L zKv=>}rs+6s64ce0TG)3zeb-+qsvOTPW{5`JwjftM&wfT#({~1CNWF~np_B-4{P Date: Thu, 15 Apr 2021 16:07:19 +0000 Subject: [PATCH 175/357] Add correct speeds for netherite shovel, pickaxe and axe --- mods/ITEMS/mcl_tools/init.lua | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mods/ITEMS/mcl_tools/init.lua b/mods/ITEMS/mcl_tools/init.lua index a1292cb71..c2192c968 100644 --- a/mods/ITEMS/mcl_tools/init.lua +++ b/mods/ITEMS/mcl_tools/init.lua @@ -184,7 +184,7 @@ minetest.register_tool("mcl_tools:pick_netherite", { _doc_items_longdesc = pickaxe_longdesc, inventory_image = "default_tool_netheritepick.png", wield_scale = wield_scale, - groups = { tool=1, pickaxe=1, dig_speed_class=5, enchantability=10 }, + groups = { tool=1, pickaxe=1, dig_speed_class=6, enchantability=10 }, tool_capabilities = { -- 1/1.2 full_punch_interval = 0.83333333, @@ -196,7 +196,7 @@ minetest.register_tool("mcl_tools:pick_netherite", { _repair_material = "mcl_nether:netherite_ingot", _mcl_toollike_wield = true, _mcl_diggroups = { - pickaxey = { speed = 8, level = 5, uses = 2031 } + pickaxey = { speed = 9.5, level = 6, uses = 2031 } }, }) @@ -384,7 +384,7 @@ minetest.register_tool("mcl_tools:shovel_netherite", { _doc_items_usagehelp = shovel_use, inventory_image = "default_tool_netheriteshovel.png", wield_scale = wield_scale, - groups = { tool=1, shovel=1, dig_speed_class=5, enchantability=10 }, + groups = { tool=1, shovel=1, dig_speed_class=6, enchantability=10 }, tool_capabilities = { full_punch_interval = 1, max_drop_level=5, @@ -396,7 +396,7 @@ minetest.register_tool("mcl_tools:shovel_netherite", { _repair_material = "mcl_nether:netherite_ingot", _mcl_toollike_wield = true, _mcl_diggroups = { - shovely = { speed = 8, level = 5, uses = 2031 } + shovely = { speed = 9, level = 6, uses = 2031 } }, }) @@ -539,7 +539,7 @@ minetest.register_tool("mcl_tools:axe_netherite", { _doc_items_longdesc = axe_longdesc, inventory_image = "default_tool_netheriteaxe.png", wield_scale = wield_scale, - groups = { tool=1, axe=1, dig_speed_class=5, enchantability=10 }, + groups = { tool=1, axe=1, dig_speed_class=6, enchantability=10 }, tool_capabilities = { full_punch_interval = 1.0, max_drop_level=5, @@ -551,7 +551,7 @@ minetest.register_tool("mcl_tools:axe_netherite", { _repair_material = "mcl_nether:netherite_ingot", _mcl_toollike_wield = true, _mcl_diggroups = { - axey = { speed = 8, level = 5, uses = 2031 } + axey = { speed = 9, level = 6, uses = 2031 } }, }) -- 2.40.1 From 1283967132d6d30981f50a7eacf996ec8b592ffe Mon Sep 17 00:00:00 2001 From: Code-Sploit Date: Fri, 16 Apr 2021 06:19:14 +0000 Subject: [PATCH 176/357] Add crafting recipe for netheriteblock & make netheriteblock convertable to ingots. --- mods/ITEMS/mcl_nether/init.lua | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/mods/ITEMS/mcl_nether/init.lua b/mods/ITEMS/mcl_nether/init.lua index 4891c3dd3..f0fc6ff4d 100644 --- a/mods/ITEMS/mcl_nether/init.lua +++ b/mods/ITEMS/mcl_nether/init.lua @@ -399,5 +399,23 @@ minetest.register_craft({ } }) +minetest.register_craft({ + output = "mcl_nether:netheriteblock", + recipe = { + {'mcl_nether:netherite_ingot', 'mcl_nether:netherite_ingot', 'mcl_nether:netherite_ingot'}, + {'mcl_nether:netherite_ingot', 'mcl_nether:netherite_ingot', 'mcl_nether:netherite_ingot'}, + {'mcl_nether:netherite_ingot', 'mcl_nether:netherite_ingot', 'mcl_nether:netherite_ingot'} + } +}) + +minetest.register_craft({ + output = "mcl_nether:netherite_ingot 9", + recipe = { + {'mcl_nether:netheriteblock', '', ''}, + {'', '', ''}, + {'', '', ''} + } +}) + dofile(minetest.get_modpath(minetest.get_current_modname()).."/nether_wart.lua") dofile(minetest.get_modpath(minetest.get_current_modname()).."/lava.lua") -- 2.40.1 From 10ea6da4e86d07ac39395e5dc0b3283174e197f1 Mon Sep 17 00:00:00 2001 From: Code-Sploit Date: Thu, 22 Apr 2021 13:59:53 +0000 Subject: [PATCH 177/357] Add all pixel-perfection textures for netherite --- .../mcl_armor_chestplate_netherite.png | Bin 494 -> 0 bytes .../mcl_armor/mcl_armor_helmet_netherite.png | Bin 472 -> 0 bytes .../textures/mcl_armor_boots_netherite.png | Bin 385 -> 400 bytes .../mcl_armor_chestplate_netherite.png | Bin 494 -> 574 bytes .../textures/mcl_armor_helmet_netherite.png | Bin 472 -> 535 bytes .../textures/mcl_armor_inv_boots_netherite.png | Bin 173 -> 6939 bytes .../mcl_armor_inv_chestplate_netherite.png | Bin 244 -> 7724 bytes .../mcl_armor_inv_helmet_netherite.png | Bin 162 -> 6443 bytes .../mcl_armor_inv_leggings_netherite.png | Bin 176 -> 6796 bytes .../textures/mcl_armor_leggings_netherite.png | Bin 458 -> 459 bytes .../textures/farming_tool_netheritehoe.png | Bin 167 -> 6478 bytes .../textures/default_tool_netheriteaxe.png | Bin 184 -> 7209 bytes .../textures/default_tool_netheritepick.png | Bin 188 -> 7242 bytes .../textures/default_tool_netheriteshovel.png | Bin 161 -> 6414 bytes .../textures/default_tool_netheritesword.png | Bin 210 -> 6985 bytes tools/Texture_Converter.py | 3 ++- 16 files changed, 2 insertions(+), 1 deletion(-) delete mode 100644 mods/ITEMS/mcl_armor/mcl_armor_chestplate_netherite.png delete mode 100644 mods/ITEMS/mcl_armor/mcl_armor_helmet_netherite.png diff --git a/mods/ITEMS/mcl_armor/mcl_armor_chestplate_netherite.png b/mods/ITEMS/mcl_armor/mcl_armor_chestplate_netherite.png deleted file mode 100644 index c2eb42facea0a0c9901dec4b7d65067e9b4930ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 494 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(nJuC&U#<$A-n)8(5cR zm3dm)2fFyF$SWABtN;K1U+UguTc9*!NswPKgTu2MX&_FLx4R2R+r6n(Kn{C}r>`sf zQx-mMMN`k}^Ugq_!=5gVAr`0KPTa`VY#`z)FZ*iFv65>EXLWuuHNR)Rq*jt^Y!l9T z<^6i4EgD_+4`k1k>@eTMAY-{ndfI!AUH1eF{3B*M2s3!)G>NKi*HPcKVP--srvO`) ztlZWef_L98I+&{N^0@Np+H(0t>gQSxE!eQmV5_L6)mOD$$7TwIuKSv*w4Oyd>2zmP zcv_No?SHH7TQVe0FLu(7nN%w4z|?K-5qGlj#gkW=i?WvFsO81v$H>3fdsASNmF)D3 zrP1;NSLg4qVZ558{XHl6@N1xVR7+eVN>UO_QmvAUQh^kMk%5t+u7QcJp-G6Lp_Q?* rm8r3|fq|8Q!7Khs859k<`6-!cmAEy`4m!91sDZ)L)z4*}Q$iB}x09tT diff --git a/mods/ITEMS/mcl_armor/mcl_armor_helmet_netherite.png b/mods/ITEMS/mcl_armor/mcl_armor_helmet_netherite.png deleted file mode 100644 index f3b054735233d34317eca43a98d65323a27db20a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 472 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(m)iC&U#<8>y??8(5cR zl?A%^d0N`XhQ+GLD{ygf{r~@e{U%R2pbEy4AirP+hi5m^K%69RcNfl&Hw05c96aLcP!Xs}U!=SX$$9Tb`y9yo!r}d%qVOKW>{^`F_iqDPO;@=5HvhecAP>cyUpxsGg_vle2yjXIRZOoE4_T`1uQG?tE~n zP5P@`h1GiDk9CHci|dV6?`OA3wqp}wZg`m=v&NM>z&0^Q=MC$`iE=N4TsBVtx>~iw zHKHUXu_V9nO2Eg V!|b4g3xFCJJYD@<);T3K0RRJhoUi}@ diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_boots_netherite.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_boots_netherite.png index 245512c28c194446c675d68b8c8da7e7471e1353..39f84afb14e09b06d3fc1fc1ce9ef10f0488a465 100644 GIT binary patch delta 313 zcmZoQHY_jm8rRvsj0Ssft7&)$F+qfNE(b%t#b2I ZGSez?>!|FO>;URu@O1TaS?83{1ORkVWj6o- delta 298 zcmbQh+{ip3p(|DpSCS_4%u zmIV0)GdMiEkp|)y^{DR6t4HgvvMz7hFyYIT4HGs9%;ECkG4}H1 z@#QJh5->B-7c&z%w$>pa;6^}zKzR-W!{Yy3x$7?aGy~07Epd$~Nl7e8wMs5Z1yT$~ z21bUu1}3_OCLxA~R>sCwrpDR^237_JulOrvP&DM`r(~v8LNzF3(J?#d-~yly22WQ% Jmvv4FO#m~%Ts!~( diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_chestplate_netherite.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_chestplate_netherite.png index c2eb42facea0a0c9901dec4b7d65067e9b4930ae..8e3a383667a1a4a85a3ce4e2a10c724ef4e99c91 100644 GIT binary patch delta 467 zcmaFIypLsq1SbbG0|UcU=e}(d747S70(?STf&4Ue12GX1NeS_)?8s7WQ&lB}j3_U8 zSs5K2ooFu`Nl8fs1qEF#4H+332?+^PBLih+<*MAs|NsC0cquXqsGqSU$S;_|;n|He z5GTpo-9?yZcg!>(hrPtp*OmP#ix{t^`4&IZFF>JBo-U3d9>?DXU98VLY`{^{%s!>9 z^7a4vH++|Nt~FVeQG3?&po-D)!X;ao+4*EDS}*hXN33|S@?*wB&Lf}H8sDjMe0^^2 zW{~}M(#Eqp1av(&Jlc9WNUVIK9@|Qe?R(r6(q_qV1bZs1N;`+AiRlNy{?z4}(5R8`C;)V3x&B4~Z{=He4~r||Id zEj1~e=9#-_m-e^bI*SSY3#F2RCZ4sus$Ze?_H6zxzOVm>#fN$U;rF|LGAkV9Ozu(s(gyUuYKdz^NlIc#s@3FP zMt)HvqYy)5D^qhTQ&VjN11kdqj%y1|CU0bvQN)m`?3U~R8o=P`>gTe~DWM4fbNI3j delta 374 zcmdnT@{W0e1SbnK0|P_A=H%@Y747S#1AIbUf&AF8SbGEOvaB*sOZz|bo|~Oo-(aV9Sz~+qy&W?%PENQ`KD_ zS3X@^F26|qT+5*a8`c?Y71gx*s?raKAOY*M$Z?%0(hQ#T` zPTDb(N@X3Gy3IY}PBy-H@+xytmeP_OwY-@882J}_ZwgGZlAV6BG+JKZ>iqpRj8~Ji zzvl!Wem(gDql~DbNr<7Lm9epvsj;?!ft7*5EB;EE$&5@giWoApgAOhL1_FbptDnm{ Hr-UW|*S3p9 diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_helmet_netherite.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_helmet_netherite.png index f3b054735233d34317eca43a98d65323a27db20a..c35f112470b4e53675b373be3c74bad526adc7b7 100644 GIT binary patch delta 415 zcmcb?Je_5N1SbbG0|UcU=e}(d747TI0(?STfqXF$5lIR0j3}?F>_`a-33*u=RV4*e zBLiJ6jc6~Ms@zBg1qB@)o%)IlNl8glQ`7(d|9k)4?g!M#SQ6wH%;50sMjD8dc0ZC^wBktD+ZKaPiO#2jkKg>xX9_jGT*?&WtvOp)nB!USxjjAy_Bn(_PEW8* z4~|mnID6RM$ED}c7Jn8a|FIx zf9Wv2c_V};Mg2mQ_sY<@2QCMA+v^zca?V)Fn{Yj9w$heEcc#2>S<`ytexS|#hhJ@! ze=Z4Vl&c6()7!j({+Ong9R* delta 334 zcmbQva)Wt-1SbnK0|P_A=H%@Y746mK0(?STfqWx%b$bKrvaGT|7e7x+``EBp6?p|N zF0TLo|F7TVDK~MxXg%l0n@isSm9m$3`ns||W#QviH1(`L?+g@L<>}%WVsZNI#f@Bt z3 zcNIJePU}fatvP2B5S^QOfybmm=7UGm)`Nflf7~{;^8J=IQ@(y*&F|k(So^Z;QSsuU zR8c)o=_hCXB+js!Yd9-RiShFn&fNLnRGaiyxeBZG!XN7lH5b<#t=`XWlWfN(#N6;Q zKW2?9cYtkTj?Np_i4)~s2DxmWFnJ}TjHsbWh@qjCv9Xn@v9^JMm4U%4{z{q2w-{v< WF=S>39b5qPDubu1pUXO@geCyYxqndr diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_boots_netherite.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_boots_netherite.png index ec4183ed782bce5bc7b48d36bdee8bcd2a1bd070..a73c1b2fd59726fc3842f0b89d42a398e7a938ea 100644 GIT binary patch literal 6939 zcmeHLd0fotADSo1av8<(me&OJ+jq%gA4fyW$DsTu%R5~rTJ(1AeDsD>zTlTC)#DAZS8M0jq}Tki4JHn{2X@X4BhI~Un7HJ? zL!y7|B%AbpgXb;?^`0;|p!QYu@I_BId;8qKkX*2=(d7Ra&sB)Tm`M9^su)$n0 zOX1b&#FOdOo%Zi%t(aLsm)_lBp4Bm<>i5)+1Fu~zfH#VjYksTT71#Ht1F{hdxAfTV z)o^RKgJE0iEmceQy2cE9GUdCZDaZHBn=c6tfiuQ0|9wZSDCl~Ieo8^7Ehjg->lf_b zeqi>^o4dL@u3X_%_bhKk$;3O$Zrz;q{n(e^T+Z*< zXcrQ-f`9tRsX^0QkLIsGoi}KlW&dBJwEKBMd#safp-u4utI0@e)`~l=+PPUM#~;7;W7`R8a=Yj4wt4wI z49gZ4vi;O&+N~`nrj2l(WBtf=oUH`kb6wIF4m_PPXuih_M{-{0n8#%|ONVB-aonW^ zqNm-kO&hueFSYACtJ*O%ZLn`Y}Q`uX+o{DW^4_W(^%$B6h#~$Z(`vJPQ{_*4scf-@O z!?mj`HW8bSwf03<%-HDEg$fOeTGy(reC5(_zN)(%RI^Uz35WQP-`*i&`QQlH?e2gH zj=H$|H5H4LM;d=Uo6fy;GV4L#EHvULZdT)#tKBbLnRGSs-pO#e^P!r^d+L|G)p4@& zC%MmRFTT9gZffc)*3PVv4#n9Ej=yC6@VcG6bl2T%dhg9wJ5K(v!F8BLiT%aCI}6cm zh7Bh#Bwq^WDo$x4JCEyGShus|&7#1qWA7(9gx5a0Ix->xoRu=Yhlwelj zx+wZoBUV0X)+x(tOvAjmDcPr<9uv-*QS@?a&7$%6*sv67y%}8cNZ|1#5udnqT%+%k zOtm74gD8&;#pAxJ&l{7MA5dxjywBZOc)%%r#cO>3{oVybA0-}eJ%30truNRsU8B>T z&n~&}(z()n-0Gc^zJAnYj`?di$)e%Kgw@lMOMQ}-Lod2Loo=XGCfQlu>521evscLN zs%`33e)zTn)tjEx-d|a9DJJjujkNyet6Z_N#V+&gF5g!<*BzU@m+zBx=@rXst)^mj zW`jd{bXCs!9G_Aa%WQ^1A_r2z7_nJH0(jjJSbE56w%<%cW=hhrEmqm)lkq zPw=@`IkBS1e1%ZIN*4H9*h>7!bt_MJRA0yUKe$nKZ|w4z zG#W6ZI$;2p>UYxqU2RLj6?Zp|% z59S4{C5&7Vn4)1KQbHoBlsF2fIX>Q2VuJ_}BrrOHZAge$YDESwj)_+UejCMH4%-CL z#d&c?1&6UEDhD^izCX4%5Vzh zku*%Spa|6{KqV0IEq7(4q5&1c6AEzwPXG}VDuXagfIy@t%!33%0gTZwCgY(z6O}Oz zBHu8n7YFfZAqk5obTXAD0hE_QNvrhQci>1x0u!MljBbNHVNaf?C(4I~JOtLN%deEJNu&&hsJgTc&W(?X)^gvh+`k`VXAADPaSFu1b^KV*LnaLer?J zCB-XDu41!IZ9qg&P43qcNepcY0q|qf6eTB=F%0Op&BgXcuJ}MA;{+i&%T zpM)WTBp67*keCd`VT$6R@3U)FGM%2#FupM$2SA)bahc-Gc5BYRe(&S;a>kfkJcI{< ztVVf}FbZ;BgbF!L(Qc0ZKV%-t2s{}fC@vYOFbtzHNGQNTy$kplk0%q*w5%!N-#YKF zn1?{HAQITd=ZRqKbC`!A6vZ*M=M#;KzDxe6KEAZ~K#r+qIcCeakmlHskILVs#}I}Z76(>n2>u@2XF__VT_6HsG)BeTg%`-Oe6GAxIn~Mw9^{Md%7~iBs1AWJUPAfG&qsv#G8wh5;Zk zoQA+`K-P?`0LDjGgJJ+o5xzh|R)aS%hZX<;{z`r=gbJ0501E&B07*qoM6N<$f`tw@ ACjbBd diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_chestplate_netherite.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_chestplate_netherite.png index f2f0ad5a953c213c783ba635e50ddbab19f87b8f..32fabb10f1734c511cbdb12d8c7ae000d91faed0 100644 GIT binary patch literal 7724 zcmeHLcU%+M+760^DkvxlNQfvR4w;!usvy#h^r9l5n9NKdNJvZ}0TmH+u?uz-6%iCc zTyYf}y4MxK0)hqXT?FASh-*c_ZxT@PyZi0^yw~+F;g@9QoacSs^S1MznPmZfUIw}& zbV($V0e7-{5b zM3MLOMP7~+%0Pwr^4msN6L}?z4wd9BSpU3q$(_2;YCo*A_GrScGmMg^ewryJW&&o?h8D5Ud1U_=J=|!0VN3zq?d#sDSPGGex!_rZ>5X$m1BQ9ifngy%^_}zuO)NjJJEZazX(zW^bUy3qR+3K6@L(Ry({oyJ8hE-nFfG zl=Mg)<~wlZ7)fb_zF8ieYZ1DTJk(>N^$;ZA_;O9H_ZJuIMaSzU)#Rf*G1oyP|z zY+o;G9iG)(E)Eo~P>9wo$e`L<**FYh9lRYk0?3vvcfK*W;>F_npVoFRf}JG04mEl$ zZ9C2}Z0U-pIGRLO22|e+?py}U#G^Qk^bgy${73I+xIQs-?|P6iD8r$&XkN&Ts`-IQ z)1UVJFz9Ui-E%CyAkE#e;)21-KcKt9 z6fJmidSO{^SI7L8lI>>UrP_PX*Ys;JKEJ2mTdO5|PW_xLw#OL56vr<**|Z#!`1kQN z4-b48?sKa0pOJ5K-{EeSJH*C1uc#k}8feXIj(9{OX)O`Dxdm|D+&*ry#MYX%Aj4_$ znMoFBBZKoOrY;kfvaozgv`a`?U_q$1US3g6LF)Ou$eLVh?%cU15qgG6R4H5MzA-dv!gp`69Fklx!xJ8AO1n7~damo-PM&Ro z4yL_Q#XtttZHhrwk*yTRi|_C3*yVLTQ~&w0GMNu^{3C-$nZDi)rT!Lt53cn@+mX!1 zl(IDun`S0Gj*x^t$h01{Ez8!>c*PRN#@m}s4K}E@u=eGTsMj05$@EfqR;_dcz4d&g zS*6h4ZvRyaSAFlLqqL0Sg0VaG^^C*lK|VG@=cb2N@(vy8`6uHRWuRK7`RNwUZ>>67 z>MH$xk8@9tt$D}4ZFOeS>|xQ@V&A{NQDSbJ{9*XfD`8zzEH`)BoUFU@o7bdPhGg#D zD^HvrNC%jyu8ek*+Bo}K?-+2ex^e5lNgsfklTTmQ-KluiH+}d1jpF1~x7oRqZZ?l> zZHa09{XVU#D~YsWs`T(-mI5M?OzMP0*9-Oa;h#J!S&PQ69CtCQP%GuSJ5ki@h8^6jxIbqve}r?Q)-He?ATK-93L^N5!8TjOkHt3 zHRsBUqH1m(sec9j7pCB7u`=%e$MYHbiN!@KSBj-`{H6Z<7#x-VHP4@cKQRRnyPZrf zP2m0;qy87pu{&WW6S87yLNEQn_}uQh?ky=+sBsmUtl0)QJha>WGG086X+l8wv3m-Q z=EX(f#D3dTY#+ykf0D?2CQQR{8V?Y_ObkGXZ-CDrzL+=);dGFVgD~w&c9~cpSMsE| zOB9g`^X0v!-F89APj|PT7G!6`N5b%4L#{`)?l*MBM#0JC! z5E|iQ76j1&fdFCAF`P|D`RF$_4+?=;MCdp$@;%Js@fkP|!3oPCmO6S27QjLB2P-6!SRpR`vcr7rxc>*PmwZom z|99fOVcpVhVo3sV{)v|RE93rB{ht848GM8&9w!t3)zW)Iy4}+22v4lJdyIHAAf7a+ zpB^=O`m6c~@;CnV^zFY<13~>m$yfRJhr52b>#IEQRp1}l^}}6X<$b2!=DjA!SXJyo9(F5!3D{EupQ5YL_)$K;!-jb7t zs`1U44V_7|-cH|Kg{?=!W5mkv&egvhIZ04TB2VKa23T|~V zk|ZdKR;_~EE5V%n=E7se&`@^4zvDC@8E_+EJX8HsR@PRHSqN z6|0c`>~%Zoa>BGZK}lvG3S=yPpe522v#@FqHTU-ZLx;qBlKX){zQ$dYq zcwZ<6HdNyq&~W17@GmotE4>amvvro#pBVYGeJj0dKoZGi&zZg(Sp^~@{v@u4pZk8- H*(v`6uU8}Z delta 217 zcmV;~04D#eJoEvOBYyz9Nkliuf}@Dy z0_p|_bucP|iX!eORYm~?YU`k&Xs!BA0xGtB?eo3Y_m{~h4 z-`ZlN1rCR^<^}i&!0%A~XV5_K?bP)e#^FrYCWM7!0$7Vzqbi9^j^MF)HG)TUG6@c+ zyZvDH9CX|ytC#I|8q;w_DXoQm-PUc-y27CcE}QPe1uo?WHU~}`5a1PTEdQmcJo&k$ zNAbutT{FBbPPeqL|19V9*A3+*jpBxc+#!o7Lr{&D>|^ZmBJ_;I(&}n==}xQK^3dH+ zu&i@wchi!&@ouTfv$g#LVJxoTEQ)0~Y7bC;xRPw?GL$+NgQZ z$o$kgZT;?4<0BTj0fMr{I}j#Ov%xO;Q+S+h7Jv75HMer5xh^9``ED6Er_Or3I%-(O z+SK|)ksWTw!h0E!MrF6VR4p#kt{fsy{$#V_JC{`jnRBV@#70E>4o~fY8FGIkFVj1Y zwdpvc8|!r0zLld=hx!k2cUYBGwb01)E|;mR4jP9W6=o$D1?{G9;Djm3XuU}?c zC9jbEi=7}aTX4a_k4lTGskKknG!v?ZM|!3De&%w5uz2sjvgDEbva_R=^}FF*>5i&= z;<5TYV>g`qv23N|si!x(rtP(MP(HKq8^yVHo*6A>?034|Gh>$}eL=vbFFO6KLq#QF zSL%a)t+Yxh8jE+FXdEEjwt3F@_PW512@=Moh8k)~w{4D}Ed}4fDRRO@J<0VZ%Cjey zuJ|&ENR}{}$|6o;&ariE_?UR7o)*;^vo>{J2 zb53PIll`Woyo>H3)UP(5 zahy3haWBgElsWYj4w>?@4k`8z+;fu~WFDJxKUY`~o8pmn@_wQ9<#pfAyPbKiRCUm- zI&M&8X5f&x&f{T;URA1NjGUPhV@Uo8b>zF2DR z%-Zrir7m(YqiNM88@f5u{$cGNW=JFX^rib)OnKn54c`UtEq`F2*E5DWwXMnedD@mE zbmhPT#o>&;lzDrH@Vvd>G$zoFau#QB z1I|nvRTUYUCvZuM8~Q`~j<~~kmlo%lQ<7F(nBp0MExJm6tB@uKG^@HBun8X+6Erqp@L8eW}TplC^szms#7RH)ilAR3^f{RwWhd zJWXx9eT4bjF1X(Po?Z5^x%J2SIZ^SsFErhgeKU>RGjtn&NcJrWax0bnkkgZTWQwgJ7>?%L2XyV6{u3x^iW99!j+{M6R*mCd=_37Y~By4bVZij0P@ zZ#8?pys05OuiBhBDGQenDSsid8}yU$fn>!}r#o>!nm+b0nH_Pi{Hm$Mou|T%cG!>$ zt>?|t(&C34uQy80#j4XsRR@PUZ&=nt{UzU+j9Hq_ZfLyyg0&cj-nekl89Eww`T-%kD60f)1Rkb#3DoFB*$sT8iTSS3VUbqX~&NN_ke51kqo z#UL17h(yVhT*9MMO>eRZ-ph~RF4cSFSzj=;yS zj{=Oi1Sy88IV6%+t98{HNo0rwK}3KcYT}g`tRpHlWAzlh96pFfgv!*I zOr^x@IboqH7UL2KU>)B_4pv3JIxyL%KtDFnYcMg12L?3Y4*-xLGMPmrLqv#8>Msvg z`TV!iN=;uBK|D!1SWTk1l1U21dlDMVH}0LjKa|jff%BRqKs2gYRD}4(Axdm)f2C@9 ztfs%tSPi0|GT1E_OGv;dgXaD+{ycujTN!;Aqht!TK|+u2j}(jE;?%LI+<*~_NQfL! z07Eo@nerYUlS$rf(0l&qSAJ&*Q1_PqJ@lJ+8Ei4cmE)rl#p;#ve7FR?y&SPhBolKC ze`yGf#b!!aL?ObY5@}R6g(#G;=|n0WVlrTaNui1){it|K4F)Skh@J|NyUG9$MZ`oH z2u(zUDHJ-92Eh`dkO7g2WG0J26T>itP3}(-jLJYI!1Df9>8Zqkib(}%8ifgLAd`VL zR0feHmN1DhT|#HUEFoB;7_8Cn1IIIj$0b0nUHXAK-*Ry2%u96hcxfqYMlB zjo|=yKxkoobpU3=Jn)9&jUq6nLc>%lIhUZf7O$r?6cygBuUt5RDv?3Z07k_6itDR6 zFF1;17`l=E4E#H$P^n6*{P%d?LEo}?qL@~N#ss6m!e~T<{W;Gcf!{I-K)2IiXgu#P zocayUtv6u~hzyYYM38F?qL592h$5DRMTbE0QOUny*Qg|z7Df@zD3AkS zpFwdM_8ITomw%Jqw?->P^vOjA)j=T>spK#Ul>?DE5S`Gw+kLzL_qd0MAqk7ZB!l8& zLi*y85Md!q178T8Dn>+NI<2=(-v;l$aStL=m|?&-8jC}N{vYnqX>_)j&R`K?m<&1@ z9RlvrBtjw?ftfG`^c6A8et$RqWA`XTpn<{)qd**p%AvE~xaUUFpO0^H)lGkb@cEqn z+3co2VK_W}8wrh7tK~8TeLu_JRQ9xTOzwaPzL{|CTc zhCrDJQEF6wW_o`}Z&>H}(`Z6$ShVl5mX7@~nS&ra5V`|gE^Rh`iAI~t>#fJ5z z(@i|>R+Lx2O1Hkcxp4RNfP0qV;dvI)41r}vSkhM2_nF~!euXyj;*i3_!xEFGt?{`+ zn|kn*IdN7o^yQ}(RtZWPwzAvnHJ7b^{o(%6xw3+W=}Rk82rb(7b=N1(a8@TC%}s_{ zTJ8_VT`XqRJ+Qfua&gO|Pn;}qgL{exA(hp0@VM!IFX8C(+h*rSbPhs%b}iTy(fPOp z!WFdNDk(2>F!TG|zTSfWkDFiL8ia@w78evb7%8UCu((xZ1jhL%()c^=HYyOv`QCEP z=#^J>1i#kQE8>Q^#YgN8Zw-!hUsru7Z*pp@&@5F@{>mw`$nX2-$OLRKzbV-4<-sC$ zhxU5@qk@E!XI&3mxf5>oIijF;`qaXjB3pMzeX GC;bzL%zMTF delta 134 zcmV;10D1qbGNJ*HBYyyCNklp1vs9R9E-ExS-&F zqBWOgmHm$mi-j8i5+`T~$N+SkVVYr>C<9=AhPeR7C&>ViLYNCcY?2H>HUx%=3P|KY oL^pt_K!h2BO%co>hEae400vrmFb;s=Z2$lO07*qoM6N<$g2jw94gdfE diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_leggings_netherite.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_leggings_netherite.png index af45363b3631abf9349a8c06d81f8e695803f45e..3ac1b844a3c6a2579fd45bd2cd2f92a2702d3fa5 100644 GIT binary patch literal 6796 zcmeHLd0Z1$9uIN}f(mlTVF^)-qC;kKPb30Dl&FYut5BVpOhP1=Ng#nLAgC?4C@Nq@ zYN4oT#RKr53Ro0R1TXNQf+Bd}fk)T-+DSmgZnwLBcDsKGgyg;V{e6GO`~80JWiqBu zn`CY2Y)K-KtObDqA;kM&{j0wj@!##Yw+M-3@+K)PN)v);$x4+%B$47|O`;Mf<2s3m zMAEgiM$TMyca+tun|5lGDP-THNS2QMT}N>F#od~4>Y4j-nLBIAi;v});4KGI_B}WE z`Evdd!M9&k`#ezJ&KctTFzNu~il*{;o7>S#x?AiEq~iJ?_uQes08*ZudsvuZJ4;nE zDvy`#X5J)w{ZMe`t78L~4b9qT-xVQDv_2h?eSXit9nfWk``+*iYLEFmQI+>FWX$Z< zKh(sKlEQZ`$K`o<7qNHDXzFmshB!MY%5BmXH!>EB-byS;iA&DS7w0C5uFpHO?u|!C z>73VQ!&c0Fu{HTp@FV91boZLsm-6DSf0Mk^as6KP`05L>Ns2h_@kHO-Pd7DgJLzCT zC+}6~PqNT;4*hA;jGWl3)uuTYid~&HX4|IcO+wd0A|{OUn#Jh<1E z*x$X@z8J(nc3XBo_oiT!kX><37J8g3 zJ&95ZfJ?^?^?empWD{_5QGd?F2dfK5mB$zO8D%J!ZC_gYRw!+JR3a0$~k1$8Ggq2 zr9*?7zRPK*z?n(b&f(0FWAh7PBq7ar^4f|9uPIO9&hMBd{hp5A9{6x%PHbjg*v~DQ z-ZK_jGb6TbnUOw*d11qIhgs5=kZ-oe{~EKV`|Dd}alwvpLWgZ`C!WqMUd>!T)w)($ zwsebofoJT7Ax;I0pahd6hvt$7Hl$Y!U!|6s#iv*JJI!#n8iQwtN*V5DX9jGmEYN|%MhbyR2TRV1*{)V}_$Y!Z=(;><$@@e$icN1s5N{}UU z+qIduSBiey`Ez4L#NEetJHI;aX%nd74}OEU6kYCdO6~Txn0!0^E(-pi}>qT zJazDK?!Wi4*(1~Zv8Rq37LJG>L}fH~ol>6^ueMBa^Q&msPnN`Qk<>0Qil^n&Qs)QXd>Urk^UY~C7`nHZ3KZGS@AKC~@y;|PH zbL7~1FSk{5=0{rEZVq9Nvz-69DxjtM+w+5L+2U&BhF8b#d{NNd*c>iKUAEu>ffu*% zJ4~n5-vQvDSt1#b^rcz&l75%Rib7W%CGHNZ$)mHQ|WW^MaqW$S|;*7F35m7osGaZA*8273YU9PCtSzEb zoWgl|D+OQHEkO8IRR>r2nb`OTpqtj8@ant@*L1gc+=(d=C;sqK{r55a)kfo2>hijl z@~ftKS4+AIo@N{>rHrn-S%;a$WItPZr@UTKP(N^hH(lCEQ`aGA+2zA3$BN7%+hChX z_Tj|~-0znkOk7qmYiq?5-tz(ed>LFHpKmjw>|49DgWZdld(PWAxFme|;ee%2hJ5kH z=I9S!u9>>sb0~bH%*cLKhxyy|E3Nq(k6W-u=a7=-NMB-h{qOeMwp5nl_G`i&lLtP= zk+Y5-IAbCjFHmT9-Le69T1Q7~8Hs}`FB>iWL32FY^>}dTsNB@2^cS1@ftmp(k*#el zFF6ZIs;1_%)=Fjnx)V9oHy(D^bho|Xo$J1Do?@jcZOM4#L?YS365?cv3YyBr6f!SF zs6cTqolHrbTqKgWk4}kTakz$z;$n%MN4dZM0EH|O@+gtaATUVjkH<;^lT>(U(zGxv zDGq~$6rb^y-a0NpAj35XStpaq)m$BqV<xpY_vJ3fTbB#PKLmLDR|p3KdRfcrm;{ zfUlDz&?w_A$=)iVh#L|xv6q4v@hGtxjgm{HYPDJ~E!|6@5>p`lP!XA7R&}P3}*lgP(%k{9AX0;I!b4VK%6-AnSH1P za45VD1I7G1=qvv9Z%MX*XjR01OH zYn7f#NKm01PzZ7841kTXF@S+^2y0*v1lTY{V>4(l%Ai38D*Zli{iX|e6q*a;D2HYja6vn{~6B*=zA7Fl}4*j#RaQ^ z(Rnzg`E#B>0>5VpA-bJfqe>L~8>fDU^X^I5KtfibO6;RQ6rbNS>S;+*i6K;EvY`!d z5v(WtY9s*{8n%FlW6u&6i^#<|(QkW;?cKcO4-%P!LLi5RumO<8gaHPV$p#RFjsip; z6A1{h=n%7~7T&X~6(WrmQQ>}KA_s_lCW_0j&*V|P`8WDwYqYVrKDj^|2tdRiBMgGM zG&Yw>qx9@{@9zIK?m-v_6S8m&puu+ znMfQlv6^75{7=>Y0kDT*sszL3YQ>+K-WSpnmOi&6!sebi;`T*c=BV#)bGyskzN#M`f^*;-j<%j1%xSaS>q9va8 z)WiE-i6=#7=#)tTq__It!s?RM#EgY9aHg6>8hB9uGO`~vIhB|+*9e06=GTpF2RN9J zgJvfYj{~`a0KYI!eZ#8ikb}N+Mk(?PgPvK zHK0(D`h6}Yz>gYlwlVySm?>q~X_shQ7)msTCJpJ48Bl*9-al6tDy zoK$hs@nExOXlQG)rUe+rcOiXobHLy3apE`J-w5we+>dbgYuFPy`$b!$$@0)sopyu6 zGIFmyxRtuD%XoRHIXRP6u%dBpO`#~V-U7|tkT7HKf`PsxUBUvdU{2eeo{lUFshbRS zPswX{?)tiJa_&~p$*kq>uY-f0wDL%K?fJ5|_gYVSHtjkmmqhlzXIbQN$X7AMC8ebG z?8Y%o(s8_Ko8*mYi=5y&1(8J|=Nn!vqLjOZ1%8|RqsRVneBPzk5hF)Owm(7(8xEIL oluVV{70fF>+5EWr@PS%K5}N#@Ma?i%BCsR@e_Fuy33Jo_0eoQVL;wH) delta 149 zcmV;G0BZk?HLwAYBYyyQNklgwV*1ZDuTCS>exXHT2~$QnSHECXPQK^Ww8q78uAhO7|8CdmMFg}B6NV*o7R z(7k|79H#;3@eMP8U^;+>I5q>YiDNYY850s88~^~6>7xT#Yz{4700000NkvXXu0mjf DUJN>} diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_leggings_netherite.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_leggings_netherite.png index 3ddff72e3e8632345fbae461132e1f04ed3484f3..7411e0a705c17405fdcb8c1e3591a3a18f069426 100644 GIT binary patch delta 326 zcmX@be42SeLcLaiPlzi614FczO-7WLq=dMbh)7j-q`a(*s*-}PmWHyja&AIUeMLr9 zZsh;}|4X@+IRRBOmIV0)GdMiEkp|)pPq&2lBF|Q zmQSB)^*Cfg+%%b08X{S3!H$*HMklyzxK8!5gf_EGEz~mbX8SF)T|cB*#ZhGOghdK0 zp1LAO9>%Jt3yX4e`p%Pn5xV(F0!Qaz-BpL$9MevE9cuH65arP1`XH0gGU3D{hUoQD^Wt0{*G72#?wlX!hGBwpUFt9Q(;JCKXWO6T~j3S0iWw&Gp&`S)Su6{1- HoD!M<7P@Kc delta 326 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 delta 140 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 delta 157 zcmV;O0Al~CIJg0jBYyyYNkl6%V}dDlR#&M00000 LNkvXXu0mjf>*7A# diff --git a/mods/ITEMS/mcl_tools/textures/default_tool_netheritepick.png b/mods/ITEMS/mcl_tools/textures/default_tool_netheritepick.png index 088283b0bf6ab4c414f001edadb471075b34ec0b..e4140dde7684add3bfa91bec6b4dbca49d19a00e 100644 GIT binary patch literal 7242 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 delta 161 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 delta 133 zcmV;00DAw9GNA#GBYpsANklx($w%1%&>StT{F;7K{th z3y3!Wq#2|Eq|x8Tj&uV+KwnXbGR?)V&R|UxX$J90)|_BsM4FArnyoFZ>8u%~5rmx` noXNKtIl#yQAk7pRKn?%^??+lk=UVA300000NkvXXu0mjfyyiC+ diff --git a/mods/ITEMS/mcl_tools/textures/default_tool_netheritesword.png b/mods/ITEMS/mcl_tools/textures/default_tool_netheritesword.png index 4bc0809b12478fa4d29150871df6b303dec9cebe..589637a62e5cf0df635a53f1f8091d45ef568c3d 100644 GIT binary patch literal 6985 zcmeHLdpuNm{~tvnDWr>vF?p7$J!a<2<;+Yoxei7qLN}DooH=6#b1@e))LJ67(UaXS zO1jvMq|J8O+D%DGOPeH5_oO7HtCUEoo-;$GXZN?yuitNX|B4spe82C{`*Z(%zs^@7 zGyI2JI#}XxxZ(T&-%#xDNW;(2A=q!Hr*B{!&h%1p_*_jWtivl+3b8aE#cPt3C?3^I z#W~{bO>~`SdksSI^1( zadX-eW=`*(AA&RMyyeMNZ9gJz6Mg>Kjhi?)NpUK3TgS7}f!Ae+62E;JcY8|C%IZs- zdpocC`~F~YA))r#*ZcHO9eGnLL{Wa#&4L*PlKGy|QBmLMIbNPkS*yQjU7O_B`sl3r z6W5TaORB-g5c2VBN2a(Yc{~>{eSZGe(xxdMHOrc&b4-&`swJ_%v@OzIHqW5t3+6}8 z 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 Date: Fri, 7 May 2021 22:50:35 +0000 Subject: [PATCH 178/357] Fix ancient debris duplication glitch (remove fortune drop) --- mods/ITEMS/mcl_nether/init.lua | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mods/ITEMS/mcl_nether/init.lua b/mods/ITEMS/mcl_nether/init.lua index f0fc6ff4d..d1941336c 100644 --- a/mods/ITEMS/mcl_nether/init.lua +++ b/mods/ITEMS/mcl_nether/init.lua @@ -62,8 +62,7 @@ minetest.register_node("mcl_nether:ancient_debris", { sounds = mcl_sounds.node_sound_stone_defaults(), _mcl_blast_resistance = 1200, _mcl_hardness = 30, - _mcl_silk_touch_drop = true, - _mcl_fortune_drop = mcl_core.fortune_drop_ore + _mcl_silk_touch_drop = true }) minetest.register_node("mcl_nether:netheriteblock", { -- 2.40.1 From 7f340b7e2a4822e83e870355f66287fc7c5461b4 Mon Sep 17 00:00:00 2001 From: Code-Sploit Date: Thu, 22 Apr 2021 14:38:17 +0000 Subject: [PATCH 179/357] Add forgotten textures for netherite ingot, scrap and ancient debris --- .../mcl_nether_ancient_debris_side.png | Bin 8573 -> 6800 bytes .../mcl_nether_ancient_debris_top.png | Bin 7800 -> 6800 bytes .../textures/mcl_nether_netherite_ingot.png | Bin 222 -> 6360 bytes .../textures/mcl_nether_netherite_scrap.png | Bin 207 -> 6221 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_ancient_debris_side.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_ancient_debris_side.png index 230f2cce361c510162b332ee4c028b5f68d74ca2..9891604029e55a39fd4d26859b84aa09ccb4d769 100644 GIT binary patch literal 6800 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 literal 8573 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 X74wsmTiyLS0RSk=Yrsln%|red>vFFm diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_ancient_debris_top.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_ancient_debris_top.png index d354cc8a268c3c08ce8b724c504e03c47cebef38..ba68f658a54381c11cfaeb0bf8345292ccee1bc3 100644 GIT binary patch literal 6800 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 literal 7800 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 UB&(FQ`TcJgqNT4{rfwJhAB*}(+5i9m diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_netherite_ingot.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_netherite_ingot.png index 90aab05632a87b234c41c5179621f895f26c38e1..11396119872e099953fb7d62db86805c4c7e79c9 100644 GIT binary patch literal 6360 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 delta 195 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 iJuFDh17vF?2LJ$q2g+KsahnzZ0000 Date: Sun, 29 May 2022 21:06:48 -0600 Subject: [PATCH 180/357] Serious Dedication Advancement --- mods/HUD/mcl_achievements/init.lua | 7 +++++++ mods/ITEMS/mcl_smithing_table/init.lua | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/mods/HUD/mcl_achievements/init.lua b/mods/HUD/mcl_achievements/init.lua index dfd3c0657..91764b3e5 100644 --- a/mods/HUD/mcl_achievements/init.lua +++ b/mods/HUD/mcl_achievements/init.lua @@ -215,6 +215,13 @@ awards.register_achievement("mcl:countryLode", { icon = "lodestone_side4.png", }) +-- Triggered in mcl_smithing_table +awards.register_achievement("mcl:seriousDedication", { + title = S("Serious Dedication"), + description = S("Use a Netherite Ingot to upgrade a hoe, and then completely reevaluate your life choices"), + icon = "farming_tool_netheritehoe.png", +}) + -- NON-PC ACHIEVEMENTS (XBox, Pocket Edition, etc.) if non_pc_achievements then diff --git a/mods/ITEMS/mcl_smithing_table/init.lua b/mods/ITEMS/mcl_smithing_table/init.lua index 820ba1f78..b178c19fc 100644 --- a/mods/ITEMS/mcl_smithing_table/init.lua +++ b/mods/ITEMS/mcl_smithing_table/init.lua @@ -120,6 +120,11 @@ minetest.register_node("mcl_smithing_table:table", { -- ToDo: make epic sound minetest.sound_play("mcl_smithing_table_upgrade", {pos = pos, max_hear_distance = 16}) end + if listname == "upgraded_item" then + if stack:get_name() == "mcl_farming:hoe_netherite" then + awards.unlock(player:get_player_name(), "mcl:seriousDedication") + end + end reset_upgraded_item(pos) end, @@ -128,6 +133,7 @@ minetest.register_node("mcl_smithing_table:table", { _mcl_hardness = 2.5 }) + minetest.register_craft({ output = "mcl_smithing_table:table", recipe = { -- 2.40.1 From c05e1b5f4580a74b541f1a2d9ad9aa8c158dd72a Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 26 Jun 2022 22:13:39 +0200 Subject: [PATCH 181/357] make diamond armor upgradable to netherite --- mods/ITEMS/mcl_armor/api.lua | 2 ++ mods/ITEMS/mcl_armor/register.lua | 2 ++ 2 files changed, 4 insertions(+) diff --git a/mods/ITEMS/mcl_armor/api.lua b/mods/ITEMS/mcl_armor/api.lua index 6ec1b377b..57e52ef44 100644 --- a/mods/ITEMS/mcl_armor/api.lua +++ b/mods/ITEMS/mcl_armor/api.lua @@ -133,6 +133,8 @@ function mcl_armor.register_set(def) _on_break = on_break_callbacks[name] or def.on_break, _mcl_armor_element = name, _mcl_armor_texture = textures[name] or modname .. "_" .. itemname .. ".png", + _mcl_upgradable = def._mcl_upgradable, + _mcl_upgrade_item = itemstring:gsub("_diamond","_netherite") }) if def.craft_material then diff --git a/mods/ITEMS/mcl_armor/register.lua b/mods/ITEMS/mcl_armor/register.lua index 1d3414339..0023414f1 100644 --- a/mods/ITEMS/mcl_armor/register.lua +++ b/mods/ITEMS/mcl_armor/register.lua @@ -79,6 +79,8 @@ mcl_armor.register_set({ }, toughness = 2, craft_material = "mcl_core:diamond", + _mcl_upgradable = true, + _mcl_upgrade_item_add = "_netherite" }) mcl_armor.register_set({ -- 2.40.1 From 909aa71dd339c9475dea24860cecd468f0030835 Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 26 Jun 2022 22:18:38 +0200 Subject: [PATCH 182/357] keep _mcl_upgrade_item as nil for non diamond armor --- mods/ITEMS/mcl_armor/api.lua | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_armor/api.lua b/mods/ITEMS/mcl_armor/api.lua index 57e52ef44..14ed5b666 100644 --- a/mods/ITEMS/mcl_armor/api.lua +++ b/mods/ITEMS/mcl_armor/api.lua @@ -114,6 +114,10 @@ function mcl_armor.register_set(def) for k, v in pairs(element_groups) do groups[k] = v end + local upgrade_item = nil + if itemstring:find("_diamond") then + upgrade_item = itemstring:gsub("_diamond","_netherite") + end minetest.register_tool(itemstring, { description = S(def.description .. " " .. (descriptions[name] or element.description)), @@ -134,7 +138,7 @@ function mcl_armor.register_set(def) _mcl_armor_element = name, _mcl_armor_texture = textures[name] or modname .. "_" .. itemname .. ".png", _mcl_upgradable = def._mcl_upgradable, - _mcl_upgrade_item = itemstring:gsub("_diamond","_netherite") + _mcl_upgrade_item = upgrade_item }) if def.craft_material then -- 2.40.1 From 352a52e086406db243f1c6755bd269221122e206 Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 26 Jun 2022 22:19:17 +0200 Subject: [PATCH 183/357] fix indentation --- mods/ITEMS/mcl_smithing_table/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_smithing_table/init.lua b/mods/ITEMS/mcl_smithing_table/init.lua index b178c19fc..81cf3a0c9 100644 --- a/mods/ITEMS/mcl_smithing_table/init.lua +++ b/mods/ITEMS/mcl_smithing_table/init.lua @@ -85,7 +85,7 @@ minetest.register_node("mcl_smithing_table:table", { local inv = meta:get_inventory() - inv:set_size("diamond_item", 1) + inv:set_size("diamond_item", 1) inv:set_size("netherite", 1) inv:set_size("upgraded_item", 1) end, -- 2.40.1 From d86be83b2b20497a200926b53591acda08b3739b Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Sun, 26 Jun 2022 15:26:44 -0600 Subject: [PATCH 184/357] Fixed the lodestone crafting to use the netherite ingot. --- mods/ITEMS/mcl_compass/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_compass/init.lua b/mods/ITEMS/mcl_compass/init.lua index 4536064d1..9ec1ba074 100644 --- a/mods/ITEMS/mcl_compass/init.lua +++ b/mods/ITEMS/mcl_compass/init.lua @@ -285,7 +285,7 @@ minetest.register_craft({ output = "mcl_compass:lodestone", recipe = { {"mcl_core:stonebrickcarved","mcl_core:stonebrickcarved","mcl_core:stonebrickcarved"}, - {"mcl_core:stonebrickcarved", "mcl_core:diamondblock", "mcl_core:stonebrickcarved"}, + {"mcl_core:stonebrickcarved", "mcl_nether:netherite_ingot", "mcl_core:stonebrickcarved"}, {"mcl_core:stonebrickcarved", "mcl_core:stonebrickcarved", "mcl_core:stonebrickcarved"} } }) -- 2.40.1 From 7136e5461512f047eac0a4f794663ff1e312e73c Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 27 Jun 2022 12:40:21 +0200 Subject: [PATCH 185/357] make armor upgrade slightly more flexible --- mods/ITEMS/mcl_armor/api.lua | 4 ++-- mods/ITEMS/mcl_armor/register.lua | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mods/ITEMS/mcl_armor/api.lua b/mods/ITEMS/mcl_armor/api.lua index 14ed5b666..8d08524c6 100644 --- a/mods/ITEMS/mcl_armor/api.lua +++ b/mods/ITEMS/mcl_armor/api.lua @@ -115,8 +115,8 @@ function mcl_armor.register_set(def) groups[k] = v end local upgrade_item = nil - if itemstring:find("_diamond") then - upgrade_item = itemstring:gsub("_diamond","_netherite") + if itemstring:find("_diamond") and def._mcl_upgrade_item_material then + upgrade_item = itemstring:gsub("_[%l%d]*$",def._mcl_upgrade_item_material) end minetest.register_tool(itemstring, { diff --git a/mods/ITEMS/mcl_armor/register.lua b/mods/ITEMS/mcl_armor/register.lua index 0023414f1..425bf75f0 100644 --- a/mods/ITEMS/mcl_armor/register.lua +++ b/mods/ITEMS/mcl_armor/register.lua @@ -80,7 +80,7 @@ mcl_armor.register_set({ toughness = 2, craft_material = "mcl_core:diamond", _mcl_upgradable = true, - _mcl_upgrade_item_add = "_netherite" + _mcl_upgrade_item_material = "_netherite" }) mcl_armor.register_set({ -- 2.40.1 From ed2fc6601e522abb31b53a21b1d9e1e479031827 Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Mon, 27 Jun 2022 10:31:56 -0600 Subject: [PATCH 186/357] Added Smithing Table to Toolsmith Villager Jobsite --- mods/ENTITIES/mobs_mc/villager.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/ENTITIES/mobs_mc/villager.lua b/mods/ENTITIES/mobs_mc/villager.lua index 1c2cffb9b..429d7c743 100644 --- a/mods/ENTITIES/mobs_mc/villager.lua +++ b/mods/ENTITIES/mobs_mc/villager.lua @@ -458,7 +458,7 @@ local professions = { "mobs_mc_villager_toolsmith.png", "mobs_mc_villager_toolsmith.png", }, - jobsite = "mcl_anvils:anvil", --FIXME: smithing table + jobsite = "mcl_smithing_table:table", trades = { { { { "mcl_core:coal_lump", 15, 15 }, E1 }, -- 2.40.1 From 1fc79ffb61495a35cf335d9f3d1816393db8b16b Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Mon, 27 Jun 2022 14:11:50 -0600 Subject: [PATCH 187/357] Added pixelperfection netheriteblock texture --- .../textures/mcl_nether_netheriteblock.png | Bin 425 -> 6951 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_netheriteblock.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_netheriteblock.png index 60957f01794f9ecc0ad1eb8ce72749060c7d435b..302ead2a0872becf8c8ec9f7d61bd5cb0de68f79 100644 GIT binary patch literal 6951 zcmeHLd0Z1$9uLAQvVd$UA}AVys4PyBnGCs_cn~6o1dvnkoJ=Mmkjo^HfK^;*0C5pT ztXM5dRYas!P%Pkuh*!1ZD!PgaN)@RHh(*OJvXg*{+itt=w*5=^B+Ps7`}@A%{T{P2 zB*@ps%GruQAlUf(`Gn$s?TjDG;rRE2ANmmj!J;-fe6BVW(GgW@rC2J%h}t9-M#S_| zF@d0O{4!E{@y;aczIqR}#l*7lBgTfUAA6@asZ>GXHgAU#onp;mn(V*0++E+y?=xg1 zh_KR8WcJSP{8-Xt>(tKRI6!)-v71+ajQ`aY3*N-G9sSmd(k<$Xj)FXD`Gl<6X_F4L z`@p=EN)PAs?a6gx?i5b3<<~AtO;2q&evv%9->EjSXIj0VcYnBiwS4N>eNUTDnje-S zzWJkE{}CHq`4RE4oBK%fOO2U^iDu{rGp}z59dXBIa^LOs)%(h4_3)Rw@#k;wwESvu z_2r}AoH>%V$GL98r`V!TDUaL$d&f2HQ319kdE0z9{M~%J!orIub(?yFP_6n{zkna%=FRMGosj!wUQ|3=S_^K8sdugQDh@ z4s#6`kH0qj;m2LUcOz=H%BdqP@_VjC$UdE=xXj6&wSRFTzq#J|8RtU+>FNPhx`lPD zukg&;C+7+*nZqBh+d5_Mn5G$K(Py0&mj7i5ak8o+n_JKrbKu5_;%H)Rmi?%>FD9z6 zkgIE^H(A^XDHmo}T!~huWz$(pPDbC`tgGmCr!?u?KYu!{w=HbV;#3=QuU&YiD}Qxr zOYF8))6&PF0o2d7vJhQuY975wMB8-pM(fvmPXHZ$TW&r`)E#V2Yy7SNlAI~FzlLq$ zt!BAsiR*1OSC6~AwDjeK&Ma~8D7xB`MJcSy9UZ@&{bkP6r_tNaI5Udwdmo*9JhE%2 zRmt7D$n!O0#t!@L2(;pp)^9f2imZ1BEVygUunIEZDd@@C_*ZoCg>iKUF0^!tI%_vU ztts6n*RdjYJ-0u%E8wPMYr&zzdp~WL?~9+4U6^d`SsbH!VWnvyqy%1+uW;_w>>&>; zqGwvtBg|%S_=T%fx@vIl2XLHi%+VzD%!>Q@#o6}_&zk0?Jhn>Of1SRv>S@7)CC;5s zI%8bsT|RlRY+lZcuB4M54Gi|ewb#ee=U12AD*bFc`Bcz|)PtTa(&OXoYpVovGQXX^ zCSBH95?T<#og7sIeg1v-?F)@m8^zNT?3~kU`?~TE-q>Jqm(V~_<@#=(Om^H+0#$_? zlsyk;*Uta(kZkwO(s7%U4gi_w%oPkqQ`n4Uy+1UUKNCkq9G~-9ik<->jHo<$GOHl$qBD57I`B>S`))R)S$+Qx2d z-&|T!GXC0+p<(s830Dp!{8LunlCn?)lScvOHNBaw%a@fby0K;Y&5Ijm$0SrBmrpO< zzRmeheH}Hc7fKmxIA2daGioX2aEbYg1zGnOSp?O5J3hgoj6g6;m-2Wa{yg5RZie@; z&CAwu{f^HVcVf|{fQS;?M7t%YLtN@oi!&9WCrERr$PJM$f#kl_NjCmjtG3;WQ9VS< z?%!%D-JQ0ZXt{hvWfjY#+HYn5Y%4&>Wpb)&ghvc_M~nZ&b1xv-dX&t1=G}-Hei$vO z2uHG)K5`sh-WZVE4rkb%_&}J+`{eIdSyPUA=SOCLXg{(sXMgu7_Dg1!NbPX!blD0h z+;8=S7o(Qz;#((8zOj9VMVr2?BL}HD`saq-2l|%Du0OV~d2T&lDoCjse(vMkh4Q#U zx2?*tm6eLPN8?ph=GL6=b6r`v8;aJPHS3b}2%NU|k8WG2SsMS~yB;&YIZ`rgwG9Iy#zZ*)Nw9PEAmsS#_*p2Z3NeMv9*=a|MBHR4FGTBBc-`>*Xr^{2>rH z)AcF@jmNY^AtsS3xTLOwM@dAfh)as{5>N#y9u_P0OIBlH$wA?0ay-fsk)}_x;^^5p zfgIB!M7><5(6IGfl8Kj%KO3hhB%%qTjpvf)3POlHr5Yo`WSC3^_Ql)}u7jb`5^oWWAlBpEA{4EKMmY?`$zn_)RgyY9NB^1*r6VxciPs9{j zx1pP=WC@y~dnRZw24@D}!fU1CHvxLf9^=YS6v4N9&HonqmA_27nEcB2QKAXPP5phiB%{7; zkrI`P*rrDo=7m9+7YHzE5DS3C5CRBM1|6U?ydV^0(uE8Z9zx}>&}b0_iW#YJaO* zDuu+fUpE*3K;7ZsucAQhld!$CS5X0W|zq=9G;M*sIQ4~2y^ zAqy{2783&jm<2Hbp-3zQFciXQbdXL%sEoJO{eR4Z01z^oN29T!Kg2u{ODx2D7!^Rg zL>K@w=_tTr;f6wp7mbFYLIyb4J6`9;|7;!zP-y@a4hKOt2(uy99}zt&3eiC^9R!33 zhypOk5Cg`(i-(X7i)msI1kr&;_#2rAGQ+8`F?x8{`U8@a35nUZT=)nM$6%I1lAfBAiEAu!M&hri6~b(+_TzX%&HobBsF=r{guJ-l-r zJ~L9~7p)->Y>yc~W|eE>JMhU7T7Ln5#9fP#b~d9Itt|W+f8R;<_n8^aJZo5YGr%0Q zGaT)l#KNa}q_aZh$Tuz%Gjf!>FU*G<}8s-bN<*UXa8S8cerlSUiue!J8) zfRuHs)IBS&((J0@Yrz~#GeTG2gTD6b&v*Q7JYjPML3YJFS?Gt=zJD(K6 z-@_q}AH`d`=Cyc!{^y>Y`o8t4`yB0#$NA^giMe^Vy5UD#66S=OmlYJpYJYSnbpK>V z(8eHpdb^p#rfKQwon`RFlL=+54i;WfhA-PUJ<1_9R44pc=n|1uJ=aTp<-=BH>@yG=5uZ!(Q0qo2wU`k3PxHv`O8yN7}F^<8rx^XnDWSftUqxhek8zg(x(Z zMa~V%x;uGh`j0EOEDNlT>snS-@3F7)ddK;awg&Y#Jw?75FRPx$V@X6oR5*==lfi1^Fc5}62Mx8YxGcWx zW$8oo-1mQgLg~4^ZDF%Z99c3Wa1V+UIaykPk&yoRX67H$8Q1Cabmb1%K7!>8DqPaaU6Mje`DCEM=?@@W`92;BABQE9L{^z?6R=E zOQo5ptYIzy5kZX5v^@Z-%5<8_`>qzMCVJEM1yWZN&*x_G=(&;tP*p?(zrq^kBF;Tu z!vF?rFMtfmnX)(=r%}8O{VEMZ4%Vgm|EC(J$=_-DykgMEoO*D z-L@cCJ<9SIzp#&b uGge4bn4C+1*O%vQ25VEV&V6|Y@Cjfj%!y0L-% Date: Tue, 28 Jun 2022 11:59:04 +0200 Subject: [PATCH 188/357] check for _upgradable instead of diamond --- mods/ITEMS/mcl_armor/api.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_armor/api.lua b/mods/ITEMS/mcl_armor/api.lua index 8d08524c6..1b9aa4f73 100644 --- a/mods/ITEMS/mcl_armor/api.lua +++ b/mods/ITEMS/mcl_armor/api.lua @@ -115,7 +115,7 @@ function mcl_armor.register_set(def) groups[k] = v end local upgrade_item = nil - if itemstring:find("_diamond") and def._mcl_upgrade_item_material then + if def._mcl_upgradable and def._mcl_upgrade_item_material then upgrade_item = itemstring:gsub("_[%l%d]*$",def._mcl_upgrade_item_material) end -- 2.40.1 From 6543d819da6699b55008bfc750bebba2c48bfbbd Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Tue, 28 Jun 2022 09:47:55 -0600 Subject: [PATCH 189/357] Fixed some quote formating issues --- mods/ITEMS/mcl_nether/init.lua | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/mods/ITEMS/mcl_nether/init.lua b/mods/ITEMS/mcl_nether/init.lua index d1941336c..f4a241cee 100644 --- a/mods/ITEMS/mcl_nether/init.lua +++ b/mods/ITEMS/mcl_nether/init.lua @@ -58,7 +58,7 @@ minetest.register_node("mcl_nether:ancient_debris", { tiles = {"mcl_nether_ancient_debris_top.png", "mcl_nether_ancient_debris_side.png"}, is_ground_content = true, groups = {pickaxey=4, building_block=1, material_stone=1, xp=0}, - drop = 'mcl_nether:ancient_debris', + drop = "mcl_nether:ancient_debris", sounds = mcl_sounds.node_sound_stone_defaults(), _mcl_blast_resistance = 1200, _mcl_hardness = 30, @@ -72,7 +72,7 @@ minetest.register_node("mcl_nether:netheriteblock", { tiles = {"mcl_nether_netheriteblock.png"}, is_ground_content = true, groups = {pickaxey=4, building_block=1, material_stone=1, xp = 0}, - drop = 'mcl_nether:netheriteblock', + drop = "mcl_nether:netheriteblock", sounds = mcl_sounds.node_sound_stone_defaults(), _mcl_blast_resistance = 1200, _mcl_hardness = 50, @@ -319,7 +319,7 @@ minetest.register_craft({ }) minetest.register_craft({ - output = 'mcl_nether:quartz_block', + output = "mcl_nether:quartz_block", recipe = { {"mcl_nether:quartz", "mcl_nether:quartz"}, {"mcl_nether:quartz", "mcl_nether:quartz"}, @@ -392,27 +392,27 @@ minetest.register_craft({ minetest.register_craft({ output = "mcl_nether:netherite_ingot", recipe = { - {'mcl_nether:netherite_scrap', 'mcl_nether:netherite_scrap', 'mcl_nether:netherite_scrap'}, - {'mcl_nether:netherite_scrap', 'mcl_core:gold_ingot', 'mcl_core:gold_ingot'}, - {'mcl_core:gold_ingot', 'mcl_core:gold_ingot', ''}, + {"mcl_nether:netherite_scrap", "mcl_nether:netherite_scrap", "mcl_nether:netherite_scrap"}, + {"mcl_nether:netherite_scrap", "mcl_core:gold_ingot", "mcl_core:gold_ingot"}, + {"mcl_core:gold_ingot", "mcl_core:gold_ingot", ""}, } }) minetest.register_craft({ output = "mcl_nether:netheriteblock", recipe = { - {'mcl_nether:netherite_ingot', 'mcl_nether:netherite_ingot', 'mcl_nether:netherite_ingot'}, - {'mcl_nether:netherite_ingot', 'mcl_nether:netherite_ingot', 'mcl_nether:netherite_ingot'}, - {'mcl_nether:netherite_ingot', 'mcl_nether:netherite_ingot', 'mcl_nether:netherite_ingot'} + {"mcl_nether:netherite_ingot", "mcl_nether:netherite_ingot", "mcl_nether:netherite_ingot"}, + {"mcl_nether:netherite_ingot", "mcl_nether:netherite_ingot", "mcl_nether:netherite_ingot"}, + {"mcl_nether:netherite_ingot", "mcl_nether:netherite_ingot", "mcl_nether:netherite_ingot"} } }) minetest.register_craft({ output = "mcl_nether:netherite_ingot 9", recipe = { - {'mcl_nether:netheriteblock', '', ''}, - {'', '', ''}, - {'', '', ''} + {"mcl_nether:netheriteblock", "", ""}, + {"", "", ""}, + {"", "", ""} } }) -- 2.40.1 From 074f1df354be589eb0834343ef6b51eced98045c Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Wed, 29 Jun 2022 09:12:14 -0600 Subject: [PATCH 190/357] Added Formspec Image to Smithing Table and Fixed some whitespace issues. --- mods/ITEMS/mcl_smithing_table/init.lua | 47 +++++++++++++------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/mods/ITEMS/mcl_smithing_table/init.lua b/mods/ITEMS/mcl_smithing_table/init.lua index 81cf3a0c9..b7200d17d 100644 --- a/mods/ITEMS/mcl_smithing_table/init.lua +++ b/mods/ITEMS/mcl_smithing_table/init.lua @@ -37,22 +37,23 @@ end -- ToDo: Make better formspec local formspec = "size[9,9]" .. - "label[0,4.0;" .. minetest.formspec_escape(minetest.colorize(mcl_colors.DARK_GRAY, S("Inventory"))) .. "]" .. - "list[current_player;main;0,4.5;9,3;9]" .. - mcl_formspec.get_itemslot_bg(0,4.5,9,3) .. - "list[current_player;main;0,7.74;9,1;]" .. - mcl_formspec.get_itemslot_bg(0,7.74,9,1) .. - "list[context;diamond_item;1,2.5;1,1;]" .. - mcl_formspec.get_itemslot_bg(1,2.5,1,1) .. - "list[context;netherite;4,2.5;1,1;]" .. - mcl_formspec.get_itemslot_bg(4,2.5,1,1) .. - "list[context;upgraded_item;8,2.5;1,1;]" .. - mcl_formspec.get_itemslot_bg(8,2.5,1,1) .. - "label[3,0.1;" .. minetest.formspec_escape(minetest.colorize(mcl_colors.DARK_GRAY, S("Upgrade Gear"))) .. "]" .. - "listring[context;output]".. - "listring[current_player;main]".. - "listring[context;input]".. - "listring[current_player;main]" + "background[-0.19,-0.25;9.41,9.49;mcl_smithing_table_inventory.png]".. + "label[0,4.0;" .. minetest.formspec_escape(minetest.colorize(mcl_colors.DARK_GRAY, S("Inventory"))) .. "]" .. + "list[current_player;main;0,4.5;9,3;9]" .. + mcl_formspec.get_itemslot_bg(0,4.5,9,3) .. + "list[current_player;main;0,7.74;9,1;]" .. + mcl_formspec.get_itemslot_bg(0,7.74,9,1) .. + "list[context;diamond_item;1,2.5;1,1;]" .. + mcl_formspec.get_itemslot_bg(1,2.5,1,1) .. + "list[context;netherite;4,2.5;1,1;]" .. + mcl_formspec.get_itemslot_bg(4,2.5,1,1) .. + "list[context;upgraded_item;8,2.5;1,1;]" .. + mcl_formspec.get_itemslot_bg(8,2.5,1,1) .. + "label[3,0.1;" .. minetest.formspec_escape(minetest.colorize(mcl_colors.DARK_GRAY, S("Upgrade Gear"))) .. "]" .. + "listring[context;output]".. + "listring[current_player;main]".. + "listring[context;input]".. + "listring[current_player;main]" local function reset_upgraded_item(pos) local inv = minetest.get_meta(pos):get_inventory() @@ -80,15 +81,15 @@ minetest.register_node("mcl_smithing_table:table", { sounds = mcl_sounds.node_sound_metal_defaults(), on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", formspec) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", formspec) - local inv = meta:get_inventory() + local inv = meta:get_inventory() - inv:set_size("diamond_item", 1) - inv:set_size("netherite", 1) - inv:set_size("upgraded_item", 1) - end, + inv:set_size("diamond_item", 1) + inv:set_size("netherite", 1) + inv:set_size("upgraded_item", 1) + end, allow_metadata_inventory_put = function(pos, listname, index, stack, player) if listname == "diamond_item" and mcl_smithing_table.upgrade_item(stack) or listname == "netherite" and stack:get_name() == "mcl_nether:netherite_ingot" then -- 2.40.1 From 145d1839983898e94c47c966fb17a55e5bf6a8a4 Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Wed, 29 Jun 2022 09:23:47 -0600 Subject: [PATCH 191/357] Added Armor (Un)Eqip Sound Definitions --- mods/ITEMS/mcl_armor/register.lua | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_armor/register.lua b/mods/ITEMS/mcl_armor/register.lua index 425bf75f0..0f8ef6315 100644 --- a/mods/ITEMS/mcl_armor/register.lua +++ b/mods/ITEMS/mcl_armor/register.lua @@ -49,6 +49,8 @@ mcl_armor.register_set({ }, repair_material = "mcl_core:iron_ingot", cook_material = "mcl_core:iron_nugget", + sound_equip = "mcl_armor_equip_iron", + sound_unequip = "mcl_armor_unequip_iron", }) mcl_armor.register_set({ @@ -64,6 +66,8 @@ mcl_armor.register_set({ }, craft_material = "mcl_core:iron_ingot", cook_material = "mcl_core:iron_nugget", + sound_equip = "mcl_armor_equip_iron", + sound_unequip = "mcl_armor_unequip_iron", }) mcl_armor.register_set({ @@ -79,8 +83,10 @@ mcl_armor.register_set({ }, toughness = 2, craft_material = "mcl_core:diamond", + sound_equip = "mcl_armor_equip_diamond", + sound_unequip = "mcl_armor_unequip_diamond", _mcl_upgradable = true, - _mcl_upgrade_item_material = "_netherite" + _mcl_upgrade_item_material = "_netherite", }) mcl_armor.register_set({ @@ -96,6 +102,8 @@ mcl_armor.register_set({ }, toughness = 2, craft_material = "mcl_nether:netherite_ingot", + sound_equip = "mcl_armor_equip_diamond", + sound_unequip = "mcl_armor_unequip_diamond", }) mcl_armor.register_protection_enchantment({ -- 2.40.1 From c9dadc0bc791ecb5e2e436e00f4a0c9fe445ff48 Mon Sep 17 00:00:00 2001 From: cora Date: Wed, 29 Jun 2022 20:18:59 +0200 Subject: [PATCH 192/357] correct tile order in smithing table item def --- mods/ITEMS/mcl_smithing_table/init.lua | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/mods/ITEMS/mcl_smithing_table/init.lua b/mods/ITEMS/mcl_smithing_table/init.lua index b7200d17d..f32cb8c28 100644 --- a/mods/ITEMS/mcl_smithing_table/init.lua +++ b/mods/ITEMS/mcl_smithing_table/init.lua @@ -74,8 +74,12 @@ minetest.register_node("mcl_smithing_table:table", { groups = {pickaxey = 2, deco_block = 1}, tiles = { - "mcl_smithing_table_top.png", "mcl_smithing_table_front.png", "mcl_smithing_table_side.png", - "mcl_smithing_table_side.png", "mcl_smithing_table_side.png", "mcl_smithing_table_side.png" + "mcl_smithing_table_top.png", + "mcl_smithing_table_bottom.png", + "mcl_smithing_table_side.png", + "mcl_smithing_table_side.png", + "mcl_smithing_table_side.png", + "mcl_smithing_table_front.png", }, sounds = mcl_sounds.node_sound_metal_defaults(), -- 2.40.1 From be8692daab999a9d2a4581a1cca06560fa7558f7 Mon Sep 17 00:00:00 2001 From: cora Date: Wed, 29 Jun 2022 21:36:24 +0200 Subject: [PATCH 193/357] Add smithing table textures by @RandomLegoBrick --- .../textures/mcl_smithing_table_front.png | Bin 312 -> 541 bytes .../textures/mcl_smithing_table_side.png | Bin 315 -> 511 bytes .../textures/mcl_smithing_table_top.png | Bin 260 -> 505 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/mods/ITEMS/mcl_smithing_table/textures/mcl_smithing_table_front.png b/mods/ITEMS/mcl_smithing_table/textures/mcl_smithing_table_front.png index 55875ef5459ab6e0bc4ac530c51d8b97e044ff7b..15c0a943f0eb671aa9fc5ff7d7c9199fd0463460 100644 GIT binary patch delta 527 zcmV+q0`UE~0-Xeq8Gix*005AYXf^-<00DDSM?wIu&K&6g000DMK}|sb0I`n?{9y$E z000SaNLh0L01m?d01m?e$8V@)00059Nkl-RrYy@)YnrxI)dWix zOra|oRa3Aj^(STmXCMQZZQGa*^-7to)hje=43FODYe#9f+nAGEf(=p|C84Rx|1~MJ zG!8K*j^iSkA%7-_+_$*z`<~~4!!hc~-UccJi60@GO!0>pQ&Sy99(NQ_Lj(nx z@M^V+3|2{=#LzUgYttL`a{ThSZs@z)%Ukm^$bfzr^;$iKw_=S(1FjJI=)f)Rk)(1- zFW3mqF7ARLC?*{5J89A%uCUw7SQe)Vt=4yh&fS9-MSoH8N`$B9cOtjf_sf;af-^@y z@!XGZAH4--WIsOK0r9&XR0Qz8f?Og=C7l!L zb~5?{3QI!;(Cq|Qmp7JSz!D7v{#e3?)TjxvG{ovs4cFu1x>fY?O3h~T7jahBPMGrz Rp#T5?00>D%PDHLkV1hxW?SudT delta 296 zcmV+@0oVSW1h@i_8Gi-<001BJ|6u?C0RKruK~y-)g_6w5PiIA5%jkM$sDUtTM*AVM+d zbO*-ed*~ARL4|p-68(7{LeXeO4@5v7|8^ck%3j-W8g^>obAKe3T7dXOhLsoOViem9 zAouAg9?$o98TXTg1H{C!aC{SBP`qH?DpG>Cx$pUh0EB0vj(wb$_H?!5+asiVvWRRsS1y?WP|+7MBZz^_Hh ucfy7!0pD{Db|C}!n6;qY&U^j`)x7|54TEzt+|#uH0000D5EF}R@kIkt(N3tbY171OOk}oSP4zj!Z5_KRf1#~hA4_~tE#$d zs+{>vgKKg~tHD`WS$T}(3~YdPIvrGpyH#QBtvZ!jV=$V0%w@-MP$zB)ZID|pa#fN4 zMv1F|H$xrI^MB%IfX)jf!1ev>ngB5PzK^?!bo~sNPWQJ-L*&m8X@xvok=8^8io^%9 zBF@6ax(Wjb1Vokuuwgu`+wDT((&r}@eE^lBmZ}_AH$B_7CDSx9rOV^Jz>l(+EtVk* zy}+lKe!Ix@`XkqM)AuLdhU1CtKK93F2Q6&xp5Bjk8fo=1haOGs#3G3F7d<@p;f82! z8d&il2-;?vh+ATenI*YVt>BH2YHpNodxMwZC&pS-(-yvF^XZbIrGLg+)e9GgZ3IM` m%JF-EMwtyX8!km^5`-TppUfH??}F0+0000uGX2v7%kXy%I}rA zzy!sh*B@!l*up~?2NwEbZnW!lgrwDu7Kji(@Arbhg?!L$1b;=v0+Q>vr+go|jJ^nP z4{EdrNXm2)pRaek6s3Z$-=;%Z11MyS(?tM{lIC?1EwUr#>!=7o9r0|w5%^Trn(qPD z#exd_)j!2nW9!=j0r^N2uwKzb#@;(o0bE0_WBftDd-mW^6+mMB@fkh#DYc1EVGjsS xum%1PP(YeU0VH~}y|7^3uBinC{0B{7-4DS{eZcYrLg4@a002ovPDHLkV1nc@iAn$f diff --git a/mods/ITEMS/mcl_smithing_table/textures/mcl_smithing_table_top.png b/mods/ITEMS/mcl_smithing_table/textures/mcl_smithing_table_top.png index 7099674fab65c127fec680e26f4dc6595d4837c3..2ec0468c782a7852d94a79ddcd2a27d8d4c046a6 100644 GIT binary patch delta 490 zcmV7E~JHNs&AX*Co7Yze7v7My{y$JiUxxL$z0bx zy8d7o#!)Fsk|c0l*BU?1(s8rwc^*Tl1g1zp86XG(-?b1DV8RTtEW>A-rfu5@(O3}} z#zRZjb**Wd+kfduQVQ}s-)^^90mC?sSp^&q)@VY1N|rH+27RN11#L;R0v0!>ZoVDL zK>_m=EV>P_j5ezj(3^TN@B2Q2LTF4Ia0-@z2x&A~(lqU6+CnsGwlF41CZJb+Ff2#a z!!YDmR1G&z19rQe9FY#vWoB@ryMXE|&D)Yb)8i}Z^J4)C6D|8Ec?qkF#e%Cq{eK## z;BsJkrB5akUe)_1u?= gr;tnF#jJ)Bpeg delta 243 zcmVlRp@AKMYm*=#6q}zQCd2W8aS9wf1R&w%qc~ok}JPv>Z=iwS6 zWVb)8V$6`JfXP`()@~WD++vyn$I}pt+*j-J39XJmfEKE?2yEmyD)1ecs&WZv!MXrL zT8VD6-G%4t?M$gc+FIzquSDLBE7<^O+rN8=Bk+OHo?bF5h&$*Vp=V(Q;8XUqZS9yX t3>#H${wRXv|G`Z*0Df8a>9@h0lfK7$x>k*O8_NIy002ovPDHLkV1jtYa*qH2 -- 2.40.1 From c1bd8f42041097732d8044e262a99fd95972bda3 Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 30 Jun 2022 21:48:29 +0200 Subject: [PATCH 194/357] smithing table bottom texture by @RandomLegoBrick --- .../textures/mcl_smithing_table_bottom.png | Bin 206 -> 479 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/mods/ITEMS/mcl_smithing_table/textures/mcl_smithing_table_bottom.png b/mods/ITEMS/mcl_smithing_table/textures/mcl_smithing_table_bottom.png index 59833b5ea20686a3eae16a005d9abec43bcd9022..66a1a9a7ac9712282f2b5f88ab4187fb608c5cf7 100644 GIT binary patch delta 464 zcmV;>0Wbc}0pA0V8Gix*005AYXf^-<00DDSM?wIu&K&6g000DMK}|sb0I`n?{9y$E z000SaNLh0L01m?d01m?e$8V@)0004WNkleCXW(_zJ6?{$p|!0G0=)1uODu$VQ@Y7g`>#HSxb&# zW!0|6#my7i;D5{K^Y6VeBCi8t(8S|x`5z*Np$@AL$O#Qz;Cf`GkXEX5CJld2K= z+zD8J4*%q^Xe-`nXAz>>LdqpKEi+CzY0?pXyOolx!T-v3f+4JE$mn}wP${ZJPLekU z+gg%{U#J|!x^K3{076{~FS%(XeE>(>n|{#qiUpk&m`Ujaokl0ybbi^%NpUqF%@eu2 zZOX}v9P4WE+6u1(*R8g#oDspm>3tK&03JtX`mNG&aK2q8NZL*&>T0XE3k< r=$Q#$211s{$c-=)@nvabHcTG?9=UTYvX1QD00000NkvXXu0mjf*Of}7 -- 2.40.1 From 69dac8ded478d2ca29666fd603f4d8b1ea5810d1 Mon Sep 17 00:00:00 2001 From: cora Date: Wed, 22 Jun 2022 13:14:53 +0200 Subject: [PATCH 195/357] fix surface pools y offset --- mods/MAPGEN/mcl_terrain_features/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/MAPGEN/mcl_terrain_features/init.lua b/mods/MAPGEN/mcl_terrain_features/init.lua index 4375e869d..f1388a42f 100644 --- a/mods/MAPGEN/mcl_terrain_features/init.lua +++ b/mods/MAPGEN/mcl_terrain_features/init.lua @@ -38,7 +38,7 @@ local function makelake(pos,size,liquid,placein,border,pr) return vector.distance(vector.new(pos.x,0,pos.z), a) < vector.distance(vector.new(pos.x,0,pos.z), b) end) if not nn[1] then return end - local y = pos.y + 1 + local y = pos.y - 1 local lq = {} for i=1,pr:next(1,#nn) do if nn[i].y == y then -- 2.40.1 From eb8db0dc0bef45b92808062f295ae71a29a16c75 Mon Sep 17 00:00:00 2001 From: cora Date: Wed, 22 Jun 2022 13:31:43 +0200 Subject: [PATCH 196/357] optimize terrain features --- mods/MAPGEN/mcl_terrain_features/init.lua | 39 +++++++++++++++-------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/mods/MAPGEN/mcl_terrain_features/init.lua b/mods/MAPGEN/mcl_terrain_features/init.lua index f1388a42f..34f29e38d 100644 --- a/mods/MAPGEN/mcl_terrain_features/init.lua +++ b/mods/MAPGEN/mcl_terrain_features/init.lua @@ -23,9 +23,9 @@ local function set_node_no_bedrock(pos,node) return minetest.set_node(pos,node) end -local function airtower(pos) - for i=0,55 do - set_node_no_bedrock(vector.offset(pos,0,i,0),{name="air"}) +local function airtower(pos,tbl,h) + for i=0,h do + table.insert(tbl,vector.offset(pos,0,i,0)) end end @@ -40,14 +40,16 @@ local function makelake(pos,size,liquid,placein,border,pr) if not nn[1] then return end local y = pos.y - 1 local lq = {} + local air = {} for i=1,pr:next(1,#nn) do if nn[i].y == y then - set_node_no_bedrock(nn[i],{name=liquid}) - airtower(vector.offset(nn[i],0,1,0)) + airtower(vector.offset(nn[i],0,1,0),air,55) table.insert(lq,nn[i]) end end - + minetest.bulk_set_node(lq,{name=liquid}) + local air = {} + local br = {} for k,v in pairs(lq) do for kk,vv in pairs(adjacents) do local pp = vector.add(v,vv) @@ -64,13 +66,15 @@ local function makelake(pos,size,liquid,placein,border,pr) if border == "mcl_core:dirt" then border = "mcl_core:dirt_with_grass" end end if an.name ~= liquid then - set_node_no_bedrock(pp,{name=border}) + table.insert(br,pp) if un.name ~= liquid then - airtower(vector.offset(pp,0,1,0)) + airtower(vector.offset(pp,0,1,0),air,55) end end end end + minetest.bulk_set_node(air,{name="air"}) + minetest.bulk_set_node(br,{name=border}) return true end @@ -136,14 +140,16 @@ mcl_structures.register_structure("basalt_column",{ return vector.distance(vector.new(pos.x,0,pos.z), a) < vector.distance(vector.new(pos.x,0,pos.z), b) end) if #nn < 1 then return false end + local basalt = {} for i=1,pr:next(1,#nn) do if minetest.get_node(vector.offset(nn[i],0,-1,0)).name ~= "air" then local dst=vector.distance(pos,nn[i]) for ii=0,pr:next(2,14)-dst do - set_node_no_bedrock(vector.new(nn[i].x,nn[i].y + ii,nn[i].z),{name="mcl_blackstone:basalt"}) + table.insert(basalt,vector.new(nn[i].x,nn[i].y + ii,nn[i].z)) end end end + minetest.bulk_set_node(basalt,{name="mcl_blackstone:basalt"}) return true end }) @@ -168,14 +174,16 @@ mcl_structures.register_structure("basalt_pillar",{ return vector.distance(vector.new(pos.x,0,pos.z), a) < vector.distance(vector.new(pos.x,0,pos.z), b) end) if #nn < 1 then return false end + local basalt = {} for i=1,pr:next(1,#nn) do if minetest.get_node(vector.offset(nn[i],0,-1,0)).name ~= "air" then local dst=vector.distance(pos,nn[i]) for ii=0,pr:next(19,34)-dst do - set_node_no_bedrock(vector.new(nn[i].x,nn[i].y + ii,nn[i].z),{name="mcl_blackstone:basalt"}) + table.insert(basalt,vector.new(nn[i].x,nn[i].y + ii,nn[i].z)) end end end + minetest.bulk_set_node(basalt,{name="mcl_blackstone:basalt"}) return true end }) @@ -205,20 +213,25 @@ mcl_structures.register_structure("lavadelta",{ if #nn < 1 then return false end local lava = {} for i=1,pr:next(1,#nn) do - set_node_no_bedrock(nn[i],{name="mcl_nether:nether_lava_source"}) table.insert(lava,nn[i]) end + minetest.bulk_set_node(lava,{name="mcl_nether:nether_lava_source"}) + local basalt = {} + local magma = {} for _,v in pairs(lava) do for _,vv in pairs(adjacents) do local p = vector.add(v,vv) if minetest.get_node(p).name ~= "mcl_nether:nether_lava_source" then - set_node_no_bedrock(p,{name="mcl_blackstone:basalt"}) + table.insert(basalt,p) + end end if math.random(3) == 1 then - set_node_no_bedrock(v,{name="mcl_nether:magma"}) + table.insert(magma,v) end end + minetest.bulk_set_node(basalt,{name="mcl_blackstone:basalt"}) + minetest.bulk_set_node(magma,{name="mcl_nether:magma"}) return true end }) -- 2.40.1 From fed81932e258c6e95f94f0ad8c0d4a2d3fd10a80 Mon Sep 17 00:00:00 2001 From: cora Date: Wed, 22 Jun 2022 15:56:51 +0200 Subject: [PATCH 197/357] structs: use mcl_register_generator, cave decos --- mods/MAPGEN/mcl_biomes/init.lua | 23 +++++ mods/MAPGEN/mcl_mapgen_core/init.lua | 136 +++++++++++++++------------ mods/MAPGEN/mcl_structures/api.lua | 13 +-- 3 files changed, 99 insertions(+), 73 deletions(-) diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index 023cd3de9..f2fb33184 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -3356,6 +3356,29 @@ local function register_decorations() rotation = "0", }) + --Mushrooms in caves + minetest.register_decoration({ + deco_type = "simple", + place_on = {"group:material_stone"}, + sidelen = 80, + fill_ratio = 0.009, + noise_threshold = 2.0, + flags = "all_floors", + y_min = mcl_vars.mg_overworld_min, + y_max = mcl_vars.mg_overworld_max, + decoration = "mcl_mushrooms:mushroom_red", + }) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"group:material_stone"}, + sidelen = 80, + fill_ratio = 0.009, + noise_threshold = 2.0, + y_min = mcl_vars.mg_overworld_min, + y_max = mcl_vars.mg_overworld_max, + decoration = "mcl_mushrooms:mushroom_brown", + }) + -- Mossy cobblestone boulder (3×3) minetest.register_decoration({ deco_type = "schematic", diff --git a/mods/MAPGEN/mcl_mapgen_core/init.lua b/mods/MAPGEN/mcl_mapgen_core/init.lua index 2bbcab1cf..a5a6d7a52 100644 --- a/mods/MAPGEN/mcl_mapgen_core/init.lua +++ b/mods/MAPGEN/mcl_mapgen_core/init.lua @@ -1720,7 +1720,7 @@ local function generate_tree_decorations(minp, maxp, seed, data, param2_data, ar end -- Generate mushrooms in caves manually. --- Minetest's API does not support decorations in caves yet. :-( +-- only v6. minetest supports cave decos via "all_floors" flag now local function generate_underground_mushrooms(minp, maxp, seed) local pr_shroom = PseudoRandom(seed-24359) -- Generate rare underground mushrooms @@ -1756,67 +1756,65 @@ end -- Generate Nether decorations manually: Eternal fire, mushrooms, nether wart -- (only v6) local function generate_nether_decorations(minp, maxp, seed) - if mg_name == "v6" then - local pr_nether = PseudoRandom(seed+667) + local pr_nether = PseudoRandom(seed+667) - if minp.y > mcl_vars.mg_nether_max or maxp.y < mcl_vars.mg_nether_min then - return - end - - minetest.log("action", "[mcl_mapgen_core] Nether decorations " .. minetest.pos_to_string(minp) .. " ... " .. minetest.pos_to_string(maxp)) - - -- TODO: Generate everything based on Perlin noise instead of PseudoRandom - - local bpos - local rack = minetest.find_nodes_in_area_under_air(minp, maxp, {"mcl_nether:netherrack"}) - local magma = minetest.find_nodes_in_area_under_air(minp, maxp, {"mcl_nether:magma"}) - local ssand = minetest.find_nodes_in_area_under_air(minp, maxp, {"mcl_nether:soul_sand"}) - - -- Helper function to spawn “fake” decoration - local function special_deco(nodes, spawn_func) - for n = 1, #nodes do - bpos = {x = nodes[n].x, y = nodes[n].y + 1, z = nodes[n].z } - - spawn_func(bpos) - end - end - -- Eternal fire on netherrack - special_deco(rack, function(bpos) - -- Eternal fire on netherrack - if pr_nether:next(1,100) <= 3 then - minetest.set_node(bpos, {name = "mcl_fire:eternal_fire"}) - end - end) - - -- Eternal fire on magma cubes - special_deco(magma, function(bpos) - if pr_nether:next(1,150) == 1 then - minetest.set_node(bpos, {name = "mcl_fire:eternal_fire"}) - end - end) - - -- Mushrooms on netherrack - -- Note: Spawned *after* the fire because of light level checks - special_deco(rack, function(bpos) - local l = minetest.get_node_light(bpos, 0.5) - if bpos.y > mcl_vars.mg_lava_nether_max + 6 and l and l <= 12 and pr_nether:next(1,1000) <= 4 then - -- TODO: Make mushrooms appear in groups, use Perlin noise - if pr_nether:next(1,2) == 1 then - minetest.set_node(bpos, {name = "mcl_mushrooms:mushroom_brown"}) - else - minetest.set_node(bpos, {name = "mcl_mushrooms:mushroom_red"}) - end - end - end) - - -- Nether wart on soul sand - -- TODO: Spawn in Nether fortresses - special_deco(ssand, function(bpos) - if pr_nether:next(1, nether_wart_chance) == 1 then - minetest.set_node(bpos, {name = "mcl_nether:nether_wart"}) - end - end) + if minp.y > mcl_vars.mg_nether_max or maxp.y < mcl_vars.mg_nether_min then + return end + + minetest.log("action", "[mcl_mapgen_core] Nether decorations " .. minetest.pos_to_string(minp) .. " ... " .. minetest.pos_to_string(maxp)) + + -- TODO: Generate everything based on Perlin noise instead of PseudoRandom + + local bpos + local rack = minetest.find_nodes_in_area_under_air(minp, maxp, {"mcl_nether:netherrack"}) + local magma = minetest.find_nodes_in_area_under_air(minp, maxp, {"mcl_nether:magma"}) + local ssand = minetest.find_nodes_in_area_under_air(minp, maxp, {"mcl_nether:soul_sand"}) + + -- Helper function to spawn “fake” decoration + local function special_deco(nodes, spawn_func) + for n = 1, #nodes do + bpos = {x = nodes[n].x, y = nodes[n].y + 1, z = nodes[n].z } + + spawn_func(bpos) + end + end + -- Eternal fire on netherrack + special_deco(rack, function(bpos) + -- Eternal fire on netherrack + if pr_nether:next(1,100) <= 3 then + minetest.set_node(bpos, {name = "mcl_fire:eternal_fire"}) + end + end) + + -- Eternal fire on magma cubes + special_deco(magma, function(bpos) + if pr_nether:next(1,150) == 1 then + minetest.set_node(bpos, {name = "mcl_fire:eternal_fire"}) + end + end) + + -- Mushrooms on netherrack + -- Note: Spawned *after* the fire because of light level checks + special_deco(rack, function(bpos) + local l = minetest.get_node_light(bpos, 0.5) + if bpos.y > mcl_vars.mg_lava_nether_max + 6 and l and l <= 12 and pr_nether:next(1,1000) <= 4 then + -- TODO: Make mushrooms appear in groups, use Perlin noise + if pr_nether:next(1,2) == 1 then + minetest.set_node(bpos, {name = "mcl_mushrooms:mushroom_brown"}) + else + minetest.set_node(bpos, {name = "mcl_mushrooms:mushroom_red"}) + end + end + end) + + -- Nether wart on soul sand + -- TODO: Spawn in Nether fortresses + special_deco(ssand, function(bpos) + if pr_nether:next(1, nether_wart_chance) == 1 then + minetest.set_node(bpos, {name = "mcl_nether:nether_wart"}) + end + end) end minetest.register_on_generated(function(minp, maxp, blockseed) @@ -2200,10 +2198,24 @@ end local function basic_node(minp, maxp, blockseed) if mg_name ~= "singlenode" then -- Generate special decorations - generate_underground_mushrooms(minp, maxp, blockseed) - generate_nether_decorations(minp, maxp, blockseed) + if mg_name == "v6" then + generate_underground_mushrooms(minp, maxp, blockseed) + generate_nether_decorations(minp, maxp, blockseed) + end generate_structures(minp, maxp, blockseed, minetest.get_mapgen_object("biomemap")) end end mcl_mapgen_core.register_generator("main", basic, basic_node, 1, true) + +mcl_mapgen_core.register_generator("structures",nil, function(minp, maxp, blockseed) + local gennotify = minetest.get_mapgen_object("gennotify") + local pr = PseudoRandom(blockseed + 42) + for _,struct in pairs(mcl_structures.registered_structures) do + for _, pos in pairs(gennotify["decoration#"..struct.deco_id] or {}) do + local realpos = vector.offset(pos,0,-1,0) + minetest.remove_node(realpos) + mcl_structures.place_structure(realpos,struct,pr) + end + end +end, 100, true) diff --git a/mods/MAPGEN/mcl_structures/api.lua b/mods/MAPGEN/mcl_structures/api.lua index 3a3a84b92..ed589e75c 100644 --- a/mods/MAPGEN/mcl_structures/api.lua +++ b/mods/MAPGEN/mcl_structures/api.lua @@ -53,17 +53,8 @@ function mcl_structures.register_structure(name,def,nospawn) --nospawn means it y_max = def.y_max, y_min = def.y_min }) - local deco_id = minetest.get_decoration_id("mcl_structures:deco_"..name) - minetest.set_gen_notify({decoration=true}, { deco_id }) - minetest.register_on_generated(function(minp, maxp, blockseed) - local gennotify = minetest.get_mapgen_object("gennotify") - local pr = PseudoRandom(blockseed + 42) - for _, pos in pairs(gennotify["decoration#"..deco_id] or {}) do - local realpos = vector.offset(pos,0,-1,0) - minetest.remove_node(realpos) - mcl_structures.place_structure(realpos,def,pr) - end - end) + def.deco_id = minetest.get_decoration_id("mcl_structures:deco_"..name) + minetest.set_gen_notify({decoration=true}, { def.deco_id }) end minetest.register_node(":"..structblock, {drawtype="airlike", walkable = false, pointable = false,groups = sbgroups}) def.structblock = structblock -- 2.40.1 From 8e976d919196fd10f6cf394bf72ecf302ad33876 Mon Sep 17 00:00:00 2001 From: cora Date: Wed, 22 Jun 2022 16:37:44 +0200 Subject: [PATCH 198/357] Do not log generation of terrain features this leads to excessive io otherwise --- mods/MAPGEN/mcl_structures/api.lua | 17 +++++++++++++---- mods/MAPGEN/mcl_terrain_features/init.lua | 5 +++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/mods/MAPGEN/mcl_structures/api.lua b/mods/MAPGEN/mcl_structures/api.lua index ed589e75c..5bcee086a 100644 --- a/mods/MAPGEN/mcl_structures/api.lua +++ b/mods/MAPGEN/mcl_structures/api.lua @@ -2,6 +2,7 @@ mcl_structures.registered_structures = {} function mcl_structures.place_structure(pos, def, pr) if not def then return end + local logging = not def.terrain_feature local y_offset = 0 if type(def.y_offset) == "function" then y_offset = def.y_offset(pr) @@ -9,22 +10,30 @@ function mcl_structures.place_structure(pos, def, pr) y_offset = def.y_offset end if def.on_place and not def.on_place(pos,def,pr) then - minetest.log("warning","[mcl_structures] "..def.name.." at "..minetest.pos_to_string(pos).." not placed. Conditions not satisfied.") + if logging then + minetest.log("warning","[mcl_structures] "..def.name.." at "..minetest.pos_to_string(pos).." not placed. Conditions not satisfied.") + end return false end if def.filenames then local file = def.filenames[pr:next(1,#def.filenames)] local pp = vector.offset(pos,0,y_offset,0) mcl_structures.place_schematic(pp, file, "random", nil, true, "place_center_x,place_center_z",def.after_place,pr,{pos,def}) - minetest.log("action","[mcl_structures] "..def.name.." placed at "..minetest.pos_to_string(pos)) + if logging then + minetest.log("action","[mcl_structures] "..def.name.." placed at "..minetest.pos_to_string(pos)) + end return true elseif def.place_func and def.place_func(pos,def,pr) then if not def.after_place or ( def.after_place and def.after_place(pos,def,pr) ) then - minetest.log("action","[mcl_structures] "..def.name.." placed at "..minetest.pos_to_string(pos)) + if logging then + minetest.log("action","[mcl_structures] "..def.name.." placed at "..minetest.pos_to_string(pos)) + end return true end end - minetest.log("warning","[mcl_structures] placing "..def.name.." failed at "..minetest.pos_to_string(pos)) + if logging then + minetest.log("warning","[mcl_structures] placing "..def.name.." failed at "..minetest.pos_to_string(pos)) + end end function mcl_structures.register_structure(name,def,nospawn) --nospawn means it will be placed by another (non-nospawn) structure that contains it's structblock i.e. it will not be placed by mapgen directly diff --git a/mods/MAPGEN/mcl_terrain_features/init.lua b/mods/MAPGEN/mcl_terrain_features/init.lua index 34f29e38d..60555f0ff 100644 --- a/mods/MAPGEN/mcl_terrain_features/init.lua +++ b/mods/MAPGEN/mcl_terrain_features/init.lua @@ -80,6 +80,7 @@ end mcl_structures.register_structure("lavapool",{ place_on = {"group:sand", "group:dirt", "group:stone"}, + terrain_feature = true, noise_params = { offset = 0, scale = 0.0000022, @@ -99,6 +100,7 @@ mcl_structures.register_structure("lavapool",{ mcl_structures.register_structure("water_lake",{ place_on = {"group:dirt","group:stone"}, + terrain_feature = true, noise_params = { offset = 0, scale = 0.000032, @@ -119,6 +121,7 @@ mcl_structures.register_structure("water_lake",{ mcl_structures.register_structure("basalt_column",{ place_on = {"mcl_blackstone:blackstone","mcl_blackstone:basalt"}, + terrain_feature = true, spawn_by = {"air"}, num_spawn_by = 2, noise_params = { @@ -155,6 +158,7 @@ mcl_structures.register_structure("basalt_column",{ }) mcl_structures.register_structure("basalt_pillar",{ place_on = {"mcl_blackstone:blackstone","mcl_blackstone:basalt"}, + terrain_feature = true, noise_params = { offset = 0, scale = 0.001, @@ -192,6 +196,7 @@ mcl_structures.register_structure("lavadelta",{ place_on = {"mcl_blackstone:blackstone","mcl_blackstone:basalt"}, spawn_by = {"mcl_blackstone:basalt","mcl_blackstone:blackstone"}, num_spawn_by = 2, + terrain_feature = true, noise_params = { offset = 0, scale = 0.01, -- 2.40.1 From 0b3a4c18d713faefaedd3d54d14e65448c9232f8 Mon Sep 17 00:00:00 2001 From: cora Date: Wed, 22 Jun 2022 16:47:43 +0200 Subject: [PATCH 199/357] structure-api: add check for solid ground --- mods/MAPGEN/mcl_nether_fortresses/init.lua | 12 ++---------- mods/MAPGEN/mcl_structures/api.lua | 13 +++++++++++++ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/mods/MAPGEN/mcl_nether_fortresses/init.lua b/mods/MAPGEN/mcl_nether_fortresses/init.lua index 8910669cd..a82d3f4c7 100644 --- a/mods/MAPGEN/mcl_nether_fortresses/init.lua +++ b/mods/MAPGEN/mcl_nether_fortresses/init.lua @@ -14,16 +14,8 @@ mcl_structures.register_structure("nether_outpost",{ }, flags = "all_floors", biomes = {"Nether","SoulsandValley","WarpedForest","CrimsonForest","BasaltDelta"}, - on_place = function(pos,def,pr) - local sidelen = 15 - local node = minetest.get_node(vector.offset(pos,1,1,0)) - local solid = minetest.find_nodes_in_area(vector.offset(pos,-sidelen/2,-1,-sidelen/2),vector.offset(pos,sidelen/2,-1,sidelen/2),{"group:solid"}) - local air = minetest.find_nodes_in_area(vector.offset(pos,-sidelen/2,1,-sidelen/2),vector.offset(pos,sidelen/2,4,sidelen/2),{"air"}) - if #solid < ( sidelen * sidelen ) or - #air < (sidelen * sidelen ) then return false end - minetest.bulk_set_node(solid,node) - return true - end, + sidelen = 15, + solid_ground = true, y_min = mcl_vars.mg_lava_nether_max, y_max = mcl_vars.mg_nether_max - 30, filenames = { modpath.."/schematics/nether_outpost.mts" }, diff --git a/mods/MAPGEN/mcl_structures/api.lua b/mods/MAPGEN/mcl_structures/api.lua index 5bcee086a..5153e85f9 100644 --- a/mods/MAPGEN/mcl_structures/api.lua +++ b/mods/MAPGEN/mcl_structures/api.lua @@ -9,6 +9,19 @@ function mcl_structures.place_structure(pos, def, pr) elseif def.y_offset then y_offset = def.y_offset end + if def.solid_ground and def.sidelen then + local node = minetest.get_node(vector.offset(pos,1,1,0)) + local solid = minetest.find_nodes_in_area(vector.offset(pos,-def.sidelen/2,-1,-def.sidelen/2),vector.offset(pos,def.sidelen/2,-1,def.sidelen/2),{"group:solid"}) + local air = minetest.find_nodes_in_area(vector.offset(pos,-def.sidelen/2,1,-def.sidelen/2),vector.offset(pos,def.sidelen/2,4,def.sidelen/2),{"air"}) + if #solid < ( def.sidelen * def.sidelen ) or + #air < (def.sidelen * def.sidelen ) then + if logging then + minetest.log("warning","[mcl_structures] "..def.name.." at "..minetest.pos_to_string(pos).." not placed. No solid ground.") + end + return false + end + --minetest.bulk_set_node(solid,node) + end if def.on_place and not def.on_place(pos,def,pr) then if logging then minetest.log("warning","[mcl_structures] "..def.name.." at "..minetest.pos_to_string(pos).." not placed. Conditions not satisfied.") -- 2.40.1 From d8697cb59cae2d2803efd6f6e8cbab9bddeed53b Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 23 Jun 2022 01:42:20 +0200 Subject: [PATCH 200/357] Tweak basalt delta code --- mods/MAPGEN/mcl_biomes/init.lua | 66 ++++++++++++++++++++++ mods/MAPGEN/mcl_nether_fortresses/init.lua | 2 +- mods/MAPGEN/mcl_terrain_features/init.lua | 40 +++++++++---- 3 files changed, 97 insertions(+), 11 deletions(-) diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index f2fb33184..f538d97aa 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -4574,6 +4574,72 @@ local function register_dimension_decorations() size = {x = 5, y = 8, z = 5}, rotation = "random", }) + --BASALT DELTA + minetest.register_decoration({ + deco_type = "simple", + decoration = "mcl_blackstone:basalt", + place_on = {"mcl_blackstone:basalt","mcl_nether:netherrack","mcl_blackstone:blackstone"}, + sidelen = 80, + height_max = 55, + noise_params={ + offset = -0.0085, + scale = 0.002, + spread = {x = 25, y = 120, z = 25}, + seed = 2325, + octaves = 5, + persist = 2, + lacunarity = 3.5, + flags = "absvalue" + }, + biomes = {"BasaltDelta"}, + y_min = mcl_vars.mg_lava_nether_max + 1, + flags = "all_floors, all ceilings", + }) + minetest.register_decoration({ + deco_type = "simple", + decoration = "mcl_blackstone:basalt", + place_on = {"mcl_blackstone:basalt","mcl_nether:netherrack","mcl_blackstone:blackstone"}, + sidelen = 80, + height_max = 15, + noise_params={ + offset = -0.0085, + scale = 0.004, + spread = {x = 25, y = 120, z = 25}, + seed = 235, + octaves = 5, + persist = 2.5, + lacunarity = 3.5, + flags = "absvalue" + }, + biomes = {"BasaltDelta"}, + y_min = mcl_vars.mg_lava_nether_max + 1, + flags = "all_floors, all ceilings", + }) + minetest.register_decoration({ + deco_type = "simple", + decoration = "mcl_nether:magma", + place_on = {"mcl_blackstone:basalt","mcl_nether:netherrack","mcl_blackstone:blackstone"}, + sidelen = 80, + fill_ratio = 0.082323, + biomes = {"BasaltDelta"}, + place_offset_y = -1, + y_min = mcl_vars.mg_lava_nether_max + 1, + flags = "all_floors, all ceilings", + }) + minetest.register_decoration({ + deco_type = "simple", + decoration = "mcl_nether:nether_lava_source", + place_on = {"mcl_blackstone:basalt","mcl_nether:netherrack","mcl_blackstone:blackstone"}, + spawn_by = {"mcl_blackstone:basalt","mcl_blackstone:blackstone"}, + num_spawn_by = 14, + sidelen = 80, + fill_ratio = 4, + biomes = {"BasaltDelta"}, + place_offset_y = -1, + y_min = mcl_vars.mg_lava_nether_max + 1, + y_max = mcl_vars.mg_nether_max - 5, + flags = "all_floors, force_placement", + }) --[[ THE END ]] diff --git a/mods/MAPGEN/mcl_nether_fortresses/init.lua b/mods/MAPGEN/mcl_nether_fortresses/init.lua index a82d3f4c7..16fd11fb1 100644 --- a/mods/MAPGEN/mcl_nether_fortresses/init.lua +++ b/mods/MAPGEN/mcl_nether_fortresses/init.lua @@ -16,7 +16,7 @@ mcl_structures.register_structure("nether_outpost",{ biomes = {"Nether","SoulsandValley","WarpedForest","CrimsonForest","BasaltDelta"}, sidelen = 15, solid_ground = true, - y_min = mcl_vars.mg_lava_nether_max, + y_min = mcl_vars.mg_lava_nether_max - 1, y_max = mcl_vars.mg_nether_max - 30, filenames = { modpath.."/schematics/nether_outpost.mts" }, y_offset = 0, diff --git a/mods/MAPGEN/mcl_terrain_features/init.lua b/mods/MAPGEN/mcl_terrain_features/init.lua index 60555f0ff..623e518b3 100644 --- a/mods/MAPGEN/mcl_terrain_features/init.lua +++ b/mods/MAPGEN/mcl_terrain_features/init.lua @@ -118,6 +118,13 @@ mcl_structures.register_structure("water_lake",{ end }) +local pool_adjacents = { + vector.new(1,0,0), + vector.new(-1,0,0), + vector.new(0,-1,0), + vector.new(0,0,1), + vector.new(0,0,-1), +} mcl_structures.register_structure("basalt_column",{ place_on = {"mcl_blackstone:blackstone","mcl_blackstone:basalt"}, @@ -126,15 +133,15 @@ mcl_structures.register_structure("basalt_column",{ num_spawn_by = 2, noise_params = { offset = 0, - scale = 0.02, + scale = 0.003, spread = {x = 250, y = 250, z = 250}, - seed = 7225213, + seed = 72235213, octaves = 5, - persist = 0.1, + persist = 0.3, flags = "absvalue", }, flags = "all_floors", - y_max = mcl_vars.mg_nether_max, + y_max = mcl_vars.mg_nether_max - 20, y_min = mcl_vars.mg_lava_nether_max + 1, biomes = { "BasaltDelta" }, place_func = function(pos,def,pr) @@ -144,14 +151,21 @@ mcl_structures.register_structure("basalt_column",{ end) if #nn < 1 then return false end local basalt = {} + local magma = {} for i=1,pr:next(1,#nn) do if minetest.get_node(vector.offset(nn[i],0,-1,0)).name ~= "air" then local dst=vector.distance(pos,nn[i]) - for ii=0,pr:next(2,14)-dst do - table.insert(basalt,vector.new(nn[i].x,nn[i].y + ii,nn[i].z)) + local r = pr:next(1,14)-dst + for ii=0,r do + if pr:next(1,25) == 1 then + table.insert(magma,vector.new(nn[i].x,nn[i].y + ii,nn[i].z)) + else + table.insert(basalt,vector.new(nn[i].x,nn[i].y + ii,nn[i].z)) + end end end end + minetest.bulk_set_node(magma,{name="mcl_nether:magma"}) minetest.bulk_set_node(basalt,{name="mcl_blackstone:basalt"}) return true end @@ -163,13 +177,13 @@ mcl_structures.register_structure("basalt_pillar",{ offset = 0, scale = 0.001, spread = {x = 250, y = 250, z = 250}, - seed = 783213, + seed = 7113, octaves = 5, persist = 0.1, flags = "absvalue", }, flags = "all_floors", - y_max = mcl_vars.mg_nether_max, + y_max = mcl_vars.mg_nether_max-40, y_min = mcl_vars.mg_lava_nether_max + 1, biomes = { "BasaltDelta" }, place_func = function(pos,def,pr) @@ -179,15 +193,21 @@ mcl_structures.register_structure("basalt_pillar",{ end) if #nn < 1 then return false end local basalt = {} + local magma = {} for i=1,pr:next(1,#nn) do if minetest.get_node(vector.offset(nn[i],0,-1,0)).name ~= "air" then local dst=vector.distance(pos,nn[i]) - for ii=0,pr:next(19,34)-dst do - table.insert(basalt,vector.new(nn[i].x,nn[i].y + ii,nn[i].z)) + for ii=0,pr:next(19,35)-dst do + if pr:next(1,20) == 1 then + table.insert(magma,vector.new(nn[i].x,nn[i].y + ii,nn[i].z)) + else + table.insert(basalt,vector.new(nn[i].x,nn[i].y + ii,nn[i].z)) + end end end end minetest.bulk_set_node(basalt,{name="mcl_blackstone:basalt"}) + minetest.bulk_set_node(magma,{name="mcl_nether:magma"}) return true end }) -- 2.40.1 From e37358d220efaeece70833694f81d95090596dcc Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 23 Jun 2022 20:22:36 +0200 Subject: [PATCH 201/357] Add make_foundation option test by /spawnstruct nether_outpost without being on complete (covering the sidelen) solid ground --- mods/MAPGEN/mcl_nether_fortresses/init.lua | 1 + mods/MAPGEN/mcl_structures/api.lua | 15 ++++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/mods/MAPGEN/mcl_nether_fortresses/init.lua b/mods/MAPGEN/mcl_nether_fortresses/init.lua index 16fd11fb1..8a5d97244 100644 --- a/mods/MAPGEN/mcl_nether_fortresses/init.lua +++ b/mods/MAPGEN/mcl_nether_fortresses/init.lua @@ -16,6 +16,7 @@ mcl_structures.register_structure("nether_outpost",{ biomes = {"Nether","SoulsandValley","WarpedForest","CrimsonForest","BasaltDelta"}, sidelen = 15, solid_ground = true, + make_foundation = true, y_min = mcl_vars.mg_lava_nether_max - 1, y_max = mcl_vars.mg_nether_max - 30, filenames = { modpath.."/schematics/nether_outpost.mts" }, diff --git a/mods/MAPGEN/mcl_structures/api.lua b/mods/MAPGEN/mcl_structures/api.lua index 5153e85f9..c0167060b 100644 --- a/mods/MAPGEN/mcl_structures/api.lua +++ b/mods/MAPGEN/mcl_structures/api.lua @@ -11,16 +11,21 @@ function mcl_structures.place_structure(pos, def, pr) end if def.solid_ground and def.sidelen then local node = minetest.get_node(vector.offset(pos,1,1,0)) - local solid = minetest.find_nodes_in_area(vector.offset(pos,-def.sidelen/2,-1,-def.sidelen/2),vector.offset(pos,def.sidelen/2,-1,def.sidelen/2),{"group:solid"}) + local ground_p1 = vector.offset(pos,-def.sidelen/2,-1,-def.sidelen/2) + local ground_p2 = vector.offset(pos,def.sidelen/2,-1,def.sidelen/2) + local solid = minetest.find_nodes_in_area(ground_p1,ground_p2,{"group:solid"}) local air = minetest.find_nodes_in_area(vector.offset(pos,-def.sidelen/2,1,-def.sidelen/2),vector.offset(pos,def.sidelen/2,4,def.sidelen/2),{"air"}) if #solid < ( def.sidelen * def.sidelen ) or #air < (def.sidelen * def.sidelen ) then - if logging then - minetest.log("warning","[mcl_structures] "..def.name.." at "..minetest.pos_to_string(pos).." not placed. No solid ground.") + if def.make_foundation then + minetest.bulk_set_node(minetest.find_nodes_in_area(ground_p1,vector.offset(ground_p2,0,-30,0),{"air"}),node) + else + if logging then + minetest.log("warning","[mcl_structures] "..def.name.." at "..minetest.pos_to_string(pos).." not placed. No solid ground.") + end + return false end - return false end - --minetest.bulk_set_node(solid,node) end if def.on_place and not def.on_place(pos,def,pr) then if logging then -- 2.40.1 From 9381657f5d0266d5a9c62dec27c86e1b90869f7f Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 24 Jun 2022 02:11:24 +0200 Subject: [PATCH 202/357] use new struct api for desert well and temples --- mods/MAPGEN/mcl_mapgen_core/init.lua | 39 ++---- mods/MAPGEN/mcl_structures/api.lua | 68 +++++---- mods/MAPGEN/mcl_structures/desert_temple.lua | 107 ++++++++++++++ mods/MAPGEN/mcl_structures/init.lua | 131 ++++-------------- mods/MAPGEN/mcl_structures/jungle_temple.lua | 70 ++++++++++ mods/MAPGEN/mcl_structures/mod.conf | 2 +- .../mcl_structures_jungle_temple.mts | Bin 0 -> 2586 bytes .../mcl_structures_jungle_temple_nice.mts | Bin 0 -> 3997 bytes 8 files changed, 255 insertions(+), 162 deletions(-) create mode 100644 mods/MAPGEN/mcl_structures/desert_temple.lua create mode 100644 mods/MAPGEN/mcl_structures/jungle_temple.lua create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_jungle_temple.mts create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_jungle_temple_nice.mts diff --git a/mods/MAPGEN/mcl_mapgen_core/init.lua b/mods/MAPGEN/mcl_mapgen_core/init.lua index a5a6d7a52..117d8ee09 100644 --- a/mods/MAPGEN/mcl_mapgen_core/init.lua +++ b/mods/MAPGEN/mcl_mapgen_core/init.lua @@ -1262,8 +1262,6 @@ end -- TODO: Try to use more efficient structure generating code local function generate_structures(minp, maxp, blockseed, biomemap) - local chunk_has_desert_well = false - local chunk_has_desert_temple = false local chunk_has_igloo = false local struct_min, struct_max = -3, 111 --64 @@ -1301,32 +1299,8 @@ local function generate_structures(minp, maxp, blockseed, biomemap) local nn0 = minetest.get_node(p).name -- Check if the node can be replaced if minetest.registered_nodes[nn0] and minetest.registered_nodes[nn0].buildable_to then - -- Desert temples and desert wells - if nn == "mcl_core:sand" or (nn == "mcl_core:sandstone") then - if not chunk_has_desert_temple and not chunk_has_desert_well and ground_y > 3 then - -- Spawn desert temple - -- TODO: Check surface - if pr:next(1,12000) == 1 then - mcl_structures.call_struct(p, "desert_temple", nil, pr) - chunk_has_desert_temple = true - end - end - if not chunk_has_desert_temple and not chunk_has_desert_well and ground_y > 3 then - local desert_well_prob = minecraft_chunk_probability(1000, minp, maxp) - - -- Spawn desert well - if pr:next(1, desert_well_prob) == 1 then - -- Check surface - local surface = minetest.find_nodes_in_area({x=p.x,y=p.y-1,z=p.z}, {x=p.x+5, y=p.y-1, z=p.z+5}, "mcl_core:sand") - if #surface >= 25 then - mcl_structures.call_struct(p, "desert_well", nil, pr) - chunk_has_desert_well = true - end - end - end - -- Igloos - elseif not chunk_has_igloo and (nn == "mcl_core:snowblock" or nn == "mcl_core:snow" or (minetest.get_item_group(nn, "grass_block_snow") == 1)) then + if not chunk_has_igloo and (nn == "mcl_core:snowblock" or nn == "mcl_core:snow" or (minetest.get_item_group(nn, "grass_block_snow") == 1)) then if pr:next(1, 4400) == 1 then -- Check surface local floor = {x=p.x+9, y=p.y-1, z=p.z+9} @@ -2211,11 +2185,18 @@ mcl_mapgen_core.register_generator("main", basic, basic_node, 1, true) mcl_mapgen_core.register_generator("structures",nil, function(minp, maxp, blockseed) local gennotify = minetest.get_mapgen_object("gennotify") local pr = PseudoRandom(blockseed + 42) + local has_struct = {} + local poshash = minetest.hash_node_position(minp) for _,struct in pairs(mcl_structures.registered_structures) do + local has = false + if has_struct[struct.name] == nil then has_struct[struct.name] = {} end for _, pos in pairs(gennotify["decoration#"..struct.deco_id] or {}) do - local realpos = vector.offset(pos,0,-1,0) + local realpos = vector.offset(pos,0,1,0) minetest.remove_node(realpos) - mcl_structures.place_structure(realpos,struct,pr) + if struct.chunk_probability ~= nil and not has and pr:next(1,struct.chunk_probability) ~= 1 then + mcl_structures.place_structure(realpos,struct,pr) + has=true + end end end end, 100, true) diff --git a/mods/MAPGEN/mcl_structures/api.lua b/mods/MAPGEN/mcl_structures/api.lua index c0167060b..e2daef96b 100644 --- a/mods/MAPGEN/mcl_structures/api.lua +++ b/mods/MAPGEN/mcl_structures/api.lua @@ -9,16 +9,18 @@ function mcl_structures.place_structure(pos, def, pr) elseif def.y_offset then y_offset = def.y_offset end + local pp = vector.offset(pos,0,y_offset,0) if def.solid_ground and def.sidelen then - local node = minetest.get_node(vector.offset(pos,1,1,0)) + local bn = minetest.get_biome_name(minetest.get_biome_data(pos).biome) + local node_top = minetest.registered_biomes[bn].node_top + local node_fill = minetest.registered_biomes[bn].node_filler local ground_p1 = vector.offset(pos,-def.sidelen/2,-1,-def.sidelen/2) local ground_p2 = vector.offset(pos,def.sidelen/2,-1,def.sidelen/2) local solid = minetest.find_nodes_in_area(ground_p1,ground_p2,{"group:solid"}) - local air = minetest.find_nodes_in_area(vector.offset(pos,-def.sidelen/2,1,-def.sidelen/2),vector.offset(pos,def.sidelen/2,4,def.sidelen/2),{"air"}) - if #solid < ( def.sidelen * def.sidelen ) or - #air < (def.sidelen * def.sidelen ) then + if #solid < ( def.sidelen * def.sidelen ) then if def.make_foundation then - minetest.bulk_set_node(minetest.find_nodes_in_area(ground_p1,vector.offset(ground_p2,0,-30,0),{"air"}),node) + minetest.bulk_set_node(minetest.find_nodes_in_area(ground_p1,ground_p2,{"air","group:liquid"}),{name=node_top}) + minetest.bulk_set_node(minetest.find_nodes_in_area(vector.offset(ground_p1,0,-1,0),vector.offset(ground_p2,0,-30,0),{"air","group:liquid"}),{name=node_fill}) else if logging then minetest.log("warning","[mcl_structures] "..def.name.." at "..minetest.pos_to_string(pos).." not placed. No solid ground.") @@ -34,13 +36,18 @@ function mcl_structures.place_structure(pos, def, pr) return false end if def.filenames then - local file = def.filenames[pr:next(1,#def.filenames)] - local pp = vector.offset(pos,0,y_offset,0) - mcl_structures.place_schematic(pp, file, "random", nil, true, "place_center_x,place_center_z",def.after_place,pr,{pos,def}) - if logging then - minetest.log("action","[mcl_structures] "..def.name.." placed at "..minetest.pos_to_string(pos)) + table.shuffle(def.filenames) + local file = def.filenames[1] + if file then + local ap = function(pos,def,pr) end + if def.after_place then ap = def.after_place end + + mcl_structures.place_schematic(pp, file, "random", nil, true, "place_center_x,place_center_z",function(p) return ap(pos,def,pr) end,pr) + if logging then + minetest.log("action","[mcl_structures] "..def.name.." placed at "..minetest.pos_to_string(pos)) + end + return true end - return true elseif def.place_func and def.place_func(pos,def,pr) then if not def.after_place or ( def.after_place and def.after_place(pos,def,pr) ) then if logging then @@ -65,23 +72,26 @@ function mcl_structures.register_structure(name,def,nospawn) --nospawn means it sbgroups.structblock = nil sbgroups.structblock_lbm = 1 else - def.deco = minetest.register_decoration({ - name = "mcl_structures:deco_"..name, - decoration = structblock, - deco_type = "simple", - place_on = def.place_on, - spawn_by = def.spawn_by, - num_spawn_by = def.num_spawn_by, - sidelen = 80, - fill_ratio = def.fill_ratio, - noise_params = def.noise_params, - flags = flags, - biomes = def.biomes, - y_max = def.y_max, - y_min = def.y_min - }) - def.deco_id = minetest.get_decoration_id("mcl_structures:deco_"..name) - minetest.set_gen_notify({decoration=true}, { def.deco_id }) + minetest.register_on_mods_loaded(function() --make sure all previous decorations and biomes have been registered + def.deco = minetest.register_decoration({ + name = "mcl_structures:deco_"..name, + decoration = structblock, + deco_type = "simple", + place_on = def.place_on, + spawn_by = def.spawn_by, + num_spawn_by = def.num_spawn_by, + sidelen = 80, + fill_ratio = def.fill_ratio, + noise_params = def.noise_params, + flags = flags, + biomes = def.biomes, + y_max = def.y_max, + y_min = def.y_min + }) + def.deco_id = minetest.get_decoration_id("mcl_structures:deco_"..name) + minetest.set_gen_notify({decoration=true}, { def.deco_id }) + --catching of gennotify happens in mcl_mapgen_core + end) end minetest.register_node(":"..structblock, {drawtype="airlike", walkable = false, pointable = false,groups = sbgroups}) def.structblock = structblock @@ -94,10 +104,10 @@ minetest.register_lbm({ run_at_every_load = true, nodenames = {"group:structblock_lbm"}, action = function(pos, node) + minetest.remove_node(pos) local name = node.name:gsub("mcl_structures:structblock_","") local def = mcl_structures.registered_structures[name] if not def then return end - minetest.remove_node(pos) mcl_structures.place_structure(pos) end }) diff --git a/mods/MAPGEN/mcl_structures/desert_temple.lua b/mods/MAPGEN/mcl_structures/desert_temple.lua new file mode 100644 index 000000000..9398e6062 --- /dev/null +++ b/mods/MAPGEN/mcl_structures/desert_temple.lua @@ -0,0 +1,107 @@ +local modname = minetest.get_current_modname() +local S = minetest.get_translator(modname) +local modpath = minetest.get_modpath(modname) + +local function temple_placement_callback(p1, p2, pr) + -- Delete cacti leftovers: + local cactus_nodes = minetest.find_nodes_in_area_under_air(p1, p2, "mcl_core:cactus") + if cactus_nodes and #cactus_nodes > 0 then + for _, pos in pairs(cactus_nodes) do + local node_below = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}) + if node_below and node_below.name == "mcl_core:sandstone" then + minetest.swap_node(pos, {name="air"}) + end + end + end + + -- Find chests. + -- FIXME: Searching this large area just for the chets is not efficient. Need a better way to find the chests; + -- probably let's just infer it from newpos because the schematic always the same. + local chests = minetest.find_nodes_in_area(p1, p2, "mcl_chests:chest") + + -- Add desert temple loot into chests + for c=1, #chests do + local lootitems = mcl_loot.get_multi_loot({ + { + stacks_min = 2, + stacks_max = 4, + items = { + { itemstring = "mcl_mobitems:bone", weight = 25, amount_min = 4, amount_max=6 }, + { itemstring = "mcl_mobitems:rotten_flesh", weight = 25, amount_min = 3, amount_max=7 }, + { itemstring = "mcl_mobitems:spider_eye", weight = 25, amount_min = 1, amount_max=3 }, + { itemstring = "mcl_books:book", weight = 20, func = function(stack, pr) + mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}, pr) + end }, + { itemstring = "mcl_mobitems:saddle", weight = 20, }, + { itemstring = "mcl_core:apple_gold", weight = 20, }, + { itemstring = "mcl_core:gold_ingot", weight = 15, amount_min = 2, amount_max = 7 }, + { itemstring = "mcl_core:iron_ingot", weight = 15, amount_min = 1, amount_max = 5 }, + { itemstring = "mcl_core:emerald", weight = 15, amount_min = 1, amount_max = 3 }, + { itemstring = "", weight = 15, }, + { itemstring = "mcl_mobitems:iron_horse_armor", weight = 15, }, + { itemstring = "mcl_mobitems:gold_horse_armor", weight = 10, }, + { itemstring = "mcl_mobitems:diamond_horse_armor", weight = 5, }, + { itemstring = "mcl_core:diamond", weight = 5, amount_min = 1, amount_max = 3 }, + { itemstring = "mcl_core:apple_gold_enchanted", weight = 2, }, + } + }, + { + stacks_min = 4, + stacks_max = 4, + items = { + { itemstring = "mcl_mobitems:bone", weight = 10, amount_min = 1, amount_max = 8 }, + { itemstring = "mcl_mobitems:rotten_flesh", weight = 10, amount_min = 1, amount_max = 8 }, + { itemstring = "mcl_mobitems:gunpowder", weight = 10, amount_min = 1, amount_max = 8 }, + { itemstring = "mcl_core:sand", weight = 10, amount_min = 1, amount_max = 8 }, + { itemstring = "mcl_mobitems:string", weight = 10, amount_min = 1, amount_max = 8 }, + } + }}, pr) + mcl_structures.init_node_construct(chests[c]) + local meta = minetest.get_meta(chests[c]) + local inv = meta:get_inventory() + mcl_loot.fill_inventory(inv, "main", lootitems, pr) + end + + -- Initialize pressure plates and randomly remove up to 5 plates + local pplates = minetest.find_nodes_in_area(p1, p2, "mesecons_pressureplates:pressure_plate_stone_off") + local pplates_remove = 5 + for p=1, #pplates do + if pplates_remove > 0 and pr:next(1, 100) >= 50 then + -- Remove plate + minetest.remove_node(pplates[p]) + pplates_remove = pplates_remove - 1 + else + -- Initialize plate + minetest.registered_nodes["mesecons_pressureplates:pressure_plate_stone_off"].on_construct(pplates[p]) + end + end +end + +mcl_structures.register_structure("desert_temple",{ + place_on = {"group:sand"}, + noise_params = { + offset = 0, + scale = 0.0000822, + spread = {x = 250, y = 250, z = 250}, + seed = 34115, + octaves = 3, + persist = -0.4, + flags = "absvalue", + }, + flags = "place_center_x, place_center_z", + solid_ground = true, + make_foundation = true, + sidelen = 18, + y_offset = -12, + chunk_probability = 256, + y_max = mcl_vars.mg_overworld_max, + y_min = 1, + biomes = { "Desert" }, + after_place = function(pos,def,pr) + local hl = def.sidelen / 2 + local p1 = vector.offset(pos,-hl,-hl,-hl) + local p2 = vector.offset(pos,hl,hl,hl) + temple_placement_callback(p1, p2, pr) + end, + filenames = { modpath.."/schematics/mcl_structures_desert_temple.mts" }, +}) diff --git a/mods/MAPGEN/mcl_structures/init.lua b/mods/MAPGEN/mcl_structures/init.lua index ffc25d40c..f15072165 100644 --- a/mods/MAPGEN/mcl_structures/init.lua +++ b/mods/MAPGEN/mcl_structures/init.lua @@ -67,6 +67,7 @@ local function init_node_construct(pos) end return false end +mcl_structures.init_node_construct = init_node_construct -- The call of Struct function mcl_structures.call_struct(pos, struct_style, rotation, pr) @@ -74,11 +75,7 @@ function mcl_structures.call_struct(pos, struct_style, rotation, pr) if not rotation then rotation = "random" end - if struct_style == "desert_temple" then - return mcl_structures.generate_desert_temple(pos, rotation, pr) - elseif struct_style == "desert_well" then - return mcl_structures.generate_desert_well(pos, rotation) - elseif struct_style == "igloo" then + if struct_style == "igloo" then return mcl_structures.generate_igloo(pos, rotation, pr) elseif struct_style == "witch_hut" then return mcl_structures.generate_witch_hut(pos, rotation) @@ -101,12 +98,6 @@ function mcl_structures.call_struct(pos, struct_style, rotation, pr) end end -function mcl_structures.generate_desert_well(pos, rot) - local newpos = {x=pos.x,y=pos.y-2,z=pos.z} - local path = modpath.."/schematics/mcl_structures_desert_well.mts" - return mcl_structures.place_schematic(newpos, path, rot or "0", nil, true) -end - function mcl_structures.generate_igloo(pos, rotation, pr) -- Place igloo local success, rotation = mcl_structures.generate_igloo_top(pos, pr) @@ -443,93 +434,6 @@ function mcl_structures.generate_end_portal_shrine(pos, rotation, pr) mcl_structures.place_schematic(newpos, path, rotation or "0", nil, true, nil, shrine_placement_callback, pr) end -local function temple_placement_callback(p1, p2, size, rotation, pr) - - -- Delete cacti leftovers: - local cactus_nodes = minetest.find_nodes_in_area_under_air(p1, p2, "mcl_core:cactus") - if cactus_nodes and #cactus_nodes > 0 then - for _, pos in pairs(cactus_nodes) do - local node_below = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}) - if node_below and node_below.name == "mcl_core:sandstone" then - minetest.swap_node(pos, {name="air"}) - end - end - end - - -- Find chests. - -- FIXME: Searching this large area just for the chets is not efficient. Need a better way to find the chests; - -- probably let's just infer it from newpos because the schematic always the same. - local chests = minetest.find_nodes_in_area(p1, p2, "mcl_chests:chest") - - -- Add desert temple loot into chests - for c=1, #chests do - local lootitems = mcl_loot.get_multi_loot({ - { - stacks_min = 2, - stacks_max = 4, - items = { - { itemstring = "mcl_mobitems:bone", weight = 25, amount_min = 4, amount_max=6 }, - { itemstring = "mcl_mobitems:rotten_flesh", weight = 25, amount_min = 3, amount_max=7 }, - { itemstring = "mcl_mobitems:spider_eye", weight = 25, amount_min = 1, amount_max=3 }, - { itemstring = "mcl_books:book", weight = 20, func = function(stack, pr) - mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}, pr) - end }, - { itemstring = "mcl_mobitems:saddle", weight = 20, }, - { itemstring = "mcl_core:apple_gold", weight = 20, }, - { itemstring = "mcl_core:gold_ingot", weight = 15, amount_min = 2, amount_max = 7 }, - { itemstring = "mcl_core:iron_ingot", weight = 15, amount_min = 1, amount_max = 5 }, - { itemstring = "mcl_core:emerald", weight = 15, amount_min = 1, amount_max = 3 }, - { itemstring = "", weight = 15, }, - { itemstring = "mcl_mobitems:iron_horse_armor", weight = 15, }, - { itemstring = "mcl_mobitems:gold_horse_armor", weight = 10, }, - { itemstring = "mcl_mobitems:diamond_horse_armor", weight = 5, }, - { itemstring = "mcl_core:diamond", weight = 5, amount_min = 1, amount_max = 3 }, - { itemstring = "mcl_core:apple_gold_enchanted", weight = 2, }, - } - }, - { - stacks_min = 4, - stacks_max = 4, - items = { - { itemstring = "mcl_mobitems:bone", weight = 10, amount_min = 1, amount_max = 8 }, - { itemstring = "mcl_mobitems:rotten_flesh", weight = 10, amount_min = 1, amount_max = 8 }, - { itemstring = "mcl_mobitems:gunpowder", weight = 10, amount_min = 1, amount_max = 8 }, - { itemstring = "mcl_core:sand", weight = 10, amount_min = 1, amount_max = 8 }, - { itemstring = "mcl_mobitems:string", weight = 10, amount_min = 1, amount_max = 8 }, - } - }}, pr) - init_node_construct(chests[c]) - local meta = minetest.get_meta(chests[c]) - local inv = meta:get_inventory() - mcl_loot.fill_inventory(inv, "main", lootitems, pr) - end - - -- Initialize pressure plates and randomly remove up to 5 plates - local pplates = minetest.find_nodes_in_area(p1, p2, "mesecons_pressureplates:pressure_plate_stone_off") - local pplates_remove = 5 - for p=1, #pplates do - if pplates_remove > 0 and pr:next(1, 100) >= 50 then - -- Remove plate - minetest.remove_node(pplates[p]) - pplates_remove = pplates_remove - 1 - else - -- Initialize plate - minetest.registered_nodes["mesecons_pressureplates:pressure_plate_stone_off"].on_construct(pplates[p]) - end - end -end - -function mcl_structures.generate_desert_temple(pos, rotation, pr) - -- No Generating for the temple ... Why using it ? No Change - local path = modpath.."/schematics/mcl_structures_desert_temple.mts" - local newpos = {x=pos.x,y=pos.y-12,z=pos.z} - --local size = {x=22, y=24, z=22} - if newpos == nil then - return - end - mcl_structures.place_schematic(newpos, path, rotation or "random", nil, true, nil, temple_placement_callback, pr) -end - local structure_data = {} --[[ Returns a table of structure of the specified type. @@ -572,6 +476,31 @@ local function dir_to_rotation(dir) end dofile(modpath.."/api.lua") +dofile(modpath.."/desert_temple.lua") +dofile(modpath.."/jungle_temple.lua") + +mcl_structures.register_structure("desert_well",{ + place_on = {"group:sand"}, + noise_params = { + offset = 0, + scale = 0.00012, + spread = {x = 250, y = 250, z = 250}, + seed = 233, + octaves = 3, + persist = 0.001, + flags = "absvalue", + }, + flags = "place_center_x, place_center_z", + not_near = { "desert_temple_new" }, + solid_ground = true, + sidelen = 4, + chunk_probability = 64, + y_max = mcl_vars.mg_overworld_max, + y_min = 1, + y_offset = -2, + biomes = { "Desert" }, + filenames = { modpath.."/schematics/mcl_structures_desert_well.mts" }, +}) -- Debug command minetest.register_chatcommand("spawnstruct", { @@ -589,11 +518,7 @@ minetest.register_chatcommand("spawnstruct", { local pr = PseudoRandom(pos.x+pos.y+pos.z) local errord = false local message = S("Structure placed.") - if param == "desert_temple" then - mcl_structures.generate_desert_temple(pos, rot, pr) - elseif param == "desert_well" then - mcl_structures.generate_desert_well(pos, rot) - elseif param == "igloo" then + if param == "igloo" then mcl_structures.generate_igloo(pos, rot, pr) elseif param == "witch_hut" then mcl_structures.generate_witch_hut(pos, rot, pr) diff --git a/mods/MAPGEN/mcl_structures/jungle_temple.lua b/mods/MAPGEN/mcl_structures/jungle_temple.lua new file mode 100644 index 000000000..1dc89b787 --- /dev/null +++ b/mods/MAPGEN/mcl_structures/jungle_temple.lua @@ -0,0 +1,70 @@ +local modname = minetest.get_current_modname() +local S = minetest.get_translator(modname) +local modpath = minetest.get_modpath(modname) + +local function temple_placement_callback(p1, p2, pr) + --dont remove foliage - looks kind of nice for a jt + local chests = minetest.find_nodes_in_area(p1, p2, "mcl_chests:trapped_chest_small") + -- Add jungle temple loot into chests + for c=1, #chests do + local lootitems = mcl_loot.get_multi_loot({ + { + stacks_min = 2, + stacks_max = 6, + items = { + { itemstring = "mcl_mobitems:bone", weight = 20, amount_min = 4, amount_max=6 }, + { itemstring = "mcl_mobitems:rotten_flesh", weight = 16, amount_min = 3, amount_max=7 }, + { itemstring = "mcl_core:gold_ingot", weight = 15, amount_min = 2, amount_max = 7 }, + --{ itemstring = "mcl_bamboo:bamboo", weight = 15, amount_min = 1, amount_max=3 }, --FIXME BAMBOO + { itemstring = "mcl_core:iron_ingot", weight = 15, amount_min = 1, amount_max = 5 }, + { itemstring = "mcl_core:diamond", weight = 3, amount_min = 1, amount_max = 3 }, + { itemstring = "mcl_mobitems:saddle", weight = 3, }, + { itemstring = "mcl_core:emerald", weight = 2, amount_min = 1, amount_max = 3 }, + { itemstring = "mcl_books:book", weight = 1, func = function(stack, pr) + mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}, pr) + end }, + { itemstring = "mcl_mobitems:iron_horse_armor", weight = 1, }, + { itemstring = "mcl_mobitems:gold_horse_armor", weight = 1, }, + { itemstring = "mcl_mobitems:diamond_horse_armor", weight = 1, }, + { itemstring = "mcl_core:apple_gold_enchanted", weight = 2, }, + } + }}, pr) + mcl_structures.init_node_construct(chests[c]) + local meta = minetest.get_meta(chests[c]) + local inv = meta:get_inventory() + mcl_loot.fill_inventory(inv, "main", lootitems, pr) + end + -- TODO: initialize traps +end + +mcl_structures.register_structure("jungle_temple",{ + place_on = {"group:grass_block","group:dirt","mcl_core:dirt_with_grass"}, + noise_params = { + offset = 0, + scale = 0.0000812, + spread = {x = 250, y = 250, z = 250}, + seed = 31585, + octaves = 3, + persist = -0.2, + flags = "absvalue", + }, + flags = "place_center_x, place_center_z", + solid_ground = true, + make_foundation = true, + y_offset = -5, + chunk_probability = 256, + y_max = mcl_vars.mg_overworld_max, + y_min = 1, + biomes = { "Jungle" }, + sidelen = 18, + filenames = { + modpath.."/schematics/mcl_structures_jungle_temple.mts", + modpath.."/schematics/mcl_structures_jungle_temple_nice.mts", + }, + after_place = function(pos,def,pr) + local hl = def.sidelen / 2 + local p1 = vector.offset(pos,-hl,-hl,-hl) + local p2 = vector.offset(pos,hl,hl,hl) + temple_placement_callback(p1, p2, pr) + end, +}) diff --git a/mods/MAPGEN/mcl_structures/mod.conf b/mods/MAPGEN/mcl_structures/mod.conf index c19113ad4..823714aad 100644 --- a/mods/MAPGEN/mcl_structures/mod.conf +++ b/mods/MAPGEN/mcl_structures/mod.conf @@ -1,4 +1,4 @@ name = mcl_structures author = Wuzzy, cora description = Structure placement for MCL2 -depends = mcl_loot +depends = mcl_init, mcl_loot diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_jungle_temple.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_jungle_temple.mts new file mode 100644 index 0000000000000000000000000000000000000000..ec98a83ea359fafabc55ec0df882634a601a9790 GIT binary patch literal 2586 zcmZ`&4K$Q#8=f)EJHxy&C^JTQ(O6Q9pH#EaJ4~8N)*vY||MD{!<0mN@48}Gz`mj{H zA%B&evHcC-R$~mNrLDeHBeZI@8=F09Woe~P_UG*PefvG3s*i98{Tmn;@g6O&U@5Al+@T%iDA@@Mt;g3VGPR*;&O zN=*}UL?Qv7#rtq%r6zKOLIm+oL26oZl7K6Y<0ULzh#-7GQqvZ_QmIQ}(QV0t^fwZo zn8QmD@DY}OhjGLii;!KSAXUIiPD*7RTr?I6G6Z7khm5t9vXWzB5H^2O_yQs4&?4dY z_yJ|PBS?SX)Pr$i0gFPRxG!$XlJ>u`CFFO^{tq2X6!)RcRO)YWvAxB14=w4*|BsU{ z`YUbK|4ikt<2V1C_A{e-5@Y}n05}56ZeazUHOML>**>X_Z~}@^Gi1hr>Db6>wX3?d zv=|xV;DT~FeOo744u?tjRYX__oR(A|xdsgDq}@kgXW8d1u!U_ABU$lkZ@#g%=BX$rPbQjfN@=2v0L@|Am)=Xo3iEkn8LW7HOu6$;li zij;#oGGM>q>_72)e(II8gek>7)-{bQ0%G6#tv4OBr>`lTB3dec*v06`tEWZ9!(Zwq zU`Ot;<>8k-2+sgtfIENecA%74H`diyy0VIj=PbXqdmhYhl5_mld`ENd(Mo)tz;!P; z-Fa7r)qz%P!76TGL@4I!>rabwO}k5E`X2emeA8h8{ygZKzV_}uv+!h(r@9~H;Oq$U zALMZBEd$ZP9b9c_D=oxV`({>*N$+!HC)VPjy8bcls3=o-5Z>VyYDylgjhTUiXye01A~d z8ER2aG7KSclefWv`2#FPrl20$>FFWa7l=J0IdbQY%-L}z$YHCZ@onL~*yJYlj_mMy1svoiWT%XI zp_s)s7$~Rq5!3?eC)NqyfG#`wjK{c97xzmip_|VV%r9wvcC4-R)CPtF^KVS+`imND z`(LBSSPbw|C%NrGwhFyM#pbeO z;5%f!=2P?L)5mgyZ3^30)fqRE4!`B`;h=kgph|46TM>}yt2q;0RkJA{xh-mnHYvTr zlbj_uOl#Clbpb-L?6Rziv~UG&y`xHW4x)>iIk#`^#}iU}Qf6 zKLa9FHJ`=mdk+p;!gy0^&1*D^3TwCgG=u9eQ4Mt~yh>ii509gF1ADfAqe1*w(z#>5 z#iw5r0uL*Pz)J-01&#E;5kh57+k*_y3mNECYp`=r|BP@yD+YKr;Et~~KG|mEv zpfZhQQ{16n0ag}G>gj-5G|+6WvZ6#D(@hfS&c$&X{HzyV?e_(a0`$^?*_FS{;!q<< z2ULb^?+rF}`C+TlBk5qokW@~bJ8gO(JLvW(>Iw-;{3Q64fu<|Qm%pkCz4-=moW^l0 zg2xfz;c!oe@>&u6^VWG#nT7QFOxr`rMA&=d6F(BZLMHe_6YCgpCDpC)AzY&o)4t{c zPje!uT67r=CDC_1DldW-jv{nNbS+*C>*lD=5%YpsVm(T$+22ZgyoZu52hXx8QpD3V zL<+fWB7m2kS)`7o)-dNEIv}f74p{Kmh?7{d;wvW0#LWNI9v=o-0b8^bi6(BDI&8V? zWRm~>{g0hb3aPd`H=0|!Vy|OOnD#yJJJB4=WX5%KrTUwEtlhD97-XHM!DjDD-F1oy z50{s<`r`$E&X1;o0_pY3g>l%^ zZ3}1TEEBRiNv`S_WVa|$lU;lvF6PkIC|`r!{1;i4YV^_UY@dBk774LmE4$s+TI1I| zntE}uXt0EWJNXoz@n8173zw+uGtGM=8limamkqwLT`hpMM1>KtUzFRfKzcgku`Xs^ z=%^}aQ-jS&jPU!;x{F`P#0MFTgn?L|+PqOl#9-{NW_GRUO0tRZ?NV}vfw+gDv3J;4n1B~R2;lkS&AL|QHN6@_NE*Ts5#-b@#xip%htZcsQniB~GzxjnhJI`4>))Ip{SH zJuF;hQ7`?_hF499&?HK1u!8TMMGS5qYYNG-b8E++>Pb0gW$fZz)m-)9g(Bfxm~CxG zd2vwpZFZ2`v=It;3m9x4FEIQ;Ggfy0iGWMmo4DR|y7Uq;pJ;BbAksRaJi!#Zz5yk? O=Ofi15Yfy7q<;etnMdjX literal 0 HcmV?d00001 diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_jungle_temple_nice.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_jungle_temple_nice.mts new file mode 100644 index 0000000000000000000000000000000000000000..8a9babb9bfc2206450f07356bc2166847c6a2e99 GIT binary patch literal 3997 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 Date: Fri, 24 Jun 2022 02:18:57 +0200 Subject: [PATCH 203/357] update API.md --- mods/MAPGEN/mcl_structures/API.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/mods/MAPGEN/mcl_structures/API.md b/mods/MAPGEN/mcl_structures/API.md index 23d93c712..ea051603f 100644 --- a/mods/MAPGEN/mcl_structures/API.md +++ b/mods/MAPGEN/mcl_structures/API.md @@ -12,13 +12,19 @@ If nospawn is truthy the structure will not be placed by mapgen and the decorati y_max =, place_on = {}, spawn_by = {}, - num_spawn_by = + num_spawn_by =, flags = (default: "place_center_x, place_center_z, force_placement") (same as decoration def) - y_offset =, --can be a number or a function returning a number + y_offset =, --can be a number or a function returning a number filenames = {} OR place_func = function(pos,def,pr) - -- filenames can be a list of any schematics accepted by mcl_structures.place_schematic / minetest.place_schematic + -- filenames can be a list of any schematics accepted by mcl_structures.place_schematic / minetest.place_schematic + on_place = function(pos,def,pr) end, + -- called before placement. denies placement when returning falsy. after_place = function(pos,def,pr) + -- executed after successful placement + sidelen = int, --length of one side of the structure. used for foundations. + solid_ground = bool, -- structure requires solid ground + make_foundation = bool, -- a foundation is automatically built for the structure. needs the sidelen param } ## mcl_structures.registered_structures Table of the registered structure defintions indexed by name. -- 2.40.1 From 47eca3f7747b13231c85a5e50d2f9c42b4a30ac3 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 24 Jun 2022 03:08:52 +0200 Subject: [PATCH 204/357] fix callbacks --- mods/MAPGEN/mcl_structures/desert_temple.lua | 12 +++++------- mods/MAPGEN/mcl_structures/jungle_temple.lua | 12 +++++------- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/mods/MAPGEN/mcl_structures/desert_temple.lua b/mods/MAPGEN/mcl_structures/desert_temple.lua index 9398e6062..fed97f047 100644 --- a/mods/MAPGEN/mcl_structures/desert_temple.lua +++ b/mods/MAPGEN/mcl_structures/desert_temple.lua @@ -2,7 +2,10 @@ local modname = minetest.get_current_modname() local S = minetest.get_translator(modname) local modpath = minetest.get_modpath(modname) -local function temple_placement_callback(p1, p2, pr) +local function temple_placement_callback(pos,def, pr) + local hl = def.sidelen / 2 + local p1 = vector.offset(pos,-hl,-hl,-hl) + local p2 = vector.offset(pos,hl,hl,hl) -- Delete cacti leftovers: local cactus_nodes = minetest.find_nodes_in_area_under_air(p1, p2, "mcl_core:cactus") if cactus_nodes and #cactus_nodes > 0 then @@ -97,11 +100,6 @@ mcl_structures.register_structure("desert_temple",{ y_max = mcl_vars.mg_overworld_max, y_min = 1, biomes = { "Desert" }, - after_place = function(pos,def,pr) - local hl = def.sidelen / 2 - local p1 = vector.offset(pos,-hl,-hl,-hl) - local p2 = vector.offset(pos,hl,hl,hl) - temple_placement_callback(p1, p2, pr) - end, filenames = { modpath.."/schematics/mcl_structures_desert_temple.mts" }, + after_place = temple_placement_callback }) diff --git a/mods/MAPGEN/mcl_structures/jungle_temple.lua b/mods/MAPGEN/mcl_structures/jungle_temple.lua index 1dc89b787..a8d93ca5d 100644 --- a/mods/MAPGEN/mcl_structures/jungle_temple.lua +++ b/mods/MAPGEN/mcl_structures/jungle_temple.lua @@ -2,7 +2,10 @@ local modname = minetest.get_current_modname() local S = minetest.get_translator(modname) local modpath = minetest.get_modpath(modname) -local function temple_placement_callback(p1, p2, pr) +local function temple_placement_callback(pos,def, pr) + local hl = def.sidelen / 2 + local p1 = vector.offset(pos,-hl,-hl,-hl) + local p2 = vector.offset(pos,hl,hl,hl) --dont remove foliage - looks kind of nice for a jt local chests = minetest.find_nodes_in_area(p1, p2, "mcl_chests:trapped_chest_small") -- Add jungle temple loot into chests @@ -61,10 +64,5 @@ mcl_structures.register_structure("jungle_temple",{ modpath.."/schematics/mcl_structures_jungle_temple.mts", modpath.."/schematics/mcl_structures_jungle_temple_nice.mts", }, - after_place = function(pos,def,pr) - local hl = def.sidelen / 2 - local p1 = vector.offset(pos,-hl,-hl,-hl) - local p2 = vector.offset(pos,hl,hl,hl) - temple_placement_callback(p1, p2, pr) - end, + after_place = temple_placement_callback }) -- 2.40.1 From 065767cc77870c2b1c2c6f5de7ed4e62d2719082 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 24 Jun 2022 03:09:50 +0200 Subject: [PATCH 205/357] Add Ocean Ruins - schematics by PrarieWind --- mods/MAPGEN/mcl_structures/init.lua | 1 + mods/MAPGEN/mcl_structures/ocean_ruins.lua | 104 ++++++++++++++++++ .../mcl_structures_ocean_ruins_cold_1.mts | Bin 0 -> 333 bytes .../mcl_structures_ocean_ruins_cold_2.mts | Bin 0 -> 396 bytes .../mcl_structures_ocean_ruins_cold_3.mts | Bin 0 -> 697 bytes 5 files changed, 105 insertions(+) create mode 100644 mods/MAPGEN/mcl_structures/ocean_ruins.lua create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_ocean_ruins_cold_1.mts create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_ocean_ruins_cold_2.mts create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_ocean_ruins_cold_3.mts diff --git a/mods/MAPGEN/mcl_structures/init.lua b/mods/MAPGEN/mcl_structures/init.lua index f15072165..176c09acd 100644 --- a/mods/MAPGEN/mcl_structures/init.lua +++ b/mods/MAPGEN/mcl_structures/init.lua @@ -478,6 +478,7 @@ end dofile(modpath.."/api.lua") dofile(modpath.."/desert_temple.lua") dofile(modpath.."/jungle_temple.lua") +dofile(modpath.."/ocean_ruins.lua") mcl_structures.register_structure("desert_well",{ place_on = {"group:sand"}, diff --git a/mods/MAPGEN/mcl_structures/ocean_ruins.lua b/mods/MAPGEN/mcl_structures/ocean_ruins.lua new file mode 100644 index 000000000..53115d38f --- /dev/null +++ b/mods/MAPGEN/mcl_structures/ocean_ruins.lua @@ -0,0 +1,104 @@ +local modname = minetest.get_current_modname() +local S = minetest.get_translator(modname) +local modpath = minetest.get_modpath(modname) +local cold_oceans = { + "RoofedForest_ocean", + "BirchForestM_ocean", + "BirchForest_ocean", + "IcePlains_deep_ocean", + "ExtremeHillsM_deep_ocean", + "SunflowerPlains_ocean", + "MegaSpruceTaiga_deep_ocean", + "ExtremeHillsM_ocean", + "SunflowerPlains_deep_ocean", + "BirchForest_deep_ocean", + "IcePlainsSpikes_ocean", + "StoneBeach_ocean", + "ColdTaiga_deep_ocean", + "Forest_deep_ocean", + "FlowerForest_deep_ocean", + "MegaTaiga_ocean", + "StoneBeach_deep_ocean", + "IcePlainsSpikes_deep_ocean", + "ColdTaiga_ocean", + "ExtremeHills+_deep_ocean", + "ExtremeHills_ocean", + "Forest_ocean", + "MegaTaiga_deep_ocean", + "MegaSpruceTaiga_ocean", + "ExtremeHills+_ocean", + "RoofedForest_deep_ocean", + "IcePlains_ocean", + "FlowerForest_ocean", + "ExtremeHills_deep_ocean", + "Taiga_ocean", + "BirchForestM_deep_ocean", + "Taiga_deep_ocean", +} +local function ruins_placement_callback(pos, def, pr) + local hl = def.sidelen / 2 + local p1 = vector.offset(pos,-hl,-hl,-hl) + local p2 = vector.offset(pos,hl,hl,hl) + local chests = minetest.find_nodes_in_area(p1, p2, "mcl_chests:chest_small") + for c=1, #chests do + local lootitems = mcl_loot.get_multi_loot({ + { + stacks_min = 2, + stacks_max = 4, + items = { + { itemstring = "mcl_core:coal_lump", weight = 25, amount_min = 1, amount_max=4 }, + { itemstring = "mcl_farming:wheat_item", weight = 25, amount_min = 2, amount_max=3 }, + { itemstring = "mcl_core:gold_nugget", weight = 25, amount_min = 1, amount_max=3 }, + --{ itemstring = "mcl_maps:treasure_map", weight = 20, }, --FIXME Treasure map + + { itemstring = "mcl_books:book", weight = 10, func = function(stack, pr) + mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}, pr) + end }, + { itemstring = "mcl_fishing:fishing_rod_enchanted", weight = 20, func = function(stack, pr) + mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}, pr) + end }, + { itemstring = "mcl_core:emerald", weight = 15, amount_min = 1, amount_max = 1 }, + { itemstring = "mcl_armor:chestplate_leather", weight = 15, amount_min = 1, amount_max = 1 }, + { itemstring = "mcl_core:apple_gold", weight = 20, }, + { itemstring = "mcl_armor:helmet_gold", weight = 15, amount_min = 1, amount_max = 1 }, + { itemstring = "mcl_core:gold_ingot", weight = 15, amount_min = 2, amount_max = 7 }, + { itemstring = "mcl_core:iron_ingot", weight = 15, amount_min = 1, amount_max = 5 }, + { itemstring = "mcl_core:apple_gold_enchanted", weight = 2, }, + } + }}, pr) + mcl_structures.init_node_construct(chests[c]) + local meta = minetest.get_meta(chests[c]) + local inv = meta:get_inventory() + mcl_loot.fill_inventory(inv, "main", lootitems, pr) + end +end + +mcl_structures.register_structure("cold_ocean_ruins",{ + place_on = {"group:sand","mcl_core:gravel","mcl_core:dirt","mcl_core:clay","group:material_stone"}, + spawn_by = {"mcl_core:water_source"}, + num_spawn_by = 2, + noise_params = { + offset = 0, + scale = 0.0000812, + spread = {x = 250, y = 250, z = 250}, + seed = 146315, + octaves = 3, + persist = -0.2, + flags = "absvalue", + }, + flags = "place_center_x, place_center_z, force_placement", + solid_ground = true, + make_foundation = true, + y_offset = 0, + y_min = mcl_vars.mg_overworld_min, + y_max = 1, + biomes = cold_oceans, + chunk_probability = 64, + sidelen = 4, + filenames = { + modpath.."/schematics/mcl_structures_ocean_ruins_cold_1.mts", + modpath.."/schematics/mcl_structures_ocean_ruins_cold_2.mts", + modpath.."/schematics/mcl_structures_ocean_ruins_cold_3.mts", + }, + after_place = ruins_placement_callback +}) diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ocean_ruins_cold_1.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ocean_ruins_cold_1.mts new file mode 100644 index 0000000000000000000000000000000000000000..1b2c8d1f3e4acae6e17dab9dbaaa4f285b4bae0e GIT binary patch literal 333 zcmeYb3HD`RVPI!qWnilZ0R|2R=ETe*2L9aSocQGYqExHo{G_CuR0d(VKygWaUTRWN zW^y)z1Qx;E{NmzD1`)Unm=85X6eOCToSK+tRh*g_pOctZl3J99`!6F|7+v!EgE_B=*ceNSK8>^} z#K77zQj1H9t&%}hd~t4KP7add;)0^mWU%6jIZp!u#SSZQGb!-CQ~{7){=zAyEP>r3I|mjy>tGNUvWSLLiadE@4V z>nWAF(mh3K4`Y{_KTCUF@;*RJCV&6Ydu-v4vX?|2NSs;w=SxlLhckZaZ~pbo=<^kp z{ynuXF#OZ`>Bmy%n&?XB{jmGO@o0hK_K3r+oN8T@?mTYFmv~rnJY`D9c^h%H>eaC` SCO++6RPuLsEhEE1yFUPCvaDYK literal 0 HcmV?d00001 diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ocean_ruins_cold_3.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ocean_ruins_cold_3.mts new file mode 100644 index 0000000000000000000000000000000000000000..67cb5c9acf2f84f69df5514dcae3bc53e2f35e08 GIT binary patch literal 697 zcmeYb3HD`RVGv+oV-TnZ0|s6O=ETe*2L9aSocQGYqExH&qQtV)90p;yKygWaUTRWN zW^y)z1Qx;E{NmzD20m07B=eHU0wB@6)RK(UBCFiQ^xQ;bdkcz6 zlT*v{^HUgj;hKvR^HLbZz}$?~;*w&kWDpf!oST?~?B=Y}y!0H1UP**rxJQx`i^@_{ zD(1YM)?L=Dz~jKoBzybc%=mbYiPL{%bnDuFex^}zVL}TFivkPx1=c(NMO;KAtAn34 zKMG6xer2CDqtwxW)nfA)sus<@@9SKlpk-K~d{Kv!Gv3vjO~^Iyk8X9sL+Q8MuWUYA zZGUI;9qC4!Z(_wxg@1xw*+u#!U#a@LEjT0B85XrCyDBJU;~K59x>*5Ur#`B7?SI`J z$FbmUTh`5Yb$7*uzwcVi(Y1a_hSaK-8e6ZXci-}!%)HTNnzAglw&rhjL;MsW@3Pw( zNs0SoPIjdJv+2LNWuNbj%vZHrwlY=!+-okEv)kNxn_R{Na!eBoU6rKs3FVuz>w^6>uGEO2qU!2e3o zWpD0T_sgrhMisYC4eRf7KJfFK$ydSuGV6BU4&7UREB3kmDA)l|6j0o_dgZit^baHD*k(R8FTsV-G+tQc7HRjU9S{& mu(qEc!he)y=D+1vk0N&yy literal 0 HcmV?d00001 -- 2.40.1 From fcb8160a60033013ea43698a1cbb4650b28e909d Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 24 Jun 2022 03:36:21 +0200 Subject: [PATCH 206/357] Add loot generation to api --- mods/MAPGEN/mcl_structures/API.md | 3 + mods/MAPGEN/mcl_structures/api.lua | 25 +++++- mods/MAPGEN/mcl_structures/desert_temple.lua | 87 +++++++++----------- mods/MAPGEN/mcl_structures/jungle_temple.lua | 62 ++++++-------- mods/MAPGEN/mcl_structures/ocean_ruins.lua | 66 +++++++-------- 5 files changed, 114 insertions(+), 129 deletions(-) diff --git a/mods/MAPGEN/mcl_structures/API.md b/mods/MAPGEN/mcl_structures/API.md index ea051603f..074810186 100644 --- a/mods/MAPGEN/mcl_structures/API.md +++ b/mods/MAPGEN/mcl_structures/API.md @@ -25,6 +25,9 @@ If nospawn is truthy the structure will not be placed by mapgen and the decorati sidelen = int, --length of one side of the structure. used for foundations. solid_ground = bool, -- structure requires solid ground make_foundation = bool, -- a foundation is automatically built for the structure. needs the sidelen param + loot = , + --a table of loot tables for mcl_loot indexed by node names + -- e.g. { ["mcl_chests:chest_small"] = {loot},... } } ## mcl_structures.registered_structures Table of the registered structure defintions indexed by name. diff --git a/mods/MAPGEN/mcl_structures/api.lua b/mods/MAPGEN/mcl_structures/api.lua index e2daef96b..ebdfdfbea 100644 --- a/mods/MAPGEN/mcl_structures/api.lua +++ b/mods/MAPGEN/mcl_structures/api.lua @@ -1,5 +1,21 @@ mcl_structures.registered_structures = {} +local function generate_loot(pos, def, pr) + local hl = def.sidelen / 2 + local p1 = vector.offset(pos,-hl,-hl,-hl) + local p2 = vector.offset(pos,hl,hl,hl) + for it,lt in pairs(def.loot) do + local nodes = minetest.find_nodes_in_area(p1, p2, it) + for _,p in pairs(nodes) do + local lootitems = mcl_loot.get_multi_loot( lt, pr) + mcl_structures.init_node_construct(p) + local meta = minetest.get_meta(p) + local inv = meta:get_inventory() + mcl_loot.fill_inventory(inv, "main", lootitems, pr) + end + end +end + function mcl_structures.place_structure(pos, def, pr) if not def then return end local logging = not def.terrain_feature @@ -42,7 +58,10 @@ function mcl_structures.place_structure(pos, def, pr) local ap = function(pos,def,pr) end if def.after_place then ap = def.after_place end - mcl_structures.place_schematic(pp, file, "random", nil, true, "place_center_x,place_center_z",function(p) return ap(pos,def,pr) end,pr) + mcl_structures.place_schematic(pp, file, "random", nil, true, "place_center_x,place_center_z",function(p) + if def.loot then generate_loot(pos,def,pr) end + return ap(pos,def,pr) + end,pr) if logging then minetest.log("action","[mcl_structures] "..def.name.." placed at "..minetest.pos_to_string(pos)) end @@ -88,13 +107,13 @@ function mcl_structures.register_structure(name,def,nospawn) --nospawn means it y_max = def.y_max, y_min = def.y_min }) + minetest.register_node(":"..structblock, {drawtype="airlike", walkable = false, pointable = false,groups = sbgroups}) + def.structblock = structblock def.deco_id = minetest.get_decoration_id("mcl_structures:deco_"..name) minetest.set_gen_notify({decoration=true}, { def.deco_id }) --catching of gennotify happens in mcl_mapgen_core end) end - minetest.register_node(":"..structblock, {drawtype="airlike", walkable = false, pointable = false,groups = sbgroups}) - def.structblock = structblock mcl_structures.registered_structures[name] = def end diff --git a/mods/MAPGEN/mcl_structures/desert_temple.lua b/mods/MAPGEN/mcl_structures/desert_temple.lua index fed97f047..27e5ddfb9 100644 --- a/mods/MAPGEN/mcl_structures/desert_temple.lua +++ b/mods/MAPGEN/mcl_structures/desert_temple.lua @@ -17,54 +17,6 @@ local function temple_placement_callback(pos,def, pr) end end - -- Find chests. - -- FIXME: Searching this large area just for the chets is not efficient. Need a better way to find the chests; - -- probably let's just infer it from newpos because the schematic always the same. - local chests = minetest.find_nodes_in_area(p1, p2, "mcl_chests:chest") - - -- Add desert temple loot into chests - for c=1, #chests do - local lootitems = mcl_loot.get_multi_loot({ - { - stacks_min = 2, - stacks_max = 4, - items = { - { itemstring = "mcl_mobitems:bone", weight = 25, amount_min = 4, amount_max=6 }, - { itemstring = "mcl_mobitems:rotten_flesh", weight = 25, amount_min = 3, amount_max=7 }, - { itemstring = "mcl_mobitems:spider_eye", weight = 25, amount_min = 1, amount_max=3 }, - { itemstring = "mcl_books:book", weight = 20, func = function(stack, pr) - mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}, pr) - end }, - { itemstring = "mcl_mobitems:saddle", weight = 20, }, - { itemstring = "mcl_core:apple_gold", weight = 20, }, - { itemstring = "mcl_core:gold_ingot", weight = 15, amount_min = 2, amount_max = 7 }, - { itemstring = "mcl_core:iron_ingot", weight = 15, amount_min = 1, amount_max = 5 }, - { itemstring = "mcl_core:emerald", weight = 15, amount_min = 1, amount_max = 3 }, - { itemstring = "", weight = 15, }, - { itemstring = "mcl_mobitems:iron_horse_armor", weight = 15, }, - { itemstring = "mcl_mobitems:gold_horse_armor", weight = 10, }, - { itemstring = "mcl_mobitems:diamond_horse_armor", weight = 5, }, - { itemstring = "mcl_core:diamond", weight = 5, amount_min = 1, amount_max = 3 }, - { itemstring = "mcl_core:apple_gold_enchanted", weight = 2, }, - } - }, - { - stacks_min = 4, - stacks_max = 4, - items = { - { itemstring = "mcl_mobitems:bone", weight = 10, amount_min = 1, amount_max = 8 }, - { itemstring = "mcl_mobitems:rotten_flesh", weight = 10, amount_min = 1, amount_max = 8 }, - { itemstring = "mcl_mobitems:gunpowder", weight = 10, amount_min = 1, amount_max = 8 }, - { itemstring = "mcl_core:sand", weight = 10, amount_min = 1, amount_max = 8 }, - { itemstring = "mcl_mobitems:string", weight = 10, amount_min = 1, amount_max = 8 }, - } - }}, pr) - mcl_structures.init_node_construct(chests[c]) - local meta = minetest.get_meta(chests[c]) - local inv = meta:get_inventory() - mcl_loot.fill_inventory(inv, "main", lootitems, pr) - end - -- Initialize pressure plates and randomly remove up to 5 plates local pplates = minetest.find_nodes_in_area(p1, p2, "mesecons_pressureplates:pressure_plate_stone_off") local pplates_remove = 5 @@ -101,5 +53,42 @@ mcl_structures.register_structure("desert_temple",{ y_min = 1, biomes = { "Desert" }, filenames = { modpath.."/schematics/mcl_structures_desert_temple.mts" }, - after_place = temple_placement_callback + after_place = temple_placement_callback, + loot = { + ["mcl_chests:chest_small" ] ={ + { + stacks_min = 2, + stacks_max = 4, + items = { + { itemstring = "mcl_mobitems:bone", weight = 25, amount_min = 4, amount_max=6 }, + { itemstring = "mcl_mobitems:rotten_flesh", weight = 25, amount_min = 3, amount_max=7 }, + { itemstring = "mcl_mobitems:spider_eye", weight = 25, amount_min = 1, amount_max=3 }, + { itemstring = "mcl_books:book", weight = 20, func = function(stack, pr) + mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}, pr) + end }, + { itemstring = "mcl_mobitems:saddle", weight = 20, }, + { itemstring = "mcl_core:apple_gold", weight = 20, }, + { itemstring = "mcl_core:gold_ingot", weight = 15, amount_min = 2, amount_max = 7 }, + { itemstring = "mcl_core:iron_ingot", weight = 15, amount_min = 1, amount_max = 5 }, + { itemstring = "mcl_core:emerald", weight = 15, amount_min = 1, amount_max = 3 }, + { itemstring = "", weight = 15, }, + { itemstring = "mcl_mobitems:iron_horse_armor", weight = 15, }, + { itemstring = "mcl_mobitems:gold_horse_armor", weight = 10, }, + { itemstring = "mcl_mobitems:diamond_horse_armor", weight = 5, }, + { itemstring = "mcl_core:diamond", weight = 5, amount_min = 1, amount_max = 3 }, + { itemstring = "mcl_core:apple_gold_enchanted", weight = 2, }, + } + }, + { + stacks_min = 4, + stacks_max = 4, + items = { + { itemstring = "mcl_mobitems:bone", weight = 10, amount_min = 1, amount_max = 8 }, + { itemstring = "mcl_mobitems:rotten_flesh", weight = 10, amount_min = 1, amount_max = 8 }, + { itemstring = "mcl_mobitems:gunpowder", weight = 10, amount_min = 1, amount_max = 8 }, + { itemstring = "mcl_core:sand", weight = 10, amount_min = 1, amount_max = 8 }, + { itemstring = "mcl_mobitems:string", weight = 10, amount_min = 1, amount_max = 8 }, + } + }} + } }) diff --git a/mods/MAPGEN/mcl_structures/jungle_temple.lua b/mods/MAPGEN/mcl_structures/jungle_temple.lua index a8d93ca5d..1a7a620fe 100644 --- a/mods/MAPGEN/mcl_structures/jungle_temple.lua +++ b/mods/MAPGEN/mcl_structures/jungle_temple.lua @@ -2,44 +2,6 @@ local modname = minetest.get_current_modname() local S = minetest.get_translator(modname) local modpath = minetest.get_modpath(modname) -local function temple_placement_callback(pos,def, pr) - local hl = def.sidelen / 2 - local p1 = vector.offset(pos,-hl,-hl,-hl) - local p2 = vector.offset(pos,hl,hl,hl) - --dont remove foliage - looks kind of nice for a jt - local chests = minetest.find_nodes_in_area(p1, p2, "mcl_chests:trapped_chest_small") - -- Add jungle temple loot into chests - for c=1, #chests do - local lootitems = mcl_loot.get_multi_loot({ - { - stacks_min = 2, - stacks_max = 6, - items = { - { itemstring = "mcl_mobitems:bone", weight = 20, amount_min = 4, amount_max=6 }, - { itemstring = "mcl_mobitems:rotten_flesh", weight = 16, amount_min = 3, amount_max=7 }, - { itemstring = "mcl_core:gold_ingot", weight = 15, amount_min = 2, amount_max = 7 }, - --{ itemstring = "mcl_bamboo:bamboo", weight = 15, amount_min = 1, amount_max=3 }, --FIXME BAMBOO - { itemstring = "mcl_core:iron_ingot", weight = 15, amount_min = 1, amount_max = 5 }, - { itemstring = "mcl_core:diamond", weight = 3, amount_min = 1, amount_max = 3 }, - { itemstring = "mcl_mobitems:saddle", weight = 3, }, - { itemstring = "mcl_core:emerald", weight = 2, amount_min = 1, amount_max = 3 }, - { itemstring = "mcl_books:book", weight = 1, func = function(stack, pr) - mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}, pr) - end }, - { itemstring = "mcl_mobitems:iron_horse_armor", weight = 1, }, - { itemstring = "mcl_mobitems:gold_horse_armor", weight = 1, }, - { itemstring = "mcl_mobitems:diamond_horse_armor", weight = 1, }, - { itemstring = "mcl_core:apple_gold_enchanted", weight = 2, }, - } - }}, pr) - mcl_structures.init_node_construct(chests[c]) - local meta = minetest.get_meta(chests[c]) - local inv = meta:get_inventory() - mcl_loot.fill_inventory(inv, "main", lootitems, pr) - end - -- TODO: initialize traps -end - mcl_structures.register_structure("jungle_temple",{ place_on = {"group:grass_block","group:dirt","mcl_core:dirt_with_grass"}, noise_params = { @@ -64,5 +26,27 @@ mcl_structures.register_structure("jungle_temple",{ modpath.."/schematics/mcl_structures_jungle_temple.mts", modpath.."/schematics/mcl_structures_jungle_temple_nice.mts", }, - after_place = temple_placement_callback + loot = { + ["mcl_chests:chest_small" ] ={{ + stacks_min = 2, + stacks_max = 6, + items = { + { itemstring = "mcl_mobitems:bone", weight = 20, amount_min = 4, amount_max=6 }, + { itemstring = "mcl_mobitems:rotten_flesh", weight = 16, amount_min = 3, amount_max=7 }, + { itemstring = "mcl_core:gold_ingot", weight = 15, amount_min = 2, amount_max = 7 }, + --{ itemstring = "mcl_bamboo:bamboo", weight = 15, amount_min = 1, amount_max=3 }, --FIXME BAMBOO + { itemstring = "mcl_core:iron_ingot", weight = 15, amount_min = 1, amount_max = 5 }, + { itemstring = "mcl_core:diamond", weight = 3, amount_min = 1, amount_max = 3 }, + { itemstring = "mcl_mobitems:saddle", weight = 3, }, + { itemstring = "mcl_core:emerald", weight = 2, amount_min = 1, amount_max = 3 }, + { itemstring = "mcl_books:book", weight = 1, func = function(stack, pr) + mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}, pr) + end }, + { itemstring = "mcl_mobitems:iron_horse_armor", weight = 1, }, + { itemstring = "mcl_mobitems:gold_horse_armor", weight = 1, }, + { itemstring = "mcl_mobitems:diamond_horse_armor", weight = 1, }, + { itemstring = "mcl_core:apple_gold_enchanted", weight = 2, }, + } + }} + } }) diff --git a/mods/MAPGEN/mcl_structures/ocean_ruins.lua b/mods/MAPGEN/mcl_structures/ocean_ruins.lua index 53115d38f..1e477c3c2 100644 --- a/mods/MAPGEN/mcl_structures/ocean_ruins.lua +++ b/mods/MAPGEN/mcl_structures/ocean_ruins.lua @@ -35,43 +35,6 @@ local cold_oceans = { "BirchForestM_deep_ocean", "Taiga_deep_ocean", } -local function ruins_placement_callback(pos, def, pr) - local hl = def.sidelen / 2 - local p1 = vector.offset(pos,-hl,-hl,-hl) - local p2 = vector.offset(pos,hl,hl,hl) - local chests = minetest.find_nodes_in_area(p1, p2, "mcl_chests:chest_small") - for c=1, #chests do - local lootitems = mcl_loot.get_multi_loot({ - { - stacks_min = 2, - stacks_max = 4, - items = { - { itemstring = "mcl_core:coal_lump", weight = 25, amount_min = 1, amount_max=4 }, - { itemstring = "mcl_farming:wheat_item", weight = 25, amount_min = 2, amount_max=3 }, - { itemstring = "mcl_core:gold_nugget", weight = 25, amount_min = 1, amount_max=3 }, - --{ itemstring = "mcl_maps:treasure_map", weight = 20, }, --FIXME Treasure map - - { itemstring = "mcl_books:book", weight = 10, func = function(stack, pr) - mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}, pr) - end }, - { itemstring = "mcl_fishing:fishing_rod_enchanted", weight = 20, func = function(stack, pr) - mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}, pr) - end }, - { itemstring = "mcl_core:emerald", weight = 15, amount_min = 1, amount_max = 1 }, - { itemstring = "mcl_armor:chestplate_leather", weight = 15, amount_min = 1, amount_max = 1 }, - { itemstring = "mcl_core:apple_gold", weight = 20, }, - { itemstring = "mcl_armor:helmet_gold", weight = 15, amount_min = 1, amount_max = 1 }, - { itemstring = "mcl_core:gold_ingot", weight = 15, amount_min = 2, amount_max = 7 }, - { itemstring = "mcl_core:iron_ingot", weight = 15, amount_min = 1, amount_max = 5 }, - { itemstring = "mcl_core:apple_gold_enchanted", weight = 2, }, - } - }}, pr) - mcl_structures.init_node_construct(chests[c]) - local meta = minetest.get_meta(chests[c]) - local inv = meta:get_inventory() - mcl_loot.fill_inventory(inv, "main", lootitems, pr) - end -end mcl_structures.register_structure("cold_ocean_ruins",{ place_on = {"group:sand","mcl_core:gravel","mcl_core:dirt","mcl_core:clay","group:material_stone"}, @@ -100,5 +63,32 @@ mcl_structures.register_structure("cold_ocean_ruins",{ modpath.."/schematics/mcl_structures_ocean_ruins_cold_2.mts", modpath.."/schematics/mcl_structures_ocean_ruins_cold_3.mts", }, - after_place = ruins_placement_callback + loot = { + ["mcl_chests:chest_small" ] = { + { + stacks_min = 2, + stacks_max = 4, + items = { + { itemstring = "mcl_core:coal_lump", weight = 25, amount_min = 1, amount_max=4 }, + { itemstring = "mcl_farming:wheat_item", weight = 25, amount_min = 2, amount_max=3 }, + { itemstring = "mcl_core:gold_nugget", weight = 25, amount_min = 1, amount_max=3 }, + --{ itemstring = "mcl_maps:treasure_map", weight = 20, }, --FIXME Treasure map + + { itemstring = "mcl_books:book", weight = 10, func = function(stack, pr) + mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}, pr) + end }, + { itemstring = "mcl_fishing:fishing_rod_enchanted", weight = 20, func = function(stack, pr) + mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}, pr) + end }, + { itemstring = "mcl_core:emerald", weight = 15, amount_min = 1, amount_max = 1 }, + { itemstring = "mcl_armor:chestplate_leather", weight = 15, amount_min = 1, amount_max = 1 }, + { itemstring = "mcl_core:apple_gold", weight = 20, }, + { itemstring = "mcl_armor:helmet_gold", weight = 15, amount_min = 1, amount_max = 1 }, + { itemstring = "mcl_core:gold_ingot", weight = 15, amount_min = 2, amount_max = 7 }, + { itemstring = "mcl_core:iron_ingot", weight = 15, amount_min = 1, amount_max = 5 }, + { itemstring = "mcl_core:apple_gold_enchanted", weight = 2, }, + } + } + } + }, }) -- 2.40.1 From befe493ff047b2c76f3b9d6a57999d65272c7d1a Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 24 Jun 2022 04:02:36 +0200 Subject: [PATCH 207/357] Add warm ocean ruins --- mods/MAPGEN/mcl_structures/ocean_ruins.lua | 54 ++++++++++++++++-- .../mcl_structures_ocean_ruins_warm_1.mts | Bin 0 -> 311 bytes .../mcl_structures_ocean_ruins_warm_2.mts | Bin 0 -> 331 bytes .../mcl_structures_ocean_ruins_warm_3.mts | Bin 0 -> 536 bytes .../mcl_structures_ocean_ruins_warm_4.mts | Bin 0 -> 390 bytes 5 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_ocean_ruins_warm_1.mts create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_ocean_ruins_warm_2.mts create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_ocean_ruins_warm_3.mts create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_ocean_ruins_warm_4.mts diff --git a/mods/MAPGEN/mcl_structures/ocean_ruins.lua b/mods/MAPGEN/mcl_structures/ocean_ruins.lua index 1e477c3c2..1452de64b 100644 --- a/mods/MAPGEN/mcl_structures/ocean_ruins.lua +++ b/mods/MAPGEN/mcl_structures/ocean_ruins.lua @@ -1,6 +1,7 @@ local modname = minetest.get_current_modname() local S = minetest.get_translator(modname) local modpath = minetest.get_modpath(modname) + local cold_oceans = { "RoofedForest_ocean", "BirchForestM_ocean", @@ -36,7 +37,40 @@ local cold_oceans = { "Taiga_deep_ocean", } -mcl_structures.register_structure("cold_ocean_ruins",{ +local warm_oceans = { + "JungleEdgeM_ocean", + "Jungle_deep_ocean", + "Savanna_ocean", + "MesaPlateauF_ocean", + "Swampland_ocean", + "Mesa_ocean", + "Plains_ocean", + "MesaPlateauFM_ocean", + "MushroomIsland_ocean", + "SavannaM_ocean", + "JungleEdge_ocean", + "MesaBryce_ocean", + "Jungle_ocean", + "Desert_ocean", + "JungleM_ocean", + "JungleEdgeM_deep_ocean", + "Jungle_deep_ocean", + "Savanna_deep_ocean", + "MesaPlateauF_deep_ocean", + "Swampland_deep_ocean", + "Mesa_deep_ocean", + "Plains_deep_ocean", + "MesaPlateauFM_deep_ocean", + "MushroomIsland_deep_ocean", + "SavannaM_deep_ocean", + "JungleEdge_deep_ocean", + "MesaBryce_deep_ocean", + "Jungle_deep_ocean", + "Desert_deep_ocean", + "JungleM_deep_ocean", +} + +local cold = { place_on = {"group:sand","mcl_core:gravel","mcl_core:dirt","mcl_core:clay","group:material_stone"}, spawn_by = {"mcl_core:water_source"}, num_spawn_by = 2, @@ -52,9 +86,9 @@ mcl_structures.register_structure("cold_ocean_ruins",{ flags = "place_center_x, place_center_z, force_placement", solid_ground = true, make_foundation = true, - y_offset = 0, + y_offset = -1, y_min = mcl_vars.mg_overworld_min, - y_max = 1, + y_max = -2, biomes = cold_oceans, chunk_probability = 64, sidelen = 4, @@ -91,4 +125,16 @@ mcl_structures.register_structure("cold_ocean_ruins",{ } } }, -}) +} + +local warm = table.copy(cold) +warm.biomes = warm_oceans +warm.filenames = { + modpath.."/schematics/mcl_structures_ocean_ruins_warm_1.mts", + modpath.."/schematics/mcl_structures_ocean_ruins_warm_2.mts", + modpath.."/schematics/mcl_structures_ocean_ruins_warm_3.mts", + modpath.."/schematics/mcl_structures_ocean_ruins_warm_4.mts", +} + +mcl_structures.register_structure("cold_ocean_ruins",cold) +mcl_structures.register_structure("warm_ocean_ruins",warm) diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ocean_ruins_warm_1.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ocean_ruins_warm_1.mts new file mode 100644 index 0000000000000000000000000000000000000000..072931b1397bc77811ea13295866eabd012adc99 GIT binary patch literal 311 zcmeYb3HD`RVPFMfj(Q+q;9y`*%q(Ky%}vgUPtGq&wJJ``OJNW~;TD(V=cO`8V2ULt z7L}!@Fo?rt(u)%FGD}k9i*xhyOER!&fy#)1wPd6gmlRtigD9Yu#GD)k0g!lJYDq?F zkyUPDdTwIHoTU>Y`5F{>T-t-a-q^dVgm=dge($V=in)P|CecwXc2TSQpItbyB}{wu z^}N+;%0F6*w@sg4++v$&A+c9cd8&n8UCGD8XZ4GBYRKIYyZ8RSW7#FkW542!O3#&f wxqNE8(Rm|MbcfESEaB&m*PUPvzs#{t=z5RAnd=<_f7XBN{j)-N*G0|$0AehGrT_o{ literal 0 HcmV?d00001 diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ocean_ruins_warm_2.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ocean_ruins_warm_2.mts new file mode 100644 index 0000000000000000000000000000000000000000..9834226fafaa66bc4406239dd6858cc2b8d5a381 GIT binary patch literal 331 zcmeYb3HD`RVPIomW#Fg>0R~P6=ETe*2HxD{ocQGYqExHm#Jm&+2^4N|Nq$~xa$-?g zY6^oWNG3lyH8IbsI5jaoCo!)iwI~mphT`1({E`d?0g#5g)RK(UBCFiQ^xQ-SAxy&= z#NlG;MTvQtC8_aH?P6ewjMUr?U+F2HVH+j|Unfyy%eXUuk_H9vV z?YyIfS@X6p-7a+Z$liT#Z^=*P){sb>_)^@d>UeD^L;j{6_U8OM%S|sa-CQiW;(7J| Q{Mye(GYgouOgG*R0OM1L#sB~S literal 0 HcmV?d00001 diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ocean_ruins_warm_3.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ocean_ruins_warm_3.mts new file mode 100644 index 0000000000000000000000000000000000000000..eb43cdf1c8166d40c9d902e56802f5812ed76449 GIT binary patch literal 536 zcmeYb3HD`RVGv+oWe}(b0R~P6=ETe*2HxD{ocQGYqExHm#Jm&+aX2@Pxo0y)P$RGh%3es6zlAo6fRf|O?IkBiLHHAS4QxAg}SS%y8 zxTM%B8AJiCOw7q)5Cw_nC#NRnSrw-y#^)sFm82HsRm^!C9x2wWz{7H%fK4?;BrA2QPdp8!U5vHSbLR8G+ep zpHpjtFR8ir@9%xBy>MMxjAhKGcbo5Vt;*?nFiE8CYH97I-{&;zG&hHcpM7Uo`)-L8 z-x-FlJ4KEj%((fNeFOXNx`{^Cr3>`kh10~Il`A}-&eZ?m&(&uyJLbf{e9d&;`#^!i z{hOB$DE?+no_@OJO75>|-Cxgc+!1p5^XnsTFL#u&34B!4qQGH@1H8tVYANuoMSCh zeC+&V?&5MR4}N==mDbzNc=k`LHg^8;_9xvx3U|$TG`S|_b5OnQ-Sa;u{Sqoob~8Ct aW|eU3rd&zyt@=sq{BkA_c?0*(Wd;BW*z*zq literal 0 HcmV?d00001 diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ocean_ruins_warm_4.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ocean_ruins_warm_4.mts new file mode 100644 index 0000000000000000000000000000000000000000..0eb5bacf0671bd7e33768d8e9e2320d819a6dbf1 GIT binary patch literal 390 zcmeYb3HD`RVc=q5W#Fm@0R~P6-rVGz_~iVeRIB2|yc7oJ#LOZF2^6v7lKi~X*7ccfb&CIAUQ}tT# zj;lQ(UnPx}TI&{nT-%a(@ZvkZxnH=}Ppf|S@NG7)!6BE^#}9C1i*Gw+;#BAVsAqZb z_5D+CrwMVErk{J-^;=`%4BKjEHl?Rac#j_RIHa((Ins&2`l-T8`$^_PAzNKqwpE2q od9!mRm*efqHpS?K%smMT_EYcr$1dJ;DfDf%-=8>RIe)uT0JD#tbN~PV literal 0 HcmV?d00001 -- 2.40.1 From 063e17bc0a8aee242f594bae36666dd86efb0340 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 24 Jun 2022 04:10:21 +0200 Subject: [PATCH 208/357] make schematic selection deterministic --- mods/MAPGEN/mcl_structures/api.lua | 5 +++-- mods/MAPGEN/mcl_structures/ocean_ruins.lua | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/mods/MAPGEN/mcl_structures/api.lua b/mods/MAPGEN/mcl_structures/api.lua index ebdfdfbea..14dda38f8 100644 --- a/mods/MAPGEN/mcl_structures/api.lua +++ b/mods/MAPGEN/mcl_structures/api.lua @@ -52,8 +52,9 @@ function mcl_structures.place_structure(pos, def, pr) return false end if def.filenames then - table.shuffle(def.filenames) - local file = def.filenames[1] + if #def.filenames <= 0 then return false end + local r = pr:next(1,#def.filenames) + local file = def.filenames[r] if file then local ap = function(pos,def,pr) end if def.after_place then ap = def.after_place end diff --git a/mods/MAPGEN/mcl_structures/ocean_ruins.lua b/mods/MAPGEN/mcl_structures/ocean_ruins.lua index 1452de64b..256d4bb8d 100644 --- a/mods/MAPGEN/mcl_structures/ocean_ruins.lua +++ b/mods/MAPGEN/mcl_structures/ocean_ruins.lua @@ -91,7 +91,7 @@ local cold = { y_max = -2, biomes = cold_oceans, chunk_probability = 64, - sidelen = 4, + sidelen = 8, filenames = { modpath.."/schematics/mcl_structures_ocean_ruins_cold_1.mts", modpath.."/schematics/mcl_structures_ocean_ruins_cold_2.mts", -- 2.40.1 From dfbb832f963602caac8943941242aeaca9363991 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 24 Jun 2022 14:02:29 +0200 Subject: [PATCH 209/357] Terrain feature fixes --- mods/MAPGEN/mcl_mapgen_core/init.lua | 2 +- mods/MAPGEN/mcl_structures/api.lua | 16 ++++++++++++++++ mods/MAPGEN/mcl_terrain_features/init.lua | 16 ++++++++-------- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/mods/MAPGEN/mcl_mapgen_core/init.lua b/mods/MAPGEN/mcl_mapgen_core/init.lua index 117d8ee09..9b5502bbf 100644 --- a/mods/MAPGEN/mcl_mapgen_core/init.lua +++ b/mods/MAPGEN/mcl_mapgen_core/init.lua @@ -2193,7 +2193,7 @@ mcl_mapgen_core.register_generator("structures",nil, function(minp, maxp, blocks for _, pos in pairs(gennotify["decoration#"..struct.deco_id] or {}) do local realpos = vector.offset(pos,0,1,0) minetest.remove_node(realpos) - if struct.chunk_probability ~= nil and not has and pr:next(1,struct.chunk_probability) ~= 1 then + if struct.chunk_probability == nil or (not has and pr:next(1,struct.chunk_probability) == 1 ) then mcl_structures.place_structure(realpos,struct,pr) has=true end diff --git a/mods/MAPGEN/mcl_structures/api.lua b/mods/MAPGEN/mcl_structures/api.lua index 14dda38f8..5c27fbb8e 100644 --- a/mods/MAPGEN/mcl_structures/api.lua +++ b/mods/MAPGEN/mcl_structures/api.lua @@ -16,6 +16,22 @@ local function generate_loot(pos, def, pr) end end +function mcl_structures.find_lowest_y(pp) + local y = 31000 + for _,p in pairs(pp) do + if p.y < y then y = p.y end + end + return y +end + +function mcl_structures.find_highest_y(pp) + local y = -31000 + for _,p in pairs(pp) do + if p.y > y then y = p.y end + end + return y +end + function mcl_structures.place_structure(pos, def, pr) if not def then return end local logging = not def.terrain_feature diff --git a/mods/MAPGEN/mcl_terrain_features/init.lua b/mods/MAPGEN/mcl_terrain_features/init.lua index 623e518b3..bf3a846a2 100644 --- a/mods/MAPGEN/mcl_terrain_features/init.lua +++ b/mods/MAPGEN/mcl_terrain_features/init.lua @@ -30,7 +30,7 @@ local function airtower(pos,tbl,h) end local function makelake(pos,size,liquid,placein,border,pr) - local node_under = minetest.get_node(vector.offset(pos,0,1,0)) + local node_under = minetest.get_node(vector.offset(pos,0,-1,0)) local p1 = vector.offset(pos,-size,-size,-size) local p2 = vector.offset(pos,size,size,size) local nn = minetest.find_nodes_in_area(p1,p2,placein) @@ -38,7 +38,7 @@ local function makelake(pos,size,liquid,placein,border,pr) return vector.distance(vector.new(pos.x,0,pos.z), a) < vector.distance(vector.new(pos.x,0,pos.z), b) end) if not nn[1] then return end - local y = pos.y - 1 + local y = mcl_structures.find_highest_y(nn) local lq = {} local air = {} for i=1,pr:next(1,#nn) do @@ -59,11 +59,11 @@ local function makelake(pos,size,liquid,placein,border,pr) if minetest.get_item_group(an.name,"solid") > 0 then border = an.name elseif minetest.get_item_group(minetest.get_node(nn[1]).name,"solid") > 0 then - border = minetest.get_node(nn[1]).name + border = minetest.get_node_or_nil(nn[1]).name else border = "mcl_core:stone" end - if border == "mcl_core:dirt" then border = "mcl_core:dirt_with_grass" end + if border == nil or border == "mcl_core:dirt" then border = "mcl_core:dirt_with_grass" end end if an.name ~= liquid then table.insert(br,pp) @@ -94,7 +94,7 @@ mcl_structures.register_structure("lavapool",{ y_max = mcl_vars.mg_overworld_max, y_min = minetest.get_mapgen_setting("water_level"), place_func = function(pos,def,pr) - return makelake(pos,5,"mcl_core:lava_source","mcl_core:stone",{"group:material_stone", "group:sand", "group:dirt"},pr) + return makelake(pos,5,"mcl_core:lava_source",{"group:material_stone", "group:sand", "group:dirt"},"mcl_core:stone",pr) end }) @@ -114,7 +114,7 @@ mcl_structures.register_structure("water_lake",{ y_max = mcl_vars.mg_overworld_max, y_min = minetest.get_mapgen_setting("water_level"), place_func = function(pos,def,pr) - return makelake(pos,5,"mcl_core:water_source",{"group:material_stone", "group:sand", "group:dirt"},nil,pr) + return makelake(pos,5,"mcl_core:water_source",{"group:material_stone", "group:sand", "group:dirt","group:grass_block"},nil,pr) end }) @@ -219,7 +219,7 @@ mcl_structures.register_structure("lavadelta",{ terrain_feature = true, noise_params = { offset = 0, - scale = 0.01, + scale = 0.005, spread = {x = 250, y = 250, z = 250}, seed = 78375213, octaves = 5, @@ -231,7 +231,7 @@ mcl_structures.register_structure("lavadelta",{ y_min = mcl_vars.mg_lava_nether_max + 1, biomes = { "BasaltDelta" }, place_func = function(pos,def,pr) - local nn = minetest.find_nodes_in_area_under_air(vector.offset(pos,-10,-1,-10),vector.offset(pos,10,-1,10),{"mcl_blackstone:basalt","mcl_blackstone:blackstone"}) + local nn = minetest.find_nodes_in_area_under_air(vector.offset(pos,-10,-1,-10),vector.offset(pos,10,-2,10),{"mcl_blackstone:basalt","mcl_blackstone:blackstone","mcl_nether:netherrack"}) table.sort(nn,function(a, b) return vector.distance(vector.new(pos.x,0,pos.z), a) < vector.distance(vector.new(pos.x,0,pos.z), b) end) -- 2.40.1 From 14cd3602149cba27cbd1e8bed8e5a2f569428abc Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 24 Jun 2022 17:54:34 +0200 Subject: [PATCH 210/357] witch hut, boulders, ice-spikes -> new api --- mods/MAPGEN/mcl_biomes/init.lua | 2 + mods/MAPGEN/mcl_mapgen_core/init.lua | 51 +++++------ mods/MAPGEN/mcl_structures/init.lua | 122 ++++++++++++++------------- 3 files changed, 86 insertions(+), 89 deletions(-) diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index f538d97aa..e4b6bb85b 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -3397,6 +3397,7 @@ local function register_decorations() y_max = mcl_vars.mg_overworld_max, schematic = mod_mcl_structures.."/schematics/mcl_structures_boulder.mts", flags = "place_center_x, place_center_z", + rotation = "random", }) -- Small mossy cobblestone boulder (2×2) @@ -3417,6 +3418,7 @@ local function register_decorations() y_max = mcl_vars.mg_overworld_max, schematic = mod_mcl_structures.."/schematics/mcl_structures_boulder_small.mts", flags = "place_center_x, place_center_z", + rotation = "random", }) -- Cacti diff --git a/mods/MAPGEN/mcl_mapgen_core/init.lua b/mods/MAPGEN/mcl_mapgen_core/init.lua index 9b5502bbf..b064c6d73 100644 --- a/mods/MAPGEN/mcl_mapgen_core/init.lua +++ b/mods/MAPGEN/mcl_mapgen_core/init.lua @@ -1331,7 +1331,7 @@ local function generate_structures(minp, maxp, blockseed, biomemap) end end - -- Witch hut + -- Witch hut (v6) if ground_y <= 0 and nn == "mcl_core:dirt" then local prob = minecraft_chunk_probability(48, minp, maxp) if pr:next(1, prob) == 1 then @@ -1339,23 +1339,14 @@ local function generate_structures(minp, maxp, blockseed, biomemap) local swampland = minetest.get_biome_id("Swampland") local swampland_shore = minetest.get_biome_id("Swampland_shore") - -- Where do witches live? - - local here_be_witches = false - if mg_name == "v6" then - -- v6: In Normal biome - if biomeinfo.get_v6_biome(p) == "Normal" then - here_be_witches = true - end - else - -- Other mapgens: In swampland biome - local bi = xz_to_biomemap_index(p.x, p.z, minp, maxp) - if biomemap[bi] == swampland or biomemap[bi] == swampland_shore then - here_be_witches = true - end + -- Where do witches live? + -- v6: In Normal biome + if biomeinfo.get_v6_biome(p) == "Normal" then + here_be_witches = true end + local here_be_witches = false + if mg_name == "v6" and here_be_witches then - if here_be_witches then local r = tostring(pr:next(0, 3) * 90) -- "0", "90", "180" or 270" local p1 = {x=p.x-1, y=WITCH_HUT_HEIGHT+2, z=p.z-1} local size @@ -1375,9 +1366,7 @@ local function generate_structures(minp, maxp, blockseed, biomemap) -- FIXME: For some mysterious reason (black magic?) this -- function does sometimes NOT spawn the witch hut. One can only see the -- oak wood nodes in the water, but no hut. :-/ - mcl_structures.call_struct(place, "witch_hut", r, pr) - - -- TODO: Spawn witch in or around hut when the mob sucks less. + mcl_structures.place_structure(place,mcl_structures.registered_structures["witch_hut"],pr) local function place_tree_if_free(pos, prev_result) local nn = minetest.get_node(pos).name @@ -1436,7 +1425,7 @@ local function generate_structures(minp, maxp, blockseed, biomemap) -- Ice spikes in v6 -- In other mapgens, ice spikes are generated as decorations. - if mg_name == "v6" and not chunk_has_igloo and nn == "mcl_core:snowblock" then + if mg_name == "v6" and nn == "mcl_core:snowblock" then local spike = pr:next(1,58000) if spike < 3 then -- Check surface @@ -1446,7 +1435,7 @@ local function generate_structures(minp, maxp, blockseed, biomemap) local spruce_collisions = minetest.find_nodes_in_area({x=p.x+1,y=p.y+2,z=p.z+1}, {x=p.x+4, y=p.y+6, z=p.z+4}, {"mcl_core:sprucetree", "mcl_core:spruceleaves"}) if #surface >= 9 and #spruce_collisions == 0 then - mcl_structures.call_struct(p, "ice_spike_large", nil, pr) + mcl_structures.place_structure(p,mcl_structures.registered_structures["ice_spike_large"],pr) end elseif spike < 100 then -- Check surface @@ -1457,7 +1446,7 @@ local function generate_structures(minp, maxp, blockseed, biomemap) local spruce_collisions = minetest.find_nodes_in_area({x=p.x+1,y=p.y+1,z=p.z+1}, {x=p.x+6, y=p.y+6, z=p.z+6}, {"mcl_core:sprucetree", "mcl_core:spruceleaves"}) if #surface >= 25 and #spruce_collisions == 0 then - mcl_structures.call_struct(p, "ice_spike_small", nil, pr) + mcl_structures.place_structure(p,mcl_structures.registered_structures["ice_spike_small"],pr) end end end @@ -2188,14 +2177,16 @@ mcl_mapgen_core.register_generator("structures",nil, function(minp, maxp, blocks local has_struct = {} local poshash = minetest.hash_node_position(minp) for _,struct in pairs(mcl_structures.registered_structures) do - local has = false - if has_struct[struct.name] == nil then has_struct[struct.name] = {} end - for _, pos in pairs(gennotify["decoration#"..struct.deco_id] or {}) do - local realpos = vector.offset(pos,0,1,0) - minetest.remove_node(realpos) - if struct.chunk_probability == nil or (not has and pr:next(1,struct.chunk_probability) == 1 ) then - mcl_structures.place_structure(realpos,struct,pr) - has=true + if struct.deco_id then + local has = false + if has_struct[struct.name] == nil then has_struct[struct.name] = {} end + for _, pos in pairs(gennotify["decoration#"..struct.deco_id] or {}) do + local realpos = vector.offset(pos,0,1,0) + minetest.remove_node(realpos) + if struct.chunk_probability == nil or (not has and pr:next(1,struct.chunk_probability) == 1 ) then + mcl_structures.place_structure(realpos,struct,pr) + has=true + end end end end diff --git a/mods/MAPGEN/mcl_structures/init.lua b/mods/MAPGEN/mcl_structures/init.lua index 176c09acd..12b9fc248 100644 --- a/mods/MAPGEN/mcl_structures/init.lua +++ b/mods/MAPGEN/mcl_structures/init.lua @@ -77,14 +77,6 @@ function mcl_structures.call_struct(pos, struct_style, rotation, pr) end if struct_style == "igloo" then return mcl_structures.generate_igloo(pos, rotation, pr) - elseif struct_style == "witch_hut" then - return mcl_structures.generate_witch_hut(pos, rotation) - elseif struct_style == "ice_spike_small" then - return mcl_structures.generate_ice_spike_small(pos, rotation) - elseif struct_style == "ice_spike_large" then - return mcl_structures.generate_ice_spike_large(pos, rotation) - elseif struct_style == "boulder" then - return mcl_structures.generate_boulder(pos, rotation, pr) elseif struct_style == "fossil" then return mcl_structures.generate_fossil(pos, rotation, pr) elseif struct_style == "end_exit_portal" then @@ -256,21 +248,6 @@ function mcl_structures.generate_igloo_basement(pos, orientation, pr) mcl_structures.place_schematic(pos, path, orientation, nil, true, nil, igloo_placement_callback, pr) end -function mcl_structures.generate_boulder(pos, rotation, pr) - -- Choose between 2 boulder sizes (2×2×2 or 3×3×3) - local r = pr:next(1, 10) - local path - if r <= 3 then - path = modpath.."/schematics/mcl_structures_boulder_small.mts" - else - path = modpath.."/schematics/mcl_structures_boulder.mts" - end - - local newpos = {x=pos.x,y=pos.y-1,z=pos.z} - - return minetest.place_schematic(newpos, path, rotation) -- don't serialize schematics for registered biome decorations, for MT 5.4.0, https://github.com/minetest/minetest/issues/10995 -end - local function spawn_witch(p1,p2) local c = minetest.find_node_near(p1,15,{"mcl_cauldrons:cauldron"}) if c then @@ -287,33 +264,6 @@ local function spawn_witch(p1,p2) end end -local function hut_placement_callback(p1, p2, size, orientation, pr) - if not p1 or not p2 then return end - local legs = minetest.find_nodes_in_area(p1, p2, "mcl_core:tree") - for i = 1, #legs do - while minetest.get_item_group(mcl_vars.get_node({x=legs[i].x, y=legs[i].y-1, z=legs[i].z}, true, 333333).name, "water") ~= 0 do - legs[i].y = legs[i].y - 1 - minetest.swap_node(legs[i], {name = "mcl_core:tree", param2 = 2}) - end - end - spawn_witch(p1,p2) -end - -function mcl_structures.generate_witch_hut(pos, rotation, pr) - local path = modpath.."/schematics/mcl_structures_witch_hut.mts" - mcl_structures.place_schematic(pos, path, rotation, nil, true, nil, hut_placement_callback, pr) -end - -function mcl_structures.generate_ice_spike_small(pos, rotation) - local path = modpath.."/schematics/mcl_structures_ice_spike_small.mts" - return minetest.place_schematic(pos, path, rotation or "random", nil, false) -- don't serialize schematics for registered biome decorations, for MT 5.4.0 -end - -function mcl_structures.generate_ice_spike_large(pos, rotation) - local path = modpath.."/schematics/mcl_structures_ice_spike_large.mts" - return minetest.place_schematic(pos, path, rotation or "random", nil, false) -- don't serialize schematics for registered biome decorations, for MT 5.4.0 -end - function mcl_structures.generate_fossil(pos, rotation, pr) -- Generates one out of 8 possible fossil pieces local newpos = {x=pos.x,y=pos.y-1,z=pos.z} @@ -480,6 +430,45 @@ dofile(modpath.."/desert_temple.lua") dofile(modpath.."/jungle_temple.lua") dofile(modpath.."/ocean_ruins.lua") +local function hut_placement_callback(pos,def,pr) + local hl = def.sidelen / 2 + local p1 = vector.offset(pos,-hl,-hl,-hl) + local p2 = vector.offset(pos,hl,hl,hl) + if not p1 or not p2 then return end + local legs = minetest.find_nodes_in_area(p1, p2, "mcl_core:tree") + local tree = {} + for i = 1, #legs do + while minetest.get_item_group(mcl_vars.get_node({x=legs[i].x, y=legs[i].y-1, z=legs[i].z}, true, 333333).name, "water") ~= 0 do + legs[i].y = legs[i].y - 1 + table.insert(tree,legs[i]) + end + end + minetest.bulk_set_node(tree, {name = "mcl_core:tree", param2 = 2}) + spawn_witch(p1,p2) +end + +mcl_structures.register_structure("witch_hut",{ + place_on = {"group:sand","group:grass_block","mcl_core:water_source","group:dirt"}, + noise_params = { + offset = 0, + scale = 0.0012, + spread = {x = 250, y = 250, z = 250}, + seed = 233, + octaves = 3, + persist = 0.001, + flags = "absvalue", + }, + flags = "place_center_x, place_center_z, liquid_surface, force_placement", + sidelen = 5, + chunk_probability = 64, + y_max = mcl_vars.mg_overworld_max, + y_min = 1, + --y_offset = function(pr) return pr:next(-4,1) end, + y_offset = 0, + biomes = { "Swampland", "Swampland_ocean", "Swampland_shore" }, + filenames = { modpath.."/schematics/mcl_structures_witch_hut.mts" }, + after_place = hut_placement_callback, +}) mcl_structures.register_structure("desert_well",{ place_on = {"group:sand"}, noise_params = { @@ -503,9 +492,32 @@ mcl_structures.register_structure("desert_well",{ filenames = { modpath.."/schematics/mcl_structures_desert_well.mts" }, }) +mcl_structures.register_structure("boulder",{ + flags = "place_center_x, place_center_z", + sidelen = 4, + filenames = { + modpath.."/schematics/mcl_structures_boulder_small.mts", + modpath.."/schematics/mcl_structures_boulder_small.mts", + modpath.."/schematics/mcl_structures_boulder_small.mts", + modpath.."/schematics/mcl_structures_boulder.mts", + }, +},true) --is spawned as a normal decoration. this is just for /spawnstruct +mcl_structures.register_structure("ice_spike_small",{ + sidelen = 3, + filenames = { + modpath.."/schematics/mcl_structures_ice_spike_small.mts" + }, +},true) --is spawned as a normal decoration. this is just for /spawnstruct +mcl_structures.register_structure("ice_spike_large",{ + sidelen = 6, + filenames = { + modpath.."/schematics/mcl_structures_ice_spike_large.mts" + }, +},true) --is spawned as a normal decoration. this is just for /spawnstruct + -- Debug command minetest.register_chatcommand("spawnstruct", { - params = "desert_temple | desert_well | igloo | witch_hut | boulder | ice_spike_small | ice_spike_large | fossil | end_exit_portal | end_exit_portal_open | end_gateway_portal | end_portal_shrine | nether_portal | dungeon", + params = "igloo | end_exit_portal | end_exit_portal_open | end_gateway_portal | end_portal_shrine | nether_portal | dungeon", description = S("Generate a pre-defined structure near your position."), privs = {debug = true}, func = function(name, param) @@ -521,16 +533,8 @@ minetest.register_chatcommand("spawnstruct", { local message = S("Structure placed.") if param == "igloo" then mcl_structures.generate_igloo(pos, rot, pr) - elseif param == "witch_hut" then - mcl_structures.generate_witch_hut(pos, rot, pr) - elseif param == "boulder" then - mcl_structures.generate_boulder(pos, rot, pr) elseif param == "fossil" then mcl_structures.generate_fossil(pos, rot, pr) - elseif param == "ice_spike_small" then - mcl_structures.generate_ice_spike_small(pos, rot, pr) - elseif param == "ice_spike_large" then - mcl_structures.generate_ice_spike_large(pos, rot, pr) elseif param == "end_exit_portal" then mcl_structures.generate_end_exit_portal(pos, rot, pr) elseif param == "end_exit_portal_open" then -- 2.40.1 From 607511518f6e529a8d421d2ad1e94fca9ced9299 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 24 Jun 2022 18:15:26 +0200 Subject: [PATCH 211/357] fix warning --- mods/MAPGEN/mcl_biomes/init.lua | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index e4b6bb85b..2914d148f 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -2594,7 +2594,16 @@ local function register_decorations() deco_type = "simple", place_on = {"group:sand","mcl_core:gravel"}, sidelen = 16, - noise_params = noise, + noise_params = { + offset = -0.0085, + scale = 0.002, + spread = {x = 25, y = 120, z = 25}, + seed = 235, + octaves = 5, + persist = 1.8, + lacunarity = 3.5, + flags = "absvalue" + }, y_min = OCEAN_MIN, y_max = -5, decoration = "mcl_ocean:dead_brain_coral_block", -- 2.40.1 From 7f8a366a7b0124e32bc2d4ca4624895821e8ff0c Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 24 Jun 2022 18:24:41 +0200 Subject: [PATCH 212/357] make geodes slightly larger, fix positioning --- mods/MAPGEN/mcl_geodes/init.lua | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/mods/MAPGEN/mcl_geodes/init.lua b/mods/MAPGEN/mcl_geodes/init.lua index c03173367..d0f0e0cab 100644 --- a/mods/MAPGEN/mcl_geodes/init.lua +++ b/mods/MAPGEN/mcl_geodes/init.lua @@ -13,8 +13,8 @@ local function set_node_no_bedrock(pos,node) return minetest.set_node(pos,node) end -local function makegeode(pos,pr) - local size = pr:next(4,7) +local function makegeode(pos,def,pr) + local size = pr:next(5,7) local p1 = vector.offset(pos,-size,-size,-size) local p2 = vector.offset(pos,size,size,size) local calcite = {} @@ -79,8 +79,5 @@ mcl_structures.register_structure("geode",{ y_max = -24, y_min = mcl_vars.mg_overworld_min, y_offset = function(pr) return pr:next(-4,-2) end, - place_func = function(pos,def,pr) - local p = vector.new(pos.x + pr:next(-30,30),pos.y,pos.z + pr:next(-30,30)) - return makegeode(p,pr) - end + place_func = makegeode, }) -- 2.40.1 From 3ca6d4de3b75ce8fc5482e708866cc31736c0067 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 24 Jun 2022 21:10:52 +0200 Subject: [PATCH 213/357] fix chunk probability and distributions --- mods/MAPGEN/mcl_geodes/init.lua | 1 + mods/MAPGEN/mcl_mapgen_core/init.lua | 4 +-- mods/MAPGEN/mcl_structures/api.lua | 9 ++++-- mods/MAPGEN/mcl_structures/desert_temple.lua | 12 ++------ mods/MAPGEN/mcl_structures/init.lua | 31 ++++---------------- mods/MAPGEN/mcl_structures/jungle_temple.lua | 14 ++------- mods/MAPGEN/mcl_structures/ocean_ruins.lua | 14 ++------- 7 files changed, 24 insertions(+), 61 deletions(-) diff --git a/mods/MAPGEN/mcl_geodes/init.lua b/mods/MAPGEN/mcl_geodes/init.lua index d0f0e0cab..a1ea0b631 100644 --- a/mods/MAPGEN/mcl_geodes/init.lua +++ b/mods/MAPGEN/mcl_geodes/init.lua @@ -76,6 +76,7 @@ mcl_structures.register_structure("geode",{ flags = "absvalue", }, flags = "place_center_x, place_center_z, force_placement", + terrain_feature = true, y_max = -24, y_min = mcl_vars.mg_overworld_min, y_offset = function(pr) return pr:next(-4,-2) end, diff --git a/mods/MAPGEN/mcl_mapgen_core/init.lua b/mods/MAPGEN/mcl_mapgen_core/init.lua index b064c6d73..25065be2a 100644 --- a/mods/MAPGEN/mcl_mapgen_core/init.lua +++ b/mods/MAPGEN/mcl_mapgen_core/init.lua @@ -1334,7 +1334,7 @@ local function generate_structures(minp, maxp, blockseed, biomemap) -- Witch hut (v6) if ground_y <= 0 and nn == "mcl_core:dirt" then local prob = minecraft_chunk_probability(48, minp, maxp) - if pr:next(1, prob) == 1 then + if mg_name == "v6" and pr:next(1, prob) == 1 then local swampland = minetest.get_biome_id("Swampland") local swampland_shore = minetest.get_biome_id("Swampland_shore") @@ -1345,7 +1345,7 @@ local function generate_structures(minp, maxp, blockseed, biomemap) here_be_witches = true end local here_be_witches = false - if mg_name == "v6" and here_be_witches then + if here_be_witches then local r = tostring(pr:next(0, 3) * 90) -- "0", "90", "180" or 270" local p1 = {x=p.x-1, y=WITCH_HUT_HEIGHT+2, z=p.z-1} diff --git a/mods/MAPGEN/mcl_structures/api.lua b/mods/MAPGEN/mcl_structures/api.lua index 5c27fbb8e..d9ab21702 100644 --- a/mods/MAPGEN/mcl_structures/api.lua +++ b/mods/MAPGEN/mcl_structures/api.lua @@ -46,13 +46,18 @@ function mcl_structures.place_structure(pos, def, pr) local bn = minetest.get_biome_name(minetest.get_biome_data(pos).biome) local node_top = minetest.registered_biomes[bn].node_top local node_fill = minetest.registered_biomes[bn].node_filler + local node_stone = minetest.registered_biomes[bn].node_stone local ground_p1 = vector.offset(pos,-def.sidelen/2,-1,-def.sidelen/2) local ground_p2 = vector.offset(pos,def.sidelen/2,-1,def.sidelen/2) + if not node_stone then node_stone = "mcl_core:stone" end + if not node_fill then node_fill = "mcl_core:dirt" end + if not node_top then node_top = "mcl_core:dirt_with_grass" end local solid = minetest.find_nodes_in_area(ground_p1,ground_p2,{"group:solid"}) if #solid < ( def.sidelen * def.sidelen ) then if def.make_foundation then minetest.bulk_set_node(minetest.find_nodes_in_area(ground_p1,ground_p2,{"air","group:liquid"}),{name=node_top}) - minetest.bulk_set_node(minetest.find_nodes_in_area(vector.offset(ground_p1,0,-1,0),vector.offset(ground_p2,0,-30,0),{"air","group:liquid"}),{name=node_fill}) + minetest.bulk_set_node(minetest.find_nodes_in_area(vector.offset(ground_p1,0,-1,0),vector.offset(ground_p2,0,-4,0),{"air","group:liquid"}),{name=node_fill}) + minetest.bulk_set_node(minetest.find_nodes_in_area(vector.offset(ground_p1,0,-5,0),vector.offset(ground_p2,0,-30,0),{"air","group:liquid"}),{name=node_stone}) else if logging then minetest.log("warning","[mcl_structures] "..def.name.." at "..minetest.pos_to_string(pos).." not placed. No solid ground.") @@ -124,7 +129,7 @@ function mcl_structures.register_structure(name,def,nospawn) --nospawn means it y_max = def.y_max, y_min = def.y_min }) - minetest.register_node(":"..structblock, {drawtype="airlike", walkable = false, pointable = false,groups = sbgroups}) + minetest.register_node(":"..structblock, {drawtype="normal", walkable = false, pointable = false,groups = sbgroups}) def.structblock = structblock def.deco_id = minetest.get_decoration_id("mcl_structures:deco_"..name) minetest.set_gen_notify({decoration=true}, { def.deco_id }) diff --git a/mods/MAPGEN/mcl_structures/desert_temple.lua b/mods/MAPGEN/mcl_structures/desert_temple.lua index 27e5ddfb9..ddacd83d2 100644 --- a/mods/MAPGEN/mcl_structures/desert_temple.lua +++ b/mods/MAPGEN/mcl_structures/desert_temple.lua @@ -34,21 +34,13 @@ end mcl_structures.register_structure("desert_temple",{ place_on = {"group:sand"}, - noise_params = { - offset = 0, - scale = 0.0000822, - spread = {x = 250, y = 250, z = 250}, - seed = 34115, - octaves = 3, - persist = -0.4, - flags = "absvalue", - }, + fill_ratio = 0.01, flags = "place_center_x, place_center_z", solid_ground = true, make_foundation = true, sidelen = 18, y_offset = -12, - chunk_probability = 256, + chunk_probability = 500, y_max = mcl_vars.mg_overworld_max, y_min = 1, biomes = { "Desert" }, diff --git a/mods/MAPGEN/mcl_structures/init.lua b/mods/MAPGEN/mcl_structures/init.lua index 12b9fc248..a8a2d9b1b 100644 --- a/mods/MAPGEN/mcl_structures/init.lua +++ b/mods/MAPGEN/mcl_structures/init.lua @@ -449,21 +449,12 @@ end mcl_structures.register_structure("witch_hut",{ place_on = {"group:sand","group:grass_block","mcl_core:water_source","group:dirt"}, - noise_params = { - offset = 0, - scale = 0.0012, - spread = {x = 250, y = 250, z = 250}, - seed = 233, - octaves = 3, - persist = 0.001, - flags = "absvalue", - }, + fill_ratio = 0.01, flags = "place_center_x, place_center_z, liquid_surface, force_placement", sidelen = 5, - chunk_probability = 64, + chunk_probability = 128, y_max = mcl_vars.mg_overworld_max, - y_min = 1, - --y_offset = function(pr) return pr:next(-4,1) end, + y_min = -4, y_offset = 0, biomes = { "Swampland", "Swampland_ocean", "Swampland_shore" }, filenames = { modpath.."/schematics/mcl_structures_witch_hut.mts" }, @@ -471,20 +462,12 @@ mcl_structures.register_structure("witch_hut",{ }) mcl_structures.register_structure("desert_well",{ place_on = {"group:sand"}, - noise_params = { - offset = 0, - scale = 0.00012, - spread = {x = 250, y = 250, z = 250}, - seed = 233, - octaves = 3, - persist = 0.001, - flags = "absvalue", - }, + fill_ratio = 0.01, flags = "place_center_x, place_center_z", not_near = { "desert_temple_new" }, solid_ground = true, sidelen = 4, - chunk_probability = 64, + chunk_probability = 256, y_max = mcl_vars.mg_overworld_max, y_min = 1, y_offset = -2, @@ -493,17 +476,15 @@ mcl_structures.register_structure("desert_well",{ }) mcl_structures.register_structure("boulder",{ - flags = "place_center_x, place_center_z", - sidelen = 4, filenames = { modpath.."/schematics/mcl_structures_boulder_small.mts", modpath.."/schematics/mcl_structures_boulder_small.mts", modpath.."/schematics/mcl_structures_boulder_small.mts", modpath.."/schematics/mcl_structures_boulder.mts", + -- small boulder 3x as likely }, },true) --is spawned as a normal decoration. this is just for /spawnstruct mcl_structures.register_structure("ice_spike_small",{ - sidelen = 3, filenames = { modpath.."/schematics/mcl_structures_ice_spike_small.mts" }, diff --git a/mods/MAPGEN/mcl_structures/jungle_temple.lua b/mods/MAPGEN/mcl_structures/jungle_temple.lua index 1a7a620fe..aa5bf9412 100644 --- a/mods/MAPGEN/mcl_structures/jungle_temple.lua +++ b/mods/MAPGEN/mcl_structures/jungle_temple.lua @@ -4,20 +4,12 @@ local modpath = minetest.get_modpath(modname) mcl_structures.register_structure("jungle_temple",{ place_on = {"group:grass_block","group:dirt","mcl_core:dirt_with_grass"}, - noise_params = { - offset = 0, - scale = 0.0000812, - spread = {x = 250, y = 250, z = 250}, - seed = 31585, - octaves = 3, - persist = -0.2, - flags = "absvalue", - }, + fill_ratio = 0.1, flags = "place_center_x, place_center_z", solid_ground = true, make_foundation = true, - y_offset = -5, - chunk_probability = 256, + y_offset = function(pr) return pr:next(-3,0) -5 end, + chunk_probability = 1500, y_max = mcl_vars.mg_overworld_max, y_min = 1, biomes = { "Jungle" }, diff --git a/mods/MAPGEN/mcl_structures/ocean_ruins.lua b/mods/MAPGEN/mcl_structures/ocean_ruins.lua index 256d4bb8d..dafc2dfff 100644 --- a/mods/MAPGEN/mcl_structures/ocean_ruins.lua +++ b/mods/MAPGEN/mcl_structures/ocean_ruins.lua @@ -74,15 +74,7 @@ local cold = { place_on = {"group:sand","mcl_core:gravel","mcl_core:dirt","mcl_core:clay","group:material_stone"}, spawn_by = {"mcl_core:water_source"}, num_spawn_by = 2, - noise_params = { - offset = 0, - scale = 0.0000812, - spread = {x = 250, y = 250, z = 250}, - seed = 146315, - octaves = 3, - persist = -0.2, - flags = "absvalue", - }, + fill_ratio = 0.001, flags = "place_center_x, place_center_z, force_placement", solid_ground = true, make_foundation = true, @@ -90,8 +82,8 @@ local cold = { y_min = mcl_vars.mg_overworld_min, y_max = -2, biomes = cold_oceans, - chunk_probability = 64, - sidelen = 8, + chunk_probability = 128, + sidelen = 20, filenames = { modpath.."/schematics/mcl_structures_ocean_ruins_cold_1.mts", modpath.."/schematics/mcl_structures_ocean_ruins_cold_2.mts", -- 2.40.1 From a09226c370446d103fd6b152b82ce15c1d8e89e8 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 24 Jun 2022 21:47:44 +0200 Subject: [PATCH 214/357] fossil & igloo -> new api --- mods/MAPGEN/mcl_mapgen_core/init.lua | 15 +- mods/MAPGEN/mcl_structures/api.lua | 21 +- mods/MAPGEN/mcl_structures/igloo.lua | 152 +++++++++++++ mods/MAPGEN/mcl_structures/init.lua | 258 +++-------------------- mods/MAPGEN/mcl_structures/witch_hut.lua | 49 +++++ 5 files changed, 246 insertions(+), 249 deletions(-) create mode 100644 mods/MAPGEN/mcl_structures/igloo.lua create mode 100644 mods/MAPGEN/mcl_structures/witch_hut.lua diff --git a/mods/MAPGEN/mcl_mapgen_core/init.lua b/mods/MAPGEN/mcl_mapgen_core/init.lua index 25065be2a..f9745b471 100644 --- a/mods/MAPGEN/mcl_mapgen_core/init.lua +++ b/mods/MAPGEN/mcl_mapgen_core/init.lua @@ -1264,8 +1264,8 @@ end local function generate_structures(minp, maxp, blockseed, biomemap) local chunk_has_igloo = false local struct_min, struct_max = -3, 111 --64 - - if maxp.y >= struct_min and minp.y <= struct_max then + --except end exit portall all v6 + if mg_name == "v6" and maxp.y >= struct_min and minp.y <= struct_max then -- Generate structures local pr = PcgRandom(blockseed) perlin_structures = perlin_structures or minetest.get_perlin(329, 3, 0.6, 100) @@ -1334,7 +1334,7 @@ local function generate_structures(minp, maxp, blockseed, biomemap) -- Witch hut (v6) if ground_y <= 0 and nn == "mcl_core:dirt" then local prob = minecraft_chunk_probability(48, minp, maxp) - if mg_name == "v6" and pr:next(1, prob) == 1 then + if pr:next(1, prob) == 1 then local swampland = minetest.get_biome_id("Swampland") local swampland_shore = minetest.get_biome_id("Swampland_shore") @@ -1425,7 +1425,7 @@ local function generate_structures(minp, maxp, blockseed, biomemap) -- Ice spikes in v6 -- In other mapgens, ice spikes are generated as decorations. - if mg_name == "v6" and nn == "mcl_core:snowblock" then + if nn == "mcl_core:snowblock" then local spike = pr:next(1,58000) if spike < 3 then -- Check surface @@ -1710,14 +1710,9 @@ local function generate_underground_mushrooms(minp, maxp, seed) end end -local nether_wart_chance -if mg_name == "v6" then - nether_wart_chance = 85 -else - nether_wart_chance = 170 -end -- Generate Nether decorations manually: Eternal fire, mushrooms, nether wart -- (only v6) +local nether_wart_chance = 85 local function generate_nether_decorations(minp, maxp, seed) local pr_nether = PseudoRandom(seed+667) diff --git a/mods/MAPGEN/mcl_structures/api.lua b/mods/MAPGEN/mcl_structures/api.lua index d9ab21702..65532b245 100644 --- a/mods/MAPGEN/mcl_structures/api.lua +++ b/mods/MAPGEN/mcl_structures/api.lua @@ -43,20 +43,25 @@ function mcl_structures.place_structure(pos, def, pr) end local pp = vector.offset(pos,0,y_offset,0) if def.solid_ground and def.sidelen then - local bn = minetest.get_biome_name(minetest.get_biome_data(pos).biome) - local node_top = minetest.registered_biomes[bn].node_top - local node_fill = minetest.registered_biomes[bn].node_filler - local node_stone = minetest.registered_biomes[bn].node_stone + local node_stone = "mcl_core:stone" + local node_filler = "mcl_core:dirt" + local node_top = "mcl_core:dirt_with_grass" + + if minetest.get_mapgen_setting("mg_name") ~= "v6" then + local b = minetest.registered_biomes[minetest.get_biome_name(minetest.get_biome_data(pos).biome)] + if b.node_top then node_top = b.node_top end + if b.node_filler then node_filler = b.node_filler end + if b.node_stone then node_stone = b.node_stone end + end + local ground_p1 = vector.offset(pos,-def.sidelen/2,-1,-def.sidelen/2) local ground_p2 = vector.offset(pos,def.sidelen/2,-1,def.sidelen/2) - if not node_stone then node_stone = "mcl_core:stone" end - if not node_fill then node_fill = "mcl_core:dirt" end - if not node_top then node_top = "mcl_core:dirt_with_grass" end + local solid = minetest.find_nodes_in_area(ground_p1,ground_p2,{"group:solid"}) if #solid < ( def.sidelen * def.sidelen ) then if def.make_foundation then minetest.bulk_set_node(minetest.find_nodes_in_area(ground_p1,ground_p2,{"air","group:liquid"}),{name=node_top}) - minetest.bulk_set_node(minetest.find_nodes_in_area(vector.offset(ground_p1,0,-1,0),vector.offset(ground_p2,0,-4,0),{"air","group:liquid"}),{name=node_fill}) + minetest.bulk_set_node(minetest.find_nodes_in_area(vector.offset(ground_p1,0,-1,0),vector.offset(ground_p2,0,-4,0),{"air","group:liquid"}),{name=node_filler}) minetest.bulk_set_node(minetest.find_nodes_in_area(vector.offset(ground_p1,0,-5,0),vector.offset(ground_p2,0,-30,0),{"air","group:liquid"}),{name=node_stone}) else if logging then diff --git a/mods/MAPGEN/mcl_structures/igloo.lua b/mods/MAPGEN/mcl_structures/igloo.lua new file mode 100644 index 000000000..15363be51 --- /dev/null +++ b/mods/MAPGEN/mcl_structures/igloo.lua @@ -0,0 +1,152 @@ +local modname = minetest.get_current_modname() +local S = minetest.get_translator(modname) +local modpath = minetest.get_modpath(modname) + +function mcl_structures.generate_igloo_top(pos, pr) + -- FIXME: This spawns bookshelf instead of furnace. Fix this! + -- Furnace does ot work atm because apparently meta is not set. :-( + local newpos = {x=pos.x,y=pos.y-1,z=pos.z} + local path = modpath.."/schematics/mcl_structures_igloo_top.mts" + local rotation = tostring(pr:next(0,3)*90) + return mcl_structures.place_schematic(newpos, path, rotation, nil, true), rotation +end + +function mcl_structures.generate_igloo_basement(pos, orientation, pr) + -- TODO: Add brewing stand + -- TODO: Add monster eggs + -- TODO: Spawn villager and zombie villager + local path = modpath.."/schematics/mcl_structures_igloo_basement.mts" + mcl_structures.place_schematic(pos, path, orientation, nil, true, nil, igloo_placement_callback, pr) +end + +function mcl_structures.generate_igloo(pos, def, pr) + -- Place igloo + local success, rotation = mcl_structures.generate_igloo_top(pos, pr) + -- Place igloo basement with 50% chance + local r = pr:next(1,2) + if r == 1 then + -- Select basement depth + local dim = mcl_worlds.pos_to_dimension(pos) + --local buffer = pos.y - (mcl_vars.mg_lava_overworld_max + 10) + local buffer + if dim == "nether" then + buffer = pos.y - (mcl_vars.mg_lava_nether_max + 10) + elseif dim == "end" then + buffer = pos.y - (mcl_vars.mg_end_min + 1) + elseif dim == "overworld" then + buffer = pos.y - (mcl_vars.mg_lava_overworld_max + 10) + else + return success + end + if buffer <= 19 then + return success + end + local depth = pr:next(19, buffer) + local bpos = {x=pos.x, y=pos.y-depth, z=pos.z} + -- trapdoor position + local tpos + local dir, tdir + if rotation == "0" then + dir = {x=-1, y=0, z=0} + tdir = {x=1, y=0, z=0} + tpos = {x=pos.x+7, y=pos.y-1, z=pos.z+3} + elseif rotation == "90" then + dir = {x=0, y=0, z=-1} + tdir = {x=0, y=0, z=-1} + tpos = {x=pos.x+3, y=pos.y-1, z=pos.z+1} + elseif rotation == "180" then + dir = {x=1, y=0, z=0} + tdir = {x=-1, y=0, z=0} + tpos = {x=pos.x+1, y=pos.y-1, z=pos.z+3} + elseif rotation == "270" then + dir = {x=0, y=0, z=1} + tdir = {x=0, y=0, z=1} + tpos = {x=pos.x+3, y=pos.y-1, z=pos.z+7} + else + return success + end + local function set_brick(pos) + local c = pr:next(1, 3) -- cracked chance + local m = pr:next(1, 10) -- chance for monster egg + local brick + if m == 1 then + if c == 1 then + brick = "mcl_monster_eggs:monster_egg_stonebrickcracked" + else + brick = "mcl_monster_eggs:monster_egg_stonebrick" + end + else + if c == 1 then + brick = "mcl_core:stonebrickcracked" + else + brick = "mcl_core:stonebrick" + end + end + minetest.set_node(pos, {name=brick}) + end + local ladder_param2 = minetest.dir_to_wallmounted(tdir) + local real_depth = 0 + -- Check how deep we can actuall dig + for y=1, depth-5 do + real_depth = real_depth + 1 + local node = minetest.get_node({x=tpos.x,y=tpos.y-y,z=tpos.z}) + local def = minetest.registered_nodes[node.name] + if not (def and def.walkable and def.liquidtype == "none" and def.is_ground_content) then + bpos.y = tpos.y-y+1 + break + end + end + if real_depth <= 6 then + return success + end + -- Generate ladder to basement + for y=1, real_depth-1 do + set_brick({x=tpos.x-1,y=tpos.y-y,z=tpos.z }) + set_brick({x=tpos.x+1,y=tpos.y-y,z=tpos.z }) + set_brick({x=tpos.x ,y=tpos.y-y,z=tpos.z-1}) + set_brick({x=tpos.x ,y=tpos.y-y,z=tpos.z+1}) + minetest.set_node({x=tpos.x,y=tpos.y-y,z=tpos.z}, {name="mcl_core:ladder", param2=ladder_param2}) + end + -- Place basement + mcl_structures.generate_igloo_basement(bpos, rotation, pr) + -- Place hidden trapdoor + minetest.after(5, function(tpos, dir) + minetest.set_node(tpos, {name="mcl_doors:trapdoor", param2=20+minetest.dir_to_facedir(dir)}) -- TODO: more reliable param2 + end, tpos, dir) + end + return success +end + +mcl_structures.register_structure("igloo",{ + place_on = {"mcl_core:snowblock","mcl_core:snow","group:grass_block_snow"}, + fill_ratio = 0.01, + sidelen = 16, + chunk_probability = 4400, + y_max = mcl_vars.mg_overworld_max, + y_min = 0, + y_offset = 0, + biomes = { "ColdTaiga", "IcePlainsSpikes", "IcePlains" }, + place_func = mcl_structures.generate_igloo, + loot = { + ["mcl_chests:chest"] = {{ + stacks_min = 1, + stacks_max = 1, + items = { + { itemstring = "mcl_core:apple_gold", weight = 1 }, + } + }, + { + stacks_min = 2, + stacks_max = 8, + items = { + { itemstring = "mcl_core:coal_lump", weight = 15, amount_min = 1, amount_max = 4 }, + { itemstring = "mcl_core:apple", weight = 15, amount_min = 1, amount_max = 3 }, + { itemstring = "mcl_farming:wheat_item", weight = 10, amount_min = 2, amount_max = 3 }, + { itemstring = "mcl_core:gold_nugget", weight = 10, amount_min = 1, amount_max = 3 }, + { itemstring = "mcl_mobitems:rotten_flesh", weight = 10 }, + { itemstring = "mcl_tools:axe_stone", weight = 2 }, + { itemstring = "mcl_core:emerald", weight = 1 }, + } + }}, + } +}) diff --git a/mods/MAPGEN/mcl_structures/init.lua b/mods/MAPGEN/mcl_structures/init.lua index a8a2d9b1b..809448d2e 100644 --- a/mods/MAPGEN/mcl_structures/init.lua +++ b/mods/MAPGEN/mcl_structures/init.lua @@ -75,11 +75,7 @@ function mcl_structures.call_struct(pos, struct_style, rotation, pr) if not rotation then rotation = "random" end - if struct_style == "igloo" then - return mcl_structures.generate_igloo(pos, rotation, pr) - elseif struct_style == "fossil" then - return mcl_structures.generate_fossil(pos, rotation, pr) - elseif struct_style == "end_exit_portal" then + if struct_style == "end_exit_portal" then return mcl_structures.generate_end_exit_portal(pos, rotation) elseif struct_style == "end_exit_portal_open" then return mcl_structures.generate_end_exit_portal_open(pos, rotation) @@ -90,197 +86,6 @@ function mcl_structures.call_struct(pos, struct_style, rotation, pr) end end -function mcl_structures.generate_igloo(pos, rotation, pr) - -- Place igloo - local success, rotation = mcl_structures.generate_igloo_top(pos, pr) - -- Place igloo basement with 50% chance - local r = pr:next(1,2) - if r == 1 then - -- Select basement depth - local dim = mcl_worlds.pos_to_dimension(pos) - --local buffer = pos.y - (mcl_vars.mg_lava_overworld_max + 10) - local buffer - if dim == "nether" then - buffer = pos.y - (mcl_vars.mg_lava_nether_max + 10) - elseif dim == "end" then - buffer = pos.y - (mcl_vars.mg_end_min + 1) - elseif dim == "overworld" then - buffer = pos.y - (mcl_vars.mg_lava_overworld_max + 10) - else - return success - end - if buffer <= 19 then - return success - end - local depth = pr:next(19, buffer) - local bpos = {x=pos.x, y=pos.y-depth, z=pos.z} - -- trapdoor position - local tpos - local dir, tdir - if rotation == "0" then - dir = {x=-1, y=0, z=0} - tdir = {x=1, y=0, z=0} - tpos = {x=pos.x+7, y=pos.y-1, z=pos.z+3} - elseif rotation == "90" then - dir = {x=0, y=0, z=-1} - tdir = {x=0, y=0, z=-1} - tpos = {x=pos.x+3, y=pos.y-1, z=pos.z+1} - elseif rotation == "180" then - dir = {x=1, y=0, z=0} - tdir = {x=-1, y=0, z=0} - tpos = {x=pos.x+1, y=pos.y-1, z=pos.z+3} - elseif rotation == "270" then - dir = {x=0, y=0, z=1} - tdir = {x=0, y=0, z=1} - tpos = {x=pos.x+3, y=pos.y-1, z=pos.z+7} - else - return success - end - local function set_brick(pos) - local c = pr:next(1, 3) -- cracked chance - local m = pr:next(1, 10) -- chance for monster egg - local brick - if m == 1 then - if c == 1 then - brick = "mcl_monster_eggs:monster_egg_stonebrickcracked" - else - brick = "mcl_monster_eggs:monster_egg_stonebrick" - end - else - if c == 1 then - brick = "mcl_core:stonebrickcracked" - else - brick = "mcl_core:stonebrick" - end - end - minetest.set_node(pos, {name=brick}) - end - local ladder_param2 = minetest.dir_to_wallmounted(tdir) - local real_depth = 0 - -- Check how deep we can actuall dig - for y=1, depth-5 do - real_depth = real_depth + 1 - local node = minetest.get_node({x=tpos.x,y=tpos.y-y,z=tpos.z}) - local def = minetest.registered_nodes[node.name] - if not (def and def.walkable and def.liquidtype == "none" and def.is_ground_content) then - bpos.y = tpos.y-y+1 - break - end - end - if real_depth <= 6 then - return success - end - -- Generate ladder to basement - for y=1, real_depth-1 do - set_brick({x=tpos.x-1,y=tpos.y-y,z=tpos.z }) - set_brick({x=tpos.x+1,y=tpos.y-y,z=tpos.z }) - set_brick({x=tpos.x ,y=tpos.y-y,z=tpos.z-1}) - set_brick({x=tpos.x ,y=tpos.y-y,z=tpos.z+1}) - minetest.set_node({x=tpos.x,y=tpos.y-y,z=tpos.z}, {name="mcl_core:ladder", param2=ladder_param2}) - end - -- Place basement - mcl_structures.generate_igloo_basement(bpos, rotation, pr) - -- Place hidden trapdoor - minetest.after(5, function(tpos, dir) - minetest.set_node(tpos, {name="mcl_doors:trapdoor", param2=20+minetest.dir_to_facedir(dir)}) -- TODO: more reliable param2 - end, tpos, dir) - end - return success -end - -function mcl_structures.generate_igloo_top(pos, pr) - -- FIXME: This spawns bookshelf instead of furnace. Fix this! - -- Furnace does ot work atm because apparently meta is not set. :-( - local newpos = {x=pos.x,y=pos.y-1,z=pos.z} - local path = modpath.."/schematics/mcl_structures_igloo_top.mts" - local rotation = tostring(pr:next(0,3)*90) - return mcl_structures.place_schematic(newpos, path, rotation, nil, true), rotation -end - -local function igloo_placement_callback(p1, p2, size, orientation, pr) - local chest_offset - if orientation == "0" then - chest_offset = {x=5, y=1, z=5} - elseif orientation == "90" then - chest_offset = {x=5, y=1, z=3} - elseif orientation == "180" then - chest_offset = {x=3, y=1, z=1} - elseif orientation == "270" then - chest_offset = {x=1, y=1, z=5} - else - return - end - --local size = {x=9,y=5,z=7} - local lootitems = mcl_loot.get_multi_loot({ - { - stacks_min = 1, - stacks_max = 1, - items = { - { itemstring = "mcl_core:apple_gold", weight = 1 }, - } - }, - { - stacks_min = 2, - stacks_max = 8, - items = { - { itemstring = "mcl_core:coal_lump", weight = 15, amount_min = 1, amount_max = 4 }, - { itemstring = "mcl_core:apple", weight = 15, amount_min = 1, amount_max = 3 }, - { itemstring = "mcl_farming:wheat_item", weight = 10, amount_min = 2, amount_max = 3 }, - { itemstring = "mcl_core:gold_nugget", weight = 10, amount_min = 1, amount_max = 3 }, - { itemstring = "mcl_mobitems:rotten_flesh", weight = 10 }, - { itemstring = "mcl_tools:axe_stone", weight = 2 }, - { itemstring = "mcl_core:emerald", weight = 1 }, - } - }}, pr) - - local chest_pos = vector.add(p1, chest_offset) - init_node_construct(chest_pos) - local meta = minetest.get_meta(chest_pos) - local inv = meta:get_inventory() - mcl_loot.fill_inventory(inv, "main", lootitems, pr) -end - -function mcl_structures.generate_igloo_basement(pos, orientation, pr) - -- TODO: Add brewing stand - -- TODO: Add monster eggs - -- TODO: Spawn villager and zombie villager - local path = modpath.."/schematics/mcl_structures_igloo_basement.mts" - mcl_structures.place_schematic(pos, path, orientation, nil, true, nil, igloo_placement_callback, pr) -end - -local function spawn_witch(p1,p2) - local c = minetest.find_node_near(p1,15,{"mcl_cauldrons:cauldron"}) - if c then - local nn = minetest.find_nodes_in_area_under_air(vector.new(p1.x,c.y-1,p1.z),vector.new(p2.x,c.y-1,p2.z),{"mcl_core:sprucewood"}) - local witch = minetest.add_entity(vector.offset(nn[math.random(#nn)],0,1,0),"mobs_mc:witch"):get_luaentity() - local cat = minetest.add_entity(vector.offset(nn[math.random(#nn)],0,1,0),"mobs_mc:cat"):get_luaentity() - witch._home = c - witch.can_despawn = false - cat.object:set_properties({textures = {"mobs_mc_cat_black.png"}}) - cat.owner = "!witch!" --so it's not claimable by player - cat._home = c - cat.can_despawn = false - return - end -end - -function mcl_structures.generate_fossil(pos, rotation, pr) - -- Generates one out of 8 possible fossil pieces - local newpos = {x=pos.x,y=pos.y-1,z=pos.z} - local fossils = { - "mcl_structures_fossil_skull_1.mts", -- 4×5×5 - "mcl_structures_fossil_skull_2.mts", -- 5×5×5 - "mcl_structures_fossil_skull_3.mts", -- 5×5×7 - "mcl_structures_fossil_skull_4.mts", -- 7×5×5 - "mcl_structures_fossil_spine_1.mts", -- 3×3×13 - "mcl_structures_fossil_spine_2.mts", -- 5×4×13 - "mcl_structures_fossil_spine_3.mts", -- 7×4×13 - "mcl_structures_fossil_spine_4.mts", -- 8×5×13 - } - local r = pr:next(1, #fossils) - local path = modpath.."/schematics/"..fossils[r] - return mcl_structures.place_schematic(newpos, path, rotation or "random", nil, true) -end function mcl_structures.generate_end_exit_portal(pos, rot) local path = modpath.."/schematics/mcl_structures_end_exit_portal.mts" @@ -429,37 +234,10 @@ dofile(modpath.."/api.lua") dofile(modpath.."/desert_temple.lua") dofile(modpath.."/jungle_temple.lua") dofile(modpath.."/ocean_ruins.lua") +dofile(modpath.."/witch_hut.lua") +dofile(modpath.."/igloo.lua") -local function hut_placement_callback(pos,def,pr) - local hl = def.sidelen / 2 - local p1 = vector.offset(pos,-hl,-hl,-hl) - local p2 = vector.offset(pos,hl,hl,hl) - if not p1 or not p2 then return end - local legs = minetest.find_nodes_in_area(p1, p2, "mcl_core:tree") - local tree = {} - for i = 1, #legs do - while minetest.get_item_group(mcl_vars.get_node({x=legs[i].x, y=legs[i].y-1, z=legs[i].z}, true, 333333).name, "water") ~= 0 do - legs[i].y = legs[i].y - 1 - table.insert(tree,legs[i]) - end - end - minetest.bulk_set_node(tree, {name = "mcl_core:tree", param2 = 2}) - spawn_witch(p1,p2) -end -mcl_structures.register_structure("witch_hut",{ - place_on = {"group:sand","group:grass_block","mcl_core:water_source","group:dirt"}, - fill_ratio = 0.01, - flags = "place_center_x, place_center_z, liquid_surface, force_placement", - sidelen = 5, - chunk_probability = 128, - y_max = mcl_vars.mg_overworld_max, - y_min = -4, - y_offset = 0, - biomes = { "Swampland", "Swampland_ocean", "Swampland_shore" }, - filenames = { modpath.."/schematics/mcl_structures_witch_hut.mts" }, - after_place = hut_placement_callback, -}) mcl_structures.register_structure("desert_well",{ place_on = {"group:sand"}, fill_ratio = 0.01, @@ -475,6 +253,28 @@ mcl_structures.register_structure("desert_well",{ filenames = { modpath.."/schematics/mcl_structures_desert_well.mts" }, }) +mcl_structures.register_structure("fossil",{ + place_on = {"group:material_stone"}, + fill_ratio = 0.01, + flags = "place_center_x, place_center_z", + solid_ground = true, + sidelen = 13, + chunk_probability = 256, + y_max = 1, + y_min = mcl_vars.mg_overworld_min, + biomes = { "Desert" }, + filenames = { + modpath.."/schematics/mcl_structures_fossil_skull_1.mts", -- 4×5×5 + modpath.."/schematics/mcl_structures_fossil_skull_2.mts", -- 5×5×5 + modpath.."/schematics/mcl_structures_fossil_skull_3.mts", -- 5×5×7 + modpath.."/schematics/mcl_structures_fossil_skull_4.mts", -- 7×5×5 + modpath.."/schematics/mcl_structures_fossil_spine_1.mts", -- 3×3×13 + modpath.."/schematics/mcl_structures_fossil_spine_2.mts", -- 5×4×13 + modpath.."/schematics/mcl_structures_fossil_spine_3.mts", -- 7×4×13 + modpath.."/schematics/mcl_structures_fossil_spine_4.mts", -- 8×5×13 + }, +}) + mcl_structures.register_structure("boulder",{ filenames = { modpath.."/schematics/mcl_structures_boulder_small.mts", @@ -498,7 +298,7 @@ mcl_structures.register_structure("ice_spike_large",{ -- Debug command minetest.register_chatcommand("spawnstruct", { - params = "igloo | end_exit_portal | end_exit_portal_open | end_gateway_portal | end_portal_shrine | nether_portal | dungeon", + params = "end_exit_portal | end_exit_portal_open | end_gateway_portal | end_portal_shrine | nether_portal | dungeon", description = S("Generate a pre-defined structure near your position."), privs = {debug = true}, func = function(name, param) @@ -512,11 +312,7 @@ minetest.register_chatcommand("spawnstruct", { local pr = PseudoRandom(pos.x+pos.y+pos.z) local errord = false local message = S("Structure placed.") - if param == "igloo" then - mcl_structures.generate_igloo(pos, rot, pr) - elseif param == "fossil" then - mcl_structures.generate_fossil(pos, rot, pr) - elseif param == "end_exit_portal" then + if param == "end_exit_portal" then mcl_structures.generate_end_exit_portal(pos, rot, pr) elseif param == "end_exit_portal_open" then mcl_structures.generate_end_exit_portal_open(pos, rot, pr) diff --git a/mods/MAPGEN/mcl_structures/witch_hut.lua b/mods/MAPGEN/mcl_structures/witch_hut.lua new file mode 100644 index 000000000..6c2250b76 --- /dev/null +++ b/mods/MAPGEN/mcl_structures/witch_hut.lua @@ -0,0 +1,49 @@ +local modname = minetest.get_current_modname() +local S = minetest.get_translator(modname) +local modpath = minetest.get_modpath(modname) + +local function spawn_witch(p1,p2) + local c = minetest.find_node_near(p1,15,{"mcl_cauldrons:cauldron"}) + if c then + local nn = minetest.find_nodes_in_area_under_air(vector.new(p1.x,c.y-1,p1.z),vector.new(p2.x,c.y-1,p2.z),{"mcl_core:sprucewood"}) + local witch = minetest.add_entity(vector.offset(nn[math.random(#nn)],0,1,0),"mobs_mc:witch"):get_luaentity() + local cat = minetest.add_entity(vector.offset(nn[math.random(#nn)],0,1,0),"mobs_mc:cat"):get_luaentity() + witch._home = c + witch.can_despawn = false + cat.object:set_properties({textures = {"mobs_mc_cat_black.png"}}) + cat.owner = "!witch!" --so it's not claimable by player + cat._home = c + cat.can_despawn = false + return + end +end + +local function hut_placement_callback(pos,def,pr) + local hl = def.sidelen / 2 + local p1 = vector.offset(pos,-hl,-hl,-hl) + local p2 = vector.offset(pos,hl,hl,hl) + local legs = minetest.find_nodes_in_area(p1, p2, "mcl_core:tree") + local tree = {} + for i = 1, #legs do + while minetest.get_item_group(mcl_vars.get_node({x=legs[i].x, y=legs[i].y-1, z=legs[i].z}, true, 333333).name, "water") ~= 0 do + legs[i].y = legs[i].y - 1 + table.insert(tree,legs[i]) + end + end + minetest.bulk_set_node(tree, {name = "mcl_core:tree", param2 = 2}) + spawn_witch(p1,p2) +end + +mcl_structures.register_structure("witch_hut",{ + place_on = {"group:sand","group:grass_block","mcl_core:water_source","group:dirt"}, + fill_ratio = 0.01, + flags = "place_center_x, place_center_z, liquid_surface, force_placement", + sidelen = 5, + chunk_probability = 128, + y_max = mcl_vars.mg_overworld_max, + y_min = -4, + y_offset = 0, + biomes = { "Swampland", "Swampland_ocean", "Swampland_shore" }, + filenames = { modpath.."/schematics/mcl_structures_witch_hut.mts" }, + after_place = hut_placement_callback, +}) -- 2.40.1 From 7945de132480312c9159154180fa3399b16c2be7 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 24 Jun 2022 23:24:51 +0200 Subject: [PATCH 215/357] igloo fixes, mobspawns, move geode to mcl_structs --- mods/MAPGEN/mcl_geodes/mod.conf | 3 -- mods/MAPGEN/mcl_structures/api.lua | 51 +++++++++++-------- .../init.lua => mcl_structures/geode.lua} | 4 +- mods/MAPGEN/mcl_structures/igloo.lua | 21 ++++++-- mods/MAPGEN/mcl_structures/init.lua | 2 + mods/MAPGEN/mcl_structures/jungle_temple.lua | 2 +- mods/MAPGEN/mcl_structures/ocean_ruins.lua | 4 +- mods/MAPGEN/mcl_structures/witch_hut.lua | 2 +- 8 files changed, 55 insertions(+), 34 deletions(-) delete mode 100644 mods/MAPGEN/mcl_geodes/mod.conf rename mods/MAPGEN/{mcl_geodes/init.lua => mcl_structures/geode.lua} (96%) diff --git a/mods/MAPGEN/mcl_geodes/mod.conf b/mods/MAPGEN/mcl_geodes/mod.conf deleted file mode 100644 index cccb57108..000000000 --- a/mods/MAPGEN/mcl_geodes/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_geodes -author = cora -depends = mcl_init, mcl_structures diff --git a/mods/MAPGEN/mcl_structures/api.lua b/mods/MAPGEN/mcl_structures/api.lua index 65532b245..dc1f905f2 100644 --- a/mods/MAPGEN/mcl_structures/api.lua +++ b/mods/MAPGEN/mcl_structures/api.lua @@ -1,13 +1,11 @@ mcl_structures.registered_structures = {} -local function generate_loot(pos, def, pr) - local hl = def.sidelen / 2 - local p1 = vector.offset(pos,-hl,-hl,-hl) - local p2 = vector.offset(pos,hl,hl,hl) - for it,lt in pairs(def.loot) do + +function mcl_structures.fill_chests(p1,p2,loot,pr) + for it,lt in pairs(loot) do local nodes = minetest.find_nodes_in_area(p1, p2, it) for _,p in pairs(nodes) do - local lootitems = mcl_loot.get_multi_loot( lt, pr) + local lootitems = mcl_loot.get_multi_loot(lt, pr) mcl_structures.init_node_construct(p) local meta = minetest.get_meta(p) local inv = meta:get_inventory() @@ -16,6 +14,14 @@ local function generate_loot(pos, def, pr) end end +local function generate_loot(pos, def, pr) + local hl = def.sidelen / 2 + local p1 = vector.offset(pos,-hl,-hl,-hl) + local p2 = vector.offset(pos,hl,hl,hl) + if def.loot then mcl_structures.fill_chests(p1,p2,def.loot,pr) end +end + + function mcl_structures.find_lowest_y(pp) local y = 31000 for _,p in pairs(pp) do @@ -43,26 +49,31 @@ function mcl_structures.place_structure(pos, def, pr) end local pp = vector.offset(pos,0,y_offset,0) if def.solid_ground and def.sidelen then - local node_stone = "mcl_core:stone" - local node_filler = "mcl_core:dirt" - local node_top = "mcl_core:dirt_with_grass" - - if minetest.get_mapgen_setting("mg_name") ~= "v6" then - local b = minetest.registered_biomes[minetest.get_biome_name(minetest.get_biome_data(pos).biome)] - if b.node_top then node_top = b.node_top end - if b.node_filler then node_filler = b.node_filler end - if b.node_stone then node_stone = b.node_stone end - end - local ground_p1 = vector.offset(pos,-def.sidelen/2,-1,-def.sidelen/2) local ground_p2 = vector.offset(pos,def.sidelen/2,-1,def.sidelen/2) local solid = minetest.find_nodes_in_area(ground_p1,ground_p2,{"group:solid"}) if #solid < ( def.sidelen * def.sidelen ) then if def.make_foundation then - minetest.bulk_set_node(minetest.find_nodes_in_area(ground_p1,ground_p2,{"air","group:liquid"}),{name=node_top}) - minetest.bulk_set_node(minetest.find_nodes_in_area(vector.offset(ground_p1,0,-1,0),vector.offset(ground_p2,0,-4,0),{"air","group:liquid"}),{name=node_filler}) - minetest.bulk_set_node(minetest.find_nodes_in_area(vector.offset(ground_p1,0,-5,0),vector.offset(ground_p2,0,-30,0),{"air","group:liquid"}),{name=node_stone}) + local node_stone = "mcl_core:stone" + local node_filler = "mcl_core:dirt" + local node_top = "mcl_core:dirt_with_grass" or minetest.get_node(ground_p1).name + local node_dust = nil + + if minetest.get_mapgen_setting("mg_name") ~= "v6" then + local b = minetest.registered_biomes[minetest.get_biome_name(minetest.get_biome_data(pos).biome)] + --minetest.log(dump(b.node_top)) + if b.node_top then node_top = b.node_top end + if b.node_filler then node_filler = b.node_filler end + if b.node_stone then node_stone = b.node_stone end + if b.node_dust then node_dust = b.node_dust end + end + minetest.bulk_set_node(minetest.find_nodes_in_area(ground_p1,ground_p2,{"air","group:liquid","mcl_core:snow"}),{name=node_top}) + if node_dust then + minetest.bulk_set_node(minetest.find_nodes_in_area(vector.offset(ground_p1,0,1,0),vector.offset(ground_p2,0,1,0),{"air"}),{name=node_dust}) + end + minetest.bulk_set_node(minetest.find_nodes_in_area(vector.offset(ground_p1,0,-1,0),vector.offset(ground_p2,0,-4,0),{"air","group:liquid","mcl_core:snow"}),{name=node_filler}) + minetest.bulk_set_node(minetest.find_nodes_in_area(vector.offset(ground_p1,0,-5,0),vector.offset(ground_p2,0,-30,0),{"air","group:liquid","mcl_core:snow"}),{name=node_stone}) else if logging then minetest.log("warning","[mcl_structures] "..def.name.." at "..minetest.pos_to_string(pos).." not placed. No solid ground.") diff --git a/mods/MAPGEN/mcl_geodes/init.lua b/mods/MAPGEN/mcl_structures/geode.lua similarity index 96% rename from mods/MAPGEN/mcl_geodes/init.lua rename to mods/MAPGEN/mcl_structures/geode.lua index a1ea0b631..81b505558 100644 --- a/mods/MAPGEN/mcl_geodes/init.lua +++ b/mods/MAPGEN/mcl_structures/geode.lua @@ -65,7 +65,7 @@ local function makegeode(pos,def,pr) end mcl_structures.register_structure("geode",{ - place_on = {"mcl_core:stone"}, + place_on = {"group:material_stone"}, noise_params = { offset = 0, scale = 0.00022, @@ -75,7 +75,7 @@ mcl_structures.register_structure("geode",{ persist = 0.001, flags = "absvalue", }, - flags = "place_center_x, place_center_z, force_placement", + flags = "force_placement", terrain_feature = true, y_max = -24, y_min = mcl_vars.mg_overworld_min, diff --git a/mods/MAPGEN/mcl_structures/igloo.lua b/mods/MAPGEN/mcl_structures/igloo.lua index 15363be51..d364ec492 100644 --- a/mods/MAPGEN/mcl_structures/igloo.lua +++ b/mods/MAPGEN/mcl_structures/igloo.lua @@ -5,18 +5,27 @@ local modpath = minetest.get_modpath(modname) function mcl_structures.generate_igloo_top(pos, pr) -- FIXME: This spawns bookshelf instead of furnace. Fix this! -- Furnace does ot work atm because apparently meta is not set. :-( - local newpos = {x=pos.x,y=pos.y-1,z=pos.z} + local newpos = {x=pos.x,y=pos.y-2,z=pos.z} local path = modpath.."/schematics/mcl_structures_igloo_top.mts" local rotation = tostring(pr:next(0,3)*90) return mcl_structures.place_schematic(newpos, path, rotation, nil, true), rotation end -function mcl_structures.generate_igloo_basement(pos, orientation, pr) +function mcl_structures.generate_igloo_basement(pos, orientation, loot, pr) -- TODO: Add brewing stand -- TODO: Add monster eggs - -- TODO: Spawn villager and zombie villager local path = modpath.."/schematics/mcl_structures_igloo_basement.mts" - mcl_structures.place_schematic(pos, path, orientation, nil, true, nil, igloo_placement_callback, pr) + mcl_structures.place_schematic(pos, path, orientation, nil, true, nil, function() + local p1 = vector.offset(pos,-5,-5,-5) + local p2 = vector.offset(pos,5,5,5) + mcl_structures.fill_chests(p1,p2,loot,pr) + local mc = minetest.find_nodes_in_area_under_air(p1,p2,{"mcl_core:stonebrickmossy"}) + if #mc == 2 then + table.shuffle(mc) + minetest.add_entity(vector.offset(mc[1],0,1,0),"mobs_mc:villager") + minetest.add_entity(vector.offset(mc[2],0,1,0),"mobs_mc:villager_zombie") + end + end, pr) end function mcl_structures.generate_igloo(pos, def, pr) @@ -108,7 +117,7 @@ function mcl_structures.generate_igloo(pos, def, pr) minetest.set_node({x=tpos.x,y=tpos.y-y,z=tpos.z}, {name="mcl_core:ladder", param2=ladder_param2}) end -- Place basement - mcl_structures.generate_igloo_basement(bpos, rotation, pr) + mcl_structures.generate_igloo_basement(bpos, rotation, def.loot, pr) -- Place hidden trapdoor minetest.after(5, function(tpos, dir) minetest.set_node(tpos, {name="mcl_doors:trapdoor", param2=20+minetest.dir_to_facedir(dir)}) -- TODO: more reliable param2 @@ -122,6 +131,8 @@ mcl_structures.register_structure("igloo",{ fill_ratio = 0.01, sidelen = 16, chunk_probability = 4400, + solid_ground = true, + make_foundation = true, y_max = mcl_vars.mg_overworld_max, y_min = 0, y_offset = 0, diff --git a/mods/MAPGEN/mcl_structures/init.lua b/mods/MAPGEN/mcl_structures/init.lua index 809448d2e..d54fc2dea 100644 --- a/mods/MAPGEN/mcl_structures/init.lua +++ b/mods/MAPGEN/mcl_structures/init.lua @@ -39,6 +39,7 @@ function mcl_structures.place_schematic(pos, schematic, rotation, replacements, minetest.log("verbose", "[mcl_structures] size=" ..minetest.pos_to_string(s.size) .. ", rotation=" .. tostring(rotation) .. ", emerge from "..minetest.pos_to_string(p1) .. " to " .. minetest.pos_to_string(p2)) local param = {pos=vector.new(pos), schematic=s, rotation=rotation, replacements=replacements, force_placement=force_placement, flags=flags, p1=p1, p2=p2, after_placement_callback = after_placement_callback, size=vector.new(s.size), pr=pr, callback_param=callback_param} minetest.emerge_area(p1, p2, ecb_place, param) + return true end end @@ -236,6 +237,7 @@ dofile(modpath.."/jungle_temple.lua") dofile(modpath.."/ocean_ruins.lua") dofile(modpath.."/witch_hut.lua") dofile(modpath.."/igloo.lua") +dofile(modpath.."/geode.lua") mcl_structures.register_structure("desert_well",{ diff --git a/mods/MAPGEN/mcl_structures/jungle_temple.lua b/mods/MAPGEN/mcl_structures/jungle_temple.lua index aa5bf9412..1ac3bd1b4 100644 --- a/mods/MAPGEN/mcl_structures/jungle_temple.lua +++ b/mods/MAPGEN/mcl_structures/jungle_temple.lua @@ -4,7 +4,7 @@ local modpath = minetest.get_modpath(modname) mcl_structures.register_structure("jungle_temple",{ place_on = {"group:grass_block","group:dirt","mcl_core:dirt_with_grass"}, - fill_ratio = 0.1, + fill_ratio = 0.01, flags = "place_center_x, place_center_z", solid_ground = true, make_foundation = true, diff --git a/mods/MAPGEN/mcl_structures/ocean_ruins.lua b/mods/MAPGEN/mcl_structures/ocean_ruins.lua index dafc2dfff..df0a740f9 100644 --- a/mods/MAPGEN/mcl_structures/ocean_ruins.lua +++ b/mods/MAPGEN/mcl_structures/ocean_ruins.lua @@ -74,7 +74,7 @@ local cold = { place_on = {"group:sand","mcl_core:gravel","mcl_core:dirt","mcl_core:clay","group:material_stone"}, spawn_by = {"mcl_core:water_source"}, num_spawn_by = 2, - fill_ratio = 0.001, + fill_ratio = 0.01, flags = "place_center_x, place_center_z, force_placement", solid_ground = true, make_foundation = true, @@ -82,7 +82,7 @@ local cold = { y_min = mcl_vars.mg_overworld_min, y_max = -2, biomes = cold_oceans, - chunk_probability = 128, + chunk_probability = 256, sidelen = 20, filenames = { modpath.."/schematics/mcl_structures_ocean_ruins_cold_1.mts", diff --git a/mods/MAPGEN/mcl_structures/witch_hut.lua b/mods/MAPGEN/mcl_structures/witch_hut.lua index 6c2250b76..68b1c6809 100644 --- a/mods/MAPGEN/mcl_structures/witch_hut.lua +++ b/mods/MAPGEN/mcl_structures/witch_hut.lua @@ -39,7 +39,7 @@ mcl_structures.register_structure("witch_hut",{ fill_ratio = 0.01, flags = "place_center_x, place_center_z, liquid_surface, force_placement", sidelen = 5, - chunk_probability = 128, + chunk_probability = 256, y_max = mcl_vars.mg_overworld_max, y_min = -4, y_offset = 0, -- 2.40.1 From f5cc0ef2dc7ed0739c63d7d51b790b15429eddfa Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 25 Jun 2022 00:31:28 +0200 Subject: [PATCH 216/357] Move shipwrecks to mcl_structures --- mods/MAPGEN/mcl_shipwrecks/init.lua | 179 ------------------ mods/MAPGEN/mcl_shipwrecks/mod.conf | 3 - mods/MAPGEN/mcl_structures/api.lua | 2 +- mods/MAPGEN/mcl_structures/init.lua | 2 + mods/MAPGEN/mcl_structures/jungle_temple.lua | 2 +- ...tructures_shipwreck_full_back_damaged.mts} | Bin ...mcl_structures_shipwreck_full_damaged.mts} | Bin .../mcl_structures_shipwreck_full_normal.mts} | Bin .../mcl_structures_shipwreck_half_back.mts} | Bin .../mcl_structures_shipwreck_half_front.mts} | Bin mods/MAPGEN/mcl_structures/shipwrecks.lua | 161 ++++++++++++++++ 11 files changed, 165 insertions(+), 184 deletions(-) delete mode 100644 mods/MAPGEN/mcl_shipwrecks/init.lua delete mode 100644 mods/MAPGEN/mcl_shipwrecks/mod.conf rename mods/MAPGEN/{mcl_shipwrecks/schematics/shipwreck_full_back_damaged.mts => mcl_structures/schematics/mcl_structures_shipwreck_full_back_damaged.mts} (100%) rename mods/MAPGEN/{mcl_shipwrecks/schematics/shipwreck_full_damaged.mts => mcl_structures/schematics/mcl_structures_shipwreck_full_damaged.mts} (100%) rename mods/MAPGEN/{mcl_shipwrecks/schematics/shipwreck_full_normal.mts => mcl_structures/schematics/mcl_structures_shipwreck_full_normal.mts} (100%) rename mods/MAPGEN/{mcl_shipwrecks/schematics/shipwreck_half_back.mts => mcl_structures/schematics/mcl_structures_shipwreck_half_back.mts} (100%) rename mods/MAPGEN/{mcl_shipwrecks/schematics/shipwreck_half_front.mts => mcl_structures/schematics/mcl_structures_shipwreck_half_front.mts} (100%) create mode 100644 mods/MAPGEN/mcl_structures/shipwrecks.lua diff --git a/mods/MAPGEN/mcl_shipwrecks/init.lua b/mods/MAPGEN/mcl_shipwrecks/init.lua deleted file mode 100644 index a3861a2c9..000000000 --- a/mods/MAPGEN/mcl_shipwrecks/init.lua +++ /dev/null @@ -1,179 +0,0 @@ -local modname = minetest.get_current_modname() -local modpath = minetest.get_modpath(modname) ---local S = minetest.get_translator(modname) - -local seed = minetest.get_mapgen_setting("seed") -local water_level = minetest.get_mapgen_setting("water_level") -local pr = PseudoRandom(seed) - ---schematics by chmodsayshello -local schems = { - modpath.."/schematics/".."shipwreck_full_damaged"..".mts", - modpath.."/schematics/".."shipwreck_full_normal"..".mts", - modpath.."/schematics/".."shipwreck_full_back_damaged"..".mts", - modpath.."/schematics/".."shipwreck_half_front"..".mts", - modpath.."/schematics/".."shipwreck_half_back"..".mts", -} - -local function get_supply_loot() - return { - stacks_min = 3, - stacks_max = 10, - items = { - --{ itemstring = "TODO:sus_stew", weight = 10, amount_min = 1, amount_max = 1 }, - { itemstring = "mcl_core:paper", weight = 8, amount_min = 1, amount_max = 12 }, - { itemstring = "mcl_farming:wheat_item", weight = 7, amount_min = 8, amount_max = 21 }, - { itemstring = "mcl_farming:carrot_item", weight = 7, amount_min = 4, amount_max = 8 }, - { itemstring = "mcl_farming:potato_item_poison", weight = 7, amount_min = 2, amount_max = 6 }, - { itemstring = "mcl_farming:potato_item", weight = 7, amount_min = 2, amount_max = 6 }, - --{ itemstring = "TODO:moss_block", weight = 7, amount_min = 1, amount_max = 4 }, - { itemstring = "mcl_core:coal_lump", weight = 6, amount_min = 2, amount_max = 8 }, - { itemstring = "mcl_mobitems:rotten_flesh", weight = 5, amount_min = 5, amount_max = 24 }, - { itemstring = "mcl_farming:potato_item", weight = 3, amount_min = 1, amount_max = 5 }, - { itemstring = "mcl_armor:helmet_leather_enchanted", weight = 3, func = function(stack, pr) - mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}) end }, - { itemstring = "mcl_armor:chestplate_leather_enchanted", weight = 3, func = function(stack, pr) - mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}) end }, - { itemstring = "mcl_armor:leggings_leather_enchanted", weight = 3, func = function(stack, pr) - mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}) end }, - { itemstring = "mcl_armor:boots_leather_enchanted", weight = 3, func = function(stack, pr) - mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}) end }, - --{ itemstring = "TODO:bamboo", weight = 2, amount_min = 1, amount_max = 3 }, - { itemstring = "mcl_farming:pumpkin", weight = 2, amount_min = 1, amount_max = 3 }, - { itemstring = "mcl_tnt:tnt", weight = 1, amount_min = 1, amount_max = 2 }, - - } - } -end - -local function get_treasure_loot() - return { - stacks_min = 3, - stacks_max = 10, - items = { - { itemstring = "mcl_core:iron_ingot", weight = 8, amount_min = 1, amount_max = 5 }, - { itemstring = "mcl_core:iron_nugget", weight = 8, amount_min = 1, amount_max = 10 }, - { itemstring = "mcl_core:emerald", weight = 8, amount_min = 1, amount_max = 12 }, - { itemstring = "mcl_dye:blue", weight = 8, amount_min = 1, amount_max = 12 }, - { itemstring = "mcl_core:gold_ingot", weight = 8, amount_min = 1, amount_max = 5 }, - { itemstring = "mcl_core:gold_nugget", weight = 8, amount_min = 1, amount_max = 10 }, - { itemstring = "mcl_experience:bottle", weight = 8, amount_min = 1, amount_max = 10 }, - { itemstring = "mcl_core:diamond", weight = 8, amount_min = 1, amount_max = 10 }, - } - } -end - -local function fill_chests(p1,p2) - for _,p in pairs(minetest.find_nodes_in_area(p1,p2,{"mcl_chests:chest_small"})) do - if minetest.get_meta(p):get_string("infotext") ~= "Chest" then - minetest.registered_nodes["mcl_chests:chest_small"].on_construct(p) - end - local inv = minetest.get_inventory( {type="node", pos=p} ) - local loot = get_supply_loot() - if pr:next(1,10) == 1 then loot = get_treasure_loot() end - mcl_loot.fill_inventory(inv, "main", mcl_loot.get_multi_loot({loot}, pr), pr) - end -end - -local ocean_biomes = { - "RoofedForest_ocean", - "JungleEdgeM_ocean", - "BirchForestM_ocean", - "BirchForest_ocean", - "IcePlains_deep_ocean", - "Jungle_deep_ocean", - "Savanna_ocean", - "MesaPlateauF_ocean", - "ExtremeHillsM_deep_ocean", - "Savanna_deep_ocean", - "SunflowerPlains_ocean", - "Swampland_deep_ocean", - "Swampland_ocean", - "MegaSpruceTaiga_deep_ocean", - "ExtremeHillsM_ocean", - "JungleEdgeM_deep_ocean", - "SunflowerPlains_deep_ocean", - "BirchForest_deep_ocean", - "IcePlainsSpikes_ocean", - "Mesa_ocean", - "StoneBeach_ocean", - "Plains_deep_ocean", - "JungleEdge_deep_ocean", - "SavannaM_deep_ocean", - "Desert_deep_ocean", - "Mesa_deep_ocean", - "ColdTaiga_deep_ocean", - "Plains_ocean", - "MesaPlateauFM_ocean", - "Forest_deep_ocean", - "JungleM_deep_ocean", - "FlowerForest_deep_ocean", - "MushroomIsland_ocean", - "MegaTaiga_ocean", - "StoneBeach_deep_ocean", - "IcePlainsSpikes_deep_ocean", - "ColdTaiga_ocean", - "SavannaM_ocean", - "MesaPlateauF_deep_ocean", - "MesaBryce_deep_ocean", - "ExtremeHills+_deep_ocean", - "ExtremeHills_ocean", - "MushroomIsland_deep_ocean", - "Forest_ocean", - "MegaTaiga_deep_ocean", - "JungleEdge_ocean", - "MesaBryce_ocean", - "MegaSpruceTaiga_ocean", - "ExtremeHills+_ocean", - "Jungle_ocean", - "RoofedForest_deep_ocean", - "IcePlains_ocean", - "FlowerForest_ocean", - "ExtremeHills_deep_ocean", - "MesaPlateauFM_deep_ocean", - "Desert_ocean", - "Taiga_ocean", - "BirchForestM_deep_ocean", - "Taiga_deep_ocean", - "JungleM_ocean" -} - -local beach_biomes = { - "FlowerForest_beach", - "Forest_beach", - "StoneBeach", - "ColdTaiga_beach_water", - "Taiga_beach", - "Savanna_beach", - "Plains_beach", - "ExtremeHills_beach", - "ColdTaiga_beach", - "Swampland_shore", - "MushroomIslandShore", - "JungleM_shore", - "Jungle_shore" -} - -mcl_structures.register_structure("shipwreck",{ - place_on = {"group:sand","mcl_core:gravel"}, - spawn_by = {"group:water"}, - num_spawn_by = 4, - noise_params = { - offset = 0, - scale = 0.000022, - spread = {x = 250, y = 250, z = 250}, - seed = 3, - octaves = 3, - persist = 0.001, - flags = "absvalue", - }, - flags = "force_placement", - biomes = ocean_biomes, - y_max = water_level-4, - y_min = mcl_vars.mg_overworld_min, - filenames = schems, - y_offset = function(pr) return pr:next(-4,-2) end, - after_place = function(pos) - fill_chests(vector.offset(pos,-20,-5,-20),vector.offset(pos,20,15,20)) - end -}) diff --git a/mods/MAPGEN/mcl_shipwrecks/mod.conf b/mods/MAPGEN/mcl_shipwrecks/mod.conf deleted file mode 100644 index 79940c744..000000000 --- a/mods/MAPGEN/mcl_shipwrecks/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_shipwrecks -author = cora -depends = mcl_loot, mcl_structures, mcl_enchanting diff --git a/mods/MAPGEN/mcl_structures/api.lua b/mods/MAPGEN/mcl_structures/api.lua index dc1f905f2..f0c4fa6a5 100644 --- a/mods/MAPGEN/mcl_structures/api.lua +++ b/mods/MAPGEN/mcl_structures/api.lua @@ -145,7 +145,7 @@ function mcl_structures.register_structure(name,def,nospawn) --nospawn means it y_max = def.y_max, y_min = def.y_min }) - minetest.register_node(":"..structblock, {drawtype="normal", walkable = false, pointable = false,groups = sbgroups}) + minetest.register_node(":"..structblock, {drawtype="airlike", walkable = false, pointable = false,groups = sbgroups}) def.structblock = structblock def.deco_id = minetest.get_decoration_id("mcl_structures:deco_"..name) minetest.set_gen_notify({decoration=true}, { def.deco_id }) diff --git a/mods/MAPGEN/mcl_structures/init.lua b/mods/MAPGEN/mcl_structures/init.lua index d54fc2dea..a996e440a 100644 --- a/mods/MAPGEN/mcl_structures/init.lua +++ b/mods/MAPGEN/mcl_structures/init.lua @@ -232,6 +232,7 @@ local function dir_to_rotation(dir) end dofile(modpath.."/api.lua") +dofile(modpath.."/shipwrecks.lua") dofile(modpath.."/desert_temple.lua") dofile(modpath.."/jungle_temple.lua") dofile(modpath.."/ocean_ruins.lua") @@ -240,6 +241,7 @@ dofile(modpath.."/igloo.lua") dofile(modpath.."/geode.lua") + mcl_structures.register_structure("desert_well",{ place_on = {"group:sand"}, fill_ratio = 0.01, diff --git a/mods/MAPGEN/mcl_structures/jungle_temple.lua b/mods/MAPGEN/mcl_structures/jungle_temple.lua index 1ac3bd1b4..aa5bf9412 100644 --- a/mods/MAPGEN/mcl_structures/jungle_temple.lua +++ b/mods/MAPGEN/mcl_structures/jungle_temple.lua @@ -4,7 +4,7 @@ local modpath = minetest.get_modpath(modname) mcl_structures.register_structure("jungle_temple",{ place_on = {"group:grass_block","group:dirt","mcl_core:dirt_with_grass"}, - fill_ratio = 0.01, + fill_ratio = 0.1, flags = "place_center_x, place_center_z", solid_ground = true, make_foundation = true, diff --git a/mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_full_back_damaged.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_shipwreck_full_back_damaged.mts similarity index 100% rename from mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_full_back_damaged.mts rename to mods/MAPGEN/mcl_structures/schematics/mcl_structures_shipwreck_full_back_damaged.mts diff --git a/mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_full_damaged.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_shipwreck_full_damaged.mts similarity index 100% rename from mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_full_damaged.mts rename to mods/MAPGEN/mcl_structures/schematics/mcl_structures_shipwreck_full_damaged.mts diff --git a/mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_full_normal.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_shipwreck_full_normal.mts similarity index 100% rename from mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_full_normal.mts rename to mods/MAPGEN/mcl_structures/schematics/mcl_structures_shipwreck_full_normal.mts diff --git a/mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_half_back.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_shipwreck_half_back.mts similarity index 100% rename from mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_half_back.mts rename to mods/MAPGEN/mcl_structures/schematics/mcl_structures_shipwreck_half_back.mts diff --git a/mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_half_front.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_shipwreck_half_front.mts similarity index 100% rename from mods/MAPGEN/mcl_shipwrecks/schematics/shipwreck_half_front.mts rename to mods/MAPGEN/mcl_structures/schematics/mcl_structures_shipwreck_half_front.mts diff --git a/mods/MAPGEN/mcl_structures/shipwrecks.lua b/mods/MAPGEN/mcl_structures/shipwrecks.lua new file mode 100644 index 000000000..72823d811 --- /dev/null +++ b/mods/MAPGEN/mcl_structures/shipwrecks.lua @@ -0,0 +1,161 @@ +local modname = minetest.get_current_modname() +local modpath = minetest.get_modpath(modname) +--local S = minetest.get_translator(modname) + +local seed = minetest.get_mapgen_setting("seed") +local water_level = minetest.get_mapgen_setting("water_level") +local pr = PseudoRandom(seed) + +--schematics by chmodsayshello +local schems = { + modpath.."/schematics/mcl_structures_shipwreck_full_damaged.mts", + modpath.."/schematics/mcl_structures_shipwreck_full_normal.mts", + modpath.."/schematics/mcl_structures_shipwreck_full_back_damaged.mts", + modpath.."/schematics/mcl_structures_shipwreck_half_front.mts", + modpath.."/schematics/mcl_structures_shipwreck_half_back.mts", +} + +local ocean_biomes = { + "RoofedForest_ocean", + "JungleEdgeM_ocean", + "BirchForestM_ocean", + "BirchForest_ocean", + "IcePlains_deep_ocean", + "Jungle_deep_ocean", + "Savanna_ocean", + "MesaPlateauF_ocean", + "ExtremeHillsM_deep_ocean", + "Savanna_deep_ocean", + "SunflowerPlains_ocean", + "Swampland_deep_ocean", + "Swampland_ocean", + "MegaSpruceTaiga_deep_ocean", + "ExtremeHillsM_ocean", + "JungleEdgeM_deep_ocean", + "SunflowerPlains_deep_ocean", + "BirchForest_deep_ocean", + "IcePlainsSpikes_ocean", + "Mesa_ocean", + "StoneBeach_ocean", + "Plains_deep_ocean", + "JungleEdge_deep_ocean", + "SavannaM_deep_ocean", + "Desert_deep_ocean", + "Mesa_deep_ocean", + "ColdTaiga_deep_ocean", + "Plains_ocean", + "MesaPlateauFM_ocean", + "Forest_deep_ocean", + "JungleM_deep_ocean", + "FlowerForest_deep_ocean", + "MushroomIsland_ocean", + "MegaTaiga_ocean", + "StoneBeach_deep_ocean", + "IcePlainsSpikes_deep_ocean", + "ColdTaiga_ocean", + "SavannaM_ocean", + "MesaPlateauF_deep_ocean", + "MesaBryce_deep_ocean", + "ExtremeHills+_deep_ocean", + "ExtremeHills_ocean", + "MushroomIsland_deep_ocean", + "Forest_ocean", + "MegaTaiga_deep_ocean", + "JungleEdge_ocean", + "MesaBryce_ocean", + "MegaSpruceTaiga_ocean", + "ExtremeHills+_ocean", + "Jungle_ocean", + "RoofedForest_deep_ocean", + "IcePlains_ocean", + "FlowerForest_ocean", + "ExtremeHills_deep_ocean", + "MesaPlateauFM_deep_ocean", + "Desert_ocean", + "Taiga_ocean", + "BirchForestM_deep_ocean", + "Taiga_deep_ocean", + "JungleM_ocean" +} + +local beach_biomes = { + "FlowerForest_beach", + "Forest_beach", + "StoneBeach", + "ColdTaiga_beach_water", + "Taiga_beach", + "Savanna_beach", + "Plains_beach", + "ExtremeHills_beach", + "ColdTaiga_beach", + "Swampland_shore", + "MushroomIslandShore", + "JungleM_shore", + "Jungle_shore" +} + +mcl_structures.register_structure("shipwreck",{ + place_on = {"group:sand","mcl_core:gravel"}, + spawn_by = {"group:water"}, + num_spawn_by = 4, + noise_params = { + offset = 0, + scale = 0.000022, + spread = {x = 250, y = 250, z = 250}, + seed = 3, + octaves = 3, + persist = 0.001, + flags = "absvalue", + }, + sidelen = 16, + flags = "force_placement", + biomes = ocean_biomes, + y_max = water_level-4, + y_min = mcl_vars.mg_overworld_min, + filenames = schems, + y_offset = function(pr) return pr:next(-4,-2) end, + loot = { + ["mcl_chests:chest_small"] = { + stacks_min = 3, + stacks_max = 10, + items = { + { itemstring = "mcl_sus_stew:stew", weight = 10, amount_min = 1, amount_max = 1 }, + { itemstring = "mcl_core:paper", weight = 8, amount_min = 1, amount_max = 12 }, + { itemstring = "mcl_farming:wheat_item", weight = 7, amount_min = 8, amount_max = 21 }, + { itemstring = "mcl_farming:carrot_item", weight = 7, amount_min = 4, amount_max = 8 }, + { itemstring = "mcl_farming:potato_item_poison", weight = 7, amount_min = 2, amount_max = 6 }, + { itemstring = "mcl_farming:potato_item", weight = 7, amount_min = 2, amount_max = 6 }, + --{ itemstring = "TODO:moss_block", weight = 7, amount_min = 1, amount_max = 4 }, + { itemstring = "mcl_core:coal_lump", weight = 6, amount_min = 2, amount_max = 8 }, + { itemstring = "mcl_mobitems:rotten_flesh", weight = 5, amount_min = 5, amount_max = 24 }, + { itemstring = "mcl_farming:potato_item", weight = 3, amount_min = 1, amount_max = 5 }, + { itemstring = "mcl_armor:helmet_leather_enchanted", weight = 3, func = function(stack, pr) + mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}) end }, + { itemstring = "mcl_armor:chestplate_leather_enchanted", weight = 3, func = function(stack, pr) + mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}) end }, + { itemstring = "mcl_armor:leggings_leather_enchanted", weight = 3, func = function(stack, pr) + mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}) end }, + { itemstring = "mcl_armor:boots_leather_enchanted", weight = 3, func = function(stack, pr) + mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}) end }, + --{ itemstring = "TODO:bamboo", weight = 2, amount_min = 1, amount_max = 3 }, + { itemstring = "mcl_farming:pumpkin", weight = 2, amount_min = 1, amount_max = 3 }, + { itemstring = "mcl_tnt:tnt", weight = 1, amount_min = 1, amount_max = 2 }, + + }, + { + stacks_min = 3, + stacks_max = 10, + items = { + { itemstring = "mcl_core:iron_ingot", weight = 8, amount_min = 1, amount_max = 5 }, + { itemstring = "mcl_core:iron_nugget", weight = 8, amount_min = 1, amount_max = 10 }, + { itemstring = "mcl_core:emerald", weight = 8, amount_min = 1, amount_max = 12 }, + { itemstring = "mcl_dye:blue", weight = 8, amount_min = 1, amount_max = 12 }, + { itemstring = "mcl_core:gold_ingot", weight = 8, amount_min = 1, amount_max = 5 }, + { itemstring = "mcl_core:gold_nugget", weight = 8, amount_min = 1, amount_max = 10 }, + { itemstring = "mcl_experience:bottle", weight = 8, amount_min = 1, amount_max = 10 }, + { itemstring = "mcl_core:diamond", weight = 8, amount_min = 1, amount_max = 10 }, + } + } + } + } +}) -- 2.40.1 From be2a8d705499b4ec6ace552ceaae1ad8aa4dd86c Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 25 Jun 2022 02:53:58 +0200 Subject: [PATCH 217/357] Structure transfer fixes --- mods/MAPGEN/mcl_structures/desert_temple.lua | 2 +- mods/MAPGEN/mcl_structures/igloo.lua | 2 +- mods/MAPGEN/mcl_structures/jungle_temple.lua | 2 +- mods/MAPGEN/mcl_structures/ocean_ruins.lua | 2 +- mods/MAPGEN/mcl_structures/witch_hut.lua | 14 +++++++------- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/mods/MAPGEN/mcl_structures/desert_temple.lua b/mods/MAPGEN/mcl_structures/desert_temple.lua index ddacd83d2..272310802 100644 --- a/mods/MAPGEN/mcl_structures/desert_temple.lua +++ b/mods/MAPGEN/mcl_structures/desert_temple.lua @@ -34,7 +34,7 @@ end mcl_structures.register_structure("desert_temple",{ place_on = {"group:sand"}, - fill_ratio = 0.01, + fill_ratio = 0.05, flags = "place_center_x, place_center_z", solid_ground = true, make_foundation = true, diff --git a/mods/MAPGEN/mcl_structures/igloo.lua b/mods/MAPGEN/mcl_structures/igloo.lua index d364ec492..49e3c879a 100644 --- a/mods/MAPGEN/mcl_structures/igloo.lua +++ b/mods/MAPGEN/mcl_structures/igloo.lua @@ -130,7 +130,7 @@ mcl_structures.register_structure("igloo",{ place_on = {"mcl_core:snowblock","mcl_core:snow","group:grass_block_snow"}, fill_ratio = 0.01, sidelen = 16, - chunk_probability = 4400, + chunk_probability = 250, solid_ground = true, make_foundation = true, y_max = mcl_vars.mg_overworld_max, diff --git a/mods/MAPGEN/mcl_structures/jungle_temple.lua b/mods/MAPGEN/mcl_structures/jungle_temple.lua index aa5bf9412..d421ba5b0 100644 --- a/mods/MAPGEN/mcl_structures/jungle_temple.lua +++ b/mods/MAPGEN/mcl_structures/jungle_temple.lua @@ -19,7 +19,7 @@ mcl_structures.register_structure("jungle_temple",{ modpath.."/schematics/mcl_structures_jungle_temple_nice.mts", }, loot = { - ["mcl_chests:chest_small" ] ={{ + ["mcl_chests:trapped_chest_small" ] ={{ stacks_min = 2, stacks_max = 6, items = { diff --git a/mods/MAPGEN/mcl_structures/ocean_ruins.lua b/mods/MAPGEN/mcl_structures/ocean_ruins.lua index df0a740f9..0b609aee7 100644 --- a/mods/MAPGEN/mcl_structures/ocean_ruins.lua +++ b/mods/MAPGEN/mcl_structures/ocean_ruins.lua @@ -82,7 +82,7 @@ local cold = { y_min = mcl_vars.mg_overworld_min, y_max = -2, biomes = cold_oceans, - chunk_probability = 256, + chunk_probability = 400, sidelen = 20, filenames = { modpath.."/schematics/mcl_structures_ocean_ruins_cold_1.mts", diff --git a/mods/MAPGEN/mcl_structures/witch_hut.lua b/mods/MAPGEN/mcl_structures/witch_hut.lua index 68b1c6809..6a10e7a91 100644 --- a/mods/MAPGEN/mcl_structures/witch_hut.lua +++ b/mods/MAPGEN/mcl_structures/witch_hut.lua @@ -22,12 +22,12 @@ local function hut_placement_callback(pos,def,pr) local hl = def.sidelen / 2 local p1 = vector.offset(pos,-hl,-hl,-hl) local p2 = vector.offset(pos,hl,hl,hl) - local legs = minetest.find_nodes_in_area(p1, p2, "mcl_core:tree") + local legs = minetest.find_nodes_in_area(vector.offset(pos,-hl,0,-hl),vector.offset(pos,hl,0,hl), "mcl_core:tree") local tree = {} - for i = 1, #legs do - while minetest.get_item_group(mcl_vars.get_node({x=legs[i].x, y=legs[i].y-1, z=legs[i].z}, true, 333333).name, "water") ~= 0 do - legs[i].y = legs[i].y - 1 - table.insert(tree,legs[i]) + for _,leg in pairs(legs) do + while minetest.get_item_group(mcl_vars.get_node(vector.offset(leg,0,-1,0), true, 333333).name, "water") ~= 0 do + leg = vector.offset(leg,0,-1,0) + table.insert(tree,leg) end end minetest.bulk_set_node(tree, {name = "mcl_core:tree", param2 = 2}) @@ -38,8 +38,8 @@ mcl_structures.register_structure("witch_hut",{ place_on = {"group:sand","group:grass_block","mcl_core:water_source","group:dirt"}, fill_ratio = 0.01, flags = "place_center_x, place_center_z, liquid_surface, force_placement", - sidelen = 5, - chunk_probability = 256, + sidelen = 8, + chunk_probability = 400, y_max = mcl_vars.mg_overworld_max, y_min = -4, y_offset = 0, -- 2.40.1 From 8684140740295e31bb95c6f36baa22fe5eed00cf Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 25 Jun 2022 06:16:18 +0200 Subject: [PATCH 218/357] log actual placement position --- mods/MAPGEN/mcl_structures/api.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mods/MAPGEN/mcl_structures/api.lua b/mods/MAPGEN/mcl_structures/api.lua index f0c4fa6a5..596c493a9 100644 --- a/mods/MAPGEN/mcl_structures/api.lua +++ b/mods/MAPGEN/mcl_structures/api.lua @@ -76,7 +76,7 @@ function mcl_structures.place_structure(pos, def, pr) minetest.bulk_set_node(minetest.find_nodes_in_area(vector.offset(ground_p1,0,-5,0),vector.offset(ground_p2,0,-30,0),{"air","group:liquid","mcl_core:snow"}),{name=node_stone}) else if logging then - minetest.log("warning","[mcl_structures] "..def.name.." at "..minetest.pos_to_string(pos).." not placed. No solid ground.") + minetest.log("warning","[mcl_structures] "..def.name.." at "..minetest.pos_to_string(pp).." not placed. No solid ground.") end return false end @@ -84,7 +84,7 @@ function mcl_structures.place_structure(pos, def, pr) end if def.on_place and not def.on_place(pos,def,pr) then if logging then - minetest.log("warning","[mcl_structures] "..def.name.." at "..minetest.pos_to_string(pos).." not placed. Conditions not satisfied.") + minetest.log("warning","[mcl_structures] "..def.name.." at "..minetest.pos_to_string(pp).." not placed. Conditions not satisfied.") end return false end @@ -101,14 +101,14 @@ function mcl_structures.place_structure(pos, def, pr) return ap(pos,def,pr) end,pr) if logging then - minetest.log("action","[mcl_structures] "..def.name.." placed at "..minetest.pos_to_string(pos)) + minetest.log("action","[mcl_structures] "..def.name.." placed at "..minetest.pos_to_string(pp)) end return true end elseif def.place_func and def.place_func(pos,def,pr) then if not def.after_place or ( def.after_place and def.after_place(pos,def,pr) ) then if logging then - minetest.log("action","[mcl_structures] "..def.name.." placed at "..minetest.pos_to_string(pos)) + minetest.log("action","[mcl_structures] "..def.name.." placed at "..minetest.pos_to_string(pp)) end return true end -- 2.40.1 From f115fc8ea0858a014bef6d7d56ecd1ad72617c86 Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 25 Jun 2022 06:16:43 +0200 Subject: [PATCH 219/357] tweak probabilities --- mods/MAPGEN/mcl_structures/desert_temple.lua | 4 ++-- mods/MAPGEN/mcl_structures/init.lua | 11 ++++++----- mods/MAPGEN/mcl_structures/jungle_temple.lua | 4 ++-- mods/MAPGEN/mcl_structures/witch_hut.lua | 2 +- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/mods/MAPGEN/mcl_structures/desert_temple.lua b/mods/MAPGEN/mcl_structures/desert_temple.lua index 272310802..61daaf338 100644 --- a/mods/MAPGEN/mcl_structures/desert_temple.lua +++ b/mods/MAPGEN/mcl_structures/desert_temple.lua @@ -34,13 +34,13 @@ end mcl_structures.register_structure("desert_temple",{ place_on = {"group:sand"}, - fill_ratio = 0.05, + fill_ratio = 0.01, flags = "place_center_x, place_center_z", solid_ground = true, make_foundation = true, sidelen = 18, y_offset = -12, - chunk_probability = 500, + chunk_probability = 300, y_max = mcl_vars.mg_overworld_max, y_min = 1, biomes = { "Desert" }, diff --git a/mods/MAPGEN/mcl_structures/init.lua b/mods/MAPGEN/mcl_structures/init.lua index a996e440a..3a778b138 100644 --- a/mods/MAPGEN/mcl_structures/init.lua +++ b/mods/MAPGEN/mcl_structures/init.lua @@ -249,7 +249,7 @@ mcl_structures.register_structure("desert_well",{ not_near = { "desert_temple_new" }, solid_ground = true, sidelen = 4, - chunk_probability = 256, + chunk_probability = 600, y_max = mcl_vars.mg_overworld_max, y_min = 1, y_offset = -2, @@ -258,14 +258,15 @@ mcl_structures.register_structure("desert_well",{ }) mcl_structures.register_structure("fossil",{ - place_on = {"group:material_stone"}, + place_on = {"group:material_stone","group:sand"}, fill_ratio = 0.01, flags = "place_center_x, place_center_z", solid_ground = true, sidelen = 13, - chunk_probability = 256, - y_max = 1, - y_min = mcl_vars.mg_overworld_min, + chunk_probability = 1000, + y_offset = function(pr) return ( pr:next(1,16) * -1 ) -16 end, + y_max = 15, + y_min = mcl_vars.mg_overworld_min + 35, biomes = { "Desert" }, filenames = { modpath.."/schematics/mcl_structures_fossil_skull_1.mts", -- 4×5×5 diff --git a/mods/MAPGEN/mcl_structures/jungle_temple.lua b/mods/MAPGEN/mcl_structures/jungle_temple.lua index d421ba5b0..843dec04d 100644 --- a/mods/MAPGEN/mcl_structures/jungle_temple.lua +++ b/mods/MAPGEN/mcl_structures/jungle_temple.lua @@ -4,12 +4,12 @@ local modpath = minetest.get_modpath(modname) mcl_structures.register_structure("jungle_temple",{ place_on = {"group:grass_block","group:dirt","mcl_core:dirt_with_grass"}, - fill_ratio = 0.1, + fill_ratio = 0.01, flags = "place_center_x, place_center_z", solid_ground = true, make_foundation = true, y_offset = function(pr) return pr:next(-3,0) -5 end, - chunk_probability = 1500, + chunk_probability = 200, y_max = mcl_vars.mg_overworld_max, y_min = 1, biomes = { "Jungle" }, diff --git a/mods/MAPGEN/mcl_structures/witch_hut.lua b/mods/MAPGEN/mcl_structures/witch_hut.lua index 6a10e7a91..039c46332 100644 --- a/mods/MAPGEN/mcl_structures/witch_hut.lua +++ b/mods/MAPGEN/mcl_structures/witch_hut.lua @@ -39,7 +39,7 @@ mcl_structures.register_structure("witch_hut",{ fill_ratio = 0.01, flags = "place_center_x, place_center_z, liquid_surface, force_placement", sidelen = 8, - chunk_probability = 400, + chunk_probability = 300, y_max = mcl_vars.mg_overworld_max, y_min = -4, y_offset = 0, -- 2.40.1 From ac69b7c7104908c027fc5cb2494a20213f495e55 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 1 Jul 2022 04:25:34 +0200 Subject: [PATCH 220/357] Add woodland cabin and outpost --- mods/MAPGEN/mcl_structures/api.lua | 7 +-- mods/MAPGEN/mcl_structures/init.lua | 1 + .../mcl_structures_woodland_cabin.mts | Bin 0 -> 2736 bytes .../mcl_structures_woodland_outpost.mts | Bin 0 -> 3341 bytes .../mcl_structures/woodland_mansion.lua | 43 ++++++++++++++++++ 5 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_woodland_cabin.mts create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_woodland_outpost.mts create mode 100644 mods/MAPGEN/mcl_structures/woodland_mansion.lua diff --git a/mods/MAPGEN/mcl_structures/api.lua b/mods/MAPGEN/mcl_structures/api.lua index 596c493a9..4e017b502 100644 --- a/mods/MAPGEN/mcl_structures/api.lua +++ b/mods/MAPGEN/mcl_structures/api.lua @@ -68,12 +68,13 @@ function mcl_structures.place_structure(pos, def, pr) if b.node_stone then node_stone = b.node_stone end if b.node_dust then node_dust = b.node_dust end end - minetest.bulk_set_node(minetest.find_nodes_in_area(ground_p1,ground_p2,{"air","group:liquid","mcl_core:snow"}),{name=node_top}) + local replace = {"air","group:liquid","mcl_core:snow","group:tree","group:leaves"} + minetest.bulk_set_node(minetest.find_nodes_in_area(ground_p1,ground_p2,replace),{name=node_top}) if node_dust then minetest.bulk_set_node(minetest.find_nodes_in_area(vector.offset(ground_p1,0,1,0),vector.offset(ground_p2,0,1,0),{"air"}),{name=node_dust}) end - minetest.bulk_set_node(minetest.find_nodes_in_area(vector.offset(ground_p1,0,-1,0),vector.offset(ground_p2,0,-4,0),{"air","group:liquid","mcl_core:snow"}),{name=node_filler}) - minetest.bulk_set_node(minetest.find_nodes_in_area(vector.offset(ground_p1,0,-5,0),vector.offset(ground_p2,0,-30,0),{"air","group:liquid","mcl_core:snow"}),{name=node_stone}) + minetest.bulk_set_node(minetest.find_nodes_in_area(vector.offset(ground_p1,0,-1,0),vector.offset(ground_p2,0,-4,0),replace),{name=node_filler}) + minetest.bulk_set_node(minetest.find_nodes_in_area(vector.offset(ground_p1,0,-5,0),vector.offset(ground_p2,0,-30,0),replace),{name=node_stone}) else if logging then minetest.log("warning","[mcl_structures] "..def.name.." at "..minetest.pos_to_string(pp).." not placed. No solid ground.") diff --git a/mods/MAPGEN/mcl_structures/init.lua b/mods/MAPGEN/mcl_structures/init.lua index 3a778b138..a77b3dbe4 100644 --- a/mods/MAPGEN/mcl_structures/init.lua +++ b/mods/MAPGEN/mcl_structures/init.lua @@ -238,6 +238,7 @@ dofile(modpath.."/jungle_temple.lua") dofile(modpath.."/ocean_ruins.lua") dofile(modpath.."/witch_hut.lua") dofile(modpath.."/igloo.lua") +dofile(modpath.."/woodland_mansion.lua") dofile(modpath.."/geode.lua") diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_woodland_cabin.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_woodland_cabin.mts new file mode 100644 index 0000000000000000000000000000000000000000..f654da926d5583b0109bcdcb3b43cf5fbb768fef GIT binary patch literal 2736 zcmaJtc=E!0f?zPLZ~?d;Hfwq8AO=r19&O}L`7g3Bqjp{5lH&s)wO5Sa=X%GO#rL1wf^N6vV3k$)ks5Q>hV%6@Lzq zvAA~(EMsX{3J9U}J3zrQSqv;0h$Lf~^Q0p{kOt{I9l>`egt;DSjx>(Qz!T=+=Q884 z3h{CqQNCYM=kMKzdF%V4m@uobUC)6R=Edc$L!E z)m*|aQd%S@#azE$IE*}aHJvWp_vOyP#Co;+dZgiFmYgx<(~1e{jLE6R@b@^Vs-3&1 z)abJSe=wjcf3|?+Q^>P%BBoFGqNG7e++J~|?8g@zORf|nTsQH(a_o>`fMZ?y`OY5* zIi;6cdPh$jIVSvMo0wWV8FI&sMn^qlf#uI8t)|tt>-XJA(JFpbCM(@LGlsTgk2;Lj zSNnpeTV>8^B-wpWBUs&4?z|+@rtY_JDd}06&0F8%xO6-aM4xRwOql%ER~ycp8(n>M`W?u3i`6W#Xw+pofOps{-Ic))-nAl_`1O;^6%hdi&az3R_c z7|zIMO#XQ!k|^dgx1zf|Uv}j2v)-~vJ45el%pt1)hmn(oTdvam+;bD`Grzh<%G{n` zusi9+)cDP#V(C(FRF;-mZl3ga2%`RuyyaqZb?dMMTD9)7U9*-I7v2Qq8lY(60A_=Ol zLv}>cy;7^zKC%>Bd9h8#T1&8E(Ss=t5)?~!=S*B71w!&IugU9Li3>}Frp%^ZZD#=c zPO{9P^l!$C2APfgGd#J_F&W!}Njv4Gte&u%82c{!&XVn?lHBPHy%(!q!2!>|Uj)}q z60Bi-Pv7L=?+!VyVBZX0r>jpmbvWfT>}!lVK}Wj5D(yitnD}XTrK+RyjITv7L36HB%v@rE5^hFyH)$cKP<_7QZ0r zys+zw^PD59MuenV6hiT6SxHK6am{bE{ zoznbGWBkO=c6?%*0G;;7ZKB(50AO>^m95`i4C)bZWmRY+^a@&JB*(VyT;HM5%?FGU z%DwHw*>_c(siEkLfHd;}PmcMPe|Dy#CTDcLr-Y}OL2)S+$-v&>mGN>5AS4r#yR~`W z@V?RL^4t{;Tn>0Fj{`i^s;Sq>-F(xiZ0%*-wYrdP_+7m8`x*v!I!-ddvlP;K8oM?B z$mlZ?+~S%Qx*$99MaKbY$7yB$sTgO{neONV%AsBm#Q%?+V4%gDXa!x64cBf{NO(g5TCI8@ zencHEyyd#L)G+>Ej<)_2n4ojo#H<+g8gPTTOT`0G=Tgh$If!VZ7cZCJpWT@@Pk3?}_@nkRp;KTAARF@2;Z z=??b`5ghin~V`sUBsLMt;29H)Xz#fti#f`*~41OpMfrZUY_G+xv5aw*+1 zp6h(eMipQl{;nPC^y%*>jTlIvFa|K1aa((;lrrXeL|6OgPUh&LFbes0!Mt2AM z6^!b^+zfXAIlo}M%lg|F{O!?=9|cPzzbiSUHrf`9k!oj+6un^p?*_6S$P_?<`= zPSbVsM4t4y-N{LekAPF=2d5>V3yVJxdoPB0<;Q`Q?pRjrSr23F50%EfcA4&0*}1$f zEJ`eBOQXxj{1{&GF|pz{e9nREV4_Q~!r)ljU~?<4TD1+Y_FFCTsD+)69gBo)tjepb z!~`{=?nz*8gPJQS_ilSkl!SMNbvqhLM&1^eaFhz$rjlD8iDW^2LB60ZuRjvqkZbEl z^D?WwJB8k@8Oft@O8~?B&wAXVSqDE>*hrNWi_vnEX(*WO)4uhBvgk?RkwZ4W+lrz+ z#)++sfq02FY456~UzR<_Rn?@oZH$so>`gzSbFURKG3-py;p%(ARNJ)!p+BOjhOb~} zr&oouD|V4h)%S)BTNOc~IGHRBkR0_EHph8EodV(PvZv84=~pZ zv#$b;{ji~^(pfNrBCu0%JdJIhNnuh^zCCxbrh~LoyD^H}@36ry*)-mf=n`Ss(xJRj eVEa;_+r6hNh|^bsCGHrP-pwD)8eHa&J^c^W-au>s literal 0 HcmV?d00001 diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_woodland_outpost.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_woodland_outpost.mts new file mode 100644 index 0000000000000000000000000000000000000000..6fd48068b0f5d3b67cbbd8448806c7269619a82b GIT binary patch literal 3341 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 literal 0 HcmV?d00001 diff --git a/mods/MAPGEN/mcl_structures/woodland_mansion.lua b/mods/MAPGEN/mcl_structures/woodland_mansion.lua new file mode 100644 index 000000000..b4b54f5fc --- /dev/null +++ b/mods/MAPGEN/mcl_structures/woodland_mansion.lua @@ -0,0 +1,43 @@ +local modname = minetest.get_current_modname() +local S = minetest.get_translator(modname) +local modpath = minetest.get_modpath(modname) + +mcl_structures.register_structure("woodland_cabin",{ + place_on = {"group:grass_block","group:dirt","mcl_core:dirt_with_grass"}, + fill_ratio = 0.01, + flags = "place_center_x, place_center_z", + solid_ground = true, + make_foundation = true, + chunk_probability = 800, + y_max = mcl_vars.mg_overworld_max, + y_min = 1, + biomes = { "RoofedForest" }, + sidelen = 32, + filenames = { + modpath.."/schematics/mcl_structures_woodland_cabin.mts", + modpath.."/schematics/mcl_structures_woodland_outpost.mts", + }, + loot = { + ["mcl_chests:trapped_chest_small" ] ={{ + stacks_min = 2, + stacks_max = 6, + items = { + { itemstring = "mcl_mobitems:bone", weight = 20, amount_min = 4, amount_max=6 }, + { itemstring = "mcl_mobitems:rotten_flesh", weight = 16, amount_min = 3, amount_max=7 }, + { itemstring = "mcl_core:gold_ingot", weight = 15, amount_min = 2, amount_max = 7 }, + --{ itemstring = "mcl_bamboo:bamboo", weight = 15, amount_min = 1, amount_max=3 }, --FIXME BAMBOO + { itemstring = "mcl_core:iron_ingot", weight = 15, amount_min = 1, amount_max = 5 }, + { itemstring = "mcl_core:diamond", weight = 3, amount_min = 1, amount_max = 3 }, + { itemstring = "mcl_mobitems:saddle", weight = 3, }, + { itemstring = "mcl_core:emerald", weight = 2, amount_min = 1, amount_max = 3 }, + { itemstring = "mcl_books:book", weight = 1, func = function(stack, pr) + mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}, pr) + end }, + { itemstring = "mcl_mobitems:iron_horse_armor", weight = 1, }, + { itemstring = "mcl_mobitems:gold_horse_armor", weight = 1, }, + { itemstring = "mcl_mobitems:diamond_horse_armor", weight = 1, }, + { itemstring = "mcl_core:apple_gold_enchanted", weight = 2, }, + } + }} + } +}) -- 2.40.1 From c59a89096394cb4d4a5761f27610a8649794b4f9 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 1 Jul 2022 06:10:45 +0200 Subject: [PATCH 221/357] add woodland cabin loot --- .../mcl_structures/woodland_mansion.lua | 47 ++++++++++++------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/mods/MAPGEN/mcl_structures/woodland_mansion.lua b/mods/MAPGEN/mcl_structures/woodland_mansion.lua index b4b54f5fc..d47d4a0e6 100644 --- a/mods/MAPGEN/mcl_structures/woodland_mansion.lua +++ b/mods/MAPGEN/mcl_structures/woodland_mansion.lua @@ -18,24 +18,39 @@ mcl_structures.register_structure("woodland_cabin",{ modpath.."/schematics/mcl_structures_woodland_outpost.mts", }, loot = { - ["mcl_chests:trapped_chest_small" ] ={{ - stacks_min = 2, - stacks_max = 6, + ["mcl_chests:chest_small" ] ={{ + stacks_min = 3, + stacks_max = 3, items = { - { itemstring = "mcl_mobitems:bone", weight = 20, amount_min = 4, amount_max=6 }, - { itemstring = "mcl_mobitems:rotten_flesh", weight = 16, amount_min = 3, amount_max=7 }, + { itemstring = "mcl_mobitems:bone", weight = 10, amount_min = 1, amount_max=8 }, + { itemstring = "mcl_mobitems:gunpowder", weight = 10, amount_min = 1, amount_max = 8 }, + { itemstring = "mcl_mobitems:rotten_flesh", weight = 10, amount_min = 1, amount_max=8 }, + { itemstring = "mcl_mobitems:string", weight = 10, amount_min = 1, amount_max=8 }, + { itemstring = "mcl_core:gold_ingot", weight = 15, amount_min = 2, amount_max = 7 }, - --{ itemstring = "mcl_bamboo:bamboo", weight = 15, amount_min = 1, amount_max=3 }, --FIXME BAMBOO - { itemstring = "mcl_core:iron_ingot", weight = 15, amount_min = 1, amount_max = 5 }, - { itemstring = "mcl_core:diamond", weight = 3, amount_min = 1, amount_max = 3 }, - { itemstring = "mcl_mobitems:saddle", weight = 3, }, - { itemstring = "mcl_core:emerald", weight = 2, amount_min = 1, amount_max = 3 }, - { itemstring = "mcl_books:book", weight = 1, func = function(stack, pr) - mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}, pr) - end }, - { itemstring = "mcl_mobitems:iron_horse_armor", weight = 1, }, - { itemstring = "mcl_mobitems:gold_horse_armor", weight = 1, }, - { itemstring = "mcl_mobitems:diamond_horse_armor", weight = 1, }, + }},{ + stacks_min = 1, + stacks_max = 4, + items = { + { itemstring = "mcl_farming:wheat_item", weight = 20, amount_min = 1, amount_max = 4 }, + { itemstring = "mcl_farming:bread", weight = 20, amount_min = 1, amount_max = 1 }, + { itemstring = "mcl_core:coal_lump", weight = 15, amount_min = 1, amount_max = 4 }, + { itemstring = "mesecons:mesecon", weight = 15, amount_min = 1, amount_max = 4 }, + { itemstring = "mcl_farming:beetroot_seeds", weight = 10, amount_min = 2, amount_max = 4 }, + { itemstring = "mcl_farming:melon_seeds", weight = 10, amount_min = 2, amount_max = 4 }, + { itemstring = "mcl_farming:pumpkin_seeds", weight = 10, amount_min = 2, amount_max = 4 }, + { itemstring = "mcl_core:iron_ingot", weight = 10, amount_min = 1, amount_max = 4 }, + { itemstring = "mcl_buckets:bucket_empty", weight = 10, amount_min = 1, amount_max = 1 }, + { itemstring = "mcl_core:gold_ingot", weight = 5, amount_min = 1, amount_max = 4 }, + }},{ + stacks_min = 1, + stacks_max = 4, + items = { + --{ itemstring = "FIXME:lead", weight = 20, amount_min = 1, amount_max = 1 }, + { itemstring = "mcl_mobs:nametag", weight = 2, amount_min = 1, amount_max = 3 }, + { itemstring = "mcl_books:book", weight = 1, func = function(stack, pr)mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}, pr) end }, + { itemstring = "mcl_armor:chestplate_chain", weight = 1, }, + { itemstring = "mcl_armor:chestplate_diamond", weight = 1, }, { itemstring = "mcl_core:apple_gold_enchanted", weight = 2, }, } }} -- 2.40.1 From ef14006f15b57a063a5b335e8c4ff11a28df97b4 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 1 Jul 2022 14:30:02 +0200 Subject: [PATCH 222/357] Fix surface pools & desert temple loot --- mods/MAPGEN/mcl_structures/desert_temple.lua | 2 +- mods/MAPGEN/mcl_terrain_features/init.lua | 21 +++++++++++--------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/mods/MAPGEN/mcl_structures/desert_temple.lua b/mods/MAPGEN/mcl_structures/desert_temple.lua index 61daaf338..75c170ab1 100644 --- a/mods/MAPGEN/mcl_structures/desert_temple.lua +++ b/mods/MAPGEN/mcl_structures/desert_temple.lua @@ -47,7 +47,7 @@ mcl_structures.register_structure("desert_temple",{ filenames = { modpath.."/schematics/mcl_structures_desert_temple.mts" }, after_place = temple_placement_callback, loot = { - ["mcl_chests:chest_small" ] ={ + ["mcl_chests:chest" ] ={ { stacks_min = 2, stacks_max = 4, diff --git a/mods/MAPGEN/mcl_terrain_features/init.lua b/mods/MAPGEN/mcl_terrain_features/init.lua index bf3a846a2..9ee8ba26f 100644 --- a/mods/MAPGEN/mcl_terrain_features/init.lua +++ b/mods/MAPGEN/mcl_terrain_features/init.lua @@ -24,31 +24,34 @@ local function set_node_no_bedrock(pos,node) end local function airtower(pos,tbl,h) - for i=0,h do + for i=1,h do table.insert(tbl,vector.offset(pos,0,i,0)) end end local function makelake(pos,size,liquid,placein,border,pr) local node_under = minetest.get_node(vector.offset(pos,0,-1,0)) - local p1 = vector.offset(pos,-size,-size,-size) - local p2 = vector.offset(pos,size,size,size) + local p1 = vector.offset(pos,-size,-1,-size) + local p2 = vector.offset(pos,size,-1,size) local nn = minetest.find_nodes_in_area(p1,p2,placein) table.sort(nn,function(a, b) return vector.distance(vector.new(pos.x,0,pos.z), a) < vector.distance(vector.new(pos.x,0,pos.z), b) end) if not nn[1] then return end - local y = mcl_structures.find_highest_y(nn) + local y = pos.y - pr:next(1,2) local lq = {} local air = {} - for i=1,pr:next(1,#nn) do + local r = pr:next(1,#nn) + if r > #nn then return end + for i=1,r do if nn[i].y == y then - airtower(vector.offset(nn[i],0,1,0),air,55) + airtower(nn[i],air,55) table.insert(lq,nn[i]) end end minetest.bulk_set_node(lq,{name=liquid}) - local air = {} + minetest.bulk_set_node(air,{name="air"}) + air = {} local br = {} for k,v in pairs(lq) do for kk,vv in pairs(adjacents) do @@ -68,13 +71,13 @@ local function makelake(pos,size,liquid,placein,border,pr) if an.name ~= liquid then table.insert(br,pp) if un.name ~= liquid then - airtower(vector.offset(pp,0,1,0),air,55) + airtower(pp,air,55) end end end end - minetest.bulk_set_node(air,{name="air"}) minetest.bulk_set_node(br,{name=border}) + minetest.bulk_set_node(air,{name="air"}) return true end -- 2.40.1 From 6ad00e41709befeefd2ba524c3f0c77707f66aba Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 1 Jul 2022 14:43:03 +0200 Subject: [PATCH 223/357] emerge before geode and surface pool placement otherwise they can be cut off --- mods/MAPGEN/mcl_structures/geode.lua | 72 +++++++++--------- mods/MAPGEN/mcl_terrain_features/init.lua | 92 ++++++++++++----------- 2 files changed, 86 insertions(+), 78 deletions(-) diff --git a/mods/MAPGEN/mcl_structures/geode.lua b/mods/MAPGEN/mcl_structures/geode.lua index 81b505558..1a2e8bedc 100644 --- a/mods/MAPGEN/mcl_structures/geode.lua +++ b/mods/MAPGEN/mcl_structures/geode.lua @@ -17,50 +17,54 @@ local function makegeode(pos,def,pr) local size = pr:next(5,7) local p1 = vector.offset(pos,-size,-size,-size) local p2 = vector.offset(pos,size,size,size) - local calcite = {} - local nn = minetest.find_nodes_in_area(p1,p2,{"group:material_stone"}) - table.sort(nn,function(a, b) - return vector.distance(pos, a) < vector.distance(pos, b) - end) - if not nn[1] then return end + minetest.emerge_area(p1, p2, function(blockpos, action, calls_remaining, param) + if calls_remaining ~= 0 then return end + local calcite = {} + local nn = minetest.find_nodes_in_area(p1,p2,{"group:material_stone"}) + table.sort(nn,function(a, b) + return vector.distance(pos, a) < vector.distance(pos, b) + end) + if not nn[1] then return end - for i=1,math.random(#nn) do - set_node_no_bedrock(nn[i],{name="mcl_amethyst:amethyst_block"}) - end + for i=1,math.random(#nn) do + set_node_no_bedrock(nn[i],{name="mcl_amethyst:amethyst_block"}) + end - for k,v in pairs(minetest.find_nodes_in_area(p1,p2,{"mcl_amethyst:amethyst_block"})) do - local all_amethyst = true - for kk,vv in pairs(adjacents) do - local pp = vector.add(v,vv) - local an = minetest.get_node(pp) - if an.name ~= "mcl_amethyst:amethyst_block" then - if minetest.get_item_group(an.name,"material_stone") > 0 then - set_node_no_bedrock(pp,{name="mcl_amethyst:calcite"}) - table.insert(calcite,pp) - if pr:next(1,5) == 1 then - set_node_no_bedrock(v,{name="mcl_amethyst:budding_amethyst_block"}) + for k,v in pairs(minetest.find_nodes_in_area(p1,p2,{"mcl_amethyst:amethyst_block"})) do + local all_amethyst = true + for kk,vv in pairs(adjacents) do + local pp = vector.add(v,vv) + local an = minetest.get_node(pp) + if an.name ~= "mcl_amethyst:amethyst_block" then + if minetest.get_item_group(an.name,"material_stone") > 0 then + set_node_no_bedrock(pp,{name="mcl_amethyst:calcite"}) + table.insert(calcite,pp) + if pr:next(1,5) == 1 then + set_node_no_bedrock(v,{name="mcl_amethyst:budding_amethyst_block"}) + end + all_amethyst = false + elseif an.name ~= "mcl_amethyst:amethyst_block" and an.name ~= "air" then + all_amethyst = false end - all_amethyst = false - elseif an.name ~= "mcl_amethyst:amethyst_block" and an.name ~= "air" then - all_amethyst = false end end + if all_amethyst then set_node_no_bedrock(v,{name="air"}) end end - if all_amethyst then set_node_no_bedrock(v,{name="air"}) end - end - for _,v in pairs(calcite) do - for _,vv in pairs(minetest.find_nodes_in_area(vector.offset(v,-1,-1,-1),vector.offset(v,1,1,1),{"group:material_stone"})) do - set_node_no_bedrock(vv,{name="mcl_blackstone:basalt_smooth"}) + for _,v in pairs(calcite) do + for _,vv in pairs(minetest.find_nodes_in_area(vector.offset(v,-1,-1,-1),vector.offset(v,1,1,1),{"group:material_stone"})) do + set_node_no_bedrock(vv,{name="mcl_blackstone:basalt_smooth"}) + end end - end - for k,v in pairs(minetest.find_nodes_in_area_under_air(p1,p2,{"mcl_amethyst:amethyst_block","mcl_amethyst:budding_amethyst_block"})) do - local r = pr:next(1,50) - if r < 10 then - set_node_no_bedrock(vector.offset(v,0,1,0),{name="mcl_amethyst:amethyst_cluster",param2=1}) + for k,v in pairs(minetest.find_nodes_in_area_under_air(p1,p2,{"mcl_amethyst:amethyst_block","mcl_amethyst:budding_amethyst_block"})) do + local r = pr:next(1,50) + if r < 10 then + set_node_no_bedrock(vector.offset(v,0,1,0),{name="mcl_amethyst:amethyst_cluster",param2=1}) + end end - end + return true + end) return true end diff --git a/mods/MAPGEN/mcl_terrain_features/init.lua b/mods/MAPGEN/mcl_terrain_features/init.lua index 9ee8ba26f..0c95eb9b2 100644 --- a/mods/MAPGEN/mcl_terrain_features/init.lua +++ b/mods/MAPGEN/mcl_terrain_features/init.lua @@ -33,51 +33,55 @@ local function makelake(pos,size,liquid,placein,border,pr) local node_under = minetest.get_node(vector.offset(pos,0,-1,0)) local p1 = vector.offset(pos,-size,-1,-size) local p2 = vector.offset(pos,size,-1,size) - local nn = minetest.find_nodes_in_area(p1,p2,placein) - table.sort(nn,function(a, b) - return vector.distance(vector.new(pos.x,0,pos.z), a) < vector.distance(vector.new(pos.x,0,pos.z), b) + minetest.emerge_area(p1, p2, function(blockpos, action, calls_remaining, param) + if calls_remaining ~= 0 then return end + local nn = minetest.find_nodes_in_area(p1,p2,placein) + table.sort(nn,function(a, b) + return vector.distance(vector.new(pos.x,0,pos.z), a) < vector.distance(vector.new(pos.x,0,pos.z), b) + end) + if not nn[1] then return end + local y = pos.y - pr:next(1,2) + local lq = {} + local air = {} + local r = pr:next(1,#nn) + if r > #nn then return end + for i=1,r do + if nn[i].y == y then + airtower(nn[i],air,55) + table.insert(lq,nn[i]) + end + end + minetest.bulk_set_node(lq,{name=liquid}) + minetest.bulk_set_node(air,{name="air"}) + air = {} + local br = {} + for k,v in pairs(lq) do + for kk,vv in pairs(adjacents) do + local pp = vector.add(v,vv) + local an = minetest.get_node(pp) + local un = minetest.get_node(vector.offset(pp,0,1,0)) + if not border then + if minetest.get_item_group(an.name,"solid") > 0 then + border = an.name + elseif minetest.get_item_group(minetest.get_node(nn[1]).name,"solid") > 0 then + border = minetest.get_node_or_nil(nn[1]).name + else + border = "mcl_core:stone" + end + if border == nil or border == "mcl_core:dirt" then border = "mcl_core:dirt_with_grass" end + end + if an.name ~= liquid then + table.insert(br,pp) + if un.name ~= liquid then + airtower(pp,air,55) + end + end + end + end + minetest.bulk_set_node(br,{name=border}) + minetest.bulk_set_node(air,{name="air"}) + return true end) - if not nn[1] then return end - local y = pos.y - pr:next(1,2) - local lq = {} - local air = {} - local r = pr:next(1,#nn) - if r > #nn then return end - for i=1,r do - if nn[i].y == y then - airtower(nn[i],air,55) - table.insert(lq,nn[i]) - end - end - minetest.bulk_set_node(lq,{name=liquid}) - minetest.bulk_set_node(air,{name="air"}) - air = {} - local br = {} - for k,v in pairs(lq) do - for kk,vv in pairs(adjacents) do - local pp = vector.add(v,vv) - local an = minetest.get_node(pp) - local un = minetest.get_node(vector.offset(pp,0,1,0)) - if not border then - if minetest.get_item_group(an.name,"solid") > 0 then - border = an.name - elseif minetest.get_item_group(minetest.get_node(nn[1]).name,"solid") > 0 then - border = minetest.get_node_or_nil(nn[1]).name - else - border = "mcl_core:stone" - end - if border == nil or border == "mcl_core:dirt" then border = "mcl_core:dirt_with_grass" end - end - if an.name ~= liquid then - table.insert(br,pp) - if un.name ~= liquid then - airtower(pp,air,55) - end - end - end - end - minetest.bulk_set_node(br,{name=border}) - minetest.bulk_set_node(air,{name="air"}) return true end -- 2.40.1 From 687bc0456055b561494de8f1f8c075b91b2e387a Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Fri, 1 Jul 2022 12:39:10 -0600 Subject: [PATCH 224/357] Who is Cutting Onions? Advancement --- mods/ENTITIES/mcl_item_entity/init.lua | 1 + mods/HUD/mcl_achievements/init.lua | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/mods/ENTITIES/mcl_item_entity/init.lua b/mods/ENTITIES/mcl_item_entity/init.lua index c0fbf4b15..b31500fc4 100644 --- a/mods/ENTITIES/mcl_item_entity/init.lua +++ b/mods/ENTITIES/mcl_item_entity/init.lua @@ -59,6 +59,7 @@ mcl_item_entity.register_pickup_achievement("tree", "mcl:mineWood") mcl_item_entity.register_pickup_achievement("mcl_mobitems:blaze_rod", "mcl:blazeRod") mcl_item_entity.register_pickup_achievement("mcl_mobitems:leather", "mcl:killCow") mcl_item_entity.register_pickup_achievement("mcl_core:diamond", "mcl:diamonds") +mcl_item_entity.register_pickup_achievement("mcl_core:crying_obsidian", "mcl:whosCuttingOnions") local function check_pickup_achievements(object, player) if has_awards then diff --git a/mods/HUD/mcl_achievements/init.lua b/mods/HUD/mcl_achievements/init.lua index 91764b3e5..a89dc9381 100644 --- a/mods/HUD/mcl_achievements/init.lua +++ b/mods/HUD/mcl_achievements/init.lua @@ -136,6 +136,12 @@ awards.register_achievement("mcl:mineWood", { icon = "default_tree.png", }) +awards.register_achievement("mcl:whosCuttingOnions", { + title = S("Who is Cutting Onions?"), + description = S("Pick up a crying obsidian from the floor."), + icon = "default_obsidian.png^mcl_core_crying_obsidian.png", +}) + -- Smelting achivements: These are awarded when picking up an item from a furnace -- output. They are given in mcl_furnaces. awards.register_achievement("mcl:acquireIron", { -- 2.40.1 From 40a421ddd0def347e10f0d20e25675f3ac4dbc0f Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Fri, 1 Jul 2022 12:41:01 -0600 Subject: [PATCH 225/357] Hidden in the Depths Advancement --- mods/ENTITIES/mcl_item_entity/init.lua | 1 + mods/HUD/mcl_achievements/init.lua | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/mods/ENTITIES/mcl_item_entity/init.lua b/mods/ENTITIES/mcl_item_entity/init.lua index b31500fc4..fdf5489ff 100644 --- a/mods/ENTITIES/mcl_item_entity/init.lua +++ b/mods/ENTITIES/mcl_item_entity/init.lua @@ -60,6 +60,7 @@ mcl_item_entity.register_pickup_achievement("mcl_mobitems:blaze_rod", "mcl:blaze mcl_item_entity.register_pickup_achievement("mcl_mobitems:leather", "mcl:killCow") mcl_item_entity.register_pickup_achievement("mcl_core:diamond", "mcl:diamonds") mcl_item_entity.register_pickup_achievement("mcl_core:crying_obsidian", "mcl:whosCuttingOnions") +mcl_item_entity.register_pickup_achievement("mcl_nether:ancient_debris", "mcl:hiddenInTheDepths") local function check_pickup_achievements(object, player) if has_awards then diff --git a/mods/HUD/mcl_achievements/init.lua b/mods/HUD/mcl_achievements/init.lua index a89dc9381..84ef88243 100644 --- a/mods/HUD/mcl_achievements/init.lua +++ b/mods/HUD/mcl_achievements/init.lua @@ -142,6 +142,12 @@ awards.register_achievement("mcl:whosCuttingOnions", { icon = "default_obsidian.png^mcl_core_crying_obsidian.png", }) +awards.register_achievement("mcl:hiddenInTheDepths", { + title = S("Hidden in the Depths"), + description = S("Pick up an Ancient Debris from the floor."), + icon = "mcl_nether_ancient_debris_side.png", +}) + -- Smelting achivements: These are awarded when picking up an item from a furnace -- output. They are given in mcl_furnaces. awards.register_achievement("mcl:acquireIron", { -- 2.40.1 From 8f7ac1e5a26c0cdd4c4bbf51dc18b74fe0e5920d Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Fri, 1 Jul 2022 13:11:26 -0600 Subject: [PATCH 226/357] Not Quite 'Nine' Lives Advancement --- mods/HUD/mcl_achievements/init.lua | 6 ++++++ mods/ITEMS/mcl_beds/respawn_anchor.lua | 3 +++ 2 files changed, 9 insertions(+) diff --git a/mods/HUD/mcl_achievements/init.lua b/mods/HUD/mcl_achievements/init.lua index 84ef88243..53b3a453a 100644 --- a/mods/HUD/mcl_achievements/init.lua +++ b/mods/HUD/mcl_achievements/init.lua @@ -206,6 +206,12 @@ awards.register_achievement("mcl:sweetDreams", { icon = "mcl_beds_bed_red.png", }) +awards.register_achievement("mcl:notQuiteNineLives", { + title = S('Not Quite "Nine" Lives'), + description = S("Charge a Respawn Anchor to the maximum."), + icon = "respawn_anchor_side4.png", +}) + -- Triggered in mobs_mc awards.register_achievement("mcl:whatAdeal", { title = S("What A Deal!"), diff --git a/mods/ITEMS/mcl_beds/respawn_anchor.lua b/mods/ITEMS/mcl_beds/respawn_anchor.lua index a19a986ce..bb36fe9d0 100644 --- a/mods/ITEMS/mcl_beds/respawn_anchor.lua +++ b/mods/ITEMS/mcl_beds/respawn_anchor.lua @@ -39,6 +39,9 @@ for i=0,4 do elseif string.match(node.name, "mcl_beds:respawn_anchor_charged_") then minetest.chat_send_player(player.get_player_name(player), S"New respawn position set!") mcl_spawn.set_spawn_pos(player, pos, nil) + if i == 4 then + awards.unlock(player:get_player_name(), "mcl:notQuiteNineLives") + end end end -- 2.40.1 From 6757b8f9000ff90b6fbbe22d410f4b14b74feed8 Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Fri, 1 Jul 2022 13:41:21 -0600 Subject: [PATCH 227/357] The Nether Advancement --- mods/HUD/mcl_achievements/init.lua | 6 ++++++ mods/ITEMS/mcl_portals/portal_nether.lua | 3 +++ 2 files changed, 9 insertions(+) diff --git a/mods/HUD/mcl_achievements/init.lua b/mods/HUD/mcl_achievements/init.lua index 53b3a453a..babd66aa3 100644 --- a/mods/HUD/mcl_achievements/init.lua +++ b/mods/HUD/mcl_achievements/init.lua @@ -192,6 +192,12 @@ awards.register_achievement("mcl:enterEndPortal", { icon = "mcl_end_end_stone.png", }) +awards.register_achievement("mcl:theNether", { + title = S("The Nether"), + description = S("Bring summer clothes.\nHint: Enter the Nether."), + icon = "mcl_nether_netherrack.png", +}) + -- Triggered in mcl_totems awards.register_achievement("mcl:postMortal", { title = S("Postmortal"), diff --git a/mods/ITEMS/mcl_portals/portal_nether.lua b/mods/ITEMS/mcl_portals/portal_nether.lua index 0d93e11d1..1dd34d007 100644 --- a/mods/ITEMS/mcl_portals/portal_nether.lua +++ b/mods/ITEMS/mcl_portals/portal_nether.lua @@ -427,6 +427,9 @@ local function finalize_teleport(obj, exit) mcl_worlds.dimension_change(obj, dim) minetest.sound_play("mcl_portals_teleport", {pos=exit, gain=0.5, max_hear_distance = 16}, true) log("action", "[mcl_portals] player "..name.." teleported to Nether portal at "..pos_to_string(exit)..".") + if dim == "nether" then + awards.unlock(obj:get_player_name(), "mcl:theNether") + end else log("action", "[mcl_portals] entity teleported to Nether portal at "..pos_to_string(exit)..".") end -- 2.40.1 From acff3e525c6c4ce5cf889233ddb887a065101ab6 Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Fri, 1 Jul 2022 13:45:07 -0600 Subject: [PATCH 228/357] Changed the Into the Nether achievement to the We Need to Go Deeper Advancement --- mods/HUD/mcl_achievements/init.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/HUD/mcl_achievements/init.lua b/mods/HUD/mcl_achievements/init.lua index babd66aa3..5fa43544c 100644 --- a/mods/HUD/mcl_achievements/init.lua +++ b/mods/HUD/mcl_achievements/init.lua @@ -181,9 +181,9 @@ awards.register_achievement("mcl:snipeSkeleton", { -- Triggered in mcl_portals awards.register_achievement("mcl:buildNetherPortal", { - title = S("Into the Nether"), + title = S("We Need to Go Deeper"), description = S("Use obsidian and a fire starter to construct a Nether portal."), - icon = "default_obsidian.png", + icon = "mcl_fire_flint_and_steel.png", }) awards.register_achievement("mcl:enterEndPortal", { -- 2.40.1 From f998f3bc0520be3815368d3577c77638c377a2b7 Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Fri, 1 Jul 2022 13:56:44 -0600 Subject: [PATCH 229/357] Updated Advancements Translation Template --- mods/HUD/mcl_achievements/locale/template.txt | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/mods/HUD/mcl_achievements/locale/template.txt b/mods/HUD/mcl_achievements/locale/template.txt index ecdba2672..80105f1f9 100644 --- a/mods/HUD/mcl_achievements/locale/template.txt +++ b/mods/HUD/mcl_achievements/locale/template.txt @@ -19,7 +19,7 @@ Getting an Upgrade= Hit a skeleton, wither skeleton or stray by bow and arrow from a distance of at least 20 meters.= Hot Topic= Into Fire= -Into the Nether= +We Need to Go Deeper= Iron Belly= Librarian= Mine emerald ore.= @@ -47,3 +47,25 @@ Use a crafting table to craft a wooden hoe from wooden planks and sticks.= Use a crafting table to craft a wooden pickaxe from wooden planks and sticks.= Use obsidian and a fire starter to construct a Nether portal.= Use wheat to craft a bread.= +Who is Cutting Onions?= +Pick up a crying obsidian from the floor.= +Hidden in the Depths= +Pick up an Ancient Debris from the floor.= +The Nether= +Bring summer clothes.@nHint: Enter the Nether.= +Isn't It Iron Pick= +Craft a iron pickaxe using sticks and iron.= +Postmortal= +Use a Totem of Undying to cheat death.= +Sweet Dreams= +Sleep in a bed to change your respawn point.= +Not Quite "Nine" Lives= +Charge a Respawn Anchor to the maximum.= +What A Deal!= +Successfully trade with a Villager.= +Fishy Business= +Catch a fish. @nHint: Catch a fish, salmon, clownfish, or pufferfish.= +Country Lode,@nTake Me Home= +Use a compass on a Lodestone.= +Serious Dedication= +Use a Netherite Ingot to upgrade a hoe, and then completely reevaluate your life choices= -- 2.40.1 From 4bfadffadc0884063b48f87f778c6ea345992565 Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Fri, 1 Jul 2022 14:04:33 -0600 Subject: [PATCH 230/357] Fixed Minor Formating in Advancement Definitions --- mods/HUD/mcl_achievements/init.lua | 8 ++++---- mods/HUD/mcl_achievements/locale/template.txt | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/mods/HUD/mcl_achievements/init.lua b/mods/HUD/mcl_achievements/init.lua index 5fa43544c..c6235963a 100644 --- a/mods/HUD/mcl_achievements/init.lua +++ b/mods/HUD/mcl_achievements/init.lua @@ -228,7 +228,7 @@ awards.register_achievement("mcl:whatAdeal", { -- Triggered in mcl_fishing awards.register_achievement("mcl:fishyBusiness", { title = S("Fishy Business"), - description = S("Catch a fish. \nHint: Catch a fish, salmon, clownfish, or pufferfish."), + description = S("Catch a fish.\nHint: Catch a fish, salmon, clownfish, or pufferfish."), icon = "mcl_fishing_fishing_rod.png", }) @@ -241,9 +241,9 @@ awards.register_achievement("mcl:countryLode", { -- Triggered in mcl_smithing_table awards.register_achievement("mcl:seriousDedication", { - title = S("Serious Dedication"), - description = S("Use a Netherite Ingot to upgrade a hoe, and then completely reevaluate your life choices"), - icon = "farming_tool_netheritehoe.png", + title = S("Serious Dedication"), + description = S("Use a Netherite Ingot to upgrade a hoe, and then completely reevaluate your life choices."), + icon = "farming_tool_netheritehoe.png", }) -- NON-PC ACHIEVEMENTS (XBox, Pocket Edition, etc.) diff --git a/mods/HUD/mcl_achievements/locale/template.txt b/mods/HUD/mcl_achievements/locale/template.txt index 80105f1f9..240d97a28 100644 --- a/mods/HUD/mcl_achievements/locale/template.txt +++ b/mods/HUD/mcl_achievements/locale/template.txt @@ -64,8 +64,8 @@ Charge a Respawn Anchor to the maximum.= What A Deal!= Successfully trade with a Villager.= Fishy Business= -Catch a fish. @nHint: Catch a fish, salmon, clownfish, or pufferfish.= +Catch a fish.@nHint: Catch a fish, salmon, clownfish, or pufferfish.= Country Lode,@nTake Me Home= Use a compass on a Lodestone.= Serious Dedication= -Use a Netherite Ingot to upgrade a hoe, and then completely reevaluate your life choices= +Use a Netherite Ingot to upgrade a hoe, and then completely reevaluate your life choices.= -- 2.40.1 From 2845cd79b7cd8427efd0a4f69e62fd522ba01e56 Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Fri, 1 Jul 2022 14:37:02 -0600 Subject: [PATCH 231/357] Local Brewery Advancement --- mods/HUD/mcl_achievements/init.lua | 7 +++++++ mods/HUD/mcl_achievements/locale/template.txt | 2 ++ mods/ITEMS/mcl_brewing/init.lua | 3 +++ 3 files changed, 12 insertions(+) diff --git a/mods/HUD/mcl_achievements/init.lua b/mods/HUD/mcl_achievements/init.lua index c6235963a..424cc1364 100644 --- a/mods/HUD/mcl_achievements/init.lua +++ b/mods/HUD/mcl_achievements/init.lua @@ -246,6 +246,13 @@ awards.register_achievement("mcl:seriousDedication", { icon = "farming_tool_netheritehoe.png", }) +-- Triggered in mcl_brewing +awards.register_achievement("mcl:localBrewery", { + title = S("Local Brewery"), + description = S("Brew a Potion.\nHint: Take a potion or glass bottle out of the brewing stand."), + icon = "mcl_potions_potion_overlay.png^[colorize:#F82423:"..tostring(127).."^mcl_potions_potion_bottle.png", +}) + -- NON-PC ACHIEVEMENTS (XBox, Pocket Edition, etc.) if non_pc_achievements then diff --git a/mods/HUD/mcl_achievements/locale/template.txt b/mods/HUD/mcl_achievements/locale/template.txt index 240d97a28..1fd4bc718 100644 --- a/mods/HUD/mcl_achievements/locale/template.txt +++ b/mods/HUD/mcl_achievements/locale/template.txt @@ -69,3 +69,5 @@ Country Lode,@nTake Me Home= Use a compass on a Lodestone.= Serious Dedication= Use a Netherite Ingot to upgrade a hoe, and then completely reevaluate your life choices.= +Local Brewery= +Brew a Potion.@nHint: Take a potion or glass bottle out of the brewing stand.= diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua index 2ff2a806f..9c6879430 100644 --- a/mods/ITEMS/mcl_brewing/init.lua +++ b/mods/ITEMS/mcl_brewing/init.lua @@ -369,6 +369,9 @@ local function allow_take(pos, listname, index, stack, player) minetest.record_protection_violation(pos, name) return 0 else + if listname == "stand" then + awards.unlock(name, "mcl:localBrewery") + end return stack:get_count() end end -- 2.40.1 From 1abeccfaaba57bcdfd6cd88b4e907943dd08f957 Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Fri, 1 Jul 2022 14:50:56 -0600 Subject: [PATCH 232/357] Enchanter Advancement --- mods/HUD/mcl_achievements/init.lua | 7 +++++++ mods/ITEMS/mcl_enchanting/engine.lua | 1 + 2 files changed, 8 insertions(+) diff --git a/mods/HUD/mcl_achievements/init.lua b/mods/HUD/mcl_achievements/init.lua index 424cc1364..987694310 100644 --- a/mods/HUD/mcl_achievements/init.lua +++ b/mods/HUD/mcl_achievements/init.lua @@ -253,6 +253,13 @@ awards.register_achievement("mcl:localBrewery", { icon = "mcl_potions_potion_overlay.png^[colorize:#F82423:"..tostring(127).."^mcl_potions_potion_bottle.png", }) +-- Triggered in mcl_enchanting +awards.register_achievement("mcl:enchanter", { + title = S("Enchanter"), + description = S("Enchant an item using an Enchantment Table."), + icon = "mcl_enchanting_book_enchanted.png", +}) + -- NON-PC ACHIEVEMENTS (XBox, Pocket Edition, etc.) if non_pc_achievements then diff --git a/mods/ITEMS/mcl_enchanting/engine.lua b/mods/ITEMS/mcl_enchanting/engine.lua index 34fb55698..46a05abf9 100644 --- a/mods/ITEMS/mcl_enchanting/engine.lua +++ b/mods/ITEMS/mcl_enchanting/engine.lua @@ -576,6 +576,7 @@ function mcl_enchanting.handle_formspec_fields(player, formname, fields) minetest.sound_play("mcl_enchanting_enchant", {to_player = name, gain = 5.0}) mcl_enchanting.reset_table_slots(player) mcl_enchanting.show_enchanting_formspec(player) + awards.unlock(player:get_player_name(), "mcl:enchanter") end end -- 2.40.1 From 9c3a4f3436180e937e4e7a0fd85f612dd0a8e96f Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Fri, 1 Jul 2022 14:54:44 -0600 Subject: [PATCH 233/357] Updated the Advancements translation template...again --- mods/HUD/mcl_achievements/locale/template.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mods/HUD/mcl_achievements/locale/template.txt b/mods/HUD/mcl_achievements/locale/template.txt index 1fd4bc718..cb97e5d00 100644 --- a/mods/HUD/mcl_achievements/locale/template.txt +++ b/mods/HUD/mcl_achievements/locale/template.txt @@ -71,3 +71,5 @@ Serious Dedication= Use a Netherite Ingot to upgrade a hoe, and then completely reevaluate your life choices.= Local Brewery= Brew a Potion.@nHint: Take a potion or glass bottle out of the brewing stand.= +Enchanter= +Enchant an item using an Enchantment Table.= -- 2.40.1 From 677110e39f14745914eeeb5f5d9172511780757f Mon Sep 17 00:00:00 2001 From: MysticTempest Date: Sun, 3 Jul 2022 04:28:43 -0500 Subject: [PATCH 234/357] Disable the despawn timer catchup for items that were unloaded. --- mods/ENTITIES/mcl_item_entity/init.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/ENTITIES/mcl_item_entity/init.lua b/mods/ENTITIES/mcl_item_entity/init.lua index fdf5489ff..260b71286 100644 --- a/mods/ENTITIES/mcl_item_entity/init.lua +++ b/mods/ENTITIES/mcl_item_entity/init.lua @@ -537,9 +537,9 @@ minetest.register_entity(":__builtin:item", { self.itemstring = data.itemstring self.always_collect = data.always_collect if data.age then - self.age = data.age + dtime_s + self.age = data.age else - self.age = dtime_s + self.age = self.age end --remember collection data -- If true, can collect item without delay -- 2.40.1 From e22d543d80b5487f188cb1301e714c6228ddd40b Mon Sep 17 00:00:00 2001 From: Johannes Fritz Date: Sun, 3 Jul 2022 10:53:00 -0500 Subject: [PATCH 235/357] Fix loom and fletching table textures --- mods/ITEMS/mcl_fletching_table/README.md | 8 +++++++- mods/ITEMS/mcl_fletching_table/init.lua | 6 +++--- .../textures/fletching_table_front.png | Bin 720 -> 725 bytes .../textures/fletching_table_side.png | Bin 745 -> 749 bytes .../textures/fletching_table_top.png | Bin 630 -> 790 bytes mods/ITEMS/mcl_loom/README.md | 8 +++++++- mods/ITEMS/mcl_loom/init.lua | 4 ++-- mods/ITEMS/mcl_loom/textures/loom_bottom.png | Bin 315 -> 601 bytes mods/ITEMS/mcl_loom/textures/loom_bottom1.png | Bin 395 -> 0 bytes mods/ITEMS/mcl_loom/textures/loom_front.png | Bin 339 -> 724 bytes mods/ITEMS/mcl_loom/textures/loom_front1.png | Bin 615 -> 0 bytes mods/ITEMS/mcl_loom/textures/loom_side.png | Bin 360 -> 691 bytes mods/ITEMS/mcl_loom/textures/loom_side1.png | Bin 639 -> 0 bytes mods/ITEMS/mcl_loom/textures/loom_top.png | Bin 358 -> 774 bytes mods/ITEMS/mcl_loom/textures/loom_top1.png | Bin 468 -> 0 bytes 15 files changed, 19 insertions(+), 7 deletions(-) delete mode 100644 mods/ITEMS/mcl_loom/textures/loom_bottom1.png delete mode 100644 mods/ITEMS/mcl_loom/textures/loom_front1.png delete mode 100644 mods/ITEMS/mcl_loom/textures/loom_side1.png delete mode 100644 mods/ITEMS/mcl_loom/textures/loom_top1.png diff --git a/mods/ITEMS/mcl_fletching_table/README.md b/mods/ITEMS/mcl_fletching_table/README.md index af0b88185..a30e2c1b4 100644 --- a/mods/ITEMS/mcl_fletching_table/README.md +++ b/mods/ITEMS/mcl_fletching_table/README.md @@ -10,4 +10,10 @@ LGPLv2.1 License of media ---------------- -See the main MineClone 2 README.md file. \ No newline at end of file + +fletching_table_bottom.png +fletching_table_front.png +fletching_table_side.png +fletching_table_top.png +License: CC BY-SA 4.0 +Author: MrRar diff --git a/mods/ITEMS/mcl_fletching_table/init.lua b/mods/ITEMS/mcl_fletching_table/init.lua index 5fc7556b8..686a1dc2c 100644 --- a/mods/ITEMS/mcl_fletching_table/init.lua +++ b/mods/ITEMS/mcl_fletching_table/init.lua @@ -5,9 +5,9 @@ minetest.register_node("mcl_fletching_table:fletching_table", { _tt_help = S("A fletching table"), _doc_items_longdesc = S("This is the fletcher villager's work station. It currently has no use beyond decoration."), tiles = { - "fletching_table_top.png", "fletching_table_top.png", - "fletching_table_side.png", "fletching_table_side.png", - "fletching_table_front.png", "fletching_table_front.png" + "fletching_table_top.png", "fletching_table_bottom.png", + "fletching_table_front.png", "fletching_table_front.png", + "fletching_table_side.png", "fletching_table_side.png" }, paramtype2 = "facedir", groups = { axey = 2, handy = 1, deco_block = 1, material_wood = 1, flammable = 1 }, diff --git a/mods/ITEMS/mcl_fletching_table/textures/fletching_table_front.png b/mods/ITEMS/mcl_fletching_table/textures/fletching_table_front.png index da2eb35193f1d423dd04bb0b9c2a0b4b12baf65b..091389e26bb70fdc8286cbef7d3446a17745e31e 100644 GIT binary patch delta 702 zcmV;v0zv)I1=R(RBYy&%NklT9>aN$c0dY_(DQt{ z`aIhjiCYN}>N0To`VEdRF75%WHVv0weUYaQgH{S%8@YRTO3Xq`MqMg{I`Gcd_sttk zvj=c|agnvA;e&I}qNO?x&J+v}RBWY=TYpC$d8no?{C@)`U=OS+6!k%vB*QZF^?rlC zbCk~Uf7%^K)C@wc)N>`a)1qFeYbERh?4JQp1wl7=B6seLnM2s#X^F|mWJ2Zn?EGoo zYMKX5+-Mr!f8_<1=6dLngUX+MPrnz46GOc)8YOxjmWKnboqvuu_N9M#_7vwES-tE}Q|&OxuWaj+ajzMGA*_!R<~mPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2jU9_5Cj;!a4#qT00K}+L_t(I%Z-xDPZLoT#(xZ@ zorlnIn83ueCC>O*m?$B!F~P79qV7-@%7TqMH?sF1aO1*-OMe$GBr&iMj4^Bsi6m$u zF%lvs5Zdx+2!$z7urt%j!$s|dMi-vs=F9o+&3DiF&Z&F*Z19MGM9D7`QNlHNG9pSC zfDpiPHjmZZ$a;PctGSVa@8Np~e~Bt;z2FtKo)$w#nx09s;THHjvq)w&M?-_d^2!!* ztDOzEP=i%Ivwxand1Z^~nKV*c!eBf9lbEHGT6Y2H8+arz*>{)OOtvPESvm*5pe3#F#z?8^Zi}GSGDzJJ6`g>{AB;uASM1MjNC5-JD0DPGILbEF2dxwmU zZvrs+F%LlAI|N{Ke3Qq6{g|eFJjQDDbR_|p`jO#I=S9Y*=DFEpXO57*Lv6~dUV};Al6z;!8B#gojpT$ zhfORIXK3`jK!97x^EG*O^d-NHRPa4fK~UajVPd%A{>V##>#oPwcdr3hm>8zymvP;I zh!Uo5fpBYy(4NkliG$q1R^fDiXa0Oi{(fb zlph|qEao+DUfLkb9EOpifWdfb_}~8OfXJ11K4pJ@pQEEAe*WTpR6#{}>w|B&f9Dpz z056vX!xV`V8uFkl6 z?KMvO3Ez03%6}BQ_Z26v+~wPkZ!*M0nR&blZva32-lCJErQ_kDa@|$PETPV!BM^fU zO2_R_-X@uW85gUGm;fNCk@1Dt_7f*315-3qJ(W*vRDmYX0B`_i zRK3zZ?ReNI*L0VQG2(NtY&RKK<^}#(*j7mGXECpNwP;8N<0_(; zw>@?3sDI0Vcf#4}MAt>)YJ~q@*lYrIvF6!ol*|iiMwuzTUm9IE@#5!q`LJy{I5^Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2jU9_5DE}1D2kK-00L=AL_t(I%WacgNK;`LfFJd+ z?VRN{=4?yW#GfmJ=q4!eCbEm@56v6J2=6jsU5FCH{)C1p!+)ZJy0C5}=*AHe(v{>z zNLMMfE2k}o+uCu?&HXq{yO{g*P%nJEoR{}J=lh=Xeq|rV+y+ac@H3y%Zo;%Y#@`%Yx3bZ zTr012Sy^A(#DD3q5R9rslWBsHIKikY^1^bMU?fh@;}(-P17uT+P=3=yvzBH0uYzEGtMQ878xWyX`7dw>-FxIRv27cOUP- zBV0gN>m}McZfHbGCA%%>TbS{Ta^;m*vxE7*Aw0eZynh)P#bQ**E`FiTS%a#Eiw^X% zj`{|xM$%O0ZRY!iG&TS99Fb56|MVPsS%=NGFR|3H5swpy1=vii6Nm-)6^Q~Ab1F&4 zwPs{nHLVxVXuuM{QZT{klLw&Q@wdf?R8lnlTuosyDx@>J0H|u7neR0K$xK$vOX&y#u(-U+xPO+R;Sm8aS6Aclz9g1N0Wk4?ik|Lv z&hCpBf5B!m&{$W4RKClnna>z>g3GB!J7DKRYcBu~?>%AV`$utKq>Wrw>|keS2Y~o` zK{MI__WA~5OF=^47TDe{psINq>vWWxWd&6&HcO{7yF!vtHfYw@Nk5Yl&jDD8ssQ{> zBq{T`+xJRK;K7pFYVBkbIhOr_EcTu+SZVFzj(;wM~`^@ z#tnYB^%9pSIYER(gEbnhgw{D+4_*&hRWr=fg(iA<@5^5}Iy&Ojy*Pg3gEv8)`uhv);#dPSZp z4B+j6#)0X9v`FyY(=-jscpfOnj=O-O?T~k#T zC0&5=$fCutY&eN40&C2uU-F>FhDaFs9;Y1i_nj~t}@w_E8p4oB5 zV$o359e+r~=EASXb8^f7@TK4GF-Q%WR*Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2jU9_5DhM(2m$y200H(%L_t(I%axN)YZFlv#eZ$m zWbRDEz{E6Rh>3p!BSA}$x(MRJjfh}ZZd{663GUtb1>EUU{eJ*1ick=DW-&Hm$*NLG zkZ2rQqtPJAObtaB@l7%fECBBN@7X?u(n>~(fzvs4E-RIXov=Y_w_qhFP;m@ z7Gc7saO=)JihqSk`LbhEc5DpMSatFg3l^p!5lM^cu(n>K)7V0@GMJ)=6%_{l2vhXP zT_{0)%6``)Tk7F9TNt9Tv+GTghdx6;2uYKY0Dm-3t;Y<6}%%8m_yyWOU8<^-b0SiN=|?{k+= z?k2^2dLjYf?aQYCbU)O?stTqdk>v6Fdh`#J&R1_1sb0@(zRBYy%QNklQWmUI5n)R*(5-V<;K;p)4@rRr_ z@fDmvVg<8~KgUDwGP@h2eyRkyuo&nWzMZ)rpQ1z~6gg2MFT~ z+;&hmii7|!MmWp_>Pn5qWlQ3(?i{%j61^i2 zsT6+Ojtzni&mPV{(==WX$=t ziW|!0_i^H%y$~-Q7Eg)^vt$akA+#8G6;4d9I1}S8aoLjwm^rN^@zn}B#OJy_vjAD4}#0%LNYj)!rV(|@}-h8R6*E{foiPUe+dCL?_f!)VAp;3g;J^S1(Coq1-;%(O>njoUVd6J_r8yJ^H3~?q&A1Ja#6HBF;whjO z_+!2UOJdxTXPcZ#LMB@cJQLGo+?Gv>n#8$F7wgtlMc9v``s{u<|4}f z@C0TIgF51%SUJSPGm|)#!7(mOCFXE3XYYbEH2CsFZ(>Czwx3xGe8Tt-hiWVhX8`=A P00000NkvXXu0mjf0+I^b delta 289 zcmV++0p9-E1iJ!|BYyx1a7bBm000XU000XU0RWnu7ytkO2XskIMF-;t1^_Y&#_Ihq z0002mNklk zeH!EJ>^t{vlhg6=1u0Qf008beXe+640pR+~Ftm1?5SJwX8-D=6YBB4)NtRBQL70(Y)*K0-AbW|YuPgf_Zf-t#okLS!`T;Pr3z z<`!PwhB^CV@@E{g>n@#jWkzsKl+E%P{fm;13;!*gFkye>jUnope&Iwv%qVZC8CPTH;D~dvvaJ`SH`G-rwJAj8U(zuQkS~ zZQE*$QHNpB7^5ziON}vV(=-}m)UN9^#;8Aid#Unf2GcZ=Qh#C?22x6Fw_8$5|97!i zkWykkpOaGJ<>iHx5^eEFJ6c49cio(eiwiz%AILfLuAkGkEg$-CDJ2TKcmd}e z2a;K>R#;;wMv!A`8HNF?!e+DKHG8_QqbtICy{0HUKR=U!&1Qow$~cY$%>*(|%gF8R zEyZN+?(V2uq3?T+r7)Y#I1GlWsvyJB(GjoesH%!)a(~o=MOGv9eGjk$0S^xkOcs{Q zB^8C$YJ~$9iv|5uxVgDO%0#dQ`MiS1$46!qM1;!jl!v?nrpb{~;x!9bS65Uf^K{M{@39Q zWTX5uIe(_9;H_s<3_+A52TsA0u?F6LwdISDan4)juM2+r3qIQq2n8bsXAEP>V1xs2 z8MC5AK?|yd@81_Nd&txme*VL9=!HEBHaLP6f`udJm|4N(LJ$bfV2n_T@XPNO5ZpQ& z4uWIf@6Ix2K?H(Tf(KQFtYBa=fOJ1MuIhFunmVaw1RdR?xFSA?|;-N~F zy#!i=Bo>1h0&L|Qee}`63V#`QA7~8L`NtrJ0J11JJrPF}Ah^9=xpaEQ5M{YW)SHLr z4M`k%4OYf-F+T_RHIT}(Ovl7gfU%A^3VH|YGh-dby4K(^D+g7WPm{KSZ~ShJCPA(G zXaCdZ_pVtBfHGw|W-{_iAeCh@N|4G@nH{3gdkVeh<^9V$e)sMV0Liwp%-k#a00000 LNkvXXu0mjfW2J%$ diff --git a/mods/ITEMS/mcl_loom/textures/loom_front1.png b/mods/ITEMS/mcl_loom/textures/loom_front1.png deleted file mode 100644 index 411e5189130839854d021d8cb105c1872b2e2026..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 615 zcmV-t0+{`YP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2jUA0 z4lXy2ttSuw00HMoL_t(I%Waa)Zqq;z$A7h4$KGWfB}!;jkU*fSJ#gX(5<=pD#E}O< zyb0n_cmu?h3qo)}2tsHY@>Qp?wd;)&wH#b;V#?g?+5gwf?7VyP>XNHEeDs3zKc~o6 zn`wW*gC|e<^5H!PM~4i*eW!cpHq-uqWbl^ap1w^MaMl0TAt*Y}d->h*+>2 zMgWY?GA7A60RG2MKLO~Sj5&Jz9FrOcOva~(Sk%ZwEa;t#kx@whcTzg|+#3L(=Sit( zGDIw{IocJ<2@GfRGJ=vG9VG$i-aoFXRhCyK!=whK;+i8RJ-jgR0gzFMNhW1hp#W&_ z-NK~CeP>x(69@wz&lc-ay%o5INhX-oI6xK2BoilAl@|s+O&M*#TSHu#>{=v~8oI5( zVRqiWetG$8m~!_ZW;!oW(sTCySGHIa20j(W2UzGFh|#%4=dj-q*kVnlFVMMl;L3U! zlo(qGYBHM#zI&*o=ZGq@?Ff!wIxpNk(7PfG8vu-x&Gc`GMoq}K#hRv!P}1Ys!+S2{ zc4pYCthyJP`3t3=@cgsxEQBYy&VNklm261`f`3J(!fqC(k~|?X7gCg| zD948*x+%uvqP+J0r#yGv4N|}| zfkaJl7g_@$QGek0(um(L%JC~Fm_bVzSs*nLRFg%Gg1lfzrqnLZCivn-Hbk4r#0)|5Sh94Gx(JOe*5!~ zvN?y?v8}=Hrj$tP4Au=xpImma%9*KFrVy@P8u5ZK?EdB1HBg1#JJf|KmC_}nC$%iE zwuEgcL*G+Uc~lxcXmIDjjv6qy5F$iNS_@p2eL^QN8d!qUP=SVWbTFdc8T%%@@xjL& zoxIIF2Y-p6s(2^#CWyeMz{5E?`RGe7-*}Iy1xTQEA801`{yO8Q?{3n}h)6PnHYZtw zRvMatYjWrGHa~px6>}3nkx#C_n0Gf%Sy>0LY5N+hT_tC4VlSo6lO1rcG!XJk3|F7A0d5wP0}A?gHXVvApHqUD&jKZ zpEXnxlor%L0B}1p_%F87{~AmZ1K)$N4{1LpBLge$+u-$md!`4wYCj(DFY`M{BP%7u zMq||-$|?AWN=IpUZ5X2to5-Ywua*Xr!gAB)MXEK?Z$CWRblk)}n9thkYdkl$;y|Bk g2dwian{k!#7uE=TFh5ZG1ONa407*qoM6N<$f}q!pi~s-t diff --git a/mods/ITEMS/mcl_loom/textures/loom_side1.png b/mods/ITEMS/mcl_loom/textures/loom_side1.png deleted file mode 100644 index baf1aed5d38642015b47a858f7d37527e70e2c18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 639 zcmV-_0)YLAP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2jUA0 z4l)(Jx;v==00I9=L_t(I%XN}JXcJK!$3MM3E_ZoeYueO?D)kR`k)og=g^nUZamnB; z)YeG^(XkFi!KLCNF7EDGb#QQT(Lrz!3AK=>C%HC;@ba!lOdT%oC1>=z{NUa9zVG{e zzwcP(#r-4xfkT~;^WDrGM$UHu5CA*1eM-{-;eMOabU;gY(4F5SqJDndp8NT6PD~wV zY~%LLBLJmiOO(Ec(s5=EWBAMg__AFCpc+Q3KYYYWxlA>TsO~kWh7tERpK)vT4lCud z<<_HS8X=Gl#XthEyg1LBS1$p$c=i;5bnslk!OvY9J2k$3e$VpaJYm!UAdn8ibA`3t zR=rFVrPKNP`Bo;Lf#(WDoOA)0DY!J6i6sQm;s5Yx_0@&v3MQp*bFHnfA`4T@o<7fm zyK4hC@gV@kKyqne7Nz~c8V%-(1wOp3aAoN_s(HZDg_9$98^;C$=-Zh<=@_Nq)5muJ zBX45jd2aeooaD0(1_WV=fpn~p5t}KvHntULG!wgHw)=u!j>k_n`L(wTz{b-pj^%Ti zi$t7snUp?(bhvi;9C6aM4gl)kz5{8j8&?-5>Re zjTcCVIO)<>Jz7e0W^N*FVm;DKN*^QkcVP_7cO%|tCJ0l@meN$i$Yvkjzw~mp2c`=~ Z=np@M?QWykI+y?e002ovPDHLkV1hJO9kKub diff --git a/mods/ITEMS/mcl_loom/textures/loom_top.png b/mods/ITEMS/mcl_loom/textures/loom_top.png index af980f3c197345ab395ecc23d813aa969294820c..cf0c1e3ebe64cabf9f2b10d24871abec4f29ac6a 100644 GIT binary patch delta 751 zcmVxZwF zBn6Tb1dCKzxVA!!Ar&y0VB3l`HF!4UmB9kErLYnB>6<0l+ke}WozFcvIy#bfZwqp9 zaUtJ*xgf{K$MWq;UUqkPW&4dM`}_OSTlVDO;6S!NE6Mj?e z>FFs?aYn!2XMY;M>d`#o?Cgx^B*V)qtRK58^7CkcPr*BXiv5r%!Z7@#0FynVe63ks zUFGuRn0C9()o;hFt*!C?~6*TR3o7%!_K{==C^?HOQmz|v*ynlS2QLItp1bV$5(Sl32+oe)) z>2x~yMVD5q#Ztkh)oKxX4xLVia^9ia?NYKWTy0QM9vY1Xe|v9eG#dPsTV!Qrg$+&yrdTXuiTUqqgNUGb^^I6~o`(?yC}`9)vzSh&Tv-)d*X3SE6pKY}ojQ)= zaBGK%2!A*czV9>e>O@h*b#9T8lc9W_qLiXisi2giR;y7imx-c?AP9(}h(e)25Cr(X hPpww_p9fQme*uAsM0M!U{2%}T002ovPDHLkV1gsDbOQhY delta 332 zcmV-S0ki&w2Ic~gBYyx1a7bBm000XU000XU0RWnu7ytkO2XskIMF-;t1_2`wX_HNI z00036NklZNoW>YUE#sn-A+5G?`ZnME%<#|u<_&{>PhVb~>ifG}XMYa*JuPBY5KTS+_?&(N zSY5|h6$pUcrleY>t|Krv0C;?QUEqI9tlC&MTy=o}Nb>?$mPP`gyVqh9T7#g~AXUj) zmglOp24nR_9aEM3;@U@aoSgAIrg3t7c>NG%yqjn)4BL|J(3hMY?VGqA(}rh4dZwk0 eja@w#`jQ_l;WiP#j>Cok0000Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2jc_- z4>AQUcP(K600C4fF~b7^o9B=eU`p~c=amc z#Y3S&O-aNAC$>fEA)RqIX~DTnvYYwlo9~-6X4A@8E)y*xQ9`4Z} zkMQ-8V)6VaC1?S_y4U~!+NTEONV7zqXZp+;W0~XtfMH~DA{SlL!S=fV0L=o#X{-R` z2*b!~jRHskXRKL^dV?TKtcy(vAe7o#PNZ;RZC|0j8fye;Rm`x|U z`6AKv6n~F}bYCVphLJ_fKk!4W6^DGL{@%3Yuli5-fh>^u)8H4V-=_Xy7F+570000< KMNUMnLSTXd7{@{Y -- 2.40.1 From b1c97a05107442d9be995005c677992546f7ba38 Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 4 Jul 2022 01:41:45 +0200 Subject: [PATCH 236/357] prevent ground squids, variable spawn height --- mods/ENTITIES/mcl_mobs/spawning.lua | 3 ++- mods/ENTITIES/mobs_mc/squid.lua | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/mods/ENTITIES/mcl_mobs/spawning.lua b/mods/ENTITIES/mcl_mobs/spawning.lua index 8fa2e7a8a..faad27537 100644 --- a/mods/ENTITIES/mcl_mobs/spawning.lua +++ b/mods/ENTITIES/mcl_mobs/spawning.lua @@ -453,11 +453,12 @@ if mobs_spawn then and (mob_def.check_position and mob_def.check_position(spawning_position) or true) and (not is_farm_animal(mob_def.name) or is_grass) and (mob_type ~= "npc" or has_bed) + and (mob_def.type_of_spawning ~= water or is_water) then --everything is correct, spawn mob local object = minetest.add_entity(spawning_position, mob_def.name) if object then - return mob_def.on_spawn and mob_def.on_spawn(object, pos) + return mob_def.on_spawn and mob_def.on_spawn(object, spawning_position) end end current_summary_chance = current_summary_chance - mob_chance diff --git a/mods/ENTITIES/mobs_mc/squid.lua b/mods/ENTITIES/mobs_mc/squid.lua index 86b80976e..f4ca0521a 100644 --- a/mods/ENTITIES/mobs_mc/squid.lua +++ b/mods/ENTITIES/mobs_mc/squid.lua @@ -55,6 +55,17 @@ mcl_mobs:register_mob("mobs_mc:squid", { view_range = 16, runaway = true, fear_height = 4, + on_spawn = function(self) + --make sure squids always spawn in water (and at variable heights) + --can be removed once this is provided by the api + local p = self.object:get_pos() + local nn = minetest.find_nodes_in_area(vector.offset(p,-2,-1,-2),vector.offset(p,2,-15,2),{"group:water"}) + if nn and #nn > 0 then + self.object:set_pos(nn[math.random(#nn)]) + else + self.object:remove() + end + end, }) -- TODO: Behaviour: squirt -- 2.40.1 From bc2e61921f1b5f489fffbbf251328a9003093013 Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 4 Jul 2022 01:46:41 +0200 Subject: [PATCH 237/357] do not spawn polar bears in extremehills+_snowtop --- mods/ENTITIES/mobs_mc/polar_bear.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/mods/ENTITIES/mobs_mc/polar_bear.lua b/mods/ENTITIES/mobs_mc/polar_bear.lua index 3fd2d0a0c..4b2f338b2 100644 --- a/mods/ENTITIES/mobs_mc/polar_bear.lua +++ b/mods/ENTITIES/mobs_mc/polar_bear.lua @@ -76,7 +76,6 @@ mcl_mobs:spawn_specific( "ColdTaiga", "IcePlainsSpikes", "IcePlains", -"ExtremeHills+_snowtop", }, 0, minetest.LIGHT_MAX+1, -- 2.40.1 From c66cb834a2c0735b7e044aadb34f28eb4206fdca Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 4 Jul 2022 02:13:54 +0200 Subject: [PATCH 238/357] spawn corals only at -10 and lower to prevent corals in rivers --- mods/MAPGEN/mcl_biomes/init.lua | 42 +++++++++++++++++---------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index 2914d148f..f766b0692 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -2495,6 +2495,8 @@ local function register_seagrass_decoration(grasstype, offset, scale, biomes) end end +local coral_min = OCEAN_MIN +local coral_max = -10 local warm_oceans = { "JungleEdgeM_ocean", "Jungle_deep_ocean", @@ -2538,8 +2540,8 @@ local function register_coral_decos(ck) sidelen = 80, noise_params = noise, biomes = warm_oceans, - y_min = OCEAN_MIN, - y_max = -8, + y_min = coral_min, + y_max = coral_max, schematic = mod_mcl_structures.."/schematics/mcl_structures_coral_"..c.."_1.mts", rotation = "random", flags = "all_floors,force_placement", @@ -2550,8 +2552,8 @@ local function register_coral_decos(ck) noise_params = noise, sidelen = 80, biomes = warm_oceans, - y_min = OCEAN_MIN, - y_max = -8, + y_min = coral_min, + y_max = coral_max, schematic = mod_mcl_structures.."/schematics/mcl_structures_coral_"..c.."_2.mts", rotation = "random", flags = "all_floors,force_placement", @@ -2562,8 +2564,8 @@ local function register_coral_decos(ck) place_on = {"mcl_ocean:"..c.."_coral_block"}, sidelen = 16, fill_ratio = 3, - y_min = OCEAN_MIN, - y_max = 1, + y_min = coral_min, + y_max = coral_max, decoration = "mcl_ocean:"..c.."_coral", biomes = warm_oceans, flags = "force_placement, all_floors", @@ -2575,8 +2577,8 @@ local function register_coral_decos(ck) place_on = {"mcl_ocean:horn_coral_block"}, sidelen = 16, fill_ratio = 7, - y_min = OCEAN_MIN, - y_max = 1, + y_min = coral_min, + y_max = coral_max, decoration = "mcl_ocean:"..c.."_coral_fan", biomes = warm_oceans, flags = "force_placement, all_floors", @@ -2604,8 +2606,8 @@ local function register_decorations() lacunarity = 3.5, flags = "absvalue" }, - y_min = OCEAN_MIN, - y_max = -5, + y_min = coral_min, + y_max = coral_max, decoration = "mcl_ocean:dead_brain_coral_block", biomes = warm_oceans, flags = "force_placement", @@ -2619,8 +2621,8 @@ local function register_decorations() place_on = {"mcl_ocean:dead_brain_coral_block"}, sidelen = 16, fill_ratio = 3, - y_min = OCEAN_MIN, - y_max = 1, + y_min = coral_min, + y_max = coral_max, decoration = "mcl_ocean:sea_pickle_1_dead_brain_coral_block", biomes = warm_oceans, flags = "force_placement, all_floors", @@ -2633,8 +2635,8 @@ local function register_decorations() place_on = {"mcl_ocean:dead_brain_coral_block"}, sidelen = 16, fill_ratio = 3, - y_min = OCEAN_MIN, - y_max = 1, + y_min = coral_min, + y_max = coral_max, decoration = "mcl_ocean:sea_pickle_2_dead_brain_coral_block", biomes = warm_oceans, flags = "force_placement, all_floors", @@ -2647,8 +2649,8 @@ local function register_decorations() place_on = {"mcl_ocean:dead_brain_coral_block"}, sidelen = 16, fill_ratio = 2, - y_min = OCEAN_MIN, - y_max = 1, + y_min = coral_min, + y_max = coral_max, decoration = "mcl_ocean:sea_pickle_3_dead_brain_coral_block", biomes = warm_oceans, flags = "force_placement, all_floors", @@ -2661,8 +2663,8 @@ local function register_decorations() place_on = {"mcl_ocean:dead_brain_coral_block"}, sidelen = 16, fill_ratio = 2, - y_min = OCEAN_MIN, - y_max = 1, + y_min = coral_min, + y_max = coral_max, decoration = "mcl_ocean:sea_pickle_4_dead_brain_coral_block", biomes = warm_oceans, flags = "force_placement, all_floors", @@ -2677,8 +2679,8 @@ local function register_decorations() fill_ratio = 0.0001, sidelen = 80, biomes = warm_oceans, - y_min = OCEAN_MIN, - y_max = -8, + y_min = coral_min, + y_max = coral_max, schematic = mod_mcl_structures.."/schematics/coral_cora.mts", rotation = "random", flags = "place_center_x,place_center_z, force_placement", -- 2.40.1 From 0e6250b2a367817d35a694a56acced2392a45ad3 Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 4 Jul 2022 12:50:48 +0200 Subject: [PATCH 239/357] Fix rabbit spawning biomes --- mods/ENTITIES/mobs_mc/rabbit.lua | 9 --------- 1 file changed, 9 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/rabbit.lua b/mods/ENTITIES/mobs_mc/rabbit.lua index 524000a71..2632eafce 100644 --- a/mods/ENTITIES/mobs_mc/rabbit.lua +++ b/mods/ENTITIES/mobs_mc/rabbit.lua @@ -132,18 +132,9 @@ mcl_mobs:spawn_specific( "Desert", "FlowerForest", "Taiga", -"ExtremeHills", -"BirchForest", "MegaSpruceTaiga", "MegaTaiga", -"ExtremeHills+", -"Plains", "ColdTaiga", -"SunflowerPlains", -"RoofedForest", -"MesaPlateauFM_grasstop", -"ExtremeHillsM", -"BirchForestM", }, 9, minetest.LIGHT_MAX+1, -- 2.40.1 From db4f2baafc2f814d1a1931dc987f8f66973773b7 Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 2 Jul 2022 00:21:47 +0200 Subject: [PATCH 240/357] Tweak tsm_railcorridors for faster mapgen This just does 5 instead of 10 attempts to spawn a corridor in a chunk. There still appear to be plenty corridors and it makes mapgen noticeably faster. --- mods/MAPGEN/tsm_railcorridors/init.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mods/MAPGEN/tsm_railcorridors/init.lua b/mods/MAPGEN/tsm_railcorridors/init.lua index 451406167..75abe5c28 100644 --- a/mods/MAPGEN/tsm_railcorridors/init.lua +++ b/mods/MAPGEN/tsm_railcorridors/init.lua @@ -1102,7 +1102,9 @@ mcl_mapgen_core.register_generator("railcorridors", nil, function(minp, maxp, bl local buffer = 5 -- Do up to 10 tries to start a corridor system - for t=1,10 do + -- 5 Still seems to generate a lot of them and + -- makes this noticeably faster. + for t=1,5 do -- Get semi-random height in mapchunk local y = pr:next(minp.y + buffer, maxp.y - buffer) y = math.floor(math.max(height_min + buffer, math.min(height_max - buffer, y))) -- 2.40.1 From a92b405efd5cadb9e2b0e9a9a15a4540c4bef042 Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 2 Jul 2022 00:27:09 +0200 Subject: [PATCH 241/357] Comment out unused cart-checking hackery --- mods/MAPGEN/tsm_railcorridors/gameconfig.lua | 8 ++++++++ mods/MAPGEN/tsm_railcorridors/init.lua | 12 +++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/mods/MAPGEN/tsm_railcorridors/gameconfig.lua b/mods/MAPGEN/tsm_railcorridors/gameconfig.lua index de4b18119..3ada3052f 100644 --- a/mods/MAPGEN/tsm_railcorridors/gameconfig.lua +++ b/mods/MAPGEN/tsm_railcorridors/gameconfig.lua @@ -42,6 +42,14 @@ tsm_railcorridors.carts = { "mcl_minecarts:minecart" } function tsm_railcorridors.on_construct_cart(pos, cart) -- TODO: Fill cart with treasures + + -- This is it? There's this giant hack announced in + -- the other file and I grep for the function and it's + -- a stub? :) + + -- The path here using some minetest.after hackery was + -- deactivated in init.lua - reactivate when this does + -- something the function is called RecheckCartHack. end -- Fallback function. Returns a random treasure. This function is called for chests diff --git a/mods/MAPGEN/tsm_railcorridors/init.lua b/mods/MAPGEN/tsm_railcorridors/init.lua index 75abe5c28..8bb0d7253 100644 --- a/mods/MAPGEN/tsm_railcorridors/init.lua +++ b/mods/MAPGEN/tsm_railcorridors/init.lua @@ -388,11 +388,16 @@ local function PlaceChest(pos, param2) end end + -- This function checks if a cart has ACTUALLY been spawned. -- To be calld by minetest.after. -- This is a workaround thanks to the fact that minetest.add_entity is unreliable as fuck -- See: https://github.com/minetest/minetest/issues/4759 -- FIXME: Kill this horrible hack with fire as soon you can. + +-- Why did anyone activate it in the first place? It doesn't +-- have a function seeing as there are no chest minecarts yet. +--[[ local function RecheckCartHack(params) local pos = params[1] local cart_id = params[2] @@ -408,6 +413,8 @@ local function RecheckCartHack(params) end minetest.log("info", "[tsm_railcorridors] Cart spawn FAILED: "..minetest.pos_to_string(pos)) end +--]] + -- Try to place a cobweb. -- pos: Position of cobweb @@ -937,7 +944,10 @@ local function spawn_carts() -- Note that the callback function is also called there. -- TODO: Move callback function to this position when the -- minetest.add_entity bug has been fixed. - minetest.after(3, RecheckCartHack, {cpos, cart_id}) + + -- minetest.after(3, RecheckCartHack, {cpos, cart_id}) + -- This whole recheck logic leads to a stub right now + -- it can be reenabled when chest carts are a thing. end end carts_table = {} -- 2.40.1 From 9f66c9f6731cf668baeb3f238aa48b23db1283dc Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 2 Jul 2022 03:44:13 +0200 Subject: [PATCH 242/357] let railcorridors be placed by new api this makes it a lot faster --- mods/MAPGEN/mcl_mapgen_core/init.lua | 4 +-- mods/MAPGEN/mcl_structures/api.lua | 14 +++++----- mods/MAPGEN/mcl_structures/init.lua | 2 +- mods/MAPGEN/tsm_railcorridors/init.lua | 36 +++++++++++++++++++++++--- mods/MAPGEN/tsm_railcorridors/mod.conf | 2 +- 5 files changed, 43 insertions(+), 15 deletions(-) diff --git a/mods/MAPGEN/mcl_mapgen_core/init.lua b/mods/MAPGEN/mcl_mapgen_core/init.lua index f9745b471..5a6082533 100644 --- a/mods/MAPGEN/mcl_mapgen_core/init.lua +++ b/mods/MAPGEN/mcl_mapgen_core/init.lua @@ -2168,18 +2168,18 @@ mcl_mapgen_core.register_generator("main", basic, basic_node, 1, true) mcl_mapgen_core.register_generator("structures",nil, function(minp, maxp, blockseed) local gennotify = minetest.get_mapgen_object("gennotify") - local pr = PseudoRandom(blockseed + 42) local has_struct = {} local poshash = minetest.hash_node_position(minp) for _,struct in pairs(mcl_structures.registered_structures) do if struct.deco_id then + local pr = PseudoRandom(blockseed + 42) local has = false if has_struct[struct.name] == nil then has_struct[struct.name] = {} end for _, pos in pairs(gennotify["decoration#"..struct.deco_id] or {}) do local realpos = vector.offset(pos,0,1,0) minetest.remove_node(realpos) if struct.chunk_probability == nil or (not has and pr:next(1,struct.chunk_probability) == 1 ) then - mcl_structures.place_structure(realpos,struct,pr) + mcl_structures.place_structure(realpos,struct,pr,blockseed) has=true end end diff --git a/mods/MAPGEN/mcl_structures/api.lua b/mods/MAPGEN/mcl_structures/api.lua index 4e017b502..a4a3e59cf 100644 --- a/mods/MAPGEN/mcl_structures/api.lua +++ b/mods/MAPGEN/mcl_structures/api.lua @@ -38,7 +38,7 @@ function mcl_structures.find_highest_y(pp) return y end -function mcl_structures.place_structure(pos, def, pr) +function mcl_structures.place_structure(pos, def, pr, blockseed) if not def then return end local logging = not def.terrain_feature local y_offset = 0 @@ -83,7 +83,7 @@ function mcl_structures.place_structure(pos, def, pr) end end end - if def.on_place and not def.on_place(pos,def,pr) then + if def.on_place and not def.on_place(pos,def,pr,blockseed) then if logging then minetest.log("warning","[mcl_structures] "..def.name.." at "..minetest.pos_to_string(pp).." not placed. Conditions not satisfied.") end @@ -94,20 +94,20 @@ function mcl_structures.place_structure(pos, def, pr) local r = pr:next(1,#def.filenames) local file = def.filenames[r] if file then - local ap = function(pos,def,pr) end + local ap = function(pos,def,pr,blockseed) end if def.after_place then ap = def.after_place end mcl_structures.place_schematic(pp, file, "random", nil, true, "place_center_x,place_center_z",function(p) - if def.loot then generate_loot(pos,def,pr) end - return ap(pos,def,pr) + if def.loot then generate_loot(pos,def,pr,blockseed) end + return ap(pos,def,pr,blockseed) end,pr) if logging then minetest.log("action","[mcl_structures] "..def.name.." placed at "..minetest.pos_to_string(pp)) end return true end - elseif def.place_func and def.place_func(pos,def,pr) then - if not def.after_place or ( def.after_place and def.after_place(pos,def,pr) ) then + elseif def.place_func and def.place_func(pos,def,pr,blockseed) then + if not def.after_place or ( def.after_place and def.after_place(pos,def,pr,blockseed) ) then if logging then minetest.log("action","[mcl_structures] "..def.name.." placed at "..minetest.pos_to_string(pp)) end diff --git a/mods/MAPGEN/mcl_structures/init.lua b/mods/MAPGEN/mcl_structures/init.lua index a77b3dbe4..0eafab584 100644 --- a/mods/MAPGEN/mcl_structures/init.lua +++ b/mods/MAPGEN/mcl_structures/init.lua @@ -336,7 +336,7 @@ minetest.register_chatcommand("spawnstruct", { else for n,d in pairs(mcl_structures.registered_structures) do if n == param then - mcl_structures.place_structure(pos,d,pr) + mcl_structures.place_structure(pos,d,pr,math.random()) return true,message end end diff --git a/mods/MAPGEN/tsm_railcorridors/init.lua b/mods/MAPGEN/tsm_railcorridors/init.lua index 8bb0d7253..3f1e5b5a6 100644 --- a/mods/MAPGEN/tsm_railcorridors/init.lua +++ b/mods/MAPGEN/tsm_railcorridors/init.lua @@ -1097,11 +1097,40 @@ local function create_corridor_system(main_cave_coords) -- At this point, all corridors were generated and all nodes were set. -- We spawn the carts now - spawn_carts() + --spawn_carts() return true end +mcl_structures.register_structure("mineshaft",{ + place_on = {"group:sand","group:grass_block","mcl_core:water_source","group:dirt","mcl_core:dirt_with_grass","mcl_core:gravel","group:material_stone"}, + fill_ratio = 0.0001, + flags = "place_center_x, place_center_z, liquid_surface, force_placement, all_floors", + sidelen = 32, + --chunk_probability = 300, + y_max = 40, + y_min = mcl_vars.mg_overworld_min, + place_func = function(pos,def,pr,blockseed) + local r = pr:next(-50,-10) + local p = vector.offset(pos,0,r,0) + if p.y < mcl_vars.mg_overworld_min + 5 then + p.y = mcl_vars.mg_overworld_min + 5 + end + if p.y > -10 then return end + local p1 = vector.offset(p,-def.sidelen,-def.sidelen,-def.sidelen) + local p2 = vector.offset(p,def.sidelen,def.sidelen,def.sidelen) + minetest.emerge_area(p1, p2, function(blockpos, action, calls_remaining, param) + if calls_remaining ~= 0 then return end + --minetest.log("lol") + InitRandomizer(blockseed) + create_corridor_system(p, pr) + end) + return true + end, + +}) + +--[[ Old Generation code this is VERY slow -- The rail corridor algorithm starts here mcl_mapgen_core.register_generator("railcorridors", nil, function(minp, maxp, blockseed, _pr) -- We re-init the randomizer for every mapchunk as we start generating in the middle of each mapchunk. @@ -1112,9 +1141,7 @@ mcl_mapgen_core.register_generator("railcorridors", nil, function(minp, maxp, bl local buffer = 5 -- Do up to 10 tries to start a corridor system - -- 5 Still seems to generate a lot of them and - -- makes this noticeably faster. - for t=1,5 do + for t=1,10 do -- Get semi-random height in mapchunk local y = pr:next(minp.y + buffer, maxp.y - buffer) y = math.floor(math.max(height_min + buffer, math.min(height_max - buffer, y))) @@ -1132,3 +1159,4 @@ mcl_mapgen_core.register_generator("railcorridors", nil, function(minp, maxp, bl end end end, 10) +--]] diff --git a/mods/MAPGEN/tsm_railcorridors/mod.conf b/mods/MAPGEN/tsm_railcorridors/mod.conf index c846cff19..d1a9ada4a 100644 --- a/mods/MAPGEN/tsm_railcorridors/mod.conf +++ b/mods/MAPGEN/tsm_railcorridors/mod.conf @@ -1,4 +1,4 @@ name = tsm_railcorridors author = UgnilJoZ description = Adds simple underground mines with railways and occasional treasure chests. -depends = mcl_init, mcl_worlds, mcl_core, mcl_mapgen_core, mcl_loot, mcl_tnt, mcl_farming, mcl_mobspawners, mcl_minecarts +depends = mcl_init, mcl_worlds, mcl_core, mcl_mapgen_core, mcl_loot, mcl_tnt, mcl_farming, mcl_mobspawners, mcl_minecarts, mcl_structures -- 2.40.1 From 0a2e68d136b21a56e4bf4ecc0dced9decf458600 Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 2 Jul 2022 04:07:38 +0200 Subject: [PATCH 243/357] spawn carts, make mineshafts a bit less frequent --- mods/MAPGEN/tsm_railcorridors/init.lua | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/mods/MAPGEN/tsm_railcorridors/init.lua b/mods/MAPGEN/tsm_railcorridors/init.lua index 3f1e5b5a6..7095aa0b4 100644 --- a/mods/MAPGEN/tsm_railcorridors/init.lua +++ b/mods/MAPGEN/tsm_railcorridors/init.lua @@ -1104,8 +1104,8 @@ end mcl_structures.register_structure("mineshaft",{ place_on = {"group:sand","group:grass_block","mcl_core:water_source","group:dirt","mcl_core:dirt_with_grass","mcl_core:gravel","group:material_stone"}, - fill_ratio = 0.0001, - flags = "place_center_x, place_center_z, liquid_surface, force_placement, all_floors", + fill_ratio = 0.00005, + flags = "place_center_x, place_center_z, force_placement, all_floors", sidelen = 32, --chunk_probability = 300, y_max = 40, @@ -1116,7 +1116,7 @@ mcl_structures.register_structure("mineshaft",{ if p.y < mcl_vars.mg_overworld_min + 5 then p.y = mcl_vars.mg_overworld_min + 5 end - if p.y > -10 then return end + if p.y > -10 then return true end local p1 = vector.offset(p,-def.sidelen,-def.sidelen,-def.sidelen) local p2 = vector.offset(p,def.sidelen,def.sidelen,def.sidelen) minetest.emerge_area(p1, p2, function(blockpos, action, calls_remaining, param) @@ -1124,6 +1124,7 @@ mcl_structures.register_structure("mineshaft",{ --minetest.log("lol") InitRandomizer(blockseed) create_corridor_system(p, pr) + spawn_carts() end) return true end, -- 2.40.1 From 40d0c1affb247a67fad157303f850c6e7d96c46f Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 3 Jul 2022 02:28:30 +0200 Subject: [PATCH 244/357] slightly optimize placement --- mods/MAPGEN/tsm_railcorridors/init.lua | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/mods/MAPGEN/tsm_railcorridors/init.lua b/mods/MAPGEN/tsm_railcorridors/init.lua index 7095aa0b4..1a786f643 100644 --- a/mods/MAPGEN/tsm_railcorridors/init.lua +++ b/mods/MAPGEN/tsm_railcorridors/init.lua @@ -364,18 +364,24 @@ local function Platform(p, radius, node, node2) if not node2 then node2 = { name = tsm_railcorridors.nodes.dirt } end + local n1 = {} + local n2 = {} for zi = p.z-radius, p.z+radius do for xi = p.x-radius, p.x+radius do local np, np2 = NeedsPlatform({x=xi,y=p.y,z=zi}) if np then if np2 then - minetest.set_node({x=xi,y=p.y-1,z=zi}, node2) + --minetest.set_node({x=xi,y=p.y-1,z=zi}, node2) + table.insert(n1,{x=xi,y=p.y-1,z=zi}) else - minetest.set_node({x=xi,y=p.y-1,z=zi}, node) + --minetest.set_node({x=xi,y=p.y-1,z=zi}, node) + table.insert(n2,{x=xi,y=p.y-1,z=zi}) end end end end + minetest.bulk_set_node(n1,node) + minetest.bulk_set_node(n2,node2) end -- Chests @@ -1097,7 +1103,7 @@ local function create_corridor_system(main_cave_coords) -- At this point, all corridors were generated and all nodes were set. -- We spawn the carts now - --spawn_carts() + spawn_carts() return true end -- 2.40.1 From 3584d89028166385b57111c6123328f4637767ad Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 3 Jul 2022 22:23:25 +0200 Subject: [PATCH 245/357] better distribution --- mods/MAPGEN/tsm_railcorridors/init.lua | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/mods/MAPGEN/tsm_railcorridors/init.lua b/mods/MAPGEN/tsm_railcorridors/init.lua index 1a786f643..07716dcba 100644 --- a/mods/MAPGEN/tsm_railcorridors/init.lua +++ b/mods/MAPGEN/tsm_railcorridors/init.lua @@ -1109,11 +1109,10 @@ local function create_corridor_system(main_cave_coords) end mcl_structures.register_structure("mineshaft",{ - place_on = {"group:sand","group:grass_block","mcl_core:water_source","group:dirt","mcl_core:dirt_with_grass","mcl_core:gravel","group:material_stone"}, - fill_ratio = 0.00005, + place_on = {"group:sand","group:grass_block","mcl_core:water_source","group:dirt","mcl_core:dirt_with_grass","mcl_core:gravel","group:material_stone","mcl_core:snow"}, + fill_ratio = 0.0001, flags = "place_center_x, place_center_z, force_placement, all_floors", sidelen = 32, - --chunk_probability = 300, y_max = 40, y_min = mcl_vars.mg_overworld_min, place_func = function(pos,def,pr,blockseed) @@ -1130,7 +1129,6 @@ mcl_structures.register_structure("mineshaft",{ --minetest.log("lol") InitRandomizer(blockseed) create_corridor_system(p, pr) - spawn_carts() end) return true end, -- 2.40.1 From 4b95185fbab603f55ec766e3f449589727ea27c4 Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 3 Jul 2022 22:24:12 +0200 Subject: [PATCH 246/357] make geodes less cube shaped (sometimes) --- mods/MAPGEN/mcl_structures/geode.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/MAPGEN/mcl_structures/geode.lua b/mods/MAPGEN/mcl_structures/geode.lua index 1a2e8bedc..c8e59b5c9 100644 --- a/mods/MAPGEN/mcl_structures/geode.lua +++ b/mods/MAPGEN/mcl_structures/geode.lua @@ -26,7 +26,7 @@ local function makegeode(pos,def,pr) end) if not nn[1] then return end - for i=1,math.random(#nn) do + for i=1,pr:next(1,math.max(2,#nn - math.ceil(#nn/5) )) do set_node_no_bedrock(nn[i],{name="mcl_amethyst:amethyst_block"}) end -- 2.40.1 From ea99341f940a745c5820bbe5c05497f7cc082a43 Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 3 Jul 2022 22:31:05 +0200 Subject: [PATCH 247/357] make geode inside smoother --- mods/MAPGEN/mcl_structures/geode.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/MAPGEN/mcl_structures/geode.lua b/mods/MAPGEN/mcl_structures/geode.lua index c8e59b5c9..8bcd13310 100644 --- a/mods/MAPGEN/mcl_structures/geode.lua +++ b/mods/MAPGEN/mcl_structures/geode.lua @@ -43,7 +43,7 @@ local function makegeode(pos,def,pr) set_node_no_bedrock(v,{name="mcl_amethyst:budding_amethyst_block"}) end all_amethyst = false - elseif an.name ~= "mcl_amethyst:amethyst_block" and an.name ~= "air" then + elseif an.name ~= "mcl_amethyst:amethyst_block" and an.name ~= "air" and an.name ~= "mcl_amethyst:budding_amethyst_block" then all_amethyst = false end end -- 2.40.1 From 889e72c50dd06da7dfef0af12a626f47f434d0c8 Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 4 Jul 2022 00:24:52 +0200 Subject: [PATCH 248/357] don't dig amethyst by water --- mods/ITEMS/mcl_amethyst/init.lua | 2 -- 1 file changed, 2 deletions(-) diff --git a/mods/ITEMS/mcl_amethyst/init.lua b/mods/ITEMS/mcl_amethyst/init.lua index 0ee78de41..e43223a41 100644 --- a/mods/ITEMS/mcl_amethyst/init.lua +++ b/mods/ITEMS/mcl_amethyst/init.lua @@ -117,7 +117,6 @@ for _, def in pairs(bud_def) do walkable = false, light_source = def.light_source, groups = { - dig_by_water = 1, destroy_by_lava_flow = 1, dig_by_piston = 1, pickaxey = 1, @@ -162,7 +161,6 @@ minetest.register_node("mcl_amethyst:amethyst_cluster",{ walkable = false, light_source = 7, groups = { - dig_by_water = 1, destroy_by_lava_flow = 1, dig_by_piston = 1, pickaxey = 1, -- 2.40.1 From daa95e3688879dd048a08c99c137608060b3e1de Mon Sep 17 00:00:00 2001 From: cora Date: Tue, 5 Jul 2022 00:11:18 +0200 Subject: [PATCH 249/357] replace dirt and gravel too for even less clumps --- mods/MAPGEN/mcl_structures/geode.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/MAPGEN/mcl_structures/geode.lua b/mods/MAPGEN/mcl_structures/geode.lua index 8bcd13310..95f9b0e81 100644 --- a/mods/MAPGEN/mcl_structures/geode.lua +++ b/mods/MAPGEN/mcl_structures/geode.lua @@ -20,7 +20,7 @@ local function makegeode(pos,def,pr) minetest.emerge_area(p1, p2, function(blockpos, action, calls_remaining, param) if calls_remaining ~= 0 then return end local calcite = {} - local nn = minetest.find_nodes_in_area(p1,p2,{"group:material_stone"}) + local nn = minetest.find_nodes_in_area(p1,p2,{"group:material_stone","group:dirt","mcl_core:gravel"}) table.sort(nn,function(a, b) return vector.distance(pos, a) < vector.distance(pos, b) end) -- 2.40.1 From 27a945b8f31cb22d160ec3185dc9114827785fe7 Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 4 Jul 2022 12:04:45 +0200 Subject: [PATCH 250/357] Tweak crying obsidian particles --- mods/ITEMS/mcl_core/functions.lua | 62 ++++++++++++------ .../mcl_core_crying_obsidian_tear.png | Bin 91 -> 378 bytes 2 files changed, 43 insertions(+), 19 deletions(-) diff --git a/mods/ITEMS/mcl_core/functions.lua b/mods/ITEMS/mcl_core/functions.lua index 48719d96e..a3b693316 100644 --- a/mods/ITEMS/mcl_core/functions.lua +++ b/mods/ITEMS/mcl_core/functions.lua @@ -1702,40 +1702,64 @@ end -- Obsidian crying -local crying_obsidian_tears = { - "mcl_core_crying_obsidian_tear.png", - "mcl_core_crying_obsidian_tear2.png", - "mcl_core_crying_obsidian_tear3.png" -} - local psdef = { - amount = 10, + amount = 1, time = 0.9, --everything longer than 1 is a coord exploit - minvel = vector.new(0,-0.15,0), - maxvel = vector.new(0,-0.001,0), - minacc = vector.new(0,-0.1,0), - maxacc = vector.new(0,-0.001,0), + minvel = vector.new(0,-2,0), + maxvel = vector.new(0,-0.5,0), + minacc = vector.new(0,-10,0), + maxacc = vector.new(0,-8,0), minexptime = 1, maxexptime = 6, - minsize = 0.1, - maxsize = 0.25, + minsize = 1.5, + maxsize = 2, collisiondetection = true, collision_removal = true, object_collision = true, vertical = true, + texture = "mcl_core_crying_obsidian_tear.png", +} +local psdef2 = { + amount = 1, + time = 0.9, --everything longer than 1 is a coord exploit + minvel = vector.new(0,-0.01,0), + maxvel = vector.new(0,-0.005,0), + minacc = vector.new(0,-0.1,0), + maxacc = vector.new(0,-0.01,0), + minexptime = 2, + maxexptime = 3, + minsize = 0.3, + maxsize = 0.6, + collisiondetection = true, + collision_removal = true, + object_collision = true, + vertical = true, + texture = "mcl_core_crying_obsidian_tear.png", } minetest.register_abm({ label = "Obsidian cries", nodenames = {"mcl_core:crying_obsidian"}, - interval = 60, + interval = 5, chance = 10, action = function(pos, node) - psdef.minpos = vector.offset(pos,-0.6,-0.51,-0.6) - psdef.maxpos = vector.offset(pos,0.6,-0.51,0.6) - for _,t in pairs(crying_obsidian_tears) do - psdef.texture = t + minetest.after(math.random(0.1,1.5),function() + psdef.minpos = vector.offset(pos,-0.6,-0.51,-0.6) + psdef.maxpos = vector.offset(pos,0.6,0.51,0.6) minetest.add_particlespawner(psdef) - end + psdef2.minpos = vector.offset(pos,-0.55,-0.51,-0.55) + psdef2.maxpos = vector.offset(pos,-0.5,0.51,-0.5) + minetest.add_particlespawner(psdef2) + psdef2.minpos = vector.offset(pos,0.55,-0.51,-0.55) + psdef2.maxpos = vector.offset(pos,0.5,0.51,-0.5) + minetest.add_particlespawner(psdef2) + psdef2.minpos = vector.offset(pos,0.55,-0.51,0.55) + psdef2.maxpos = vector.offset(pos,0.5,0.51,0.5) + minetest.add_particlespawner(psdef2) + psdef2.minpos = vector.offset(pos,-0.55,-0.51,0.55) + psdef2.maxpos = vector.offset(pos,-0.5,0.51,0.5) + minetest.add_particlespawner(psdef2) + + end) end }) diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_crying_obsidian_tear.png b/mods/ITEMS/mcl_core/textures/mcl_core_crying_obsidian_tear.png index 94d9bd21a144595e901bb17602460e27daee5a3d..e37f9cd68ac922dab5e03d0d2cf16b7067e5a57c 100644 GIT binary patch literal 378 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`2?0JKu0T4MA-9O3sD`1Yg`uT~ zp=T1qq`3@p7ceZ?#;^@2OCcycAN&t!#8poh#}JFtOD}KaY<3W7co=_~b&{73%f=!` zRqm9AGY^>hCcP4y&@(~tjZRRucwvL`67K28gr^GceNy_~_TKU4YWDiJWGyj~Rg0v4 zF>U17@mNJYoVAt7!;|sKEjD2VH8&;36)Q|O$x5`#`FV!=<*{$sV!rpN)TS*5nH7|z z1R4*tNHn%Q;d<~;P>{D&IElsU)bjrQFZt9QeE%|i_;|SO*}Cl#$N#9^iToT8TwYr> z@x*ui^EVh}EScV{Wo)$gdRS_s{gR$DH-F76^X{GSL0Di;uH)+;OetSYcOTfkRSXnH Mp00i_>zopr034NhkN^Mx literal 91 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y-!3HF~bz9kil#-{5V+hCfWRHaC+8K;oGp5Yc mNz7q8me!|UAZY;-lwg>r&Stai=HZ7x)eN4lelF{r5}E))v=+($ -- 2.40.1 From efad7dad243f6c21b6d3a1ba7bf0a0ee604b5a05 Mon Sep 17 00:00:00 2001 From: cora Date: Tue, 5 Jul 2022 11:18:09 +0200 Subject: [PATCH 251/357] clean up --- mods/ITEMS/mcl_core/functions.lua | 34 +++++++++--------- .../mcl_core_crying_obsidian_tear.png | Bin 378 -> 308 bytes 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/mods/ITEMS/mcl_core/functions.lua b/mods/ITEMS/mcl_core/functions.lua index a3b693316..c56ae51c3 100644 --- a/mods/ITEMS/mcl_core/functions.lua +++ b/mods/ITEMS/mcl_core/functions.lua @@ -1702,7 +1702,7 @@ end -- Obsidian crying -local psdef = { +local crobby_psdef = { amount = 1, time = 0.9, --everything longer than 1 is a coord exploit minvel = vector.new(0,-2,0), @@ -1719,7 +1719,7 @@ local psdef = { vertical = true, texture = "mcl_core_crying_obsidian_tear.png", } -local psdef2 = { +local crobby_psdef2 = { amount = 1, time = 0.9, --everything longer than 1 is a coord exploit minvel = vector.new(0,-0.01,0), @@ -1744,21 +1744,21 @@ minetest.register_abm({ chance = 10, action = function(pos, node) minetest.after(math.random(0.1,1.5),function() - psdef.minpos = vector.offset(pos,-0.6,-0.51,-0.6) - psdef.maxpos = vector.offset(pos,0.6,0.51,0.6) - minetest.add_particlespawner(psdef) - psdef2.minpos = vector.offset(pos,-0.55,-0.51,-0.55) - psdef2.maxpos = vector.offset(pos,-0.5,0.51,-0.5) - minetest.add_particlespawner(psdef2) - psdef2.minpos = vector.offset(pos,0.55,-0.51,-0.55) - psdef2.maxpos = vector.offset(pos,0.5,0.51,-0.5) - minetest.add_particlespawner(psdef2) - psdef2.minpos = vector.offset(pos,0.55,-0.51,0.55) - psdef2.maxpos = vector.offset(pos,0.5,0.51,0.5) - minetest.add_particlespawner(psdef2) - psdef2.minpos = vector.offset(pos,-0.55,-0.51,0.55) - psdef2.maxpos = vector.offset(pos,-0.5,0.51,0.5) - minetest.add_particlespawner(psdef2) + crobby_psdef.minpos = vector.offset(pos,-0.6,-0.51,-0.6) + crobby_psdef.maxpos = vector.offset(pos,0.6,0.51,0.6) + minetest.add_particlespawner(crobby_psdef) + crobby_psdef2.minpos = vector.offset(pos,-0.51,-0.51,-0.51) + crobby_psdef2.maxpos = vector.offset(pos,-0.5,0.51,-0.5) + minetest.add_particlespawner(crobby_psdef2) + crobby_psdef2.minpos = vector.offset(pos,0.51,-0.51,-0.51) + crobby_psdef2.maxpos = vector.offset(pos,0.5,0.51,-0.5) + minetest.add_particlespawner(crobby_psdef2) + crobby_psdef2.minpos = vector.offset(pos,0.51,-0.51,0.51) + crobby_psdef2.maxpos = vector.offset(pos,0.5,0.51,0.5) + minetest.add_particlespawner(crobby_psdef2) + crobby_psdef2.minpos = vector.offset(pos,-0.51,-0.51,0.51) + crobby_psdef2.maxpos = vector.offset(pos,-0.5,0.51,0.5) + minetest.add_particlespawner(crobby_psdef2) end) end diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_crying_obsidian_tear.png b/mods/ITEMS/mcl_core/textures/mcl_core_crying_obsidian_tear.png index e37f9cd68ac922dab5e03d0d2cf16b7067e5a57c..eb3fc2cb5cd6aba9671168b8b1ff3c8f2fd421b2 100644 GIT binary patch delta 172 zcmeyxw1sKHg!+C@7sn8b)5!@7Oi!eqII4aAh=ImIrZ(39;s!cD{ClE!^nH?Me38GY z;FQ>C$}`WvM$^qa#prO#nl^*P&38Kvt`JxI*7lG$MsBuZL~KFN!yCzlY=(;tbqo4S zbP0l+XkKD#A%V delta 242 zcmVb?-gi$AfzZe}-c!78I(Y8u|jU2)N@UCszf90!T># z)Y=9UASOm40jQ`nvK<(Q9!^PBPHqRZv^TxQ8nU#(10W(A5Nm Date: Tue, 5 Jul 2022 13:26:53 -0500 Subject: [PATCH 252/357] Fletching table: add missing bottom texture --- .../textures/fletching_table_bottom.png | Bin 0 -> 739 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 mods/ITEMS/mcl_fletching_table/textures/fletching_table_bottom.png diff --git a/mods/ITEMS/mcl_fletching_table/textures/fletching_table_bottom.png b/mods/ITEMS/mcl_fletching_table/textures/fletching_table_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..5c12897667d2377837d4083c163523511e90d56b GIT binary patch literal 739 zcmV<90v!E`P)t+n?)=bn3SW|*6qi39>E#6rX>FCgdxXdz-@ox<0M2)=-=Ajrs67B-d^ zrp*Zw1QDAdI3dH#+}tzgoW1w5m^{GWeDKTnpT6shq{JxX>`Wp8Woe@+xST(4?vooQ(kaLAv z`S|@q+V#x!Q0N*6Gte%L&?r(Wi>O3Xa;~Iktdmk5Xbg8{Z@;1GT2@`)&cX<7glRW% zc{TH2QxFYwjdHL~teV7bE=*&_OQ8VQS2LH>z-}nWK7=*~LJ}SxFL-d&^7loeOU7oM zNFp===3rb8Hw@XinJd~tQ4mu!BqPMgZY(t7lw6s{!Za453f(ed3#Ez?8{_!if<+WM z5nf%4gz8SSY&bev61#?~P{bK>rCd)8Q|4-y+1+GJh3%^yatD?RW7Qhr?dMyOpRI!nj+N7JWNy!1uPh1Lbw_V?|uCZ zSACB?Jz>9rt_7ze5>Onx;3zS{JWg!Be8O4ZGynGOEn@%ng^%K&{5xh=Z6fD_ni7Lj za^a>pIJBm`eEY&@T}6I<{DG?&?oQ4b!Lgv!s^kK@xiIF6h~R(-v|8!bd(6`t{s(z= VMYnvvxc>kE002ovPDHLkV1id8Swa8+ literal 0 HcmV?d00001 -- 2.40.1 From 21d5ab88a56bdb78dbafa9ba5bcf22a50c501489 Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 3 Jul 2022 21:50:54 +0200 Subject: [PATCH 253/357] comment out natural villager spawning --- mods/ENTITIES/mobs_mc/villager.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/villager.lua b/mods/ENTITIES/mobs_mc/villager.lua index 429d7c743..6502e3a73 100644 --- a/mods/ENTITIES/mobs_mc/villager.lua +++ b/mods/ENTITIES/mobs_mc/villager.lua @@ -1391,7 +1391,8 @@ mcl_mobs:register_mob("mobs_mc:villager", { }) - +--[[ +Villager spawning in mcl_villages mcl_mobs:spawn_specific( "mobs_mc:villager", "overworld", @@ -1421,6 +1422,6 @@ minetest.LIGHT_MAX+1, 4, mobs_mc.water_level+1, mcl_vars.mg_overworld_max) - +--]] -- spawn eggs mcl_mobs:register_egg("mobs_mc:villager", S("Villager"), "mobs_mc_spawn_icon_villager.png", 0) -- 2.40.1 From dd5e9afbd930f76354077703fdf29afd10daccda Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 3 Jul 2022 21:51:42 +0200 Subject: [PATCH 254/357] villagers only get a job when they touch jobsite --- mods/ENTITIES/mobs_mc/villager.lua | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/villager.lua b/mods/ENTITIES/mobs_mc/villager.lua index 6502e3a73..86d84044a 100644 --- a/mods/ENTITIES/mobs_mc/villager.lua +++ b/mods/ENTITIES/mobs_mc/villager.lua @@ -631,10 +631,8 @@ end local function get_a_job(self) local p = self.object:get_pos() - local nn = minetest.find_nodes_in_area(vector.offset(p,-8,-8,-8),vector.offset(p,8,8,8),jobsites) - for _,n in pairs(nn) do - if n and employ(self,n) then return true end - end + local n = minetest.find_node_near(p,1,jobsites) + if n and employ(self,n) then return true end if self.state ~= "gowp" then look_for_job(self) end end -- 2.40.1 From 672b9dbedf4066fca531ba1730b0ef288a2dbee7 Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 3 Jul 2022 21:52:15 +0200 Subject: [PATCH 255/357] make pathfinding to jobsite more smooth --- mods/ENTITIES/mcl_mobs/api.lua | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 8c9d8216e..77f4193dd 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -2283,6 +2283,9 @@ end local function go_to_pos(entity,b) if not entity then return end local s=entity.object:get_pos() + if not b then + --self.state = "stand" + return end if vector.distance(b,s) < 1 then --set_velocity(entity,0) return true @@ -2318,21 +2321,23 @@ local gowp_etime = 0 local function check_gowp(self,dtime) gowp_etime = gowp_etime + dtime - if gowp_etime < 1 then return end + if gowp_etime < 0.2 then return end gowp_etime = 0 local p = self.object:get_pos() if not p or not self._target then return end - if vector.distance(p,self._target) < 2 or ( self.waypoints and #self.waypoints == 0 ) then + if vector.distance(p,self._target) < 1 then self.waypoints = nil self._target = nil self.current_target = nil - self.state = "walk" + self.state = "stand" if self.callback_arrived then return self.callback_arrived(self) end return true end - if self.waypoints and ( not self.current_target or vector.distance(p,self.current_target) < 1.5 ) then + if self.waypoints and ( not self.current_target or vector.distance(p,self.current_target) < 2 ) then self.current_target = table.remove(self.waypoints, 1) --minetest.log("nextwp:".. tostring(self.current_target) ) + go_to_pos(self,self.current_target) + return elseif self.current_target then go_to_pos(self,self.current_target) end @@ -2922,6 +2927,7 @@ local gopath_last = os.time() function mcl_mobs:gopath(self,target,callback_arrived) if os.time() - gopath_last < 15 then return end gopath_last = os.time() + --minetest.log("gowp") local p = self.object:get_pos() local t = vector.offset(target,0,1,0) local wp = minetest.find_path(p,t,150,1,4) @@ -2941,6 +2947,7 @@ function mcl_mobs:gopath(self,target,callback_arrived) if wp and #wp > 0 then self._target = t self.callback_arrived = callback_arrived + table.remove(wp,1) self.waypoints = wp self.state = "gowp" return true @@ -2948,7 +2955,7 @@ function mcl_mobs:gopath(self,target,callback_arrived) self.state = "walk" self.waypoints = nil self.current_target = nil - --minetest.log("no path found") + -- minetest.log("no path found") end end -- 2.40.1 From 31289f5686262d29606c9867e3c4ea1f8e886993 Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 4 Jul 2022 00:15:50 +0200 Subject: [PATCH 256/357] villagers that haven't traded loose job on js gone --- mods/ENTITIES/mobs_mc/villager.lua | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/mods/ENTITIES/mobs_mc/villager.lua b/mods/ENTITIES/mobs_mc/villager.lua index 86d84044a..e447192c3 100644 --- a/mods/ENTITIES/mobs_mc/villager.lua +++ b/mods/ENTITIES/mobs_mc/villager.lua @@ -636,6 +636,16 @@ local function get_a_job(self) if self.state ~= "gowp" then look_for_job(self) end end +local function check_jobsite(self) + if self._traded or not self._jobsite then return end + local n = mcl_vars.get_node(self._jobsite) + local m = minetest.get_meta(self._jobsite) + if m:get_string("villager") ~= self._id then + self._profession = "unemployed" + set_textures(self) + end +end + local function update_max_tradenum(self) if not self._trades then return @@ -654,6 +664,7 @@ end local function init_trades(self, inv) local profession = professions[self._profession] local trade_tiers = profession.trades + self._traded = true if trade_tiers == nil then -- Empty trades self._trades = false @@ -1355,6 +1366,8 @@ mcl_mobs:register_mob("mobs_mc:villager", { end if self._profession == "unemployed" then get_a_job(self) + else + check_jobsite(self) end end end, -- 2.40.1 From f98242bb0cde48dc97ae1881f12ebcc38c43ab6b Mon Sep 17 00:00:00 2001 From: cora Date: Wed, 6 Jul 2022 01:42:32 +0200 Subject: [PATCH 257/357] Do not emerge while making railcorridors it turns out to work fine without --- mods/MAPGEN/tsm_railcorridors/init.lua | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/mods/MAPGEN/tsm_railcorridors/init.lua b/mods/MAPGEN/tsm_railcorridors/init.lua index 07716dcba..d68c58aa3 100644 --- a/mods/MAPGEN/tsm_railcorridors/init.lua +++ b/mods/MAPGEN/tsm_railcorridors/init.lua @@ -1122,14 +1122,8 @@ mcl_structures.register_structure("mineshaft",{ p.y = mcl_vars.mg_overworld_min + 5 end if p.y > -10 then return true end - local p1 = vector.offset(p,-def.sidelen,-def.sidelen,-def.sidelen) - local p2 = vector.offset(p,def.sidelen,def.sidelen,def.sidelen) - minetest.emerge_area(p1, p2, function(blockpos, action, calls_remaining, param) - if calls_remaining ~= 0 then return end - --minetest.log("lol") - InitRandomizer(blockseed) - create_corridor_system(p, pr) - end) + InitRandomizer(blockseed) + create_corridor_system(p, pr) return true end, -- 2.40.1 From 24ab7ff8254b7eb7688bded408fbe0927f01536b Mon Sep 17 00:00:00 2001 From: TheRandomLegoBrick Date: Wed, 6 Jul 2022 11:33:25 -0700 Subject: [PATCH 258/357] Add mud block --- mods/ITEMS/mcl_core/nodes_base.lua | 13 ++++++ mods/ITEMS/mcl_core/textures/mcl_core_mud.png | Bin 0 -> 509 bytes mods/ITEMS/mcl_potions/init.lua | 37 ++++++++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 mods/ITEMS/mcl_core/textures/mcl_core_mud.png diff --git a/mods/ITEMS/mcl_core/nodes_base.lua b/mods/ITEMS/mcl_core/nodes_base.lua index 957b1f24a..f25794bd1 100644 --- a/mods/ITEMS/mcl_core/nodes_base.lua +++ b/mods/ITEMS/mcl_core/nodes_base.lua @@ -457,6 +457,19 @@ minetest.register_node("mcl_core:podzol", { }) mcl_core.register_snowed_node("mcl_core:podzol_snow", "mcl_core:podzol", nil, nil, false, S("Podzol with Snow")) +minetest.register_node("mcl_core:mud", { + description = S("Mud"), + _doc_items_longdesc = S("Mud is a decorative block found in mangrove swamps. Mud can be obtained by using a watter bottle on a dirt or coarse dirt block."), + _doc_items_hidden = false, + tiles = {"mcl_core_mud.png"}, + is_ground_content = true, + stack_max = 64, + groups = {handy=1, shovely=1, enderman_takable=1, building_block=1}, + sounds = mcl_sounds.node_sound_dirt_defaults(), + _mcl_blast_resistance = 0.5, + _mcl_hardness = 0.5, +}) + minetest.register_node("mcl_core:dirt", { description = S("Dirt"), _doc_items_longdesc = S("Dirt acts as a soil for a few plants. When in light, this block may grow a grass or mycelium cover if such blocks are nearby."), diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_mud.png b/mods/ITEMS/mcl_core/textures/mcl_core_mud.png new file mode 100644 index 0000000000000000000000000000000000000000..060b8792aaa91e118ffdb8acf9ca152b2534a0c1 GIT binary patch literal 509 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0g_2XK~y+TO_6C* z!!Qhm6K_en(GCM#gy9eOzYer%v)W1dWEBRDiy0B6zvTd5ic{hyH zIF1~xG3>_L;QcsFa+qUms_JmqTjz-UkA7HLZt6M&k85H|P#SCIIqK`J>tl>o4SLWS z@O{3>1>DZrloleFWg!5CAP)N-J_+}`9RNiGFreU`W-$=lDgsp;@l#5?axd`&K&;#f zg?Q7{pvmLC@B4ljhA9VQB8eZ|DyA$8pkL<;zA;Ao=Dgo-H^;*sUo!APtQnP2z_u-k6C;n6fBU3Y?3qX#Hy+iOX>vIITNk(~66oNyVfj||>9k3?&D6LHzbX=Wgb zUUO2TGVlq|kugUtfSu6_>o59rd@`Vg>V9Wy>e^WgpYZ1-z}UG_G;|DDT0|e9Kez3z z>!9Qr3UCjpF#we1WPe*8^biTa*M-z-NI&o>QMN#|!?2Ji|P6OQe00000NkvXXu0mjf(cj)} literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index 5b9f1fab3..1740f7f8d 100644 --- a/mods/ITEMS/mcl_potions/init.lua +++ b/mods/ITEMS/mcl_potions/init.lua @@ -214,6 +214,25 @@ minetest.register_craftitem("mcl_potions:water", { else return "mcl_potions:glass_bottle" end + + -- convert dirt to mud + elseif node.name == "mcl_core:dirt" or node.name == "mcl_core:coarse_dirt" then + + local pname = placer:get_player_name() + if minetest.is_protected(pointed_thing.under, pname) then + minetest.record_protection_violation(pointed_thing.under, pname) + return itemstack + end + + -- set the node to mud + minetest.set_node(pointed_thing.under, {name="mcl_core:mud"}) + minetest.sound_play("mcl_potions_bottle_pour", {pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true) + + if minetest.is_creative_enabled(placer:get_player_name()) then + return itemstack + else + return "mcl_potions:glass_bottle" + end end end @@ -256,6 +275,24 @@ minetest.register_craftitem("mcl_potions:river_water", { -- Increase water level of cauldron by 1 minetest.set_node(pointed_thing.under, {name=cauldron}) minetest.sound_play("mcl_potions_bottle_pour", {pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true) + if minetest.is_creative_enabled(placer:get_player_name()) then + return itemstack + else + return "mcl_potions:glass_bottle" + end + -- convert dirt to mud + elseif node.name == "mcl_core:dirt" or node.name == "mcl_core:coarse_dirt" then + + local pname = placer:get_player_name() + if minetest.is_protected(pointed_thing.under, pname) then + minetest.record_protection_violation(pointed_thing.under, pname) + return itemstack + end + + -- set the node to mud + minetest.set_node(pointed_thing.under, {name="mcl_core:mud"}) + minetest.sound_play("mcl_potions_bottle_pour", {pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true) + if minetest.is_creative_enabled(placer:get_player_name()) then return itemstack else -- 2.40.1 From 973dc7fa418576f27f93f8ccf338c11855c0d626 Mon Sep 17 00:00:00 2001 From: TheRandomLegoBrick Date: Wed, 6 Jul 2022 12:14:21 -0700 Subject: [PATCH 259/357] Add mud --- mods/ITEMS/mcl_core/nodes_base.lua | 4 ++-- mods/ITEMS/mcl_core/textures/mcl_core_mud.png | Bin 509 -> 483 bytes mods/ITEMS/mcl_potions/init.lua | 11 ++--------- 3 files changed, 4 insertions(+), 11 deletions(-) diff --git a/mods/ITEMS/mcl_core/nodes_base.lua b/mods/ITEMS/mcl_core/nodes_base.lua index f25794bd1..58c6902bf 100644 --- a/mods/ITEMS/mcl_core/nodes_base.lua +++ b/mods/ITEMS/mcl_core/nodes_base.lua @@ -459,12 +459,12 @@ mcl_core.register_snowed_node("mcl_core:podzol_snow", "mcl_core:podzol", nil, ni minetest.register_node("mcl_core:mud", { description = S("Mud"), - _doc_items_longdesc = S("Mud is a decorative block found in mangrove swamps. Mud can be obtained by using a watter bottle on a dirt or coarse dirt block."), + _doc_items_longdesc = S("Mud is a decorative block that generates in mangrove swamps. Mud can also be obtained by using water bottles on dirt or coarse dirt."), _doc_items_hidden = false, tiles = {"mcl_core_mud.png"}, is_ground_content = true, stack_max = 64, - groups = {handy=1, shovely=1, enderman_takable=1, building_block=1}, + groups = {handy=1,shovely=1, enderman_takable=1, building_block=1}, sounds = mcl_sounds.node_sound_dirt_defaults(), _mcl_blast_resistance = 0.5, _mcl_hardness = 0.5, diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_mud.png b/mods/ITEMS/mcl_core/textures/mcl_core_mud.png index 060b8792aaa91e118ffdb8acf9ca152b2534a0c1..4952255ec168ad6395deafeb72caddbef7e6f356 100644 GIT binary patch delta 407 zcmV;I0cigH1LFgbR)2U&L_t(IPeqY!Pr@)1g-6%H%23d#pd`ll*@T3|5B~qZV_<{T z@v?%?c4ED0ntSd!_pKd#eXb`(VXZBzD(P)Dow|I4b3C0k+j2AR6WU#`2{%%bQEMt#B4xEBvfJ$qm|j_Co5PX5 zNGT&VH%A+5D`2`_ePq_+ZOh8#Ib2=)+WQcK%CnNTLenihe|!L=0MG%0kkqCrj-=!x zpub^1LIU`3NPju_jLJNEP!0mdHvDnilJb&bMD#`RL%P>*n*WcB1XAV4pnML6jG}r0 zIJ${bkO-o#%-`7Qaxn)m2w$$RVCtugGz+Ti^-O>&rHY^v&T*jwj_{EvQE zS#Ih&1dnTCN>CbW<~i!?t?OfqRtpG$UPif>xskC~4bkNxHHG zJQ bMN#|!?2Ji|P6OQe00000NkvXXu0mjfb*#|v diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index 1740f7f8d..4d7d76687 100644 --- a/mods/ITEMS/mcl_potions/init.lua +++ b/mods/ITEMS/mcl_potions/init.lua @@ -214,20 +214,16 @@ minetest.register_craftitem("mcl_potions:water", { else return "mcl_potions:glass_bottle" end - - -- convert dirt to mud elseif node.name == "mcl_core:dirt" or node.name == "mcl_core:coarse_dirt" then - local pname = placer:get_player_name() if minetest.is_protected(pointed_thing.under, pname) then minetest.record_protection_violation(pointed_thing.under, pname) return itemstack end - -- set the node to mud + -- convert to mud minetest.set_node(pointed_thing.under, {name="mcl_core:mud"}) minetest.sound_play("mcl_potions_bottle_pour", {pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true) - if minetest.is_creative_enabled(placer:get_player_name()) then return itemstack else @@ -280,19 +276,16 @@ minetest.register_craftitem("mcl_potions:river_water", { else return "mcl_potions:glass_bottle" end - -- convert dirt to mud elseif node.name == "mcl_core:dirt" or node.name == "mcl_core:coarse_dirt" then - local pname = placer:get_player_name() if minetest.is_protected(pointed_thing.under, pname) then minetest.record_protection_violation(pointed_thing.under, pname) return itemstack end - -- set the node to mud + -- convert to mud minetest.set_node(pointed_thing.under, {name="mcl_core:mud"}) minetest.sound_play("mcl_potions_bottle_pour", {pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true) - if minetest.is_creative_enabled(placer:get_player_name()) then return itemstack else -- 2.40.1 From 0142b58edc3d9335abad936e131f48becef87968 Mon Sep 17 00:00:00 2001 From: TheRandomLegoBrick Date: Wed, 6 Jul 2022 12:43:54 -0700 Subject: [PATCH 260/357] Allow dispensers to convert dirt to mud --- mods/ITEMS/mcl_potions/init.lua | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index 4d7d76687..8551442be 100644 --- a/mods/ITEMS/mcl_potions/init.lua +++ b/mods/ITEMS/mcl_potions/init.lua @@ -235,6 +235,17 @@ minetest.register_craftitem("mcl_potions:water", { -- Drink the water by default return minetest.do_item_eat(0, "mcl_potions:glass_bottle", itemstack, placer, pointed_thing) end, + _on_dispense = function(stack, pos, droppos) + local node = minetest.get_node(droppos) + if node.name == "mcl_core:dirt" or node.name == "mcl_core:coarse_dirt" then + minetest.set_node(droppos, {name = "mcl_core:mud"}) + minetest.sound_play("mcl_potions_bottle_pour", {pos=droppos, gain=0.5, max_hear_range=16}, true) + return ItemStack("mcl_potions:glass_bottle") + elseif node.name == "mcl_core:mud" then + return stack + end + end, + _dispense_into_walkable = true, on_secondary_use = minetest.item_eat(0, "mcl_potions:glass_bottle"), }) @@ -297,6 +308,17 @@ minetest.register_craftitem("mcl_potions:river_water", { -- Drink the water by default return minetest.do_item_eat(0, "mcl_potions:glass_bottle", itemstack, placer, pointed_thing) end, + _on_dispense = function(stack, pos, droppos) + local node = minetest.get_node(droppos) + if node.name == "mcl_core:dirt" or node.name == "mcl_core:coarse_dirt" then + minetest.set_node(droppos, {name = "mcl_core:mud"}) + minetest.sound_play("mcl_potions_bottle_pour", {pos=droppos, gain=0.5, max_hear_range=16}, true) + return ItemStack("mcl_potions:glass_bottle") + elseif node.name == "mcl_core:mud" then + return stack + end + end, + _dispense_into_walkable = true, on_secondary_use = minetest.item_eat(0, "mcl_potions:glass_bottle"), }) -- 2.40.1 From be1427205e8c857555bd7cb4684ae286263b32e7 Mon Sep 17 00:00:00 2001 From: TheRandomLegoBrick Date: Wed, 6 Jul 2022 13:14:29 -0700 Subject: [PATCH 261/357] Move progress to separate mod and add packed mud --- mods/ITEMS/mcl_core/nodes_base.lua | 13 ------- mods/ITEMS/mcl_mud/init.lua | 34 ++++++++++++++++++ mods/ITEMS/mcl_mud/mod.conf | 2 ++ .../textures/mcl_mud.png} | Bin .../mcl_mud/textures/mcl_mud_packed_mud.png | Bin 0 -> 354 bytes mods/ITEMS/mcl_potions/init.lua | 12 +++---- 6 files changed, 42 insertions(+), 19 deletions(-) create mode 100644 mods/ITEMS/mcl_mud/init.lua create mode 100644 mods/ITEMS/mcl_mud/mod.conf rename mods/ITEMS/{mcl_core/textures/mcl_core_mud.png => mcl_mud/textures/mcl_mud.png} (100%) create mode 100644 mods/ITEMS/mcl_mud/textures/mcl_mud_packed_mud.png diff --git a/mods/ITEMS/mcl_core/nodes_base.lua b/mods/ITEMS/mcl_core/nodes_base.lua index 58c6902bf..957b1f24a 100644 --- a/mods/ITEMS/mcl_core/nodes_base.lua +++ b/mods/ITEMS/mcl_core/nodes_base.lua @@ -457,19 +457,6 @@ minetest.register_node("mcl_core:podzol", { }) mcl_core.register_snowed_node("mcl_core:podzol_snow", "mcl_core:podzol", nil, nil, false, S("Podzol with Snow")) -minetest.register_node("mcl_core:mud", { - description = S("Mud"), - _doc_items_longdesc = S("Mud is a decorative block that generates in mangrove swamps. Mud can also be obtained by using water bottles on dirt or coarse dirt."), - _doc_items_hidden = false, - tiles = {"mcl_core_mud.png"}, - is_ground_content = true, - stack_max = 64, - groups = {handy=1,shovely=1, enderman_takable=1, building_block=1}, - sounds = mcl_sounds.node_sound_dirt_defaults(), - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, -}) - minetest.register_node("mcl_core:dirt", { description = S("Dirt"), _doc_items_longdesc = S("Dirt acts as a soil for a few plants. When in light, this block may grow a grass or mycelium cover if such blocks are nearby."), diff --git a/mods/ITEMS/mcl_mud/init.lua b/mods/ITEMS/mcl_mud/init.lua new file mode 100644 index 000000000..00ca8b715 --- /dev/null +++ b/mods/ITEMS/mcl_mud/init.lua @@ -0,0 +1,34 @@ +local S = minetest.get_translator(minetest.get_current_modname()) + +minetest.register_node("mcl_mud:mud", { + description = S("Mud"), + _doc_items_longdesc = S("Mud is a decorative block that generates in mangrove swamps. Mud can also be obtained by using water bottles on dirt or coarse dirt."), + _doc_items_hidden = false, + tiles = {"mcl_mud.png"}, + is_ground_content = true, + stack_max = 64, + groups = {handy=1,shovely=1, enderman_takable=1, building_block=1}, + _mcl_blast_resistance = 0.5, + _mcl_hardness = 0.5, +}) + +minetest.register_node("mcl_mud:packed_mud", { + description = S("Packed Mud"), + _doc_items_longdesc = S("Packed mud is a decorative block used to craft mud bricks."), + _doc_items_hidden = false, + tiles = {"mcl_mud_packed_mud.png"}, + is_ground_content = true, + stack_max = 64, + groups = {handy=1,shovely=1, enderman_takable=1, building_block=1}, + _mcl_blast_resistance = 0.5, + _mcl_hardness = 0.5, +}) + +minetest.register_craft({ + type = "shapeless", + output = "mcl_mud:packed_mud", + recipe = { + "mcl_mud:mud", + "mcl_farming:wheat_item", + } +}) \ No newline at end of file diff --git a/mods/ITEMS/mcl_mud/mod.conf b/mods/ITEMS/mcl_mud/mod.conf new file mode 100644 index 000000000..44d96b06b --- /dev/null +++ b/mods/ITEMS/mcl_mud/mod.conf @@ -0,0 +1,2 @@ +author = TheRandomLegoBrick +description = Adds various mud blocks. \ No newline at end of file diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_mud.png b/mods/ITEMS/mcl_mud/textures/mcl_mud.png similarity index 100% rename from mods/ITEMS/mcl_core/textures/mcl_core_mud.png rename to mods/ITEMS/mcl_mud/textures/mcl_mud.png diff --git a/mods/ITEMS/mcl_mud/textures/mcl_mud_packed_mud.png b/mods/ITEMS/mcl_mud/textures/mcl_mud_packed_mud.png new file mode 100644 index 0000000000000000000000000000000000000000..fd8624b3e75f7a744b4f20f6ecf880a28fd1b228 GIT binary patch literal 354 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc!S9|fjv*HQt`m3jH8}{l7H(BY;kG*%@xxba z+P``o4IafKo2%O%s^z4;Oa6B7>E}9L+5LSRm2XG4uMG+m2(p#CvCUUA`TFz6eB2AX zG*53juuAZqw8@&+tJYeGcDV_kVA{d2EqBY9A=Ov0gOlmQ*05_knvGd>D=Qx)BuJOv z_%7Sn{K{iOxfq+uD+?i!O Date: Wed, 6 Jul 2022 20:27:13 -0700 Subject: [PATCH 262/357] Fix hardness and blast resistance for packed mud --- mods/ITEMS/mcl_mud/init.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mods/ITEMS/mcl_mud/init.lua b/mods/ITEMS/mcl_mud/init.lua index 00ca8b715..b6895c744 100644 --- a/mods/ITEMS/mcl_mud/init.lua +++ b/mods/ITEMS/mcl_mud/init.lua @@ -19,9 +19,9 @@ minetest.register_node("mcl_mud:packed_mud", { tiles = {"mcl_mud_packed_mud.png"}, is_ground_content = true, stack_max = 64, - groups = {handy=1,shovely=1, enderman_takable=1, building_block=1}, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, + groups = {handy=1, pickaxey=1, enderman_takable=1, building_block=1}, + _mcl_blast_resistance = 3, + _mcl_hardness = 1, }) minetest.register_craft({ -- 2.40.1 From 4f1960d6ef283601d265efe5e2944986a9dd926a Mon Sep 17 00:00:00 2001 From: TheRandomLegoBrick Date: Thu, 7 Jul 2022 08:29:32 -0700 Subject: [PATCH 263/357] Fix mod.conf --- mods/ITEMS/mcl_mud/mod.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/mods/ITEMS/mcl_mud/mod.conf b/mods/ITEMS/mcl_mud/mod.conf index 44d96b06b..f4cdb505a 100644 --- a/mods/ITEMS/mcl_mud/mod.conf +++ b/mods/ITEMS/mcl_mud/mod.conf @@ -1,2 +1,3 @@ +name = mcl_mud author = TheRandomLegoBrick description = Adds various mud blocks. \ No newline at end of file -- 2.40.1 From f3dd3e92fa12e69b499bee9ed97456222d2357a8 Mon Sep 17 00:00:00 2001 From: TheRandomLegoBrick Date: Thu, 7 Jul 2022 11:54:36 -0700 Subject: [PATCH 264/357] Add various mud brick blocks --- mods/ITEMS/mcl_mud/init.lua | 30 ++++++++++++++++-- .../ITEMS/mcl_mud/textures/mcl_mud_bricks.png | Bin 0 -> 438 bytes mods/ITEMS/mcl_stairs/mod.conf | 2 +- mods/ITEMS/mcl_stairs/register.lua | 2 ++ mods/ITEMS/mcl_walls/mod.conf | 2 +- mods/ITEMS/mcl_walls/register.lua | 1 + 6 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 mods/ITEMS/mcl_mud/textures/mcl_mud_bricks.png diff --git a/mods/ITEMS/mcl_mud/init.lua b/mods/ITEMS/mcl_mud/init.lua index b6895c744..787655a56 100644 --- a/mods/ITEMS/mcl_mud/init.lua +++ b/mods/ITEMS/mcl_mud/init.lua @@ -6,10 +6,15 @@ minetest.register_node("mcl_mud:mud", { _doc_items_hidden = false, tiles = {"mcl_mud.png"}, is_ground_content = true, - stack_max = 64, groups = {handy=1,shovely=1, enderman_takable=1, building_block=1}, _mcl_blast_resistance = 0.5, _mcl_hardness = 0.5, + collision_box = { + type = "fixed", + fixed = { + {-8 / 16, -8 / 16, -8 / 16, 8 / 16, 7 / 16, 8 / 16}, + }, + }, }) minetest.register_node("mcl_mud:packed_mud", { @@ -17,13 +22,22 @@ minetest.register_node("mcl_mud:packed_mud", { _doc_items_longdesc = S("Packed mud is a decorative block used to craft mud bricks."), _doc_items_hidden = false, tiles = {"mcl_mud_packed_mud.png"}, - is_ground_content = true, - stack_max = 64, groups = {handy=1, pickaxey=1, enderman_takable=1, building_block=1}, _mcl_blast_resistance = 3, _mcl_hardness = 1, }) +minetest.register_node("mcl_mud:mud_bricks", { + description = S("Mud Bricks"), + _doc_items_longdesc = S("Decorative block crafted from packed mud."), + _doc_items_hidden = false, + tiles = {"mcl_mud_bricks.png"}, + groups = {handy=1, pickaxey=1, building_block=1}, + _mcl_blast_resistance = 3, + _mcl_hardness = 1.5, +}) + +-- packed mud minetest.register_craft({ type = "shapeless", output = "mcl_mud:packed_mud", @@ -31,4 +45,14 @@ minetest.register_craft({ "mcl_mud:mud", "mcl_farming:wheat_item", } +}) + +-- mud bricks +minetest.register_craft({ + type = "shaped", + output = "mcl_mud:mud_bricks 4", + recipe = { + {"mcl_mud:packed_mud", "mcl_mud:packed_mud"}, + {"mcl_mud:packed_mud", "mcl_mud:packed_mud"} + } }) \ No newline at end of file diff --git a/mods/ITEMS/mcl_mud/textures/mcl_mud_bricks.png b/mods/ITEMS/mcl_mud/textures/mcl_mud_bricks.png new file mode 100644 index 0000000000000000000000000000000000000000..8df3bacd4596e7c4d69ee2019f26d261bedcc53c GIT binary patch literal 438 zcmV;n0ZIOeP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0ZU0lK~y+Tb&<_Z z!!Qtp9sjgVp*_%7Kpc1oB#sCPaX_4S{~H_{njgnW`0TZ;s;HxpwO&s)_DuEp_NtUx ztsLure1HEO4tIHzpz8!ars z?zig)NWqq3n&u?SKzeFB22tlR<1#YRRgVAEn>Aa0B}am(nivP;2OGOa#{i^$93dU( z{U~a{)+`2@d3?AJAq?I}&SRLT;6vMX!{E_*@2$1eOT>((dU<~8+cuBcZlwUFSs~_0ru>g(z5byW#&Dsjxtbl2qUK$EG0 gAu6u8ehH=i0DYUz#p6Yi$^ZZW07*qoM6N<$f*-@aNdN!< literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_stairs/mod.conf b/mods/ITEMS/mcl_stairs/mod.conf index a357c2c79..2fb3180b2 100644 --- a/mods/ITEMS/mcl_stairs/mod.conf +++ b/mods/ITEMS/mcl_stairs/mod.conf @@ -1,2 +1,2 @@ name = mcl_stairs -depends = mcl_core, mcl_sounds, mcl_nether, mcl_end, mcl_ocean +depends = mcl_core, mcl_sounds, mcl_nether, mcl_end, mcl_ocean, mcl_mud diff --git a/mods/ITEMS/mcl_stairs/register.lua b/mods/ITEMS/mcl_stairs/register.lua index 5de380585..eee4c5dc2 100644 --- a/mods/ITEMS/mcl_stairs/register.lua +++ b/mods/ITEMS/mcl_stairs/register.lua @@ -138,6 +138,8 @@ mcl_stairs.register_slab("purpur_block", "group:purpur_block", mcl_stairs.register_stair_and_slab_simple("prismarine", "mcl_ocean:prismarine", S("Prismarine Stairs"), S("Prismarine Slab"), S("Double Prismarine Slab")) +mcl_stairs.register_stair_and_slab_simple("mud_brick", "mcl_mud:mud_bricks", S("Mud Brick Stair"), S("Mud Brick Slab"), S("Double Mud Brick Slab")) + mcl_stairs.register_stair_and_slab_simple("prismarine_brick", "mcl_ocean:prismarine_brick", S("Prismarine Brick Stairs"), S("Prismarine Brick Slab"), S("Double Prismarine Brick Slab")) mcl_stairs.register_stair_and_slab_simple("prismarine_dark", "mcl_ocean:prismarine_dark", S("Dark Prismarine Stairs"), S("Dark Prismarine Slab"), S("Double Dark Prismarine Slab")) diff --git a/mods/ITEMS/mcl_walls/mod.conf b/mods/ITEMS/mcl_walls/mod.conf index 8839312de..b6b221007 100644 --- a/mods/ITEMS/mcl_walls/mod.conf +++ b/mods/ITEMS/mcl_walls/mod.conf @@ -1,3 +1,3 @@ name = mcl_walls -depends = mcl_core, mcl_end, mcl_ocean, mcl_nether, mcl_sounds +depends = mcl_core, mcl_end, mcl_ocean, mcl_nether, mcl_sounds, mcl_mud optional_depends = doc diff --git a/mods/ITEMS/mcl_walls/register.lua b/mods/ITEMS/mcl_walls/register.lua index 483af493e..96a1b9b9f 100644 --- a/mods/ITEMS/mcl_walls/register.lua +++ b/mods/ITEMS/mcl_walls/register.lua @@ -14,3 +14,4 @@ mcl_walls.register_wall("mcl_walls:prismarine", S("Prismarine Wall"), "mcl_ocean mcl_walls.register_wall("mcl_walls:endbricks", S("End Stone Brick Wall"), "mcl_end:end_bricks") mcl_walls.register_wall("mcl_walls:netherbrick", S("Nether Brick Wall"), "mcl_nether:nether_brick") mcl_walls.register_wall("mcl_walls:rednetherbrick", S("Red Nether Brick Wall"), "mcl_nether:red_nether_brick") +mcl_walls.register_wall("mcl_walls:mudbrick", S("Mud Brick Wall"), "mcl_mud:mud_bricks") \ No newline at end of file -- 2.40.1 From 06f8688f2603a842531e71b10c4e5cab7fe44a3b Mon Sep 17 00:00:00 2001 From: TheRandomLegoBrick Date: Thu, 7 Jul 2022 15:16:43 -0700 Subject: [PATCH 265/357] Improve mud bricks and packed mud textures --- mods/ITEMS/mcl_mud/textures/mcl_mud_bricks.png | Bin 438 -> 465 bytes .../mcl_mud/textures/mcl_mud_packed_mud.png | Bin 354 -> 487 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/mods/ITEMS/mcl_mud/textures/mcl_mud_bricks.png b/mods/ITEMS/mcl_mud/textures/mcl_mud_bricks.png index 8df3bacd4596e7c4d69ee2019f26d261bedcc53c..c102118e7e099ae9f4f73fc6015f8344da780533 100644 GIT binary patch delta 388 zcmV-~0ek+o1JMJJR)1zmL_t(IPj!(!Ps2bAhA($%0z!NUgv10wh)Q(hk1(*avhxr4 zl?+G>Fd!C6AuY)zxeL$5*B}a5Z&QD~w$FBQdvmS+mxsrflcR%Z^kU8@r`FoGZR%h0 z_Ffe8YJYG0c{VMo(%S~6Zk-1oZEfpT;G7r4no8wf17YesOMg?Nz3)op0H!f97U{jf zk*LOiv964O4zt=yj8L9u;oDasO52dY9|iCNsCag=obMo1DXRt!X?juGs%`)Z7&!$* zk94KNSe+M6a&>tjUTbSnAz&DV62 zkSwPR+qBxVV{VBpv*M&JB}k(pQHqiu68I65I|S;o1A<>d5+xt}xI-lJo~3gD9@BIn i-eG0yE2sEwtJD{}p)Sg%uSyjF0000fz5 z8k!%+N%-uwtg5J^k+oh=Hug;Q`Sz-mTCE)Ge|&%c91eGRlc4JaW2~|j>n6du70eQ) z=of0|?9H}@`}&r(4+C0bG|ch@jzk%|$L_c52S~w|Vw&b8%YQ(6YC8r|=P~0lGSXF! z|J0i`TYe=+f~lGq2jd4DyGF+Vq<$PB9q9ciYQWYk2AO$$xDO!=-bc=3n5W=F+jhg? z(RuH!wbV<*jHY^de(KvckJ)ae0Hs+Vr`6ZTyX@rxP1EdlyKAukjr|bs_xr4iYigd` zU&7J6LtcDg3u3Rt&61K>f|D9gN&*)k4e?$KMM41`;!e_M8i1P@#Qg!Y94@y-pnG(xa| z`rowS%g$0FD{}0yJ)SmweR)pKr|G7)pRRU=p1~zub9qklGW!L8Ul#@r`~2>OCWNJB znl7=7AO^bL$4Zdy_;A0hYY3sPV(9b}E3?dX-E?=mXHMZZzyW&Gn9~dpbTci?m-LmT+l~sB2fC z3|T@LdLMUCB6Ds-K*KT-Ku$ggp74}nkYO5zgBi_G&@5FND4IcC za=(2vKv|bYIDcfVwEq=Jvma@4n`qGv7ggwJ@;FRfxPvnUEqQt1U|<_}*njsOfrIKukardaBhvpf&c&j -- 2.40.1 From cbe0f80d68711cbcdfe4cf3853aba8c73180160a Mon Sep 17 00:00:00 2001 From: TheRandomLegoBrick Date: Thu, 7 Jul 2022 16:50:51 -0700 Subject: [PATCH 266/357] Move redundant water bottle code to functions --- mods/ITEMS/mcl_potions/init.lua | 190 +++++++++++++------------------- 1 file changed, 74 insertions(+), 116 deletions(-) diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index d36ed391e..2ea7e2879 100644 --- a/mods/ITEMS/mcl_potions/init.lua +++ b/mods/ITEMS/mcl_potions/init.lua @@ -176,6 +176,76 @@ local fill_cauldron = function(cauldron, water_type) end end +-- function to set node and empty water bottle (used for cauldrons and mud) +local function set_node_empty_bottle(itemstack, placer, pointed_thing, newitemstring) + local pname = placer:get_player_name() + if minetest.is_protected(pointed_thing.under, pname) then + minetest.record_protection_violation(pointed_thing.under, pname) + return itemstack + end + + -- set the node to `itemstring` + minetest.set_node(pointed_thing.under, {name=newitemstring}) + + -- play sound + minetest.sound_play("mcl_potions_bottle_pour", {pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true) + + -- + if minetest.is_creative_enabled(placer:get_player_name()) then + return itemstack + else + return "mcl_potions:glass_bottle" + end +end + +-- used for water bottles and river water bottles +local function dispense_water_bottle(stack, pos, droppos) + local node = minetest.get_node(droppos) + if node.name == "mcl_core:dirt" or node.name == "mcl_core:coarse_dirt" then + -- convert dirt/coarse dirt to mud + minetest.set_node(droppos, {name = "mcl_mud:mud"}) + minetest.sound_play("mcl_potions_bottle_pour", {pos=droppos, gain=0.5, max_hear_range=16}, true) + return ItemStack("mcl_potions:glass_bottle") + + elseif node.name == "mcl_mud:mud" then + -- dont dispense into mud + return stack + end +end + +-- on_place function for `mcl_potions:water` and `mcl_potions:river_water` + +local function water_bottle_on_place(itemstack, placer, pointed_thing) + if pointed_thing.type == "node" then + local node = minetest.get_node(pointed_thing.under) + local def = minetest.registered_nodes[node.name] + + -- Call on_rightclick if the pointed node defines it + if placer and not placer:get_player_control().sneak then + if def and def.on_rightclick then + return def.on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack + end + end + + local cauldron = nil + if itemstack:get_name() == "mcl_potions:water" then -- regular water + cauldron = fill_cauldron(node.name, "mcl_core:water_source") + elseif itemstack:get_name() == "mcl_potions:river_water" then -- river water + cauldron = fill_cauldron(node.name, "mclx_core:river_water_source") + end + + + if cauldron then + set_node_empty_bottle(itemstack, placer, pointed_thing, cauldron) + elseif node.name == "mcl_core:dirt" or node.name == "mcl_core:coarse_dirt" then + set_node_empty_bottle(itemstack, placer, pointed_thing, "mcl_mud:mud") + end + end + + -- Drink the water by default + return minetest.do_item_eat(0, "mcl_potions:glass_bottle", itemstack, placer, pointed_thing) +end + -- Itemstring of potions is “mcl_potions:” minetest.register_craftitem("mcl_potions:water", { @@ -187,64 +257,8 @@ minetest.register_craftitem("mcl_potions:water", { inventory_image = potion_image("#0022FF"), wield_image = potion_image("#0022FF"), groups = {brewitem=1, food=3, can_eat_when_full=1, water_bottle=1}, - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type == "node" then - local node = minetest.get_node(pointed_thing.under) - local def = minetest.registered_nodes[node.name] - - -- Call on_rightclick if the pointed node defines it - if placer and not placer:get_player_control().sneak then - if def and def.on_rightclick then - return def.on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack - end - end - - local cauldron = fill_cauldron(node.name, "mcl_core:water_source") - if cauldron then - local pname = placer:get_player_name() - if minetest.is_protected(pointed_thing.under, pname) then - minetest.record_protection_violation(pointed_thing.under, pname) - return itemstack - end - -- Increase water level of cauldron by 1 - minetest.set_node(pointed_thing.under, {name=cauldron}) - minetest.sound_play("mcl_potions_bottle_pour", {pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true) - if minetest.is_creative_enabled(placer:get_player_name()) then - return itemstack - else - return "mcl_potions:glass_bottle" - end - elseif node.name == "mcl_core:dirt" or node.name == "mcl_core:coarse_dirt" then - local pname = placer:get_player_name() - if minetest.is_protected(pointed_thing.under, pname) then - minetest.record_protection_violation(pointed_thing.under, pname) - return itemstack - end - - -- convert to mud - minetest.set_node(pointed_thing.under, {name="mcl_mud:mud"}) - minetest.sound_play("mcl_potions_bottle_pour", {pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true) - if minetest.is_creative_enabled(placer:get_player_name()) then - return itemstack - else - return "mcl_potions:glass_bottle" - end - end - end - - -- Drink the water by default - return minetest.do_item_eat(0, "mcl_potions:glass_bottle", itemstack, placer, pointed_thing) - end, - _on_dispense = function(stack, pos, droppos) - local node = minetest.get_node(droppos) - if node.name == "mcl_core:dirt" or node.name == "mcl_core:coarse_dirt" then - minetest.set_node(droppos, {name = "mcl_mud:mud"}) - minetest.sound_play("mcl_potions_bottle_pour", {pos=droppos, gain=0.5, max_hear_range=16}, true) - return ItemStack("mcl_potions:glass_bottle") - elseif node.name == "mcl_mud:mud" then - return stack - end - end, + on_place = water_bottle_on_place, + _on_dispense = dispense_water_bottle, _dispense_into_walkable = true, on_secondary_use = minetest.item_eat(0, "mcl_potions:glass_bottle"), }) @@ -260,64 +274,8 @@ minetest.register_craftitem("mcl_potions:river_water", { inventory_image = potion_image("#0044FF"), wield_image = potion_image("#0044FF"), groups = {brewitem=1, food=3, can_eat_when_full=1, water_bottle=1}, - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type == "node" then - local node = minetest.get_node(pointed_thing.under) - local def = minetest.registered_nodes[node.name] - - -- Call on_rightclick if the pointed node defines it - if placer and not placer:get_player_control().sneak then - if def and def.on_rightclick then - return def.on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack - end - end - - local cauldron = fill_cauldron(node.name, "mclx_core:river_water_source") - if cauldron then - local pname = placer:get_player_name() - if minetest.is_protected(pointed_thing.under, pname) then - minetest.record_protection_violation(pointed_thing.under, pname) - return itemstack - end - -- Increase water level of cauldron by 1 - minetest.set_node(pointed_thing.under, {name=cauldron}) - minetest.sound_play("mcl_potions_bottle_pour", {pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true) - if minetest.is_creative_enabled(placer:get_player_name()) then - return itemstack - else - return "mcl_potions:glass_bottle" - end - elseif node.name == "mcl_core:dirt" or node.name == "mcl_core:coarse_dirt" then - local pname = placer:get_player_name() - if minetest.is_protected(pointed_thing.under, pname) then - minetest.record_protection_violation(pointed_thing.under, pname) - return itemstack - end - - -- convert to mud - minetest.set_node(pointed_thing.under, {name="mcl_mud:mud"}) - minetest.sound_play("mcl_potions_bottle_pour", {pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true) - if minetest.is_creative_enabled(placer:get_player_name()) then - return itemstack - else - return "mcl_potions:glass_bottle" - end - end - end - - -- Drink the water by default - return minetest.do_item_eat(0, "mcl_potions:glass_bottle", itemstack, placer, pointed_thing) - end, - _on_dispense = function(stack, pos, droppos) - local node = minetest.get_node(droppos) - if node.name == "mcl_core:dirt" or node.name == "mcl_core:coarse_dirt" then - minetest.set_node(droppos, {name = "mcl_mud:mud"}) - minetest.sound_play("mcl_potions_bottle_pour", {pos=droppos, gain=0.5, max_hear_range=16}, true) - return ItemStack("mcl_potions:glass_bottle") - elseif node.name == "mcl_mud:mud" then - return stack - end - end, + on_place = water_bottle_on_place, + _on_dispense = dispense_water_bottle, _dispense_into_walkable = true, on_secondary_use = minetest.item_eat(0, "mcl_potions:glass_bottle"), -- 2.40.1 From d9a25552d8d37beedccde108563e0e67504348a1 Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Tue, 5 Jul 2022 11:14:48 -0600 Subject: [PATCH 267/357] Stone Cutter Adds the stonecutter block. --- mods/ITEMS/mcl_stonecutter/init.lua | 57 ++++++++++++++++++ .../ITEMS/mcl_stonecutter/locale/template.txt | 3 + mods/ITEMS/mcl_stonecutter/mod.conf | 4 ++ .../textures/mcl_stonecutter_bottom.png | Bin 0 -> 405 bytes .../textures/mcl_stonecutter_saw.png | Bin 0 -> 809 bytes .../textures/mcl_stonecutter_side.png | Bin 0 -> 452 bytes .../textures/mcl_stonecutter_top.png | Bin 0 -> 514 bytes 7 files changed, 64 insertions(+) create mode 100644 mods/ITEMS/mcl_stonecutter/init.lua create mode 100644 mods/ITEMS/mcl_stonecutter/locale/template.txt create mode 100644 mods/ITEMS/mcl_stonecutter/mod.conf create mode 100644 mods/ITEMS/mcl_stonecutter/textures/mcl_stonecutter_bottom.png create mode 100644 mods/ITEMS/mcl_stonecutter/textures/mcl_stonecutter_saw.png create mode 100644 mods/ITEMS/mcl_stonecutter/textures/mcl_stonecutter_side.png create mode 100644 mods/ITEMS/mcl_stonecutter/textures/mcl_stonecutter_top.png diff --git a/mods/ITEMS/mcl_stonecutter/init.lua b/mods/ITEMS/mcl_stonecutter/init.lua new file mode 100644 index 000000000..145bc7703 --- /dev/null +++ b/mods/ITEMS/mcl_stonecutter/init.lua @@ -0,0 +1,57 @@ +--||||||||||||||||||||||| +--||||| STONECUTTER ||||| +--||||||||||||||||||||||| + +-- TO-DO: +-- * Add GUI + +local S = minetest.get_translator(minetest.get_current_modname()) + +minetest.register_node("mcl_stonecutter:stonecutter", { + description = S("Stone Cutter"), + _tt_help = S("Used to cut stone like materials."), + _doc_items_longdesc = S("Stonecutters are used to create stairs and slabs from stone like materials. It is also the jobsite for the Stone Mason Villager."), + tiles = { + "mcl_stonecutter_top.png", + "mcl_stonecutter_bottom.png", + "mcl_stonecutter_side.png", + "mcl_stonecutter_side.png", + {name="mcl_stonecutter_saw.png", + animation={ + type="vertical_frames", + aspect_w=16, + aspect_h=16, + length=1 + }}, + {name="mcl_stonecutter_saw.png", + animation={ + type="vertical_frames", + aspect_w=16, + aspect_h=16, + length=1 + }} + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { pickaxey=1, material_stone=1 }, + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0.0625, 0.5}, -- NodeBox1 + {-0.4375, 0.0625, 0, 0.4375, 0.5, 0}, -- NodeBox2 + } + }, + _mcl_blast_resistance = 3.5, + _mcl_hardness = 3.5, + sounds = mcl_sounds.node_sound_stone_defaults(), +}) + +minetest.register_craft({ + output = "mcl_stonecutter:stonecutter", + recipe = { + { "", "", "" }, + { "", "mcl_core:iron_ingot", "" }, + { "mcl_core:stone", "mcl_core:stone", "mcl_core:stone" }, + } +}) diff --git a/mods/ITEMS/mcl_stonecutter/locale/template.txt b/mods/ITEMS/mcl_stonecutter/locale/template.txt new file mode 100644 index 000000000..840503ec4 --- /dev/null +++ b/mods/ITEMS/mcl_stonecutter/locale/template.txt @@ -0,0 +1,3 @@ +Stone Cutter= +Used to cut stone like materials.= +Stonecutters are used to create stairs and slabs from stone like materials. It is also the jobsite for the Stone Mason Villager.= diff --git a/mods/ITEMS/mcl_stonecutter/mod.conf b/mods/ITEMS/mcl_stonecutter/mod.conf new file mode 100644 index 000000000..d9781e474 --- /dev/null +++ b/mods/ITEMS/mcl_stonecutter/mod.conf @@ -0,0 +1,4 @@ +name = mcl_stonecutter +author = PrairieWind +description = This mod adds a stonecutter, which is used to cut stone like materials, and used as the jobsite for the Stone Mason Villager. +depends = mcl_sounds diff --git a/mods/ITEMS/mcl_stonecutter/textures/mcl_stonecutter_bottom.png b/mods/ITEMS/mcl_stonecutter/textures/mcl_stonecutter_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..40d53a4f1048d317398b19ad101bcd28bd37c70f GIT binary patch literal 405 zcmV;G0c!qVbAO`Hp=;^T<=_r(No=t3*bYIe?7LQr65D!udXjElo}az}AjSY| z9q3z{wXV9CwgZ6ow^smwG8!f2$^*dZcwj$HGuE)6cOKR{bP`Pl?Qid(w81#dP}=aD zug?$k&SMP=0Mq~!thC`Q^pFw|$Z|gamY|G=(gr0bjMK~kME#mkvW^5RIRQYGk=V55 zkq3Z|l%-mG=W#k77>IynFoDJxHU?C)q+N2V#H0F4$_!eG*gMZmBy}=B3{cvzzW`Xn zf|64uTnkG7lEJP$V9Gi1Ie}8^DiN>M*mgit_QOym;x4o*(_Bb~6ioL#$|dE08MGRZ zk1=c-v=i29B9}?F+*-E*+&?^Ch}f?5U#tBCW*Dyg$79ZA00000NkvXXu0mjf{GqC% literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_stonecutter/textures/mcl_stonecutter_saw.png b/mods/ITEMS/mcl_stonecutter/textures/mcl_stonecutter_saw.png new file mode 100644 index 0000000000000000000000000000000000000000..0a2f543bf905659d485b8f3737175ea4137a7580 GIT binary patch literal 809 zcmV+^1J?YBP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf6951U69E94oEQKA0=`K^K~zXf?Uk`> zQ&AMg&x^KAOxo0#7%(rXAPQQ@P*H>q;_g!D<|KmP=H^nQiXi<91Q#ba!A%E2s8A~v z9RkHJ+9r7^#KhQ=q|pY9ey8ty-n_=Rbj)wax$oTfoqO(i_nt^Eo!g8$w;c6}?*KgjEm3K?(yLf3@$FKn7nb~We?vQI$jF;N&T`4(5^-+8xWy@G} zTzx4!BeBTH{OiS~dw340_YYW^s{&JOrzc$RUIxgJXaKBECj|Y(1R7WkKmmY&*4&IrgDDrtWNl;R4bB*Cp`OM z^^;_haVeCmYONbrr#rQJOM=maoIZ0-MWIMoEoe2Gl1Rj)QmLtJw0=tN<9j*stD*A& zh)wVkh=fL@T>UB=rA>Wi5IW+*ChsBz?Jk>!4JAsH~r!MFu(g$m6 zU)0(YDYe*=+CpAyfD8gmA1fnuiiuxLSUar&9+0+Kee9cJ1U;2b%UCch$@p>g0W9A2 z6;L3gjRF#8gn$590<-Y@@b>{&o_#<2`T>q8@SlCyCyyWLkv98*H^53}BLSw^1U?4w z0w7I_d5!&Irlzc?0%7yOk%fTAmdBV4Mx8ERL^czO0H0w^ z;OpBDKrb<`G<^7Dg-^HOPphApP@_@I)hPx}p(u7H{m*`YEV_zlit!Z+>+AA%@r}HC n`9gi>JQ?(ZK|eTvejxH23@zqLf7yjF00000NkvXXu0mjfD>!j? literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_stonecutter/textures/mcl_stonecutter_side.png b/mods/ITEMS/mcl_stonecutter/textures/mcl_stonecutter_side.png new file mode 100644 index 0000000000000000000000000000000000000000..9c7c44fad742b03a059af79172b80a9a9109a271 GIT binary patch literal 452 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgf_ZUF%b$X;bMep-kJK0@wbSdQPnEoPo;wCakiRqW&XYC|J&>TGCs}AU-z8hIQ!jrUPlRq*O%se_dmZys`OW#$Lc`! z^2$1^{v_X>S})(cV@?Q{`P>-B8N}73;N;bKNwc57d`+z;!>7PC)1{V*Foe7jsC03<-yKQQZ)BQ9>RX$UXSaIhA_#DzrAIX(nbkUVBAh;7o>+g@RfX1W9I^xfunwENQn#XspKk{&~u9JYhJV0MI!2 z^l|#_>lXk`mV|cFVUYD_#a%&JxEi$ecUv zfz>oVJn;ZcVOFrVlMYvx7q!uA@TzG=t+_nU2#w{}$q#Pt#{A)|s(th1_zUxYvGI$4 zGK!7LTb^SJ^MQVAfu%Ins)AkMq}?8atgosFEG^(a=uWso-$jl7_4Q*C{U!3fuYkWu zo#o|PBURxc%d!{#gpw@(<2a$Qv%NX(m_-2IyxpKIT&;^Nm(RuV(cuh|8_hU~f|l-f zXw4%|{9_7@B??+q0Z)Y}XtDZwO_Ls;w13*iM~8aO_ba=-AS>O29RL6T07*qoM6N<$ Ef_qi#&Hw-a literal 0 HcmV?d00001 -- 2.40.1 From 41be8a5a85915eb52f55cf190a3ebe6b12f0f444 Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Wed, 6 Jul 2022 10:00:50 -0600 Subject: [PATCH 268/357] Stonecutter Texturs, by RandomLegoBrick --- .../textures/mcl_stonecutter_bottom.png | Bin 405 -> 583 bytes .../textures/mcl_stonecutter_saw.png | Bin 809 -> 904 bytes .../textures/mcl_stonecutter_side.png | Bin 452 -> 425 bytes .../textures/mcl_stonecutter_top.png | Bin 514 -> 587 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/mods/ITEMS/mcl_stonecutter/textures/mcl_stonecutter_bottom.png b/mods/ITEMS/mcl_stonecutter/textures/mcl_stonecutter_bottom.png index 40d53a4f1048d317398b19ad101bcd28bd37c70f..7467d42bee2ee6d0c9573f3ce19fdf8ae6b731d6 100644 GIT binary patch delta 569 zcmV-90>=H71IGlA8Gix*005AYXf^-<00DDSM?wIu&K&6g000DMK}|sb0I`n?{9y$E z000SaNLh0L01m?d01m?e$8V@)0005pNkldh(5M5YUFdxQXFtRPTjpQhi zs+`hOZ~gzb9;#NVdU0jfR)UN9UcmIBCCKX22)&t|*1^M9n7TG2>I6AdQ6w68^O-$`Q6i^l zrgR)v%V-C&#S)^|7=x;&>I9CM8ywck{Su%JGO6!akbm6rf==$B9V~vmByq~Sx~!}H z{uD)j8B?0}n#B<^`=N2uOC>$5eUNcV07DOqkX@9yN>gz@sHAz}|By{*K#g#5+`X}j7fqSv*>1N-6B-h`J{900000NkvXX Hu0mjfET9ce delta 389 zcmV;00eb$&1eF7j8Gi-<001BJ|6u?C010qNS#tmY3ljhU3ljkVnw%H_000McNliru z;|B%Coli4sJM*mgit_QOym;x4o*(_Bb~6ioL#$|dE08MGRZk1=c-v=i29B9}?F+*-E* j+&?^Ch}f?5U#tBCW*Dyg$79ZA00000NkvXXu0mjfeP^pB diff --git a/mods/ITEMS/mcl_stonecutter/textures/mcl_stonecutter_saw.png b/mods/ITEMS/mcl_stonecutter/textures/mcl_stonecutter_saw.png index 0a2f543bf905659d485b8f3737175ea4137a7580..0f2bc3dfc29238e21162197b44c4495d2a9cc35f 100644 GIT binary patch delta 845 zcmV-T1G4<728aicNPiB)000id0mpBsWB>pI9Z5t%R7gwhR?SZnQ4pVg?e>F~0&P(X zt%ax!)Kg8P-Wnoa3}^pNZgP;s#Arf#@WRD_i3ABP#csE3KbLiX)6RBVz-Xek{*t$E z-rJeknb|kLT@T%X-Q8U)olaA;*(6=pX=i8WR^1z$l}g2eQGYg@r9>h@KA(?zy&fGO zAG5P^xjbPrvA|QewzgPqwOTyS&CT(Qb*)xoNA74GVSj($DwRs374cIs6h+|yxn8eR zr_-Tsw@bxhk!`)KZ6g+ojie!91i%o$IvR~qFc{=i1ndQ&udS_7GMRKje*5MX&p&&^ zAm8onIZ>gghku8MoC-$(&j4;9R~UyDQ#>*c?$h$p620Eu=7Iu918)fMl#82|VQ;)B z4~zHXtjaU6zM7$?rjJ%cfk>w6jpf;(a+hZ&!7N;Sz?6sO2b?tN< z2aD;4^yKk6D*%^ujpxOsd7fnr)an^-Xe3OV#pmQ#e6*ZM@y%(RUyN%r=$Z8S!+V0A=jGE!7Cf0AAI(RH zuTblIXg)BRv&ewAtJ9!sR}2xrL9aic_`M9}a;p@vy$TRIYT(Xa4F>3z z7`UCd`M^yoP7zN}Pe;;_gx|4h|03+4PUb#KPUu?RMKfA0{^!(r7dq z+_COYJK)p+Oax=eITQ+!-|y${GYo^`@i=#@s;V3%E7@=y$QK&Q;snZY0AN3rN^t?D z6Gj0J1))PZlgT(Odlw%dlB1&|(lm`z;Ru9{s?{nN?00+s9q@ttrOfzX#s~j^4~TvN Xe9jP`bc-mi00000NkvXXu0mjf%Bqp& delta 749 zcmVv)cCV45u#MqLg z(FTlur|)~-yvDe6%x}oK@7(vDd+vGno=7jAKYQ9KIUAh^cYp7w<=CC>!g8$w;c6}? z*KgjEm3K?(yLf3@$FKn7nb~We?vQI$jF;N&T`4(5^-+8xWy@G}Tzx4!BeBTH{OiS~ zdw340_YYW^s{&JOrzc$RUIxgJXaKBECj|Y(1R7WkKmmY&LNsW)MGG#Mo#^9{^s$s-KHRseRj)*s-Xt3O_P)@_!{63h$i>ENh#l}^i8Ff7UVarFT#-t`qwAf$}~5@v*e z09gXF@PGU8_W@X*eLws90gfo}pMBUTk00rgHv54$z)EH#0jAglJ_hjuAWe#Sjs0S$ zn3v6xqZe)N{(@?~egI1-Mj%2lK&I3j#t-i{VA=rv03rmU*uO1JgXx>%|MdfIW6%!< z{op|Qfp?iqaL#ek_+AA%@r}HC`9gi>JQ?(Z fK|eTvejxH23@zqLf7yjF00000NkvXXu0mjf|0ZZR diff --git a/mods/ITEMS/mcl_stonecutter/textures/mcl_stonecutter_side.png b/mods/ITEMS/mcl_stonecutter/textures/mcl_stonecutter_side.png index 9c7c44fad742b03a059af79172b80a9a9109a271..d97f84baeeb776115d81385024e7a48c8670edc8 100644 GIT binary patch delta 385 zcmV-{0e=3(1E~X$F@FSSK}|sb0I`n?{9y$E000SaNLh0L01m?d01m?e$8V@)0003# zNkl!6sb+BNo~xt@y?jr zw7(!8n9P~EGl!W8{_z)}4f?$zj3S&5E;+HezQLXld|pHduFba zN}kV9w;e7bOQ$JnGsv7^u9_+S%{v@hrU~uzxLed6fnNU%D`su!28$TF?bh^Rf z{+4aP^~M-JKCpmJAA&F~m@wuyP5C1H=Q6F@FYPOGiWi{{a60|De66lK=n!32;bRa{vGf6951U69E94oEQKA z00(qQO+^Rd3lIJ8#en_iPCwF;%I*(#axhm=G?gL;~9P@!z2~rAzAVNxk z(kYJ*cdUIW0P<0+ml~xM095P}emLTF_-5XNAX*_T00`G+njtStemEj}pCC4>D4n8J zf?aVKctb3w27j?4iZ!{bi?ca^|5*gUa%#+yF^yImfLSsl{+O;bTk!z5T%_Oy6NGC+ zzR2OxiNOcx^6?500000NkvXX Hu0mjf)()yW diff --git a/mods/ITEMS/mcl_stonecutter/textures/mcl_stonecutter_top.png b/mods/ITEMS/mcl_stonecutter/textures/mcl_stonecutter_top.png index 455fbb895096974abc128860088c20aa12809b68..0b63cb112c286f768afccad760d3032ba50a8319 100644 GIT binary patch delta 573 zcmV-D0>b@*1j_`F8Gix*005AYXf^-<00DDSM?wIu&K&6g000DMK}|sb0I`n?{9y$E z000SaNLh0L01m?d01m?e$8V@)0005tNklfgc6x>~V?bvZ_Qqmw0ph{4Q z3Q7-f;(%1{9605iGk<{tH~tPM4*U&36-bqkS_rfuj^oYRS$}^q>oqx`jwVlU=gn^3 zzBN65@=)ga==MGG4^b4@79aHdZrviy<=MB->00UymvIvA-t4?rxJoxlS;x;`h@uR`0kav1e=F;1FbIMGR@!bSl(Hc3Wzp>2->1{bTzfp) zMGc)uDScn}gMT)*%EdBPS?+i}rcWS52#Est{pSzV-~gC92joy$498Ha9Z(I8$vEo~(yFfFRRU&t&Z+I#c2Sj_Tb|dW&kpxhQ99Ac ze0=!45H^98T${we_j*JwUB}TIu--d3L^PM)0^N35i`nVdjZ%LBZqEUX^!7?900000 LNkvXXu0mjfiKzyA delta 499 zcmVSxUg7p=L7g0 z(oG-9m0fhvl`kN;DHQ3V6s3iNS`-9HW}3Mf4TQMJoYOm6!GE(k!=3Z*`@VA;JKLL6 zD%*Yk0f0Qu@GXuL@;oDs697K%@6mT70OkNz+7ZL?gwvDnl!YU-Mm@mQ<%RmR+an5E zL_x&)U`W&Nfz>oVJn;ZcVOFrVlMYvx z7q!uA@TzG=t+_nU2#w{}$q#Pt#{A)|s(th1_zUxYvGI$4GK!7LTb^SJ^MQVAfu%In zs)AkMq}?8atgosFEG^(a=uWso-$jl7_4Q*C{U!3fuWW$7NS)>7S|e5AA002ovPDHLkV1oM0?63d; -- 2.40.1 From f141427dfe6f665a2b51db52ab3a54b774e26f67 Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Wed, 6 Jul 2022 16:21:02 -0600 Subject: [PATCH 269/357] Added README.md File with Media License --- mods/ITEMS/mcl_stonecutter/README.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 mods/ITEMS/mcl_stonecutter/README.md diff --git a/mods/ITEMS/mcl_stonecutter/README.md b/mods/ITEMS/mcl_stonecutter/README.md new file mode 100644 index 000000000..c6316a5a2 --- /dev/null +++ b/mods/ITEMS/mcl_stonecutter/README.md @@ -0,0 +1,17 @@ +mcl_stonecutter +=============== +Adds the stonecutter block. Used to cut stone like materials into stairs, slabs, etc. Also used as the Stone Mason Villager's jobsite. + +License of code +--------------- +See the main MineClone 2 README.md file. +Author: PrairieWind + +License of media +---------------- +mcl_stonecutter_bottom.png +mcl_stonecutter_side.png +mcl_stonecutter_top.png +mcl_stonecutter_saw.png +License: CC0 1.0 Universal (CC0 1.0) +Author: RandomLegoBrick -- 2.40.1 From 3786c46b303e0dd3593176b8256917a9caabff24 Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Mon, 4 Jul 2022 17:02:22 -0600 Subject: [PATCH 270/357] (Soul) Campfires Adds soul and nomal campfires. Code start and models from issue 505. Textures are all PixelPerfection. --- mods/ITEMS/mcl_campfires/init.lua | 128 +++++++++ mods/ITEMS/mcl_campfires/local/template.txt | 4 + mods/ITEMS/mcl_campfires/mod.conf | 3 + .../models/mcl_campfires_campfire.obj | 224 ++++++++++++++++ .../models/mcl_campfires_campfire1.mtl | 35 +++ .../models/mcl_campfires_campfire1.obj | 248 ++++++++++++++++++ .../models/mcl_campfires_campfire_lit.obj | 225 ++++++++++++++++ .../textures/mcl_campfires_campfire_fire.png | Bin 0 -> 533 bytes .../textures/mcl_campfires_campfire_inv.png | Bin 0 -> 544 bytes .../mcl_campfires_campfire_log_lit.png | Bin 0 -> 811 bytes .../textures/mcl_campfires_fire1.png | Bin 0 -> 889 bytes .../textures/mcl_campfires_log.png | Bin 0 -> 387 bytes .../mcl_campfires_soul_campfire_fire.png | Bin 0 -> 937 bytes .../mcl_campfires_soul_campfire_inv.png | Bin 0 -> 540 bytes .../mcl_campfires_soul_campfire_log_lit.png | Bin 0 -> 1112 bytes 15 files changed, 867 insertions(+) create mode 100644 mods/ITEMS/mcl_campfires/init.lua create mode 100644 mods/ITEMS/mcl_campfires/local/template.txt create mode 100644 mods/ITEMS/mcl_campfires/mod.conf create mode 100644 mods/ITEMS/mcl_campfires/models/mcl_campfires_campfire.obj create mode 100644 mods/ITEMS/mcl_campfires/models/mcl_campfires_campfire1.mtl create mode 100644 mods/ITEMS/mcl_campfires/models/mcl_campfires_campfire1.obj create mode 100644 mods/ITEMS/mcl_campfires/models/mcl_campfires_campfire_lit.obj create mode 100644 mods/ITEMS/mcl_campfires/textures/mcl_campfires_campfire_fire.png create mode 100644 mods/ITEMS/mcl_campfires/textures/mcl_campfires_campfire_inv.png create mode 100644 mods/ITEMS/mcl_campfires/textures/mcl_campfires_campfire_log_lit.png create mode 100644 mods/ITEMS/mcl_campfires/textures/mcl_campfires_fire1.png create mode 100644 mods/ITEMS/mcl_campfires/textures/mcl_campfires_log.png create mode 100644 mods/ITEMS/mcl_campfires/textures/mcl_campfires_soul_campfire_fire.png create mode 100644 mods/ITEMS/mcl_campfires/textures/mcl_campfires_soul_campfire_inv.png create mode 100644 mods/ITEMS/mcl_campfires/textures/mcl_campfires_soul_campfire_log_lit.png diff --git a/mods/ITEMS/mcl_campfires/init.lua b/mods/ITEMS/mcl_campfires/init.lua new file mode 100644 index 000000000..ac5fa22fc --- /dev/null +++ b/mods/ITEMS/mcl_campfires/init.lua @@ -0,0 +1,128 @@ +-- |||||||||||||||||||||||||||||||| +-- ||||||||||| CAMPFIRES |||||||||| +-- |||||||||||||||||||||||||||||||| + +-- TO-DO: +-- * Add Smoke Particles +-- * Add Spark Particles +-- * Add Cooking Meat +-- * Add Working Sounds + +S = minetest.get_translator(minetest.get_current_modname()) + +campfires = { +{ name = "Campfire", lightlevel = 15, techname = "campfire", damage = 1, drops = "mcl_core:charcoal_lump 2" }, +{ name = "Soul Campfire", lightlevel = 10, techname = "soul_campfire", damage = 2, drops = "mcl_blackstone:soul_soil" }, +} + +for _, campfire in pairs(campfires) do +-- Define Campfire + minetest.register_node("mcl_campfires:" .. campfire.techname, { + description = S(campfire.name), + _tt_help = S("Cooks food and keeps bees happy."), + _doc_items_longdesc = S("Campfires have multiple uses, including keeping bees happy, cooking raw meat and fish, and as a trap."), + inventory_image = "mcl_campfires_" .. campfire.techname .. "_inv.png", + drawtype = "mesh", + mesh = "mcl_campfires_campfire.obj", + tiles = {{name="mcl_campfires_log.png"},}, + groups = { handy=1, axey=1, material_wood=1, not_in_creative_inventory=1 }, + paramtype = "light", + paramtype2 = "facedir", + on_rightclick = function (pos, node, player, itemstack, pointed_thing) + if player:get_wielded_item():get_name() == "mcl_fire:flint_and_steel" then + node.name = "mcl_campfires:" .. campfire.techname .. "_lit" + minetest.set_node(pos, node) + end + end, + drop = campfire.drops, + _mcl_silk_touch_drop = {"mcl_campfires:" .. campfire.techname}, + mcl_sounds.node_sound_wood_defaults(), + selection_box = { + type = 'fixed', + fixed = {-.5, -.5, -.5, .5, -.05, .5}, --left, bottom, front, right, top + }, + collision_box = { + type = 'fixed', + fixed = {-.5, -.5, -.5, .5, -.05, .5}, + }, + _mcl_blast_resistance = 2, + _mcl_hardness = 2, + }) + + --Define Lit Campfire + minetest.register_node("mcl_campfires:" .. campfire.techname .. "_lit", { + description = S(campfire.name), + _tt_help = S("Cooks food and keeps bees happy."), + _doc_items_longdesc = S("Campfires have multiple uses, including keeping bees happy, cooking raw meat and fish, and as a trap."), + inventory_image = "mcl_campfires_" .. campfire.techname .. "_inv.png", + drawtype = "mesh", + mesh = "mcl_campfires_campfire_lit.obj", + tiles = {{ + name="mcl_campfires_" .. campfire.techname .. "_fire.png", + animation={ + type="vertical_frames", + aspect_w=16, + aspect_h=16, + length=2.0 + }}, + {name="mcl_campfires_" .. campfire.techname .. "_log_lit.png", + animation={ + type="vertical_frames", + aspect_w=16, + aspect_h=16, + length=2.0 + }} + }, + groups = { handy=1, axey=1, material_wood=1 }, + paramtype = "light", + paramtype2 = "facedir", + on_rightclick = function (pos, node, player, itemstack, pointed_thing) + if player:get_wielded_item():get_name():find("shovel") then + node.name = "mcl_campfires:" .. campfire.techname + minetest.set_node(pos, node) + end + end, + drop = campfire.drops, + _mcl_silk_touch_drop = {"mcl_campfires:" .. campfire.techname .. "_lit"}, + light_source = campfire.lightlevel, + mcl_sounds.node_sound_wood_defaults(), + selection_box = { + type = "fixed", + fixed = {-.5, -.5, -.5, .5, -.05, .5}, --left, bottom, front, right, top + }, + collision_box = { + type = "fixed", + fixed = {-.5, -.5, -.5, .5, -.05, .5}, + }, + _mcl_blast_resistance = 2, + _mcl_hardness = 2, + damage_per_second = campfire.damage, + }) +end + +minetest.register_craft({ + output = "mcl_campfires:campfire_lit", + recipe = { + { "", "mcl_core:stick", "" }, + { "mcl_core:stick", "mcl_core:charcoal_lump", "mcl_core:stick" }, + { "group:tree", "group:tree", "group:tree" }, + } +}) + +minetest.register_craft({ + output = "mcl_campfires:soul_campfire_lit", + recipe = { + { "", "mcl_core:stick", "" }, + { "mcl_core:stick", "mcl_blackstone:soul_soil", "mcl_core:stick" }, + { "group:tree", "group:tree", "group:tree" }, + } +}) + +minetest.register_craft({ + output = "mcl_campfires:soul_campfire_lit", + recipe = { + { "", "mcl_core:stick", "" }, + { "mcl_core:stick", "mcl_nether:soul_sand", "mcl_core:stick" }, + { "group:tree", "group:tree", "group:tree" }, + } +}) diff --git a/mods/ITEMS/mcl_campfires/local/template.txt b/mods/ITEMS/mcl_campfires/local/template.txt new file mode 100644 index 000000000..04825b5f4 --- /dev/null +++ b/mods/ITEMS/mcl_campfires/local/template.txt @@ -0,0 +1,4 @@ +Campfire= +Soul Campfire= +Cooks food and keeps bees happy.= +Campfires have multiple uses, including keeping bees happy, cooking raw meat and fish, and as a trap.= \ No newline at end of file diff --git a/mods/ITEMS/mcl_campfires/mod.conf b/mods/ITEMS/mcl_campfires/mod.conf new file mode 100644 index 000000000..5c4b77dda --- /dev/null +++ b/mods/ITEMS/mcl_campfires/mod.conf @@ -0,0 +1,3 @@ +name = mcl_campfires +depends = mcl_sounds +author = PrairieWind, Gerold55 \ No newline at end of file diff --git a/mods/ITEMS/mcl_campfires/models/mcl_campfires_campfire.obj b/mods/ITEMS/mcl_campfires/models/mcl_campfires_campfire.obj new file mode 100644 index 000000000..a559fdd4f --- /dev/null +++ b/mods/ITEMS/mcl_campfires/models/mcl_campfires_campfire.obj @@ -0,0 +1,224 @@ +# Blender v2.78 (sub 0) OBJ File: '' +# www.blender.org +mtllib campfire.mtl +o nodebox4 +v 0.500000 -0.312500 0.250000 +v 0.500000 -0.312500 0.500000 +v 0.500000 -0.062500 0.500000 +v 0.500000 -0.062500 0.250000 +v -0.500000 -0.312500 0.250000 +v -0.500000 -0.312500 0.500000 +v -0.500000 -0.062500 0.500000 +v -0.500000 -0.062500 0.250000 +v 0.500000 -0.312500 0.500000 +v 0.500000 -0.062500 0.500000 +v -0.500000 -0.062500 0.500000 +v -0.500000 -0.312500 0.500000 +vt 0.0000 0.7500 +vt 0.0000 0.5000 +vt 0.2500 0.5000 +vt 0.2500 0.7500 +vt 0.0000 0.7500 +vt 0.0000 0.5000 +vt 0.2500 0.5000 +vt 0.2500 0.7500 +vt 1.0000 0.7500 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 0.7500 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.7500 +vt 1.0000 0.7500 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.7500 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 -1.0000 -0.0000 +usemtl none +s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/1 6/6/1 7/7/1 8/8/1 +f 1/9/2 4/10/2 8/11/2 5/5/2 +f 1/9/3 2/12/3 6/13/3 5/5/3 +f 4/14/3 3/15/3 7/16/3 8/17/3 +f 9/18/2 10/19/2 11/20/2 12/21/2 +o nodebox4.001 +v 0.500000 -0.312500 -0.498288 +v 0.500000 -0.312500 -0.248288 +v 0.500000 -0.062500 -0.248288 +v 0.500000 -0.062500 -0.498288 +v -0.500000 -0.312500 -0.498288 +v -0.500000 -0.312500 -0.248288 +v -0.500000 -0.062500 -0.248288 +v -0.500000 -0.062500 -0.498288 +v 0.500000 -0.312500 -0.248288 +v 0.500000 -0.062500 -0.248288 +v -0.500000 -0.062500 -0.248288 +v -0.500000 -0.312500 -0.248288 +vt 0.0000 0.7500 +vt 0.0000 0.5000 +vt 0.2500 0.5000 +vt 0.2500 0.7500 +vt 0.0000 0.7500 +vt 0.0000 0.5000 +vt 0.2500 0.5000 +vt 0.2500 0.7500 +vt 1.0000 0.7500 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 0.7500 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.7500 +vt 1.0000 0.7500 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.7500 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 -1.0000 -0.0000 +usemtl none +s 1 +f 13/22/4 14/23/4 15/24/4 16/25/4 +f 17/26/4 18/27/4 19/28/4 20/29/4 +f 13/30/5 16/31/5 20/32/5 17/26/5 +f 13/30/6 14/33/6 18/34/6 17/26/6 +f 16/35/6 15/36/6 19/37/6 20/38/6 +f 21/39/5 22/40/5 23/41/5 24/42/5 +o nodebox3 +v 0.250000 -0.500000 -0.500000 +v 0.250000 -0.437500 -0.500000 +v -0.250000 -0.437500 -0.500000 +v -0.250000 -0.500000 -0.500000 +v 0.250000 -0.500000 0.500000 +v 0.250000 -0.437500 0.500000 +v -0.250000 -0.437500 0.500000 +v -0.250000 -0.500000 0.500000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 0.1250 +vt 0.0000 0.1250 +vt 1.0000 0.0000 +vt 1.0000 0.1250 +vt 0.0000 0.1250 +vt 1.0000 0.5000 +vt 0.0000 0.5000 +vt 0.0001 0.0001 +vt 1.0000 0.0000 +vt 1.0000 0.5000 +vt 0.0000 0.5000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 -0.0000 +usemtl none_NONE +s 1 +f 25/43/7 29/44/7 30/45/7 26/46/7 +f 28/47/7 32/48/7 31/49/7 27/50/7 +usemtl none +f 25/51/8 26/52/8 27/53/8 28/47/8 +f 29/54/8 30/55/8 31/56/8 32/48/8 +f 25/51/9 29/57/9 32/58/9 28/59/9 +f 26/46/9 30/60/9 31/61/9 27/62/9 +o nodebox4.003 +v -0.248335 -0.500045 0.508619 +v -0.498333 -0.500045 0.509533 +v -0.498334 -0.250045 0.509533 +v -0.248335 -0.250045 0.508619 +v -0.251992 -0.500045 -0.491375 +v -0.501991 -0.500045 -0.490460 +v -0.501991 -0.250045 -0.490460 +v -0.251992 -0.250045 -0.491375 +v -0.498333 -0.500045 0.509533 +v -0.498334 -0.250045 0.509533 +v -0.501991 -0.250045 -0.490460 +v -0.501991 -0.500045 -0.490460 +vt 0.0000 0.7500 +vt 0.0000 0.5000 +vt 0.2500 0.5000 +vt 0.2500 0.7500 +vt 0.0000 0.7500 +vt 0.0000 0.5000 +vt 0.2500 0.5000 +vt 0.2500 0.7500 +vt 1.0000 0.7500 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 0.7500 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.7500 +vt 1.0000 0.7500 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.7500 +vn -0.0037 -0.0000 -1.0000 +vn -1.0000 0.0000 0.0037 +vn -0.0000 -1.0000 -0.0000 +usemtl none +s 1 +f 33/63/10 34/64/10 35/65/10 36/66/10 +f 37/67/10 38/68/10 39/69/10 40/70/10 +f 33/71/11 36/72/11 40/73/11 37/67/11 +f 33/71/12 34/74/12 38/75/12 37/67/12 +f 36/76/12 35/77/12 39/78/12 40/79/12 +f 41/80/11 42/81/11 43/82/11 44/83/11 +o nodebox4.002 +v 0.499948 -0.500045 0.505882 +v 0.249950 -0.500045 0.506796 +v 0.249950 -0.250045 0.506796 +v 0.499948 -0.250045 0.505882 +v 0.496291 -0.500045 -0.494111 +v 0.246293 -0.500045 -0.493197 +v 0.246293 -0.250045 -0.493197 +v 0.496291 -0.250045 -0.494111 +v 0.249950 -0.500045 0.506796 +v 0.249950 -0.250045 0.506796 +v 0.246293 -0.250045 -0.493197 +v 0.246293 -0.500045 -0.493197 +vt 0.0000 0.7500 +vt 0.0000 0.5000 +vt 0.2500 0.5000 +vt 0.2500 0.7500 +vt 0.0000 0.7500 +vt 0.0000 0.5000 +vt 0.2500 0.5000 +vt 0.2500 0.7500 +vt 1.0000 0.7500 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 0.7500 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.7500 +vt 1.0000 0.7500 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.7500 +vn -0.0037 0.0000 -1.0000 +vn -1.0000 -0.0000 0.0037 +vn -0.0000 -1.0000 -0.0000 +usemtl none +s 1 +f 45/84/13 46/85/13 47/86/13 48/87/13 +f 49/88/13 50/89/13 51/90/13 52/91/13 +f 45/92/14 48/93/14 52/94/14 49/88/14 +f 45/92/15 46/95/15 50/96/15 49/88/15 +f 48/97/15 47/98/15 51/99/15 52/100/15 +f 53/101/14 54/102/14 55/103/14 56/104/14 diff --git a/mods/ITEMS/mcl_campfires/models/mcl_campfires_campfire1.mtl b/mods/ITEMS/mcl_campfires/models/mcl_campfires_campfire1.mtl new file mode 100644 index 000000000..7355efe9f --- /dev/null +++ b/mods/ITEMS/mcl_campfires/models/mcl_campfires_campfire1.mtl @@ -0,0 +1,35 @@ +# Blender MTL File: 'campfire.blend' +# Material Count: 3 + +newmtl Material.001 +Ns 96.078431 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.000000 +d 1.000000 +illum 2 +map_Kd G:\minetest-0.4.16-win641\textures\Pixel Perfection v4.0\mcl_campfire_fire.png + +newmtl none +Ns 96.078431 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.000000 +d 1.000000 +illum 2 +map_Kd \home\nathan\Downloads\mcl_campfire_log.png + +newmtl none_NONE +Ns 96.078431 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.000000 +d 1.000000 +illum 2 +map_Kd \\home\\nathan\\Downloads\\mcl_campfire_log.png diff --git a/mods/ITEMS/mcl_campfires/models/mcl_campfires_campfire1.obj b/mods/ITEMS/mcl_campfires/models/mcl_campfires_campfire1.obj new file mode 100644 index 000000000..92a377303 --- /dev/null +++ b/mods/ITEMS/mcl_campfires/models/mcl_campfires_campfire1.obj @@ -0,0 +1,248 @@ +# Blender v2.78 (sub 0) OBJ File: 'campfire.blend' +# www.blender.org +mtllib campfire1.mtl +o nodebox4.005_nodebox4.006 +v 0.243779 -0.499707 -0.497529 +v 0.493779 -0.499707 -0.497421 +v 0.493779 -0.249707 -0.497421 +v 0.243779 -0.249707 -0.497529 +v 0.243349 -0.499707 0.502471 +v 0.493349 -0.499707 0.502578 +v 0.493349 -0.249707 0.502578 +v 0.243349 -0.249707 0.502471 +v 0.493779 -0.499707 -0.497421 +v 0.493779 -0.249707 -0.497421 +v 0.493349 -0.499707 0.502578 +v 0.493349 -0.249707 0.502578 +vt -0.0000 0.7500 +vt -0.0000 0.5000 +vt 0.2500 0.5000 +vt 0.2500 0.7500 +vt -0.0000 0.7500 +vt -0.0000 0.5000 +vt 0.2500 0.5000 +vt 0.2500 0.7500 +vt 1.0000 0.7500 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 0.7500 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt -0.0000 0.7500 +vt 1.0000 0.7500 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt -0.0000 0.7500 +vn -0.0004 0.0000 1.0000 +vn 1.0000 -0.0000 0.0004 +vn -0.0000 -1.0000 0.0000 +usemtl none +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/1 6/6/1 7/7/1 8/8/1 +f 1/9/2 4/10/2 8/11/2 5/5/2 +f 1/9/3 2/12/3 6/13/3 5/5/3 +f 4/14/3 3/15/3 7/16/3 8/17/3 +f 9/18/2 10/19/2 12/20/2 11/21/2 +o nodebox4.004_nodebox4.005 +v -0.500021 -0.499707 -0.497848 +v -0.250021 -0.499707 -0.497741 +v -0.250021 -0.249707 -0.497741 +v -0.500021 -0.249707 -0.497848 +v -0.500451 -0.499707 0.502152 +v -0.250451 -0.499707 0.502259 +v -0.250451 -0.249707 0.502259 +v -0.500451 -0.249707 0.502152 +v -0.250021 -0.499707 -0.497741 +v -0.250021 -0.249707 -0.497741 +v -0.250451 -0.499707 0.502259 +v -0.250451 -0.249707 0.502259 +vt -0.0000 0.7500 +vt -0.0000 0.5000 +vt 0.2500 0.5000 +vt 0.2500 0.7500 +vt -0.0000 0.7500 +vt -0.0000 0.5000 +vt 0.2500 0.5000 +vt 0.2500 0.7500 +vt 1.0000 0.7500 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 0.7500 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt -0.0000 0.7500 +vt 1.0000 0.7500 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt -0.0000 0.7500 +vn -0.0004 0.0000 1.0000 +vn 1.0000 -0.0000 0.0004 +vn -0.0000 -1.0000 0.0000 +usemtl none +s off +f 13/22/4 14/23/4 15/24/4 16/25/4 +f 17/26/4 18/27/4 19/28/4 20/29/4 +f 13/30/5 16/31/5 20/32/5 17/26/5 +f 13/30/6 14/33/6 18/34/6 17/26/6 +f 16/35/6 15/36/6 19/37/6 20/38/6 +f 21/39/5 22/40/5 24/41/5 23/42/5 +o nodebox4.001_nodebox4.004 +v 0.500000 -0.312500 -0.493800 +v 0.500000 -0.312500 -0.243800 +v 0.500000 -0.062500 -0.243800 +v 0.500000 -0.062500 -0.493800 +v -0.500000 -0.312500 -0.493800 +v -0.500000 -0.312500 -0.243800 +v -0.500000 -0.062500 -0.243800 +v -0.500000 -0.062500 -0.493800 +v 0.500000 -0.312500 -0.243800 +v 0.500000 -0.062500 -0.243800 +v -0.500000 -0.312500 -0.243800 +v -0.500000 -0.062500 -0.243800 +vt 0.0000 0.7500 +vt 0.0000 0.5000 +vt 0.2500 0.5000 +vt 0.2500 0.7500 +vt 0.0000 0.7500 +vt 0.0000 0.5000 +vt 0.2500 0.5000 +vt 0.2500 0.7500 +vt 1.0000 0.7500 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 0.7500 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.7500 +vt 1.0000 0.7500 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.7500 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 -1.0000 -0.0000 +usemtl none +s off +f 25/43/7 26/44/7 27/45/7 28/46/7 +f 29/47/7 30/48/7 31/49/7 32/50/7 +f 25/51/8 28/52/8 32/53/8 29/47/8 +f 25/51/9 26/54/9 30/55/9 29/47/9 +f 28/56/9 27/57/9 31/58/9 32/59/9 +f 33/60/8 34/61/8 36/62/8 35/63/8 +o Plane +v -0.311754 -0.438770 -0.196249 +v 0.276360 -0.438621 0.247948 +v -0.311276 0.135801 -0.196634 +v 0.276838 0.135950 0.247562 +v -0.274993 -0.438696 0.270317 +v 0.240407 -0.438696 -0.218656 +v -0.275322 0.135875 0.269969 +v 0.240077 0.135875 -0.219003 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt -0.0000 1.0000 +vn -0.6027 0.0010 0.7980 +vn 0.6883 0.0008 0.7255 +usemtl Material.001 +s off +f 37/64/10 38/65/10 40/66/10 39/67/10 +f 41/68/11 42/69/11 44/70/11 43/71/11 +o nodebox3 +v 0.250000 -0.500000 -0.500000 +v 0.250000 -0.500000 0.500000 +v 0.250000 -0.437500 0.500000 +v 0.250000 -0.437500 -0.500000 +v -0.250000 -0.500000 -0.500000 +v -0.250000 -0.500000 0.500000 +v -0.250000 -0.437500 0.500000 +v -0.250000 -0.437500 -0.500000 +vt 1.0000 0.0000 +vt 1.0000 0.0625 +vt 0.0000 0.0625 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 0.0625 +vt 0.0000 0.0625 +vt 0.0000 0.0000 +vt 1.0000 0.4375 +vt 0.0000 0.4375 +vt 0.0001 0.0001 +vt 0.9999 0.0001 +vt 1.0000 0.5000 +vt 0.0000 0.5000 +vt 0.0001 0.0001 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 -0.0000 +vn -1.0000 0.0000 0.0000 +usemtl none +s off +f 45/72/12 48/73/12 52/74/12 49/75/12 +f 46/76/12 47/77/12 51/78/12 50/79/12 +f 45/72/13 46/80/13 50/81/13 49/82/13 +f 48/83/13 47/84/13 51/85/13 52/86/13 +usemtl none_NONE +f 45/87/14 46/88/14 47/89/14 48/90/14 +f 49/75/14 50/79/14 51/91/14 52/92/14 +o nodebox4 +v 0.500000 -0.312500 0.250000 +v 0.500000 -0.312500 0.500000 +v 0.500000 -0.062500 0.500000 +v 0.500000 -0.062500 0.250000 +v -0.500000 -0.312500 0.250000 +v -0.500000 -0.312500 0.500000 +v -0.500000 -0.062500 0.500000 +v -0.500000 -0.062500 0.250000 +v 0.500000 -0.312500 0.500000 +v 0.500000 -0.062500 0.500000 +v -0.500000 -0.312500 0.500000 +v -0.500000 -0.062500 0.500000 +vt -0.0000 0.7500 +vt 0.0000 0.5000 +vt 0.2500 0.5000 +vt 0.2500 0.7500 +vt -0.0000 0.7500 +vt -0.0000 0.5000 +vt 0.2500 0.5000 +vt 0.2500 0.7500 +vt 1.0000 0.7500 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 0.7500 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt -0.0000 0.7500 +vt 1.0000 0.7500 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt -0.0000 0.7500 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 -1.0000 -0.0000 +usemtl none +s off +f 53/93/15 54/94/15 55/95/15 56/96/15 +f 57/97/15 58/98/15 59/99/15 60/100/15 +f 53/101/16 56/102/16 60/103/16 57/97/16 +f 53/101/17 54/104/17 58/105/17 57/97/17 +f 56/106/17 55/107/17 59/108/17 60/109/17 +f 61/110/16 62/111/16 64/112/16 63/113/16 diff --git a/mods/ITEMS/mcl_campfires/models/mcl_campfires_campfire_lit.obj b/mods/ITEMS/mcl_campfires/models/mcl_campfires_campfire_lit.obj new file mode 100644 index 000000000..a17acc05f --- /dev/null +++ b/mods/ITEMS/mcl_campfires/models/mcl_campfires_campfire_lit.obj @@ -0,0 +1,225 @@ +# Blender v2.79 (sub 7) OBJ File: 'campfire.blend' +# www.blender.org +o Plane +v -0.240246 -0.438696 -0.141059 +v 0.205043 -0.438696 0.192756 +v -0.239959 0.135875 -0.141442 +v 0.205331 0.135875 0.192373 +v -0.216088 -0.438696 0.214432 +v 0.181502 -0.438696 -0.162771 +v -0.216417 0.135875 0.214085 +v 0.181172 0.135875 -0.163119 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt -0.000000 1.000000 +vn -0.5998 0.0008 0.8001 +vn 0.6883 0.0008 0.7255 +g Plane_Plane_Material.001 +s off +f 1/1/1 2/2/1 4/3/1 3/4/1 +f 5/5/2 6/6/2 8/7/2 7/8/2 +o nodebox3 +v 0.250000 -0.500000 -0.500000 +v 0.250000 -0.500000 0.500000 +v 0.250000 -0.437500 0.500000 +v 0.250000 -0.437500 -0.500000 +v -0.250000 -0.500000 -0.500000 +v -0.250000 -0.500000 0.500000 +v -0.250000 -0.437500 0.500000 +v -0.250000 -0.437500 -0.500000 +v 0.243779 -0.499707 -0.497529 +v 0.493779 -0.499707 -0.497421 +v 0.493779 -0.249707 -0.497421 +v 0.243779 -0.249707 -0.497529 +v 0.243349 -0.499707 0.502471 +v 0.493349 -0.499707 0.502579 +v 0.493349 -0.249707 0.502578 +v 0.243349 -0.249707 0.502471 +v 0.493779 -0.499707 -0.497421 +v 0.493779 -0.249707 -0.497421 +v 0.493349 -0.499707 0.502579 +v 0.493349 -0.249707 0.502578 +v -0.500021 -0.499707 -0.497848 +v -0.250021 -0.499707 -0.497741 +v -0.250021 -0.249707 -0.497741 +v -0.500021 -0.249707 -0.497848 +v -0.500451 -0.499707 0.502152 +v -0.250451 -0.499707 0.502259 +v -0.250451 -0.249707 0.502259 +v -0.500451 -0.249707 0.502152 +v -0.250021 -0.499707 -0.497741 +v -0.250021 -0.249707 -0.497741 +v -0.250451 -0.499707 0.502259 +v -0.250451 -0.249707 0.502259 +v 0.500000 -0.312500 -0.493800 +v 0.500000 -0.312500 -0.243800 +v 0.500000 -0.062500 -0.243800 +v 0.500000 -0.062500 -0.493800 +v -0.500000 -0.312500 -0.493800 +v -0.500000 -0.312500 -0.243800 +v -0.500000 -0.062500 -0.243800 +v -0.500000 -0.062500 -0.493800 +v 0.500000 -0.312500 -0.243800 +v 0.500000 -0.062500 -0.243800 +v -0.500000 -0.312500 -0.243800 +v -0.500000 -0.062500 -0.243800 +v 0.500000 -0.312500 0.250000 +v 0.500000 -0.312500 0.500000 +v 0.500000 -0.062500 0.500000 +v 0.500000 -0.062500 0.250000 +v -0.500000 -0.312500 0.250000 +v -0.500000 -0.312500 0.500000 +v -0.500000 -0.062500 0.500000 +v -0.500000 -0.062500 0.250000 +v 0.500000 -0.312500 0.500000 +v 0.500000 -0.062500 0.500000 +v -0.500000 -0.312500 0.500000 +v -0.500000 -0.062500 0.500000 +vt 0.999982 0.000018 +vt 1.000000 0.062500 +vt 0.000000 0.062500 +vt 0.000018 0.000018 +vt 0.999982 0.000018 +vt 1.000000 0.062500 +vt 0.000000 0.062500 +vt 0.000018 0.000018 +vt 1.000000 0.437500 +vt 0.000000 0.437500 +vt 0.000071 0.000071 +vt 0.999929 0.000071 +vt 1.000000 0.500000 +vt 0.000000 0.500000 +vt 0.000071 0.000071 +vt -0.000000 0.750000 +vt -0.000000 0.500000 +vt 0.250000 0.500000 +vt 0.250000 0.750000 +vt -0.000000 0.750000 +vt -0.000000 0.500000 +vt 0.250000 0.500000 +vt 0.250000 0.750000 +vt 1.000000 0.750000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 1.000000 0.750000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt -0.000000 0.750000 +vt 1.000000 0.750000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt -0.000000 0.750000 +vt -0.000000 0.750000 +vt -0.000000 0.500000 +vt 0.250000 0.500000 +vt 0.250000 0.750000 +vt -0.000000 0.750000 +vt -0.000000 0.500000 +vt 0.250000 0.500000 +vt 0.250000 0.750000 +vt 1.000000 0.750000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 1.000000 0.750000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt -0.000000 0.750000 +vt 1.000000 0.750000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt -0.000000 0.750000 +vt 0.000000 0.750000 +vt 0.000000 0.500000 +vt 0.250000 0.500000 +vt 0.250000 0.750000 +vt 0.000000 0.750000 +vt 0.000000 0.500000 +vt 0.250000 0.500000 +vt 0.250000 0.750000 +vt 1.000000 0.750000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 1.000000 0.750000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.750000 +vt 1.000000 0.750000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.750000 +vt -0.000000 0.750000 +vt 0.000000 0.500000 +vt 0.250000 0.500000 +vt 0.250000 0.750000 +vt -0.000000 0.750000 +vt -0.000000 0.500000 +vt 0.250000 0.500000 +vt 0.250000 0.750000 +vt 1.000000 0.750000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 1.000000 0.750000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt -0.000000 0.750000 +vt 1.000000 0.750000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt -0.000000 0.750000 +vt 0.000000 0.000000 +vt 0.000000 0.000000 +vt 0.000000 0.000000 +vt 0.000000 0.000000 +vt 0.000000 0.000000 +vt 0.000000 0.000000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 -0.0000 +vn -0.0004 0.0000 1.0000 +vn 1.0000 -0.0000 0.0004 +vn -1.0000 0.0000 0.0000 +g nodebox3_nodebox3_none +s off +f 9/9/3 12/10/3 16/11/3 13/12/3 +f 10/13/3 11/14/3 15/15/3 14/16/3 +f 9/9/4 10/17/4 14/18/4 13/19/4 +f 12/20/4 11/21/4 15/22/4 16/23/4 +f 17/24/5 18/25/5 19/26/5 20/27/5 +f 21/28/5 22/29/5 23/30/5 24/31/5 +f 17/32/6 20/33/6 24/34/6 21/28/6 +f 17/32/4 18/35/4 22/36/4 21/28/4 +f 20/37/4 19/38/4 23/39/4 24/40/4 +f 25/41/6 26/42/6 28/43/6 27/44/6 +f 29/45/5 30/46/5 31/47/5 32/48/5 +f 33/49/5 34/50/5 35/51/5 36/52/5 +f 29/53/6 32/54/6 36/55/6 33/49/6 +f 29/53/4 30/56/4 34/57/4 33/49/4 +f 32/58/4 31/59/4 35/60/4 36/61/4 +f 37/62/6 38/63/6 40/64/6 39/65/6 +f 41/66/7 42/67/7 43/68/7 44/69/7 +f 45/70/7 46/71/7 47/72/7 48/73/7 +f 41/74/3 44/75/3 48/76/3 45/70/3 +f 41/74/4 42/77/4 46/78/4 45/70/4 +f 44/79/4 43/80/4 47/81/4 48/82/4 +f 49/83/3 50/84/3 52/85/3 51/86/3 +f 53/87/7 54/88/7 55/89/7 56/90/7 +f 57/91/7 58/92/7 59/93/7 60/94/7 +f 53/95/3 56/96/3 60/97/3 57/91/3 +f 53/95/4 54/98/4 58/99/4 57/91/4 +f 56/100/4 55/101/4 59/102/4 60/103/4 +f 61/104/3 62/105/3 64/106/3 63/107/3 +g nodebox3_nodebox3_none_NONE +f 9/108/7 10/109/7 11/110/7 12/111/7 +f 13/12/7 14/16/7 15/112/7 16/113/7 diff --git a/mods/ITEMS/mcl_campfires/textures/mcl_campfires_campfire_fire.png b/mods/ITEMS/mcl_campfires/textures/mcl_campfires_campfire_fire.png new file mode 100644 index 0000000000000000000000000000000000000000..d1288ec9d8eed37ece9dcc02db81f1c867fca841 GIT binary patch literal 533 zcmV+w0_y#VP)#P3$`zP_=*Z=?k0d!JMQvg8b*k%9#00Cl4 zM??UK1szBL000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2jd3>2Q3&^Ph9r^00C`D zL_t(I%axSfio+lfMn^^1%luI2Wf~EBnT-f}jG_p>PAh?Z?9I+-c9S;C?%d>Hj5+;g zQUHJfa`mt;QSOP`7C3+*5ZuxxSx*Q|Uc!jb+VGCgGbw{VHp=XjVz^sZnpEe%$>qRcIER>Ow zL$!mqq0R&3D6&p_k$q;e_RHJ5pTNv1_UO~U@DcEj$|KHs%wERx9fSuC3ADkZDqp^@ zhQ_%4$ZcAoiKSos@A0gSyGeu6?XOxc-T7?b1iIlT>0QQ#5U?Yu}9~m-+Nxe zHtKNW7W8)iRIuG~Wy{pK(lq(lKgCaSp5E~Qc>KaIUJznCjZ%IP0U`{O$s5%3dty(l#fPH iFl%}_uT=ickNpWeIjzlmgNgP40000<{97<5HgbW?9;ba!ELWdLwtX>N2bZe?^J zG%hhNHDpIvQUCw~sYygZR9HvtmP<-qK@f%;+(h;ek)Rj@K2QW z9LmP#s4lN;)!ErkK?Fn3i49u(yc(nrd<&3`v_nO{w)`qdVj^%w15O0UAcFY%IQ63% ze2|O1YZL(a{?%c}PjG7i1!d`!0oXDR5E-J9LKKH&6*zK2g0ba!p^E@yHUL0|gU%8K z!(+n-Uwonk7zKz7>I7yonezYN2lm<92b7O2CcehrK45STl9N^-^@H{SuTnk-L#J<4 z@P76I{k?b}*eB;$J^XPf-Y#w%L@@N6k1vltaghv=jZEBcz&Ai3$XkjZxV8^)BtX6c z`O`KCHmYeY=jiYd0Kh%jAe^lQ6qIGAoE4juz-O6CChh}H17UNh+9Lp&4S<2+ptD55 z4j3PN@rf2-6d6%U@Wx3%SPL8)ZoJ`fC#Ezb*|2*5xLpkw}&)xmQL p#3x#Cst6Dn)CtUFvU_>8-T^Ov;kHotZAbtB002ovPDHLkV1k~NUfcix literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_campfires/textures/mcl_campfires_fire1.png b/mods/ITEMS/mcl_campfires/textures/mcl_campfires_fire1.png new file mode 100644 index 0000000000000000000000000000000000000000..865d6e3e0e1a16ef63b1aca42c0de707aa4683b5 GIT binary patch literal 889 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 Date: Mon, 4 Jul 2022 20:15:00 -0600 Subject: [PATCH 271/357] Added Campfire to Fisherman Villager Trades --- mods/ENTITIES/mobs_mc/villager.lua | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/villager.lua b/mods/ENTITIES/mobs_mc/villager.lua index e447192c3..af517a990 100644 --- a/mods/ENTITIES/mobs_mc/villager.lua +++ b/mods/ENTITIES/mobs_mc/villager.lua @@ -136,8 +136,7 @@ local professions = { { { { "mcl_fishing:fish_raw", 6, 15,}, E1 }, { { "mcl_fishing:salmon_raw", 6, 6, "mcl_core:emerald", 1, 1 },{ "mcl_fishing:salmon_cooked", 6, 6 } }, - -- FIXME missing campfire - -- {{ "mcl_core:emerald", 1, 2 },{"mcl_campfires:campfire",1,1} }, + { { "mcl_core:emerald", 1, 2 },{"mcl_campfires:campfire_lit",1,1} }, }, { { { "mcl_fishing:salmon_raw", 6, 13,}, E1 }, -- 2.40.1 From 5de3c7977c0f87de98fc8ba9a979e4fb41b9d2ff Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Tue, 5 Jul 2022 11:54:14 -0600 Subject: [PATCH 272/357] Campfire Inventory Textures by RandomLegoBrick --- .../textures/mcl_campfires_campfire_inv.png | Bin 544 -> 534 bytes .../mcl_campfires_soul_campfire_inv.png | Bin 540 -> 531 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/mods/ITEMS/mcl_campfires/textures/mcl_campfires_campfire_inv.png b/mods/ITEMS/mcl_campfires/textures/mcl_campfires_campfire_inv.png index 2b13fde6355e5630e79ee72ef0468bfc6a7160a9..6d8ee3c06fb1bba53403dc4405607f1c1f1e23e6 100644 GIT binary patch delta 508 zcmVpGt4TybR5(wyk*n|oI8Vm z)zxH#8EHd_MrA{AOx(R9vH{))e-=`nYocQ2--&F^oLV_#=J?uPV zGj;)A#A{?UKjs=2r1$4ePJJS?DT|+RUrP?CXOx+1kNQzk7y};b{ljXA}m>Ns4 za5&6nA3ONE)_-hj^yn3f?f~NPxYdM{$lR(p(CJsOoVr6kpT|Z_{_^3bSA)M%`y%z^O%UXA`}X7Gj%s#G85RV7w}wq=TMT}h{$Lq&=ho7 z$YwAwPeoY{GtG(aHn=2_*A`!^5PpU6pB=DORPl2Df4_~d(ZOzLBJ;-W3G%y+)|7H0000U;qFCtw}^dR5;7ElTT|CK^Vq=v)Rpt>~0BLNDeI?JQM{% z7LPf|LVLIg8CKw0)7Jz-aQlq@l@$edI%zj3M~zdpnuYAVmG^+{W~7kq*PyGeu6?XOx zc-T7?b1iIlTz~oCIK(#UJh4aTq~Cj9!#3)0;}-OG|5UKuab?TYxY9KF*gwTja-QDt z0C@buX1WLP`u!JPzIiKV8QfiO%VX~cwxzRwION*u5?&BuJB?C)5CX7&IAk290Bmlw z<;+5yWdQUC5iL_=9Hj(tO6QRzN>U8HN|+S1OpX2^B7cZeYN~oZgSxKr;j1_Ew$`*! z5PbS}!g!L<8~Oxs+1=1J!ZbYt=)Y(c6jmBbNGYjl3RP9GY#B5SgQ_N|s%2z;l=FQY zoB{kvOjby;JSR$0B;`#CA;=2JD4dj!Mo}_j52|PKi&3l81_5c6?07*qo IM6N<$g1+nK2mk;8 diff --git a/mods/ITEMS/mcl_campfires/textures/mcl_campfires_soul_campfire_inv.png b/mods/ITEMS/mcl_campfires/textures/mcl_campfires_soul_campfire_inv.png index 0706d6628a7bd7453f9bf878bf10992be0a27188..88c7a6e4c77392461c1ac5e0494ce505c06d822a 100644 GIT binary patch delta 492 zcmVuwXoXO0+@4k1=J@*a%6@SvvnK09qkj>Z<5iKo# zBh(T^UM^Q#iZnTBJSc5!a=x8@L^u-R+IKVw&_NQBR#pY_S+fevgu2b_E1CqfNJ!#t z{!U(7oyo;dWBfS6ou&c({RmIba;>pDJ8OVsM$Apd#g&#pG#bU;;!?e{MJ5MrlM|f# zd_E)+3Fh*L$bUiAf!;0^TgeOxg#uD*>t8NzaA6*~Tn>Ri026(799*Zde{v!52>1DC z_}iVhye(ih7GxJhrta2DWD@r3MZAduT}qwkab-Gq1Qv*o#6-Z;hH^zm$lC!S z1Y8aoiru*5*Ea#hA=TH#l8#g+i{ta8AwU=(9TF8?hhnoq)EUSIlAyamssCW z=jCYUCCFAsjRQJU#rj3?!I7Cb2t>l;d}tSbEdBHnZx;{jUI z6`qvfTr7Y`Do(R;s)Y}&7R=1x-M(|8x>#BL10sGuEG^C{KL~NGDo^e`z>~6gymR9k zj#UNV@rzgD1b<*@aZc53gXx;hyY?ZyWXPMfrvO}EzRS@az{~9p&tJb4g@v2*v+9%o z182fybFa&lOOyCPNYic5bQ}0V2*BoEmwuE2aBE>!0q6j6mI2T{h^X5J{U{}fQ??ea z5+x~?Std+I)NO Date: Tue, 5 Jul 2022 12:07:03 -0600 Subject: [PATCH 273/357] Fixed Crafting Recipes --- mods/ITEMS/mcl_campfires/init.lua | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/mods/ITEMS/mcl_campfires/init.lua b/mods/ITEMS/mcl_campfires/init.lua index ac5fa22fc..957182743 100644 --- a/mods/ITEMS/mcl_campfires/init.lua +++ b/mods/ITEMS/mcl_campfires/init.lua @@ -104,7 +104,7 @@ minetest.register_craft({ output = "mcl_campfires:campfire_lit", recipe = { { "", "mcl_core:stick", "" }, - { "mcl_core:stick", "mcl_core:charcoal_lump", "mcl_core:stick" }, + { "mcl_core:stick", "group:coal", "mcl_core:stick" }, { "group:tree", "group:tree", "group:tree" }, } }) @@ -113,16 +113,7 @@ minetest.register_craft({ output = "mcl_campfires:soul_campfire_lit", recipe = { { "", "mcl_core:stick", "" }, - { "mcl_core:stick", "mcl_blackstone:soul_soil", "mcl_core:stick" }, - { "group:tree", "group:tree", "group:tree" }, - } -}) - -minetest.register_craft({ - output = "mcl_campfires:soul_campfire_lit", - recipe = { - { "", "mcl_core:stick", "" }, - { "mcl_core:stick", "mcl_nether:soul_sand", "mcl_core:stick" }, + { "mcl_core:stick", "group:soul_block", "mcl_core:stick" }, { "group:tree", "group:tree", "group:tree" }, } }) -- 2.40.1 From 67494f8905d496c7a59932ab8c65956f766f27ec Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Tue, 5 Jul 2022 15:38:54 -0600 Subject: [PATCH 274/357] Added Burning Players and Entities to Campfires. --- mods/ITEMS/mcl_campfires/init.lua | 33 +++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/mods/ITEMS/mcl_campfires/init.lua b/mods/ITEMS/mcl_campfires/init.lua index 957182743..fbe871e60 100644 --- a/mods/ITEMS/mcl_campfires/init.lua +++ b/mods/ITEMS/mcl_campfires/init.lua @@ -8,11 +8,11 @@ -- * Add Cooking Meat -- * Add Working Sounds -S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator(minetest.get_current_modname()) -campfires = { -{ name = "Campfire", lightlevel = 15, techname = "campfire", damage = 1, drops = "mcl_core:charcoal_lump 2" }, -{ name = "Soul Campfire", lightlevel = 10, techname = "soul_campfire", damage = 2, drops = "mcl_blackstone:soul_soil" }, +local campfires = { + { name = "Campfire", lightlevel = 15, techname = "campfire", damage = 1, drops = "mcl_core:charcoal_lump 2" }, + { name = "Soul Campfire", lightlevel = 10, techname = "soul_campfire", damage = 2, drops = "mcl_blackstone:soul_soil" }, } for _, campfire in pairs(campfires) do @@ -25,7 +25,7 @@ for _, campfire in pairs(campfires) do drawtype = "mesh", mesh = "mcl_campfires_campfire.obj", tiles = {{name="mcl_campfires_log.png"},}, - groups = { handy=1, axey=1, material_wood=1, not_in_creative_inventory=1 }, + groups = { handy=1, axey=1, material_wood=1, not_in_creative_inventory=1, campfire=1, }, paramtype = "light", paramtype2 = "facedir", on_rightclick = function (pos, node, player, itemstack, pointed_thing) @@ -73,7 +73,7 @@ for _, campfire in pairs(campfires) do length=2.0 }} }, - groups = { handy=1, axey=1, material_wood=1 }, + groups = { handy=1, axey=1, material_wood=1, campfire=1, lit_campfire=1 }, paramtype = "light", paramtype2 = "facedir", on_rightclick = function (pos, node, player, itemstack, pointed_thing) @@ -117,3 +117,24 @@ minetest.register_craft({ { "group:tree", "group:tree", "group:tree" }, } }) + +local etime = 0 +minetest.register_globalstep(function(dtime) + etime = dtime + etime + if etime < 0.5 then return end + etime = 0 + for _,pl in pairs(minetest.get_connected_players()) do + local n = minetest.find_node_near(pl:get_pos(),0.4,{"group:lit_campfire"},true) + if n then + mcl_burning.set_on_fire(pl, 5) + end + end + for _,ent in pairs(minetest.luaentities) do + if ent.object:get_pos() and ent.is_mob then + local n = minetest.find_node_near(ent.object:get_pos(),0.4,{"group:lit_campfire"},true) + if n then + mcl_burning.set_on_fire(ent.object, 5) + end + end + end +end) -- 2.40.1 From f0241bbf6ad3d8ebd5900827a7ecd1395a04d983 Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Tue, 5 Jul 2022 16:01:41 -0600 Subject: [PATCH 275/357] Added extinghuishing sound when extenguished with a shovel. --- mods/ITEMS/mcl_campfires/init.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/mods/ITEMS/mcl_campfires/init.lua b/mods/ITEMS/mcl_campfires/init.lua index fbe871e60..b4ff7d559 100644 --- a/mods/ITEMS/mcl_campfires/init.lua +++ b/mods/ITEMS/mcl_campfires/init.lua @@ -80,6 +80,7 @@ for _, campfire in pairs(campfires) do if player:get_wielded_item():get_name():find("shovel") then node.name = "mcl_campfires:" .. campfire.techname minetest.set_node(pos, node) + minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true) end end, drop = campfire.drops, -- 2.40.1 From 3c2633ee2c534682134b0e63bff649cd4a9dc874 Mon Sep 17 00:00:00 2001 From: cora Date: Wed, 6 Jul 2022 04:17:39 +0200 Subject: [PATCH 276/357] Simplify my own mess... remove code dupe i'll fix this in cauldrons too, promise --- mods/ITEMS/mcl_campfires/init.lua | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/mods/ITEMS/mcl_campfires/init.lua b/mods/ITEMS/mcl_campfires/init.lua index b4ff7d559..e51ec9f54 100644 --- a/mods/ITEMS/mcl_campfires/init.lua +++ b/mods/ITEMS/mcl_campfires/init.lua @@ -119,23 +119,27 @@ minetest.register_craft({ } }) +local function burn_in_campfire(obj) + local p = obj:get_pos() + if p then + local n = minetest.find_node_near(p,0.4,{"group:lit_campfire"},true) + if n then + mcl_burning.set_on_fire(obj, 5) + end + end +end + local etime = 0 minetest.register_globalstep(function(dtime) etime = dtime + etime if etime < 0.5 then return end etime = 0 for _,pl in pairs(minetest.get_connected_players()) do - local n = minetest.find_node_near(pl:get_pos(),0.4,{"group:lit_campfire"},true) - if n then - mcl_burning.set_on_fire(pl, 5) - end + burn_in_campfire(pl) end for _,ent in pairs(minetest.luaentities) do - if ent.object:get_pos() and ent.is_mob then - local n = minetest.find_node_near(ent.object:get_pos(),0.4,{"group:lit_campfire"},true) - if n then - mcl_burning.set_on_fire(ent.object, 5) - end + if ent.is_mob then + burn_in_campfire(ent.object) end end end) -- 2.40.1 From 0ecffaf47275184d6c6c73ce3c855fc32630aec7 Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Wed, 6 Jul 2022 16:38:38 -0600 Subject: [PATCH 277/357] Added README.md file to mcl_campfires --- mods/ITEMS/mcl_campfires/README.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 mods/ITEMS/mcl_campfires/README.md diff --git a/mods/ITEMS/mcl_campfires/README.md b/mods/ITEMS/mcl_campfires/README.md new file mode 100644 index 000000000..8747aa7e3 --- /dev/null +++ b/mods/ITEMS/mcl_campfires/README.md @@ -0,0 +1,21 @@ +mcl_campfires +=============== +Adds the campfire and its soul variant. + +License of code +--------------- +See the main MineClone 2 README.md file. +Authors: +Gerold55 - Code Start + Models? +PrairieWind - Improved and Cleaned Up Code, and added the soul campfire and crafting recipes. +cora - Added burning damage. + +License of media +---------------- +See the main MineClone 2 README.md file for license on most of the textures. + +For the following textures: +mcl_campfires_campfire_inv.png +mcl_campfires_soul_campfire_inv.png +License: CC0 1.0 Universal (CC0 1.0) +Author: RandomLegoBrick -- 2.40.1 From c26a9aded54dea2b33049cfacce146d7ee829880 Mon Sep 17 00:00:00 2001 From: TheRandomLegoBrick Date: Fri, 8 Jul 2022 09:18:42 -0700 Subject: [PATCH 278/357] Add mud sounds --- mods/ITEMS/mcl_mud/init.lua | 8 +++++++- mods/ITEMS/mcl_mud/mod.conf | 3 ++- mods/ITEMS/mcl_mud/sounds/mud_footsteps.ogg | Bin 0 -> 6071 bytes mods/ITEMS/mcl_mud/sounds/mud_place_dug.ogg | Bin 0 -> 5927 bytes 4 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 mods/ITEMS/mcl_mud/sounds/mud_footsteps.ogg create mode 100644 mods/ITEMS/mcl_mud/sounds/mud_place_dug.ogg diff --git a/mods/ITEMS/mcl_mud/init.lua b/mods/ITEMS/mcl_mud/init.lua index 787655a56..d1d1eb330 100644 --- a/mods/ITEMS/mcl_mud/init.lua +++ b/mods/ITEMS/mcl_mud/init.lua @@ -6,6 +6,11 @@ minetest.register_node("mcl_mud:mud", { _doc_items_hidden = false, tiles = {"mcl_mud.png"}, is_ground_content = true, + sounds = { + footstep = {name="mud_footsteps", gain=1}, + dug = {name="mud_place_dug", gain=1}, + place = {name="mud_place_dug", gain=1}, + }, groups = {handy=1,shovely=1, enderman_takable=1, building_block=1}, _mcl_blast_resistance = 0.5, _mcl_hardness = 0.5, @@ -22,7 +27,8 @@ minetest.register_node("mcl_mud:packed_mud", { _doc_items_longdesc = S("Packed mud is a decorative block used to craft mud bricks."), _doc_items_hidden = false, tiles = {"mcl_mud_packed_mud.png"}, - groups = {handy=1, pickaxey=1, enderman_takable=1, building_block=1}, + groups = {handy=1, pickaxey=1, building_block=1}, + sounds = mcl_sounds.node_sound_dirt_defaults(), _mcl_blast_resistance = 3, _mcl_hardness = 1, }) diff --git a/mods/ITEMS/mcl_mud/mod.conf b/mods/ITEMS/mcl_mud/mod.conf index f4cdb505a..70f48ef1e 100644 --- a/mods/ITEMS/mcl_mud/mod.conf +++ b/mods/ITEMS/mcl_mud/mod.conf @@ -1,3 +1,4 @@ name = mcl_mud author = TheRandomLegoBrick -description = Adds various mud blocks. \ No newline at end of file +description = Adds various mud blocks. +depends = mcl_sounds \ No newline at end of file diff --git a/mods/ITEMS/mcl_mud/sounds/mud_footsteps.ogg b/mods/ITEMS/mcl_mud/sounds/mud_footsteps.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e18c93965488f58b80d3c3eae619eb56195cdfa4 GIT binary patch literal 6071 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 GasLOUtF9dY literal 0 HcmV?d00001 -- 2.40.1 From dfd16d1110a2367437f0c85027e18b5e7805e76b Mon Sep 17 00:00:00 2001 From: TheRandomLegoBrick Date: Fri, 8 Jul 2022 10:02:06 -0700 Subject: [PATCH 279/357] Add license --- mods/ITEMS/mcl_mud/README.txt | 21 +++++++++++++++++++++ mods/ITEMS/mcl_mud/init.lua | 1 + 2 files changed, 22 insertions(+) create mode 100644 mods/ITEMS/mcl_mud/README.txt diff --git a/mods/ITEMS/mcl_mud/README.txt b/mods/ITEMS/mcl_mud/README.txt new file mode 100644 index 000000000..fe0a3f91c --- /dev/null +++ b/mods/ITEMS/mcl_mud/README.txt @@ -0,0 +1,21 @@ +License of Code +---------------- + +Author: TheRandomLegoBrick +License: GPLv3 +See https://www.gnu.org/licenses/gpl-3.0.en.html for further information + + +License of Media (textures & sounds) +------------------------------------- + +Author: TheRandomLegoBrick +Liscense: CC0 1.0 Universal (CC0 1.0) +Files: + mud_footsteps.ogg + mud_place_dug.ogg + mcl_mud_bricks.png + mcl_mud_packed_mud.png + mcl_mud.png + +See https://creativecommons.org/publicdomain/zero/1.0/legalcode for further information \ No newline at end of file diff --git a/mods/ITEMS/mcl_mud/init.lua b/mods/ITEMS/mcl_mud/init.lua index d1d1eb330..e938ae5f2 100644 --- a/mods/ITEMS/mcl_mud/init.lua +++ b/mods/ITEMS/mcl_mud/init.lua @@ -39,6 +39,7 @@ minetest.register_node("mcl_mud:mud_bricks", { _doc_items_hidden = false, tiles = {"mcl_mud_bricks.png"}, groups = {handy=1, pickaxey=1, building_block=1}, + sounds = mcl_sounds.node_sound_stone_defaults(), _mcl_blast_resistance = 3, _mcl_hardness = 1.5, }) -- 2.40.1 From 05186c9a197c36df06a0934c4eb1caef2f82640c Mon Sep 17 00:00:00 2001 From: TheRandomLegoBrick Date: Fri, 8 Jul 2022 10:31:38 -0700 Subject: [PATCH 280/357] Non-copyright-infringey mud texture --- mods/ITEMS/mcl_mud/textures/mcl_mud.png | Bin 483 -> 506 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/mods/ITEMS/mcl_mud/textures/mcl_mud.png b/mods/ITEMS/mcl_mud/textures/mcl_mud.png index 4952255ec168ad6395deafeb72caddbef7e6f356..6298311247dc0f003a207eaebf4dc69a68cd3465 100644 GIT binary patch delta 430 zcmV;f0a5Q07*qoM6N<$f^6;3eER6WU#`2{%%bQEMt#B4xEBvfJ$qm|j_Co5PX5 zNGT&VH%A+5D`2`_ePq_+ZOh8#Ib2=)+WQcK%CnNTLenihe|!L=0MG%0kkqCrj-=!x zpub^1LIU`3NPju_jLJNEP!0mdHvDnilJb&bMD#`RL%P>*n*WcB1XAV4pnML6jG}r0 zIJ${bkO-o#%-`7Qaxn)m2w$ B#<~Ci -- 2.40.1 From 98c48dab8caf45754e09869094f57a3cb68648ba Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 7 Jul 2022 12:46:44 +0200 Subject: [PATCH 281/357] abolish child labor --- mods/ENTITIES/mobs_mc/villager.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/mods/ENTITIES/mobs_mc/villager.lua b/mods/ENTITIES/mobs_mc/villager.lua index af517a990..65175166d 100644 --- a/mods/ENTITIES/mobs_mc/villager.lua +++ b/mods/ENTITIES/mobs_mc/villager.lua @@ -629,6 +629,7 @@ local function look_for_job(self) end local function get_a_job(self) + if self.child then return end local p = self.object:get_pos() local n = minetest.find_node_near(p,1,jobsites) if n and employ(self,n) then return true end -- 2.40.1 From 8fe40fcd2631affb078bee62bb3514ddd1f162d0 Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 7 Jul 2022 12:47:17 +0200 Subject: [PATCH 282/357] remove old debug line --- mods/ENTITIES/mobs_mc/villager.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/mods/ENTITIES/mobs_mc/villager.lua b/mods/ENTITIES/mobs_mc/villager.lua index 65175166d..6bf1bf545 100644 --- a/mods/ENTITIES/mobs_mc/villager.lua +++ b/mods/ENTITIES/mobs_mc/villager.lua @@ -1289,7 +1289,6 @@ mcl_mobs:register_mob("mobs_mc:villager", { return true --do not pick up end, on_rightclick = function(self, clicker) - local trg=vector.new(0,9,0) if self._jobsite then mcl_mobs:gopath(self,self._jobsite,function() --minetest.log("arrived at jobsite") -- 2.40.1 From bcb76f7bd2bd00c8fc8f851d8c71e71146a3125e Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 7 Jul 2022 12:47:27 +0200 Subject: [PATCH 283/357] correctly lock job when traded --- mods/ENTITIES/mobs_mc/villager.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mods/ENTITIES/mobs_mc/villager.lua b/mods/ENTITIES/mobs_mc/villager.lua index 6bf1bf545..e5d236890 100644 --- a/mods/ENTITIES/mobs_mc/villager.lua +++ b/mods/ENTITIES/mobs_mc/villager.lua @@ -642,6 +642,7 @@ local function check_jobsite(self) local m = minetest.get_meta(self._jobsite) if m:get_string("villager") ~= self._id then self._profession = "unemployed" + self._trades = nil set_textures(self) end end @@ -664,7 +665,6 @@ end local function init_trades(self, inv) local profession = professions[self._profession] local trade_tiers = profession.trades - self._traded = true if trade_tiers == nil then -- Empty trades self._trades = false @@ -1113,6 +1113,7 @@ local trade_inventory = { local trader = player_trading_with[name] local tradenum = player_tradenum[name] local trades + trader._traded = true if trader and trader._trades then trades = minetest.deserialize(trader._trades) end -- 2.40.1 From 08a1ecd879371cf82d326737cbb743097c312846 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 8 Jul 2022 02:03:18 +0200 Subject: [PATCH 284/357] Don't take extra bread when feeding --- mods/ENTITIES/mcl_mobs/api.lua | 4 ++-- mods/ENTITIES/mobs_mc/villager.lua | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 77f4193dd..3cab39b02 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -4357,7 +4357,7 @@ end -- feeding, taming and breeding (thanks blert2112) -function mcl_mobs:feed_tame(self, clicker, feed_count, breed, tame) +function mcl_mobs:feed_tame(self, clicker, feed_count, breed, tame, notake) if not self.follow then return false end @@ -4370,7 +4370,7 @@ function mcl_mobs:feed_tame(self, clicker, feed_count, breed, tame) local item = clicker:get_wielded_item() - item:take_item() + if not notake then item:take_item() end clicker:set_wielded_item(item) end diff --git a/mods/ENTITIES/mobs_mc/villager.lua b/mods/ENTITIES/mobs_mc/villager.lua index e5d236890..05f978ac3 100644 --- a/mods/ENTITIES/mobs_mc/villager.lua +++ b/mods/ENTITIES/mobs_mc/villager.lua @@ -1284,7 +1284,7 @@ mcl_mobs:register_mob("mobs_mc:villager", { end end if clicker then - mcl_mobs:feed_tame(self, clicker, 1, true, false) + mcl_mobs:feed_tame(self, clicker, 1, true, false, true) return end return true --do not pick up -- 2.40.1 From de9056ae62408eb48dbc1bbb3ea24569be48932e Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 8 Jul 2022 05:08:06 +0200 Subject: [PATCH 285/357] Fix child mobs collision boxes --- mods/ENTITIES/mcl_mobs/api.lua | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 3cab39b02..84b24c339 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -298,9 +298,13 @@ local function update_roll(self) if is_Fleckenstein then cbox[2], cbox[5] = -cbox[5], -cbox[2] + self.object:set_properties({collisionbox = cbox}) + -- This leads to child mobs having the wrong collisionbox + -- and seeing as it seems to be nothing but an easter egg + -- i've put it inside the if. Which just makes it be upside + -- down lol. end - self.object:set_properties({collisionbox = cbox}) end -- set and return valid yaw -- 2.40.1 From ae0eb85ffca4adbfac955dfd24e19c08f477f6b0 Mon Sep 17 00:00:00 2001 From: cora Date: Tue, 5 Jul 2022 03:49:46 +0200 Subject: [PATCH 286/357] Add salmon, cod and dolphin from mcl5 --- mods/ENTITIES/mcl_mobs/spawning.lua | 15 +- mods/ENTITIES/mobs_mc/cod.lua | 272 ++++++++++++++++++ mods/ENTITIES/mobs_mc/dolphin.lua | 252 ++++++++++++++++ mods/ENTITIES/mobs_mc/init.lua | 4 + .../mobs_mc/models/extra_mobs_cod.b3d | Bin 0 -> 9471 bytes .../mobs_mc/models/extra_mobs_dolphin.b3d | Bin 0 -> 30572 bytes .../mobs_mc/models/extra_mobs_salmon.b3d | Bin 0 -> 253657 bytes mods/ENTITIES/mobs_mc/salmon.lua | 227 +++++++++++++++ mods/ENTITIES/mobs_mc/squid.lua | 11 - .../mobs_mc/textures/extra_mobs_cod.png | Bin 0 -> 766 bytes .../mobs_mc/textures/extra_mobs_dolphin.png | Bin 0 -> 6359 bytes .../mobs_mc/textures/extra_mobs_salmon.png | Bin 0 -> 830 bytes .../textures/extra_mobs_spawn_icon_cod.png | Bin 0 -> 5897 bytes .../extra_mobs_spawn_icon_dolphin.png | Bin 0 -> 6551 bytes .../textures/extra_mobs_spawn_icon_salmon.png | Bin 0 -> 6264 bytes 15 files changed, 769 insertions(+), 12 deletions(-) create mode 100644 mods/ENTITIES/mobs_mc/cod.lua create mode 100644 mods/ENTITIES/mobs_mc/dolphin.lua create mode 100644 mods/ENTITIES/mobs_mc/models/extra_mobs_cod.b3d create mode 100644 mods/ENTITIES/mobs_mc/models/extra_mobs_dolphin.b3d create mode 100644 mods/ENTITIES/mobs_mc/models/extra_mobs_salmon.b3d create mode 100644 mods/ENTITIES/mobs_mc/salmon.lua create mode 100644 mods/ENTITIES/mobs_mc/textures/extra_mobs_cod.png create mode 100644 mods/ENTITIES/mobs_mc/textures/extra_mobs_dolphin.png create mode 100644 mods/ENTITIES/mobs_mc/textures/extra_mobs_salmon.png create mode 100644 mods/ENTITIES/mobs_mc/textures/extra_mobs_spawn_icon_cod.png create mode 100644 mods/ENTITIES/mobs_mc/textures/extra_mobs_spawn_icon_dolphin.png create mode 100644 mods/ENTITIES/mobs_mc/textures/extra_mobs_spawn_icon_salmon.png diff --git a/mods/ENTITIES/mcl_mobs/spawning.lua b/mods/ENTITIES/mcl_mobs/spawning.lua index faad27537..f8c94afb6 100644 --- a/mods/ENTITIES/mcl_mobs/spawning.lua +++ b/mods/ENTITIES/mcl_mobs/spawning.lua @@ -379,6 +379,13 @@ local function is_farm_animal(n) return n == "mobs_mc:pig" or n == "mobs_mc:cow" or n == "mobs_mc:sheep" or n == "mobs_mc:chicken" or n == "mobs_mc:horse" or n == "mobs_mc:donkey" end +local function get_water_spawn(p) + local nn = minetest.find_nodes_in_area(vector.offset(p,-2,-1,-2),vector.offset(p,2,-15,2),{"group:water"}) + if nn and #nn > 0 then + return nn[math.random(#nn)] + end +end + if mobs_spawn then local perlin_noise @@ -453,8 +460,14 @@ if mobs_spawn then and (mob_def.check_position and mob_def.check_position(spawning_position) or true) and (not is_farm_animal(mob_def.name) or is_grass) and (mob_type ~= "npc" or has_bed) - and (mob_def.type_of_spawning ~= water or is_water) + and (mob_def.type_of_spawning ~= "water" or is_water) then + if mob_def.type_of_spawning == "water" then + spawning_position = get_water_spawn(spawning_position) + if not spawning_position then + return + end + end --everything is correct, spawn mob local object = minetest.add_entity(spawning_position, mob_def.name) if object then diff --git a/mods/ENTITIES/mobs_mc/cod.lua b/mods/ENTITIES/mobs_mc/cod.lua new file mode 100644 index 000000000..96c9927c5 --- /dev/null +++ b/mods/ENTITIES/mobs_mc/cod.lua @@ -0,0 +1,272 @@ +--MCmobs v0.4 +--maikerumine +--made for MC like Survival game +--License for code WTFPL and otherwise stated in readmes + +local pi = math.pi +local atann = math.atan +local atan = function(x) + if not x or x ~= x then + return 0 + else + return atann(x) + end +end + +local dir_to_pitch = function(dir) + local dir2 = vector.normalize(dir) + local xz = math.abs(dir.x) + math.abs(dir.z) + return -math.atan2(-dir.y, xz) +end + +local function degrees(rad) + return rad * 180.0 / math.pi +end + +local S = minetest.get_translator("extra_mobs") + +--################### +--################### cod +--################### + +local cod = { + type = "animal", + spawn_class = "water", + can_despawn = true, + passive = true, + hp_min = 3, + hp_max = 3, + xp_min = 1, + xp_max = 3, + armor = 100, + rotate = 180, + tilt_swim = true, + collisionbox = {-0.3, 0.0, -0.3, 0.3, 0.79, 0.3}, + visual = "mesh", + mesh = "extra_mobs_cod.b3d", + textures = { + {"extra_mobs_cod.png"} + }, + sounds = { + }, + animation = { + stand_start = 1, + stand_end = 20, + walk_start = 1, + walk_end = 20, + run_start = 1, + run_end = 20, + }, + drops = { + {name = "mcl_fishing:fish_raw", + chance = 1, + min = 1, + max = 1,}, + {name = "mcl_dye:white", + chance = 20, + min = 1, + max = 1,}, + }, + visual_size = {x=3, y=3}, + makes_footstep_sound = false, + fly = true, + fly_in = { "mcl_core:water_source", "mclx_core:river_water_source" }, + breathes_in_water = true, + jump = false, + view_range = 16, + runaway = true, + fear_height = 4, + do_custom = function(self) + --[[ this is supposed to make them jump out the water but doesn't appear to work very well + self.object:set_bone_position("body", vector.new(0,1,0), vector.new(degrees(dir_to_pitch(self.object:get_velocity())) * -1 + 90,0,0)) + if minetest.get_item_group(self.standing_in, "water") ~= 0 then + if self.object:get_velocity().y < 5 then + self.object:add_velocity({ x = 0 , y = math.random(-.007, .007), z = 0 }) + end + end +--]] + for _,object in pairs(minetest.get_objects_inside_radius(self.object:get_pos(), 10)) do + local lp = object:get_pos() + local s = self.object:get_pos() + local vec = { + x = lp.x - s.x, + y = lp.y - s.y, + z = lp.z - s.z + } + if object and not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "mobs_mc:cod" then + self.state = "runaway" + self.object:set_rotation({x=0,y=(atan(vec.z / vec.x) + 3 * pi / 2) - self.rotate,z=0}) + end + end + end, + on_rightclick = function(self, clicker) + if clicker:get_wielded_item():get_name() == "mcl_buckets:bucket_water" then + --self.object:remove() + --clicker:set_wielded_item("mcl_fishing:bucket_cod") + --awards.unlock(clicker:get_player_name(), "mcl:tacticalFishing") + end + end +} + +mcl_mobs:register_mob("mobs_mc:cod", cod) + + +--spawning TODO: in schools + +local water = 0 + +mcl_mobs:spawn_specific( +"mobs_mc:cod", +"overworld", +"water", +{ +"Mesa", +"FlowerForest", +"Swampland", +"Taiga", +"ExtremeHills", +"Jungle", +"Savanna", +"BirchForest", +"MegaSpruceTaiga", +"MegaTaiga", +"ExtremeHills+", +"Forest", +"Plains", +"Desert", +"ColdTaiga", +"MushroomIsland", +"IcePlainsSpikes", +"SunflowerPlains", +"IcePlains", +"RoofedForest", +"ExtremeHills+_snowtop", +"MesaPlateauFM_grasstop", +"JungleEdgeM", +"ExtremeHillsM", +"JungleM", +"BirchForestM", +"MesaPlateauF", +"MesaPlateauFM", +"MesaPlateauF_grasstop", +"MesaBryce", +"JungleEdge", +"SavannaM", +"FlowerForest_beach", +"Forest_beach", +"StoneBeach", +"ColdTaiga_beach_water", +"Taiga_beach", +"Savanna_beach", +"Plains_beach", +"ExtremeHills_beach", +"ColdTaiga_beach", +"Swampland_shore", +"MushroomIslandShore", +"JungleM_shore", +"Jungle_shore", +"MesaPlateauFM_sandlevel", +"MesaPlateauF_sandlevel", +"MesaBryce_sandlevel", +"Mesa_sandlevel", +"RoofedForest_ocean", +"JungleEdgeM_ocean", +"BirchForestM_ocean", +"BirchForest_ocean", +"IcePlains_deep_ocean", +"Jungle_deep_ocean", +"Savanna_ocean", +"MesaPlateauF_ocean", +"ExtremeHillsM_deep_ocean", +"Savanna_deep_ocean", +"SunflowerPlains_ocean", +"Swampland_deep_ocean", +"Swampland_ocean", +"MegaSpruceTaiga_deep_ocean", +"ExtremeHillsM_ocean", +"JungleEdgeM_deep_ocean", +"SunflowerPlains_deep_ocean", +"BirchForest_deep_ocean", +"IcePlainsSpikes_ocean", +"Mesa_ocean", +"StoneBeach_ocean", +"Plains_deep_ocean", +"JungleEdge_deep_ocean", +"SavannaM_deep_ocean", +"Desert_deep_ocean", +"Mesa_deep_ocean", +"ColdTaiga_deep_ocean", +"Plains_ocean", +"MesaPlateauFM_ocean", +"Forest_deep_ocean", +"JungleM_deep_ocean", +"FlowerForest_deep_ocean", +"MushroomIsland_ocean", +"MegaTaiga_ocean", +"StoneBeach_deep_ocean", +"IcePlainsSpikes_deep_ocean", +"ColdTaiga_ocean", +"SavannaM_ocean", +"MesaPlateauF_deep_ocean", +"MesaBryce_deep_ocean", +"ExtremeHills+_deep_ocean", +"ExtremeHills_ocean", +"MushroomIsland_deep_ocean", +"Forest_ocean", +"MegaTaiga_deep_ocean", +"JungleEdge_ocean", +"MesaBryce_ocean", +"MegaSpruceTaiga_ocean", +"ExtremeHills+_ocean", +"Jungle_ocean", +"RoofedForest_deep_ocean", +"IcePlains_ocean", +"FlowerForest_ocean", +"ExtremeHills_deep_ocean", +"MesaPlateauFM_deep_ocean", +"Desert_ocean", +"Taiga_ocean", +"BirchForestM_deep_ocean", +"Taiga_deep_ocean", +"JungleM_ocean", +"FlowerForest_underground", +"JungleEdge_underground", +"StoneBeach_underground", +"MesaBryce_underground", +"Mesa_underground", +"RoofedForest_underground", +"Jungle_underground", +"Swampland_underground", +"MushroomIsland_underground", +"BirchForest_underground", +"Plains_underground", +"MesaPlateauF_underground", +"ExtremeHills_underground", +"MegaSpruceTaiga_underground", +"BirchForestM_underground", +"SavannaM_underground", +"MesaPlateauFM_underground", +"Desert_underground", +"Savanna_underground", +"Forest_underground", +"SunflowerPlains_underground", +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", +}, +0, +minetest.LIGHT_MAX+1, +30, +4000, +3, +water-16, +water+1) + +--spawn egg +mcl_mobs:register_egg("mobs_mc:cod", S("Cod"), "extra_mobs_spawn_icon_cod.png", 0) diff --git a/mods/ENTITIES/mobs_mc/dolphin.lua b/mods/ENTITIES/mobs_mc/dolphin.lua new file mode 100644 index 000000000..f991e7495 --- /dev/null +++ b/mods/ENTITIES/mobs_mc/dolphin.lua @@ -0,0 +1,252 @@ +--MCmobs v0.4 +--maikerumine +--made for MC like Survival game +--License for code WTFPL and otherwise stated in readmes + +local pi = math.pi +local atann = math.atan +local atan = function(x) + if not x or x ~= x then + return 0 + else + return atann(x) + end +end + +local dir_to_pitch = function(dir) + local dir2 = vector.normalize(dir) + local xz = math.abs(dir.x) + math.abs(dir.z) + return -math.atan2(-dir.y, xz) +end + +local function degrees(rad) + return rad * 180.0 / math.pi +end + +local S = minetest.get_translator("extra_mobs") + +--################### +--################### dolphin +--################### + +local dolphin = { + type = "monster", + spawn_class = "water", + can_despawn = true, + passive = true, + hp_min = 10, + hp_max = 10, + xp_min = 1, + xp_max = 3, + armor = 100, + walk_chance = 100, + breath_max = 120, + rotate = 180, + tilt_swim = true, + collisionbox = {-0.3, 0.0, -0.3, 0.3, 0.79, 0.3}, + visual = "mesh", + mesh = "extra_mobs_dolphin.b3d", + textures = { + {"extra_mobs_dolphin.png"} + }, + sounds = { + }, + animation = { + stand_start = 20, + stand_end = 20, + walk_start = 0, + walk_end = 15, + run_start = 30, + run_end = 45, + }, + drops = { + {name = "mcl_fishing:fish_raw", + chance = 1, + min = 0, + max = 1,}, + }, + visual_size = {x=3, y=3}, + makes_footstep_sound = false, + fly = true, + fly_in = { "mcl_core:water_source", "mclx_core:river_water_source" }, + breathes_in_water = true, + jump = false, + view_range = 16, + fear_height = 4, + walk_velocity = 3, + run_velocity = 6, + reach = 2, + damage = 2.5, + attack_type = "dogfight", + do_custom = function(self,dtime) + --[[ this is supposed to make them jump out the water but doesn't appear to work very well + self.object:set_bone_position("body", vector.new(0,1,0), vector.new(degrees(dir_to_pitch(self.object:get_velocity())) * -1 + 90,0,0)) + if minetest.get_item_group(self.standing_in, "water") ~= 0 then + if self.object:get_velocity().y < 5 then + self.object:add_velocity({ x = 0 , y = math.random(-.007, .007), z = 0 }) + end + end + --]] + end, +} + +mcl_mobs:register_mob("mobs_mc:dolphin", dolphin) + + +--spawning TO DO: in schools +local water = 0 +mcl_mobs:spawn_specific( +"mobs_mc:dolphin", +"overworld", +"water", +{ +"Mesa", +"FlowerForest", +"Swampland", +"Taiga", +"ExtremeHills", +"Jungle", +"Savanna", +"BirchForest", +"MegaSpruceTaiga", +"MegaTaiga", +"ExtremeHills+", +"Forest", +"Plains", +"Desert", +"ColdTaiga", +"MushroomIsland", +"IcePlainsSpikes", +"SunflowerPlains", +"IcePlains", +"RoofedForest", +"ExtremeHills+_snowtop", +"MesaPlateauFM_grasstop", +"JungleEdgeM", +"ExtremeHillsM", +"JungleM", +"BirchForestM", +"MesaPlateauF", +"MesaPlateauFM", +"MesaPlateauF_grasstop", +"MesaBryce", +"JungleEdge", +"SavannaM", +"FlowerForest_beach", +"Forest_beach", +"StoneBeach", +"ColdTaiga_beach_water", +"Taiga_beach", +"Savanna_beach", +"Plains_beach", +"ExtremeHills_beach", +"ColdTaiga_beach", +"Swampland_shore", +"MushroomIslandShore", +"JungleM_shore", +"Jungle_shore", +"MesaPlateauFM_sandlevel", +"MesaPlateauF_sandlevel", +"MesaBryce_sandlevel", +"Mesa_sandlevel", +"RoofedForest_ocean", +"JungleEdgeM_ocean", +"BirchForestM_ocean", +"BirchForest_ocean", +"IcePlains_deep_ocean", +"Jungle_deep_ocean", +"Savanna_ocean", +"MesaPlateauF_ocean", +"ExtremeHillsM_deep_ocean", +"Savanna_deep_ocean", +"SunflowerPlains_ocean", +"Swampland_deep_ocean", +"Swampland_ocean", +"MegaSpruceTaiga_deep_ocean", +"ExtremeHillsM_ocean", +"JungleEdgeM_deep_ocean", +"SunflowerPlains_deep_ocean", +"BirchForest_deep_ocean", +"IcePlainsSpikes_ocean", +"Mesa_ocean", +"StoneBeach_ocean", +"Plains_deep_ocean", +"JungleEdge_deep_ocean", +"SavannaM_deep_ocean", +"Desert_deep_ocean", +"Mesa_deep_ocean", +"ColdTaiga_deep_ocean", +"Plains_ocean", +"MesaPlateauFM_ocean", +"Forest_deep_ocean", +"JungleM_deep_ocean", +"FlowerForest_deep_ocean", +"MushroomIsland_ocean", +"MegaTaiga_ocean", +"StoneBeach_deep_ocean", +"IcePlainsSpikes_deep_ocean", +"ColdTaiga_ocean", +"SavannaM_ocean", +"MesaPlateauF_deep_ocean", +"MesaBryce_deep_ocean", +"ExtremeHills+_deep_ocean", +"ExtremeHills_ocean", +"MushroomIsland_deep_ocean", +"Forest_ocean", +"MegaTaiga_deep_ocean", +"JungleEdge_ocean", +"MesaBryce_ocean", +"MegaSpruceTaiga_ocean", +"ExtremeHills+_ocean", +"Jungle_ocean", +"RoofedForest_deep_ocean", +"IcePlains_ocean", +"FlowerForest_ocean", +"ExtremeHills_deep_ocean", +"MesaPlateauFM_deep_ocean", +"Desert_ocean", +"Taiga_ocean", +"BirchForestM_deep_ocean", +"Taiga_deep_ocean", +"JungleM_ocean", +"FlowerForest_underground", +"JungleEdge_underground", +"StoneBeach_underground", +"MesaBryce_underground", +"Mesa_underground", +"RoofedForest_underground", +"Jungle_underground", +"Swampland_underground", +"MushroomIsland_underground", +"BirchForest_underground", +"Plains_underground", +"MesaPlateauF_underground", +"ExtremeHills_underground", +"MegaSpruceTaiga_underground", +"BirchForestM_underground", +"SavannaM_underground", +"MesaPlateauFM_underground", +"Desert_underground", +"Savanna_underground", +"Forest_underground", +"SunflowerPlains_underground", +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", +}, +0, +minetest.LIGHT_MAX+1, +30, +4000, +3, +water-16, +water+1) + +--spawn egg +mcl_mobs:register_egg("mobs_mc:dolphin", S("Dolphin"), "extra_mobs_spawn_icon_dolphin.png", 0) diff --git a/mods/ENTITIES/mobs_mc/init.lua b/mods/ENTITIES/mobs_mc/init.lua index 02f5023a5..5be1af71c 100644 --- a/mods/ENTITIES/mobs_mc/init.lua +++ b/mods/ENTITIES/mobs_mc/init.lua @@ -142,3 +142,7 @@ dofile(path .. "/slime+magma_cube.lua") -- Wuzzy dofile(path .. "/spider.lua") -- Spider by AspireMint (fishyWET (CC-BY-SA 3.0 license for texture) dofile(path .. "/vex.lua") -- KrupnoPavel dofile(path .. "/wither.lua") -- Mesh and animation by toby109tt / https://github.com/22i + +dofile(path .. "/cod.lua") +dofile(path .. "/salmon.lua") +dofile(path .. "/dolphin.lua") diff --git a/mods/ENTITIES/mobs_mc/models/extra_mobs_cod.b3d b/mods/ENTITIES/mobs_mc/models/extra_mobs_cod.b3d new file mode 100644 index 0000000000000000000000000000000000000000..c7e60e12c17e95ffd9aa609a81b0fe00622b138d GIT binary patch literal 9471 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 RYa&nXb3SZRmH)@S{SS~X`LX~2 literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/models/extra_mobs_dolphin.b3d b/mods/ENTITIES/mobs_mc/models/extra_mobs_dolphin.b3d new file mode 100644 index 0000000000000000000000000000000000000000..37e2e96ae57faf522eafa980c991683e69ac60ff GIT binary patch literal 30572 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 OrZj8{FxL6Prv3+=Qh|^F literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/salmon.lua b/mods/ENTITIES/mobs_mc/salmon.lua new file mode 100644 index 000000000..bf730907c --- /dev/null +++ b/mods/ENTITIES/mobs_mc/salmon.lua @@ -0,0 +1,227 @@ +--MCmobs v0.4 +--maikerumine +--made for MC like Survival game +--License for code WTFPL and otherwise stated in readmes + +local S = minetest.get_translator("extra_mobs") + +--################### +--################### salmon +--################### + +local salmon = { + type = "animal", + spawn_class = "water", + can_despawn = true, + passive = true, + hp_min = 3, + hp_max = 3, + xp_min = 1, + xp_max = 3, + armor = 100, + tilt_swim = true, + collisionbox = {-0.4, 0.0, -0.4, 0.4, 0.79, 0.4}, + visual = "mesh", + mesh = "extra_mobs_salmon.b3d", + textures = { + {"extra_mobs_salmon.png"} + }, + sounds = { + }, + animation = { + stand_start = 1, + stand_end = 20, + walk_start = 1, + walk_end = 20, + run_start = 1, + run_end = 20, + }, + drops = { + {name = "mcl_fishing:salmon_raw", + chance = 1, + min = 1, + max = 1,}, + {name = "mcl_dye:white", + chance = 20, + min = 1, + max = 1,}, + }, + visual_size = {x=3, y=3}, + makes_footstep_sound = false, + swim = true, + fly = true, + fly_in = "mcl_core:water_source", + breathes_in_water = true, + jump = false, + view_range = 16, + runaway = true, + fear_height = 4, + on_rightclick = function(self, clicker) + if clicker:get_wielded_item():get_name() == "mcl_buckets:bucket_water" then + --self.object:remove() + --clicker:set_wielded_item("mcl_fishing:bucket_salmon") + --awards.unlock(clicker:get_player_name(), "mcl:tacticalFishing") + end + end +} + +mcl_mobs:register_mob("mobs_mc:salmon", salmon) + + +--spawning TODO: in schools +local water = 0 +mcl_mobs:spawn_specific( +"mobs_mc:salmon", +"overworld", +"water", +{ +"Mesa", +"FlowerForest", +"Swampland", +"Taiga", +"ExtremeHills", +"Jungle", +"Savanna", +"BirchForest", +"MegaSpruceTaiga", +"MegaTaiga", +"ExtremeHills+", +"Forest", +"Plains", +"Desert", +"ColdTaiga", +"MushroomIsland", +"IcePlainsSpikes", +"SunflowerPlains", +"IcePlains", +"RoofedForest", +"ExtremeHills+_snowtop", +"MesaPlateauFM_grasstop", +"JungleEdgeM", +"ExtremeHillsM", +"JungleM", +"BirchForestM", +"MesaPlateauF", +"MesaPlateauFM", +"MesaPlateauF_grasstop", +"MesaBryce", +"JungleEdge", +"SavannaM", +"FlowerForest_beach", +"Forest_beach", +"StoneBeach", +"ColdTaiga_beach_water", +"Taiga_beach", +"Savanna_beach", +"Plains_beach", +"ExtremeHills_beach", +"ColdTaiga_beach", +"Swampland_shore", +"MushroomIslandShore", +"JungleM_shore", +"Jungle_shore", +"MesaPlateauFM_sandlevel", +"MesaPlateauF_sandlevel", +"MesaBryce_sandlevel", +"Mesa_sandlevel", +"RoofedForest_ocean", +"JungleEdgeM_ocean", +"BirchForestM_ocean", +"BirchForest_ocean", +"IcePlains_deep_ocean", +"Jungle_deep_ocean", +"Savanna_ocean", +"MesaPlateauF_ocean", +"ExtremeHillsM_deep_ocean", +"Savanna_deep_ocean", +"SunflowerPlains_ocean", +"Swampland_deep_ocean", +"Swampland_ocean", +"MegaSpruceTaiga_deep_ocean", +"ExtremeHillsM_ocean", +"JungleEdgeM_deep_ocean", +"SunflowerPlains_deep_ocean", +"BirchForest_deep_ocean", +"IcePlainsSpikes_ocean", +"Mesa_ocean", +"StoneBeach_ocean", +"Plains_deep_ocean", +"JungleEdge_deep_ocean", +"SavannaM_deep_ocean", +"Desert_deep_ocean", +"Mesa_deep_ocean", +"ColdTaiga_deep_ocean", +"Plains_ocean", +"MesaPlateauFM_ocean", +"Forest_deep_ocean", +"JungleM_deep_ocean", +"FlowerForest_deep_ocean", +"MushroomIsland_ocean", +"MegaTaiga_ocean", +"StoneBeach_deep_ocean", +"IcePlainsSpikes_deep_ocean", +"ColdTaiga_ocean", +"SavannaM_ocean", +"MesaPlateauF_deep_ocean", +"MesaBryce_deep_ocean", +"ExtremeHills+_deep_ocean", +"ExtremeHills_ocean", +"MushroomIsland_deep_ocean", +"Forest_ocean", +"MegaTaiga_deep_ocean", +"JungleEdge_ocean", +"MesaBryce_ocean", +"MegaSpruceTaiga_ocean", +"ExtremeHills+_ocean", +"Jungle_ocean", +"RoofedForest_deep_ocean", +"IcePlains_ocean", +"FlowerForest_ocean", +"ExtremeHills_deep_ocean", +"MesaPlateauFM_deep_ocean", +"Desert_ocean", +"Taiga_ocean", +"BirchForestM_deep_ocean", +"Taiga_deep_ocean", +"JungleM_ocean", +"FlowerForest_underground", +"JungleEdge_underground", +"StoneBeach_underground", +"MesaBryce_underground", +"Mesa_underground", +"RoofedForest_underground", +"Jungle_underground", +"Swampland_underground", +"MushroomIsland_underground", +"BirchForest_underground", +"Plains_underground", +"MesaPlateauF_underground", +"ExtremeHills_underground", +"MegaSpruceTaiga_underground", +"BirchForestM_underground", +"SavannaM_underground", +"MesaPlateauFM_underground", +"Desert_underground", +"Savanna_underground", +"Forest_underground", +"SunflowerPlains_underground", +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", +}, +0, +minetest.LIGHT_MAX+1, +30, +4000, +3, +water-16, +water+1) + +--spawn egg +mcl_mobs:register_egg("mobs_mc:salmon", S("Salmon"), "extra_mobs_spawn_icon_salmon.png", 0) diff --git a/mods/ENTITIES/mobs_mc/squid.lua b/mods/ENTITIES/mobs_mc/squid.lua index f4ca0521a..86b80976e 100644 --- a/mods/ENTITIES/mobs_mc/squid.lua +++ b/mods/ENTITIES/mobs_mc/squid.lua @@ -55,17 +55,6 @@ mcl_mobs:register_mob("mobs_mc:squid", { view_range = 16, runaway = true, fear_height = 4, - on_spawn = function(self) - --make sure squids always spawn in water (and at variable heights) - --can be removed once this is provided by the api - local p = self.object:get_pos() - local nn = minetest.find_nodes_in_area(vector.offset(p,-2,-1,-2),vector.offset(p,2,-15,2),{"group:water"}) - if nn and #nn > 0 then - self.object:set_pos(nn[math.random(#nn)]) - else - self.object:remove() - end - end, }) -- TODO: Behaviour: squirt diff --git a/mods/ENTITIES/mobs_mc/textures/extra_mobs_cod.png b/mods/ENTITIES/mobs_mc/textures/extra_mobs_cod.png new file mode 100644 index 0000000000000000000000000000000000000000..ce6f6dea9c3bd179b4edd57b08c5216884e3c9f3 GIT binary patch literal 766 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FTR01FTSts}j400007bV*G`2jm72 z3nLQW9k{~)00MqVL_t(o!|j*POB7)k$3GK`N(fsshlD+>bI{mCMHWH4?5$8tLcv3~ z@)CidutNO>76l%J=&}YLJP3)XD3uUGnjouen=QLW>p+Won70;|SiQU*)|qzp7eUA7 za~XKv=hypv<{jo$0GdOS5+E-G04MQ?0uY**l>o_&Er%VTseM!e=v@H-KF)<5F)wc_ zO5c+&Qqxo#{nr4<8K;=0VExez<-uDi0X$Z5fCg1X(^PydQ!={vSShxbV%gIB35R`i z`o01XmWbr&ds@0(l|OddADg&@+x%LrE(~UWjr9Y6X=lpmzmG?SbPx_9*}lBkS_#k6&~KTZu(e%6xbjPjT`7!EOLLgRu1Kjh#IGDb1aGx9qjG<=sL| z4fU4h-f^Biqt07TaA-;b?0-mbo;@RdV4%180k~9JJQhu{w!Dkpq1(yy4xP2-U1HG` z0R4mAwi3movX~DKqqq5$k+A{0i8^mR=h-tx#s<*a{K|ZIxbO}nw^Nv=VBz8`rD-ar zDaaXr=4|=o43+Jboid+f<=M-HnN>_vaI{#Me{*P3F3hZQy|-0XI+89fE-o%EE-o(r wCx7*0`1E~T8sENi@cG!jVp})ef2=Qm1Abd4&vxUD?*IS*07*qoM6N<$g8kG|3;+NC literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/textures/extra_mobs_dolphin.png b/mods/ENTITIES/mobs_mc/textures/extra_mobs_dolphin.png new file mode 100644 index 0000000000000000000000000000000000000000..babbea7ef03ad1da3ad4dfe63588c39edbdf75ee GIT binary patch literal 6359 zcmV;|7%1n7P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+U=TImLofIME|i0Eg>)i%fWb#cF@b$HGs(+s;bqm zTl#yMr;;Qh0&w_XZU&ZF|M>51{)?aJ;$uS0CDoK3enJh^HQtox{@hplg!A|Ogx4iL ze;YUN3yvYrtG^%9dfnd`kDm|Z*8{eHA2)ft<|(ga|4fStoZDz8wA7Re17eA+4$_5vP~`NNy9kKgFQ3NaUu*8m^Ycf6^+YfpHy1Y8 zo_?q3(SGKZKXLX?G~60qC2jM3O@ND7J7SFWMBqszvrYEN&Sh)yVE53vhODegPQcJ6@dSEP?nrg14*4i42w$PZXaerf=yY74F zv8SGU>9w~(`iwB*NF$Fj>S)tVKY;)<)6BEXI@_{~R9a!hl~!J5)zvn+w*3w}?zHnR zyYBXm+AFHxqxLg$|2%5;6*YGPrTg+{)ELhBV+t!ciHaE!bHNhvtO$_MPBD9m4Z$gL zirG`0H{M5wl~KW&RuLnDVObZqeaG%Ia(|4Q!MlGoZti!HGYZ}RMdXY^_a$<_#_cyz zo9)1@KLJt|;!_aPQ+_;Hnk#LV_Ou;q*?s2fV{T*Qxmv;#t0Z~VF4>UzbwtH$|| zg1Z!Bea`aOAki{bIk2Dnon;iZI8v^%FJs?vIzgPP#}u4vquZ42&~y=~T{~tXKEohl z7=&x5tL)U~=yF+J2_Qqmmivk&b#Q>EqtNGL&ckD%Gh~U(w3~He>dO1FM`yV5G+~Gh z>?@?BkL{$$DDznl0I#%(b+goT-SpkgD0}}LWl;WRccnxdqK&ntJhq3HHL5?(JVqcD z7WK8dx5}dweWd_)BAj!O)fpm}L26$q79~PD*+R9XNmivuPGy2Ry$f|wzGIAS4Y9Qv zh>I|0Oa-XucBLrG(zIbwQQ5UUoLPHQzuMaDw5(Yd$-g?= zSe7u35i{9cJ`y6wF;7CIVq?KAdUD_kLr=sbF^!n~>hk|OZp3ek=I~C2DJZZFucvO^ zqz=I?3L^ASVI0;(JD)IWIsvIrz}n{0`kq-SjGgg+=>$Ck>N`F&_>W?-i87kx<=mU< z-%U}*z*5;-YF^c)(AIe}n5L*CAp4rFF048t0A5S>{;BIBQ7GzZsKvUdzE%D-0cn39 z53SAKshMp1S}qLklQG=evQg#B6r7!S2!z-Bv`Ag;%%`NCd1dG9lRMaYo2oP73}f@! zgo_r&W<%{j)dWSi>$`YgHxRRTSHQqHS?TB5Hh7M`3`YXJ{IPt3eh)rc83wkOwHoZ< z8VaORbv#^?7o^Q`ujWbA=7aNR1T4CUB;X{3>`L(7v3x6i(@Y1#NF<;rHB~6BgW4t0 zb9%bXwQUlWjUOiz0!drw1~gLk3~C5V=efwcye;9I0f3BLM;Q2Sd#gOM^#rJ+h4b4i zlls#>>P1kvVs}#@hlw}=*mSAX{^_vet`nLk^mP&k7g|aLya(a-uow601JJPwX$&kY1NKpiIoLI?7p|~ESV(Z$&j$^eN6ea3fcb( z4R#LsNFO%n;&3I_;-^JDC`7lI6&O_~3;;uiwyYY+ssStDCZS}JJ)x!O?HI)k==XyS zE4gbE5AHyNP5Uk*YRIQ!y5|TWv zHsowJ8ln*htIKACbeND%m=QzA0&$ux6g<(T35p;Ad@JQeov5qtXBltB71(wJ-=WMN zI<-bw4!gH7V9*+rRdcE%gWO%Xl3@!ZDGkr_4yTw6YgKlf&4I$WXr@7f@HlFbrvaVE z;yfxygZWUUTQ3SK&3hAa0%XWQl1eZvmwodXWVD1m+F7I}v5g%@e{FGsW@HSJv5k&o z5RQ7x+IiDme7xirVEKJ7oZ-)S5losNA)&R}GASU-*23-n^-Ksu#Qx2Gu- zc#`^H6oeSi5lX54%0aTiMDmG0Wp#=QyhTh{&@E*+rK4fyj^>>Z>;Nk{Ws{j0$IJzy zmyuk99{V&0ou0SC(-+T-n*e5;30$f-m!{TYaq@RI4+o!zRxXy6|8X`Tb89IGqfZ8( z+-m)yU8!JM-oM|4dg2W`vlK$)rf_UOidmL`Y#aZPL)P z^b%Dx4`v?lQoBs1m9U_vG|NHlseLHvm^aWx;wLh_8b)iwB3gE(s|H7cgV40H7|iFy zD&jXPI^DlE6!1(N^2fU<==*hnY7Q47hqF+D>F`Z}danaZwAusJA0z_ecH#cq>PfMD z!&a7wVYqv73(luH(K?x>ji_s&wUv_bE71^F#uYMU2i!S=feem0FD#U<2#|+|KPYlc z^kw)fu^?*1O7XlC8n6Rl2u1Pj`A?=ZcfK6v;Z_F)*}`)Iq)UMlRR>8Zgo*m zgz|9nlsW2PsMgppftaf7173Dv!e?Zll_Qg!1lcmr1nkjC5gzZ;UIZy+r5jtLbq-Q+ zxQIWY$ESovlL+AiNuv0aG%oFv6iGyvM34|nTAvDL@?@sNB*2rTf&rv{`4f*-sV0Bo zxyG%y{nP{BMezM`<+LzVcHc*6eghKpW}V#4>NTqQ_(L*YbOE;rnp3I)n~_??m}DqN(M=Gnh1W_)A}zFgTX+L7vQu7lo@9qe@rhb7s3Tu$xx5vP(K8PNpLm{ zrfp=E7tUmwYPLdb-5m2x&=t zUu)=@A~w5HN2l&#^FWit5qqY3#PeQI4{awHD$-r$C0Z{FftXaHK&!!O2W{5|vHmDu zz!XaZS}akek6rEvsiSxSH2M{iIiNy#9YrBU2b>tnfS5Ugzq`&_2t7V56l^JoT#zw(7@xdf zAzHWw5S8wsPfV%@=s}%kRb7=jrP5|2hVr8hEr#5`tRy_DMX3|xG(Ut6dxzA(_El?xoz6-f<&OiC6%heN&H6OAo3~FPQK8AnI}{_@;uNoWbfQW> z#q(e##N3h|>7{h8&Uu}8)f%0mO`;cw3yA{k3Az+3Fe37n|MLYJ{i6z{MXL^WN-cqyL~ z&JJBxmw#Rw;N%DF{z6+!)mCbl78PBYBYw6Nh+9e*YMaQ3^H%M<-uB&<>EUBoVykM& zmlB~lG|y~FR3z&p+<@~~y0hl$;YB2c*oUSk5s72qdNor#L8!3W;iIZ_$@QN)(NX5f@l=eTjS?C{){iuH zB|oKHSWNxt5;z3$1zb8KhKdcHKBwci@tQt39gAg$B*@5n1QHd#$;REH%RkP@5x>rczttDPsB>{xpZlmy$z`~7tK)TShxm-M`t3qjS8xyt$b%&0eU)+ zgzIQWbPuO?TgChkIJAD+E|t=a^+W8G-VeJGIJYBietT@^GkF9`5l9jjfek@K{Vkmn znQ@A&5*DOa@su}2MK-%j2(NOQbYWNZMZin=k>Wa%^6yhh!yptiTqCXtpF|zs_6i`u zSk=+ge6EfAh&!=g2~{0@>G)73a3si^`cZ4-*DABpV^-?0TY@jdCziFtJAc5N#|6CA$co%{pX4Y%`w!YX#z1M20j|c zeN&#FuV4>z;fQ{|99b73FWG}M&{a1??^fA2GQ&F7drC~F`oOl0&ujrru3iB&_&yCc z{kz93usm*{gmL0B%S*)Rt1bF}>+2p_$4hX6j)N~MYi1KeBpe$0w&svZ?ZRBi$u=O;fetM)v}q%k3J2to>ZboZ z!Crj&^t98l&jmBmNokqu*Dgk)*@I&h(J8^!u6>`J?hea;W_}}egIo&dYe#ZX;B|U? zR&V-`zsnlYeOz z^NVPaB6s>K4#IW5;^O7L(SMuzHq)%gK0xUP)S2WAaHVTW@&6?004NLeUUv#!$2IxUsI(b6$gWeIAo|!7DPoHrHVzc zP}&NuI+$Gg1x*@~6cHIz|-jVP@;DHc++ zAM^1KyZ$7(6mpfp$gzMbG{~+W{11M2YZay@y`*pq=zejWk5M4B3pDGF^L^|%%@ZK_ z3|#4Lf3*S3ev)2qYmp0Q5K_>i6t8;lZb=aj67kl8 z_a3|m7D^F?)Pkhc8VaGsmeNGbeoVTvvoo`9#>4J=J2U%c@^*Ifp?NAT05GLz!3*tJfnMu5{`>so0d%j^aGX}>St0Ud%&s($1Y80O%|*J(rEOhHNHHuT@o{ zM~}=!2_9t`BeQ_h@6Q7O+O6K0?E+v}0XdIJ;WvN(nAK`yH^3!8yT$Y$eIg7?epoE8 zta+^Q()2iUZvNz)q@1~M)=ToTjHdN=-RhoAS;MyE002&%Kh1pZ&1*kOJkK{8PNYTf z!gf2pf&3oW2e8a;w@h)=uw9_(wgbPJN5Hb3fb$8XT(@WlA~BjNRyS6U3KO|>Aot)U z4Ri&MpyovGWu>WMtlqkFumsTc9Q1AoBj-p{WoV@$P%2U}0ATv~ z3zT#?1M`Q%xD4^2LHcOnBEDF>7$`^pU@|Y$SefL(H*P=h!r9$k!m=Gc3-FU4MQR!M zA-gRGFX`A!Fl^#U;W#Z?+>r3-9}BNditzLNA)Dvf3ahFbMLIi3LL=SHWbP;eSsNCtX_`SR z@V$2@v6R_YXKCmo85GUNNT~A(!;4o=lsH!&=_{nd-$9P$JXtRbUy)`b(XnNktxR-N;2JkNCumsi%jKOb#k z;aqemSCWwSlh^ee>h%UPDlmU?E_#QvDd^eGPBgpqhNj9W9?behC54F*`pSyub1+mTp6RJIuBpn5q$ zK9W>0Z{S_G4@V$Tcg8SbFv$5y5r@aSZjc7ao(XXC*G}V+gs|`jlijOr?VK^zwoKSf znf4zi$Meus85;nuT)pnGqDVM8g!2hzHTd*N=igSJfBH?|WH=AFar=QsoSP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FTR01FTSts}j400007bV*G`2jm72 z3kDNF=~%J=00O>AL_t(o!|hfvYui8+{w^_D>LL*vgiDA9fg$Y{|9~`Gv$PN|0b?k1 z@=$0?muAb5WDBKEaK?f$WO1QeJJp8b#dvHBCRcC>H3F$f*j>7)gLRjaY+2{Hqu=sQ zckk&veeb*XL`wCVXZEh};nf=g0J|s0o~Ey(k}nVds22CUw|7!_@yEs`rAVh!uq+z~ ztv0~~Db;IUc+c!z1)f!xS+=H<*66ahk?s<;uKvh(!5-{04 zIraoZx#-z7jtVQm)R(Z}G9?Jh&x?<-dxjL{;q{|5qWbkBr9n2@tb`SBy~{XGMEb`6@o4gjd+3uGn)#BqFE84aSF zKd_}Z2Sdx?-EtC!mYIu$mSqPfqjU+V+2?v55+1bL1g&;}1EqS+BkZ1wLx}ZzcK@Fb z|Dv2+;m>jQ)a=U-Bksidyf9=~-!CUu0?(oy^Al%EF1sO(%#!0eH_b+XTUJl=mqH-? z%SHXGC#%E$;;+2)G!#2sSTo{XQaUzl!gdQ;$U1(nVWJNpwM>QlZpVXrtO%m-o!DrT6V^-#(vr|7$*IJt8J={!C-V*UT%Kqzk%|rH4*(a?;im$7!95HfFQ&VkYU9Vn8z1DSR_siVIeu6 zhr!5i9t;fL{&cV2V7O7$1j{*T4@loPEtFsCTV1-KJng`~KMy4eyiAInQ!ENqG>&+p2z3JJV{Jy-QRCXd!?D?b+vBTWGGu!Ytr?)_Q|!J zIW3y*Kkd?g@Y>ZegFah*M-Au|F|*Y3@I}w;XNRA@>?_*=C1!L)PkOP%{NbMx_1QM7 zyuV0zVQ6+|t5D1F2lKY$m|u@f3aBnyJ2QUdR;a5EtJG#(DbO{{Vc@_?XHRQob_Im# zo$7tna)0^h-2|GaHR%?`HhH*kpyC*J3f_2cgv@MNgr{2QgbCUt%hjjjr_S}UBjr0! z@bobFR;{2WS`A-Zr;BadB+puBl`O2E^h;XV^XV2-Qnid=%jA4Z6E35q)#;4;(;p5L zdM~eJma|ab;o64qpyyZlK-refvWab!~41NV~q&jlR8RGQOf&QnK}6b687n!lT0_ z-)mOf%<4$fbE;0a*qIIA&^u_}yQPlNkY@YsDsqX(;N6afWUb+u^*dSZ`niAB-U>f( zR})BZe9^gyQnryA?nD!9OPu z{Jtm@Nen;UVsL4jRy+8HoS{C?n|AAn;CRyG6L45@+4TLJ7S{=Jl8l?|unT3W4_l&E z`nx!lM-9mhDk~E=PnN&@(s_5+=^c$LsQQYY%_dHok$PoLYA;Jmooju<*Ufw23?^ZuQFa4lGk%AB1 zcr)rJa|d8HrD1>cF3TT}b{zd?_Cwv9A}dDhE7Ojg$o>SYU9L9f-M_9MuyyOdy!lnS zd`hNiV&%S7K;HZ|g(9@Nv&l73f1$dIdZe6rtfoUe{8d1`c0)x;=j}U#1+ygf{MJ1o zuN09ddZ#|P?)Z>VKDFIpXYA8^$jbXNwZY{^aULesl{rx-i^}`e&+roVpEN4ftzsx* zyw`Nr&t3lJ$-b!JlXWZB&K+)yWu#8_=}AQ9^bM?k9N4Abc=UBq$jcTZ4YS5)`t5_7 ziW@@*EbeVdLfa$o!M?~BBcQS`cGX#1vAX>*>eDO;;N)o*)0X5Is!zkNS3hfbmaA?7 zO0iAVt+lO~blnt7E#qWpTMC8cyevyGKa1K$S)3BBt5b;~;SHO#e-1RlVDw%2XcG=% zFJ*$TkN|LD4n&X(#b^{5jJ=aw41iG(g5^Nre31jL@5HY-ET8Lu3$$gE*kV^Gg6|bC zf&AmW1Hkwwkio?{IcnR>nJ9q}LIA8>C=f}RatEA>mx*30hlx0>3W7vA;DXq`SXWpA zVW|WvfrNLL^J6JEM{TUVgv(?4xp|CHpmz?q2m}!`iA0%9Mv&PMU`aTU%wRBxBnpv2 z!J`PgG){y7a=b`tp`;k)aD$|v1eJ~ti?B*gfCI-M4mcb-j~ydd3hORM2ge*J?^X0t zgiBNbT1_OK~gwI0z&SwkO;9D?^G;^k&gEnBZZVhs<;JQ9uW;n<$1h~CyVX-)VTo54BK@u>I!bieKQyUPBk4j0!MX4Z& zOr@i)@pfpU;iV}p7ef9BpcIX4N2ZZ&s5FWl)y9@Yro98LfFx2hYn7a25`nIo;DSsKln_9Z zhc5)eA);6mu9`qYX1Yos0D&a|Ff4GuDMP|4Emfs}wI54z=2930l*OO|LtJH@j8)1a zAe^YWwI_ZI{2xsI5wJ}3zwx|-zGZQdATn4I-!l23JxYp5;#hz4 zQ2&OrAI(ZH)E1V+jq~phMUUQ%HWC3}B^4H{Dqbc4DphpANr701t6Bn7$I&S;0uY5m zXqOx-k-x_IAIMf43PhtpWD1^4g*bRBgU7(rd2|MzL?zLAwsusA4shOQm%=6 zaI}Wdbw(>lwa!>8Rg%qrA1#Z3&>$C(C`=LwH@du7d!n)t{`GkF%2vTHuWThu zmNLWqW5i+sACkN;%wLJ}UvT5>$CC2z%*VquM4QTHDJjxsFegOErH ze=PLzkWpF2?H6dwqhshkgl=oZxBJ>yS|}^$AN-7^+dt?5rT*;Xll1*8*JrstNr6uS zf6lJYa($8lp9KD#UH><^wBMbKArbnbCqvJ@LDSZUp=aiaoF$%am}-mwqgUT$z7ZXn zB=!oHVlb1ZDZgr%JcThjsEM%H?wSwOXB%pmcB`#Xp88D?_aMX-7Ant1n6cM$tc;ID zV3qIkfhl@3Fc`H0mYYie{nC*fpCvPw8P=>N=J1xqn%vQ z!sxprGq>jjX|R*t(1{7x&z;Dcn%sB%>-2-xYquv3`IxY)jB_s&D;+dqD>f%F`|~;; zt_!MJh56R|(q7jqd$;#Y#NK=Y$}|X(GX@8N4P4BX7rBbM>;|Y*JFjv1>8qz44{L|C z!g~Vt`0Y#EkS3CJE1DuN@-`+fzv_ldx;`PdARmYob>CUHRc-0R8O7kPpp&Egglvq4A8Lt6E4 z6sB2Wnt^*3s_#l8BRQz~*O_~K4P8pjvja(p4HD&aSJ#ym{HE+H+!tyFSviqq>*(3+ z{-cE7j%lVmxmRk+IfI?4yCY?IWw~AoHaaeN-V2H4xe>F1)h%lj8E0?lZ_Z{Lj=XjY msH-@6>gCyzC|TmwO0~PDC9poP@@I54F)Vj)w?m6or~V82MB7II literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/textures/extra_mobs_spawn_icon_dolphin.png b/mods/ENTITIES/mobs_mc/textures/extra_mobs_spawn_icon_dolphin.png new file mode 100644 index 0000000000000000000000000000000000000000..54819ada6ffd7ec832de816252487de599a7bb3a GIT binary patch literal 6551 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 literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/textures/extra_mobs_spawn_icon_salmon.png b/mods/ENTITIES/mobs_mc/textures/extra_mobs_spawn_icon_salmon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce5dcf97199735bafa147455a5b3e2726e127764 GIT binary patch literal 6264 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 Date: Thu, 7 Jul 2022 20:31:25 -0600 Subject: [PATCH 287/357] Tactical Fishing Advancement --- mods/HUD/mcl_achievements/init.lua | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mods/HUD/mcl_achievements/init.lua b/mods/HUD/mcl_achievements/init.lua index 987694310..55e64b9b7 100644 --- a/mods/HUD/mcl_achievements/init.lua +++ b/mods/HUD/mcl_achievements/init.lua @@ -225,6 +225,12 @@ awards.register_achievement("mcl:whatAdeal", { icon = "mcl_core_emerald.png", }) +awards.register_achievement("mcl:tacticalFishing", { + title = S("Tactical Fishing"), + description = S("Catch a fish... without a fishing rod!"), + icon = "pufferfish_bucket.png", +}) + -- Triggered in mcl_fishing awards.register_achievement("mcl:fishyBusiness", { title = S("Fishy Business"), -- 2.40.1 From 88cdc9baf38edf10c13a0c0ba604a0b0b1593f8b Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Thu, 7 Jul 2022 20:46:33 -0600 Subject: [PATCH 288/357] Add Fish Buckets --- mods/ITEMS/mcl_fishing/init.lua | 27 ++++++++++++++++++ mods/ITEMS/mcl_fishing/locale/template.txt | 6 ++++ mods/ITEMS/mcl_fishing/mod.conf | 2 +- .../ITEMS/mcl_fishing/textures/cod_bucket.png | Bin 0 -> 14810 bytes .../textures/pufferfish_bucket.png | Bin 0 -> 14766 bytes .../mcl_fishing/textures/salmon_bucket.png | Bin 0 -> 14792 bytes .../textures/tropical_fish_bucket.png | Bin 0 -> 14788 bytes 7 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 mods/ITEMS/mcl_fishing/textures/cod_bucket.png create mode 100644 mods/ITEMS/mcl_fishing/textures/pufferfish_bucket.png create mode 100644 mods/ITEMS/mcl_fishing/textures/salmon_bucket.png create mode 100644 mods/ITEMS/mcl_fishing/textures/tropical_fish_bucket.png diff --git a/mods/ITEMS/mcl_fishing/init.lua b/mods/ITEMS/mcl_fishing/init.lua index 20f4e6f26..80351e7db 100644 --- a/mods/ITEMS/mcl_fishing/init.lua +++ b/mods/ITEMS/mcl_fishing/init.lua @@ -516,3 +516,30 @@ minetest.register_on_item_eat(function (hp_change, replace_with_item, itemstack, end end ) + +-- Fish Buckets +fish_names = { + { techname = "cod", name = "Cod" }, + { techname = "salmon", name = "Salmon" } + --{ techname = "pufferfish", name = "Pufferfish" } FIXME: Uncomment when pufferfish mobs are added. + --{ techname = "tropical_fish", name = "Tropical Fish" } FIXME: Uncomment when pufferfish mobs are added. +} + +for _, fish in pairs(fish_names) do + mcl_buckets.register_liquid({ + bucketname = "mcl_fishing:bucket_" .. fish.techname, + source_place = function(pos) + minetest.add_entity(pos, "extra_mobs:" .. fish.techname) + return "mcl_core:water_source" + end, + source_take = {"extra_mobs:" .. fish.techname}, + inventory_image = fish.techname .. "_bucket.png", + name = S("Bucket of @1", S(fish.name)), + longdesc = S("This bucket is filled with water and @1.", S(fish.name)), + usagehelp = S("Place it to empty the bucket and place a @1. Obtain by right clicking on a @2 fish with a bucket of water.", S(fish.name), S(fish.name)), + tt_help = S("Places a water source and a @1 fish.", S(fish.name)), + extra_check = function(pos, placer) + return true, true + end, + }) +end diff --git a/mods/ITEMS/mcl_fishing/locale/template.txt b/mods/ITEMS/mcl_fishing/locale/template.txt index a1544666b..32e3d8740 100644 --- a/mods/ITEMS/mcl_fishing/locale/template.txt +++ b/mods/ITEMS/mcl_fishing/locale/template.txt @@ -16,3 +16,9 @@ Pufferfish= Pufferfish are a common species of fish and can be obtained by fishing. They can technically be eaten, but they are very bad for humans. Eating a pufferfish only restores 1 hunger point and will poison you very badly (which drains your health non-fatally) and causes serious food poisoning (which increases your hunger).= Catches fish in water= Very poisonous= +Cod= +Salmon= +Bucket of @1= +This bucket is filled with water and @1.= +Place it to empty the bucket and place a @1. Obtain by right clicking on a @2 fish with a bucket of water.= +Places a water source and a @1 fish.= \ No newline at end of file diff --git a/mods/ITEMS/mcl_fishing/mod.conf b/mods/ITEMS/mcl_fishing/mod.conf index c4e5f5f2e..71bde6146 100644 --- a/mods/ITEMS/mcl_fishing/mod.conf +++ b/mods/ITEMS/mcl_fishing/mod.conf @@ -1,3 +1,3 @@ name = mcl_fishing description = Adds fish and fishing poles to go fishing. -depends = mcl_core, mcl_sounds, mcl_loot, mcl_mobs, mcl_enchanting, mcl_throwing, mcl_colors +depends = mcl_core, mcl_sounds, mcl_loot, mcl_mobs, mcl_enchanting, mcl_throwing, mcl_colors, mcl_buckets diff --git a/mods/ITEMS/mcl_fishing/textures/cod_bucket.png b/mods/ITEMS/mcl_fishing/textures/cod_bucket.png new file mode 100644 index 0000000000000000000000000000000000000000..582207cb0d10d0c223942037ab66da32163b06b7 GIT binary patch literal 14810 zcmeI3e{2(F7{_mbFou|ssWS%TQdGp)-d($H?RhPZb)$QS;U0|1BxLeIufGz;}5}M0>c0y5Pu~^G-?!rQ9=S@7BmX@UfZ>AyN(wOf4-Og zc>2EI=Xvfv&-1>$e{NIT;)TQ_&NK}>mvM`nhdTqC~8`b z^{$}a+;Ja8c^*{49cD*p5ie;8hbU_i;7BKuP)$+7{B%;3)&P@^fKEmA*)AS9XrmR` zXItS8v7uxWh$+Ed9W3o#9F}_5NM6}C-(Mx9c^Du8Op#6};;O-?eYQ+o9@^G0W1}+? zbB)i|XeFdOLTz-DrUTmTsJBZT$I%U52j}*?UVm87X?Ds9CTBU+c~v)Qaf`6G8-iDW*JYUJ2KicDHeGMs~D$~nnW-Y40m$1|rU zOALsE1W-)_`f+9bk}=KHjF>h~%KY@WiD6Abp?vPL=bK2BO>LOX-4H-=M zJ212^T>{PB@KWZKyLwZJ7K&38$(kAW+(B9y$IY6_x@B4+TOk2nE8nC8(bV*?rp5i) zE^8Y_NH;ZQx{7{eg`&z@%9tlGr7nef7ovfHXaYa%M~~fV#)dHLM>og2ESqOpBuG|S z5+kI^O0=gqh9~S~dA5$PbE7d3WoZn!eq_-UZz>9^MdHX3AJz1PX!@0e*a?`V+9@!F zK}4DFD!xgJYdSnF;CBg3xnaaB(`kIGYM7!bf!2T@4mcD==A-TgZv=Qec2|_GvqxNY zF1uJ?=e5_@JLPDDC`a7hx(vin2z4J5I-p5i)@sRxmTxgM;yxzy5?z5ioft;-sUVx|V1z>FCyWX|e4teVEVGWrH5 z3lI3$2alX9I$i3z^2V;{bg65>bD64`erGOQ$uQz&?Y!A-VJW;x0RDQn+vOIR(&18% zHYE+>9RUTdU&HE3u0H2eI#Jef<#>+BM9wi=D&+4xQ_1Woyjg(vDNO!GrMSrXg>ajV z!WG@-z-Ty<1f_ws2`(%mR6uZ{G_W?og++u42riTc)+V^Hh)@B+h0?&<1Q!+&Dj>K} z8d#g)!XiQi1Q$vJYZF{pM5ut^LTO-af(wfX6%bq~4XjOYVG*GMf(xaAwFxdPB2++d zp){~I!G%SH3J5Ng2G%CHu!v9r!G+Sm+5{IC5h@_KP#Rd9;KCw81q2sL18WmpSVX9R z;6iC&ZGsDn2o(@qC=IMlaA6Ul0)h*rfwc)PEFx4uaG^A?Ho=8OgbD~Qlm^x&xUh&& z0l|gRz}h#&RaJQO52)~YzZ871@9in=r{F_@v=nR)QB?0k6xFwZqW-=PzkjEwE|#Ls zuc9b^8%5P>Tb@7CLQxfLYoIZl{{Ee>5B6_h@1An$N~ec^^1>PO*~_)^j3M*4GwHVE zfMd9El08_P+NW;4Hnmx;+gNt+5f7o|+p=al2`1)$k#2GVczPT%QYWUpL zJI`F6B&dhZPVQeeS^IS3@>%coEuZz-xqCOyhLbbrA3ipCcxd%Ud!M?re|Tv1FZO+D zzq;*?Z3E2le@@&3UxHfw3jEo9=wxi*$fKV}wvKGwK5(^iWY>-fBfBotj=cE8!@HJ! zJ9ll%Tk{5XKYqIU{h@2M=bJVOKYmy7bnW1tilfJC=q0I(69@Y_Hoo)K!M>iE-Q0?+ uOIGdg=bkuttm^c@AHR04yMFXbYQY2VZsb1x>kI4Y%hu+_fxQb>t^W_;Lo%KK literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_fishing/textures/pufferfish_bucket.png b/mods/ITEMS/mcl_fishing/textures/pufferfish_bucket.png new file mode 100644 index 0000000000000000000000000000000000000000..2c88bac3531fadc761233627591552f5e9280b88 GIT binary patch literal 14766 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 literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_fishing/textures/tropical_fish_bucket.png b/mods/ITEMS/mcl_fishing/textures/tropical_fish_bucket.png new file mode 100644 index 0000000000000000000000000000000000000000..edf7dd2447e9a8c7ef57b45e5921ba24f519219f GIT binary patch literal 14788 zcmeI3e{2(F7{?DZ1GW%}kbvm)C>Vv%-d#(#_R@BYcDMyQno(gW3BBFDTMyb^?Oka% zkiZr-U}Ay^Y6Q(d0?|ZNh?+9XCEnF5~ zEw(%tSqF%|9LG@!$^u8m&s&o8HY_v^>BjQ?dEtpXSZ9i!m9Ts3@K|(=nL~f z#^VH#E~nI_p=t@%j4O3%X~S!=n2Cy4;lAR@VxojzV23GkSt-d0HlC~Iq{u~|WI7eg zElrU*6hm>8Fm&uERP{?nHAB;*+9WB9(~~B~H39c$)-=FI$_R)1}LeVn%Vh>m8QmS_;8VX1T^5K4TS*;bkG8!^2e@241;N6WbEHAthwg7VzN#o2n|JgXbHShDKy{^A6eC zEiG%Xc6ITR)zPK!c2}2MaW%Md5Q9PJJ|T2KlhfvIDTG#TGc<6Y5PEe=#V4H<0~&Mn zx0|9$mESAe zD?LJL7R5RPD&D`k*_A>=!KZSfs^j{}9Kl4vF<&b1b)KtaeiT0};O7*s_@Gi=ljjwXRLh&IJVL<9vC7on3(_Fk6c-T@6i{4{2GORth=`zo;(|1YHpN9m1O*fq zq(QVPE+Qf*ptv9nqD^rT5kUdP1!)j%ii?N{3Mei}gJ@G+L_|q$sK>@`D zX%Ow3;;JpZ`iBzueZLHTvG1?XmcN2u3S{Nhjv&MIJ0=~90CGlNI!4-NBsHtv}7Ky7G-ZR>ODU}V?3U(RSf z^;64RzGb5e4(}W}*5kUqR-CzN+x{1)ouAsg;p)IQ%Z1SeU!B<7e(&jL?+Z) zvGw_1`d+|4tZleu@uA`9zM-0-!`}~x_4ll8JC(li!{~Q4Z`%jz_VmAbq`q(HKzvge zjn-^f{Ovon{66d8lH>nO+57q3M}NMseUanLm1|>DFCFK1Hk~|HCp^+rcjd_+?_w@| W_(uN@7e8XYXW7=$9yq!p(*GaK^Ce0E literal 0 HcmV?d00001 -- 2.40.1 From 44abef44e100865189a9964d6f19f8e891644998 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 8 Jul 2022 11:51:29 +0200 Subject: [PATCH 289/357] Make fish buckets work with water mobs --- mods/ENTITIES/mobs_mc/cod.lua | 6 +++--- mods/ENTITIES/mobs_mc/salmon.lua | 6 +++--- mods/ITEMS/mcl_fishing/init.lua | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/cod.lua b/mods/ENTITIES/mobs_mc/cod.lua index 96c9927c5..0d40912dc 100644 --- a/mods/ENTITIES/mobs_mc/cod.lua +++ b/mods/ENTITIES/mobs_mc/cod.lua @@ -101,9 +101,9 @@ local cod = { end, on_rightclick = function(self, clicker) if clicker:get_wielded_item():get_name() == "mcl_buckets:bucket_water" then - --self.object:remove() - --clicker:set_wielded_item("mcl_fishing:bucket_cod") - --awards.unlock(clicker:get_player_name(), "mcl:tacticalFishing") + self.object:remove() + clicker:set_wielded_item("mcl_fishing:bucket_cod") + awards.unlock(clicker:get_player_name(), "mcl:tacticalFishing") end end } diff --git a/mods/ENTITIES/mobs_mc/salmon.lua b/mods/ENTITIES/mobs_mc/salmon.lua index bf730907c..b586918fb 100644 --- a/mods/ENTITIES/mobs_mc/salmon.lua +++ b/mods/ENTITIES/mobs_mc/salmon.lua @@ -58,9 +58,9 @@ local salmon = { fear_height = 4, on_rightclick = function(self, clicker) if clicker:get_wielded_item():get_name() == "mcl_buckets:bucket_water" then - --self.object:remove() - --clicker:set_wielded_item("mcl_fishing:bucket_salmon") - --awards.unlock(clicker:get_player_name(), "mcl:tacticalFishing") + self.object:remove() + clicker:set_wielded_item("mcl_fishing:bucket_salmon") + awards.unlock(clicker:get_player_name(), "mcl:tacticalFishing") end end } diff --git a/mods/ITEMS/mcl_fishing/init.lua b/mods/ITEMS/mcl_fishing/init.lua index 80351e7db..08c039bc3 100644 --- a/mods/ITEMS/mcl_fishing/init.lua +++ b/mods/ITEMS/mcl_fishing/init.lua @@ -529,10 +529,10 @@ for _, fish in pairs(fish_names) do mcl_buckets.register_liquid({ bucketname = "mcl_fishing:bucket_" .. fish.techname, source_place = function(pos) - minetest.add_entity(pos, "extra_mobs:" .. fish.techname) + minetest.add_entity(pos, "mobs_mc:" .. fish.techname) return "mcl_core:water_source" end, - source_take = {"extra_mobs:" .. fish.techname}, + source_take = {"mobs_mc:" .. fish.techname}, inventory_image = fish.techname .. "_bucket.png", name = S("Bucket of @1", S(fish.name)), longdesc = S("This bucket is filled with water and @1.", S(fish.name)), -- 2.40.1 From f202ed832785ad8fef997abf7ac261540f71ae21 Mon Sep 17 00:00:00 2001 From: cora Date: Tue, 5 Jul 2022 12:55:14 +0200 Subject: [PATCH 290/357] spawn in groups --- mods/ENTITIES/mcl_mobs/api.lua | 1 + mods/ENTITIES/mcl_mobs/spawning.lua | 11 +++++++++++ mods/ENTITIES/mobs_mc/cod.lua | 1 + mods/ENTITIES/mobs_mc/dolphin.lua | 1 + mods/ENTITIES/mobs_mc/salmon.lua | 1 + 5 files changed, 15 insertions(+) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 84b24c339..998b05547 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -4036,6 +4036,7 @@ minetest.register_entity(name, { fire_resistant = def.fire_resistant or false, fire_damage_resistant = def.fire_damage_resistant or false, ignited_by_sunlight = def.ignited_by_sunlight or false, + spawn_in_group = def.spawn_in_group, -- End of MCL2 extensions on_spawn = def.on_spawn, diff --git a/mods/ENTITIES/mcl_mobs/spawning.lua b/mods/ENTITIES/mcl_mobs/spawning.lua index f8c94afb6..a1c8e23b5 100644 --- a/mods/ENTITIES/mcl_mobs/spawning.lua +++ b/mods/ENTITIES/mcl_mobs/spawning.lua @@ -386,6 +386,13 @@ local function get_water_spawn(p) end end +local function spawn_group(p,mob,spawn_on,group_max) + local nn = minetest.find_nodes_in_area(vector.offset(p,-3,-3,-3),vector.offset(p,3,3,3),spawn_on) + for i = 1, math.random(group_max) do + minetest.add_entity(nn[math.random(#nn)],mob) + end +end + if mobs_spawn then local perlin_noise @@ -449,6 +456,7 @@ if mobs_spawn then end local mob_def = mob_library_worker_table[mob_index] local mob_type = minetest.registered_entities[mob_def.name].type + local spawn_in_group = minetest.registered_entities[mob_def.name].spawn_in_group if mob_def and spawning_position.y >= mob_def.min_height and spawning_position.y <= mob_def.max_height @@ -470,6 +478,9 @@ if mobs_spawn then end --everything is correct, spawn mob local object = minetest.add_entity(spawning_position, mob_def.name) + if spawn_in_group then + spawn_group(spawning_position,mob_def.name,{gotten_node},spawn_in_group) + end if object then return mob_def.on_spawn and mob_def.on_spawn(object, spawning_position) end diff --git a/mods/ENTITIES/mobs_mc/cod.lua b/mods/ENTITIES/mobs_mc/cod.lua index 0d40912dc..11c6ee01f 100644 --- a/mods/ENTITIES/mobs_mc/cod.lua +++ b/mods/ENTITIES/mobs_mc/cod.lua @@ -40,6 +40,7 @@ local cod = { xp_max = 3, armor = 100, rotate = 180, + spawn_in_group = 10, tilt_swim = true, collisionbox = {-0.3, 0.0, -0.3, 0.3, 0.79, 0.3}, visual = "mesh", diff --git a/mods/ENTITIES/mobs_mc/dolphin.lua b/mods/ENTITIES/mobs_mc/dolphin.lua index f991e7495..333da3808 100644 --- a/mods/ENTITIES/mobs_mc/dolphin.lua +++ b/mods/ENTITIES/mobs_mc/dolphin.lua @@ -42,6 +42,7 @@ local dolphin = { walk_chance = 100, breath_max = 120, rotate = 180, + spawn_in_group = 3, tilt_swim = true, collisionbox = {-0.3, 0.0, -0.3, 0.3, 0.79, 0.3}, visual = "mesh", diff --git a/mods/ENTITIES/mobs_mc/salmon.lua b/mods/ENTITIES/mobs_mc/salmon.lua index b586918fb..dea502fd0 100644 --- a/mods/ENTITIES/mobs_mc/salmon.lua +++ b/mods/ENTITIES/mobs_mc/salmon.lua @@ -19,6 +19,7 @@ local salmon = { xp_min = 1, xp_max = 3, armor = 100, + spawn_in_group = 5, tilt_swim = true, collisionbox = {-0.4, 0.0, -0.4, 0.4, 0.79, 0.4}, visual = "mesh", -- 2.40.1 From aed96a4912cf710cdd97f4774c63e7236ec9119d Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 8 Jul 2022 23:19:22 +0200 Subject: [PATCH 291/357] Add original dolphin texture cc0 by cora --- .../mobs_mc/textures/extra_mobs_dolphin.png | Bin 6359 -> 443 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/textures/extra_mobs_dolphin.png b/mods/ENTITIES/mobs_mc/textures/extra_mobs_dolphin.png index babbea7ef03ad1da3ad4dfe63588c39edbdf75ee..6b8a40bf25a9f4770870426919283f5dd5a48821 100644 GIT binary patch delta 429 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 Date: Sat, 9 Jul 2022 02:30:05 +0200 Subject: [PATCH 292/357] Fix translator modnames --- mods/ENTITIES/mobs_mc/cod.lua | 2 +- mods/ENTITIES/mobs_mc/dolphin.lua | 2 +- mods/ENTITIES/mobs_mc/salmon.lua | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/cod.lua b/mods/ENTITIES/mobs_mc/cod.lua index 11c6ee01f..9174cd65f 100644 --- a/mods/ENTITIES/mobs_mc/cod.lua +++ b/mods/ENTITIES/mobs_mc/cod.lua @@ -23,7 +23,7 @@ local function degrees(rad) return rad * 180.0 / math.pi end -local S = minetest.get_translator("extra_mobs") +local S = minetest.get_translator(minetest.get_current_modname()) --################### --################### cod diff --git a/mods/ENTITIES/mobs_mc/dolphin.lua b/mods/ENTITIES/mobs_mc/dolphin.lua index 333da3808..01e6f56ee 100644 --- a/mods/ENTITIES/mobs_mc/dolphin.lua +++ b/mods/ENTITIES/mobs_mc/dolphin.lua @@ -23,7 +23,7 @@ local function degrees(rad) return rad * 180.0 / math.pi end -local S = minetest.get_translator("extra_mobs") +local S = minetest.get_translator(minetest.get_current_modname()) --################### --################### dolphin diff --git a/mods/ENTITIES/mobs_mc/salmon.lua b/mods/ENTITIES/mobs_mc/salmon.lua index dea502fd0..3c38f6860 100644 --- a/mods/ENTITIES/mobs_mc/salmon.lua +++ b/mods/ENTITIES/mobs_mc/salmon.lua @@ -3,7 +3,7 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("extra_mobs") +local S = minetest.get_translator(minetest.get_current_modname()) --################### --################### salmon -- 2.40.1 From 4a4636523e5075eaae04920c448b0803a73ac609 Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 9 Jul 2022 22:14:37 +0200 Subject: [PATCH 293/357] Add new mobs to translation template. --- mods/ENTITIES/mobs_mc/locale/template.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mods/ENTITIES/mobs_mc/locale/template.txt b/mods/ENTITIES/mobs_mc/locale/template.txt index aedd8754c..1f9261df6 100644 --- a/mods/ENTITIES/mobs_mc/locale/template.txt +++ b/mods/ENTITIES/mobs_mc/locale/template.txt @@ -62,3 +62,6 @@ Weapon Smith= Tool Smith= Cleric= Nitwit= +Cod= +Salmon= +Dolphin= -- 2.40.1 From 484ad2b630ea7a3d16caa4cc261dc19e3b72a04c Mon Sep 17 00:00:00 2001 From: MysticTempest Date: Sat, 9 Jul 2022 19:35:51 -0500 Subject: [PATCH 294/357] Replace all melon/pumpkin stems in woodland_cabins with unconnected variants. --- mods/MAPGEN/mcl_structures/init.lua | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/mods/MAPGEN/mcl_structures/init.lua b/mods/MAPGEN/mcl_structures/init.lua index 0eafab584..5b6be892d 100644 --- a/mods/MAPGEN/mcl_structures/init.lua +++ b/mods/MAPGEN/mcl_structures/init.lua @@ -11,6 +11,11 @@ local rotations = { "270" } +local replacement = { + ["mcl_farming:pumpkintige_linked_t"] = "mcl_farming:pumpkintige_unconnect", + ["mcl_farming:melontige_linked_t"] = "mcl_farming:melontige_unconnect" +} + local function ecb_place(blockpos, action, calls_remaining, param) if calls_remaining >= 1 then return end minetest.place_schematic(param.pos, param.schematic, param.rotation, param.replacements, param.force_placement, param.flags) @@ -37,7 +42,7 @@ function mcl_structures.place_schematic(pos, schematic, rotation, replacements, local p1 = {x=pos.x , y=pos.y , z=pos.z } local p2 = {x=pos.x+x-1, y=pos.y+s.size.y-1, z=pos.z+z-1} minetest.log("verbose", "[mcl_structures] size=" ..minetest.pos_to_string(s.size) .. ", rotation=" .. tostring(rotation) .. ", emerge from "..minetest.pos_to_string(p1) .. " to " .. minetest.pos_to_string(p2)) - local param = {pos=vector.new(pos), schematic=s, rotation=rotation, replacements=replacements, force_placement=force_placement, flags=flags, p1=p1, p2=p2, after_placement_callback = after_placement_callback, size=vector.new(s.size), pr=pr, callback_param=callback_param} + local param = {pos=vector.new(pos), schematic=s, rotation=rotation, replacements=replacement, force_placement=force_placement, flags=flags, p1=p1, p2=p2, after_placement_callback = after_placement_callback, size=vector.new(s.size), pr=pr, callback_param=callback_param} minetest.emerge_area(p1, p2, ecb_place, param) return true end -- 2.40.1 From a16613f31cafe7a6ec2dfc944a2550abad7e78be Mon Sep 17 00:00:00 2001 From: NO11 Date: Sun, 19 Jun 2022 22:06:42 +0200 Subject: [PATCH 295/357] Fix #2336 (interaction bug when opening chests) --- mods/ITEMS/mcl_shields/init.lua | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_shields/init.lua b/mods/ITEMS/mcl_shields/init.lua index 038ffc0f3..0ba02c1bb 100644 --- a/mods/ITEMS/mcl_shields/init.lua +++ b/mods/ITEMS/mcl_shields/init.lua @@ -275,9 +275,16 @@ local function handle_blocking(player) player_shield.blocking = 2 end elseif shield_in_offhand then - local offhand_can_block = (wielded_item(player) == "" or not mcl_util.get_pointed_thing(player, true)) + local pointed_thing = mcl_util.get_pointed_thing(player, true) + local offhand_can_block = (wielded_item(player) == "" or not pointed_thing) and (minetest.get_item_group(wielded_item(player), "bow") ~= 1 and minetest.get_item_group(wielded_item(player), "crossbow") ~= 1) + if pointed_thing and pointed_thing.type == "node" then + if minetest.get_item_group(minetest.get_node(pointed_thing.under).name, "container") > 1 then + return + end + end + if not offhand_can_block then return end -- 2.40.1 From 408c72e4bf235852da73c019f94290067347f213 Mon Sep 17 00:00:00 2001 From: TheRandomLegoBrick Date: Mon, 11 Jul 2022 08:24:42 -0700 Subject: [PATCH 296/357] Mud fixes --- mods/ITEMS/mcl_mud/init.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/ITEMS/mcl_mud/init.lua b/mods/ITEMS/mcl_mud/init.lua index e938ae5f2..64ff36c09 100644 --- a/mods/ITEMS/mcl_mud/init.lua +++ b/mods/ITEMS/mcl_mud/init.lua @@ -11,13 +11,13 @@ minetest.register_node("mcl_mud:mud", { dug = {name="mud_place_dug", gain=1}, place = {name="mud_place_dug", gain=1}, }, - groups = {handy=1,shovely=1, enderman_takable=1, building_block=1}, + groups = {handy=1, shovely=1, enderman_takable=1, grass_block=1, soil_sugarcane=1, building_block=1}, _mcl_blast_resistance = 0.5, _mcl_hardness = 0.5, collision_box = { type = "fixed", fixed = { - {-8 / 16, -8 / 16, -8 / 16, 8 / 16, 7 / 16, 8 / 16}, + {-8 / 16, -8 / 16, -8 / 16, 8 / 16, 6 / 16, 8 / 16}, }, }, }) -- 2.40.1 From c1686923d36f3831a406151cd3e2ccba1ac94159 Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 10 Jul 2022 12:16:19 +0200 Subject: [PATCH 297/357] Fix crash when no group spawning positions found --- mods/ENTITIES/mcl_mobs/spawning.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mods/ENTITIES/mcl_mobs/spawning.lua b/mods/ENTITIES/mcl_mobs/spawning.lua index a1c8e23b5..e4988183d 100644 --- a/mods/ENTITIES/mcl_mobs/spawning.lua +++ b/mods/ENTITIES/mcl_mobs/spawning.lua @@ -388,6 +388,10 @@ end local function spawn_group(p,mob,spawn_on,group_max) local nn = minetest.find_nodes_in_area(vector.offset(p,-3,-3,-3),vector.offset(p,3,3,3),spawn_on) + if not nn or #nn < 1 then + nn = {} + table.insert(nn,p) + end for i = 1, math.random(group_max) do minetest.add_entity(nn[math.random(#nn)],mob) end -- 2.40.1 From 33739dc5af8c5fbff751c3a8e25b4b07fa72ed49 Mon Sep 17 00:00:00 2001 From: cora Date: Tue, 12 Jul 2022 00:32:53 +0200 Subject: [PATCH 298/357] Woodland cabin mob spawning --- mods/MAPGEN/mcl_structures/woodland_mansion.lua | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/mods/MAPGEN/mcl_structures/woodland_mansion.lua b/mods/MAPGEN/mcl_structures/woodland_mansion.lua index d47d4a0e6..35e934a68 100644 --- a/mods/MAPGEN/mcl_structures/woodland_mansion.lua +++ b/mods/MAPGEN/mcl_structures/woodland_mansion.lua @@ -17,6 +17,23 @@ mcl_structures.register_structure("woodland_cabin",{ modpath.."/schematics/mcl_structures_woodland_cabin.mts", modpath.."/schematics/mcl_structures_woodland_outpost.mts", }, + after_place = function(p,def,pr) + local spawnon = {"mcl_deepslate:deepslate","mcl_wool:white_carpet","mcl_wool:white_carpet"} + for i=1,5 do + local vindicator = minetest.find_node_near(p,25,spawnon) + if vindicator then + minetest.add_entity(vindicator,"mobs_mc:vindicator") + end + end + local evoker = minetest.find_node_near(p,25,spawnon) + if evoker then + minetest.add_entity(evoker,"mobs_mc:evoker") + end + local parrot = minetest.find_node_near(p,25,{"mcl_heads:wither_skeleton"}) + if parrot then + minetest.add_entity(parrot,"mobs_mc:parrot") + end + end, loot = { ["mcl_chests:chest_small" ] ={{ stacks_min = 3, -- 2.40.1 From 571c57e891d982a243fd096b3d4e945227e0161b Mon Sep 17 00:00:00 2001 From: cora Date: Tue, 12 Jul 2022 00:44:39 +0200 Subject: [PATCH 299/357] Add updated woodland outpost schematic --- .../mcl_structures_woodland_outpost.mts | Bin 3341 -> 3162 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_woodland_outpost.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_woodland_outpost.mts index 6fd48068b0f5d3b67cbbd8448806c7269619a82b..18cb4339344a93847598f44b00902f624987a369 100644 GIT binary patch delta 1825 zcmV++2j2LN8rm3;9|ko517T@$v28R3e;I9KY+q<)VPtbUcWHEJWpZD0Yh`R@bZ>5W zob6o+TjMqmRTSIc6bQ5?N$Ig|Sz6eh+xGwUuh-UL9Wx_KCXhhp=}R2O&$g`5^T_ff z2ywDlM1M=f=CD-jL-vwnSB5P;c15x!!ln_k^pdK%-E+vsYrZIA*J`Z{*izZke|7iS z=`+nkBhJJ*Vn6TgO~y7UUbxM97H>f4&uO+SXpMZX^-ox&RT3hxhC0{2zyPk>t4Na zq1Diet@$)uxwoolPhw*f$98{|f-%Cu5k!zSv+A0lSI~IA``N@>|+PN1WRk=^r_$BXPf97jvN7xB$u1m2?wUdK3T28TLF&o#;&*tx)$F}gbBa6pu1GH-Hje_VJyNL0N zD$wrlyCm+EjqrSp?1bMcQ`&Lk($J2xANqUM2gL3WYRBE#=4fX*!3(#6^K3AZ;G;0z z2XjYwnw_hiuzx>-e|kTuA`DBj?=sH!_~VZ2u}(X5js5=psV`1D&%c8yWpmuY)PRq| zDD7Cw0B4)0onOUoeed~Q^&!3efG6>XDo=*xEA3D9{+GuN@v`?jwom!@JNt_}*d4kb zcRo$To&DYK@LWM^o=wlN*%>q}l34aSnrTbTXy?weS*5|bf3TsownjT!)q1VR#^%}V zJhfg<&9h-_dY&yDFXqfqhuTS9?cx1SS!}>+QlPdMo3JHB=*!-go)j^ATHnwPbwIf5aC3PWNw}g>Y?h3UpN3PhNo>qs626yMN{66|5BdAH`mg>_xzS4A`%q zSAgLLwU_qq*P3UWwx5c2G=>)YSLEJhSJ5(!dLrWN3sV_$Fuya!jk6vp*nBn@b8J2v z20AYcB9);Ak;+gjV^i60oX>`%Y%aJ|J9;Ga(%MM@f6MAgV0QYA7|Xr*UVh)Xm+l4!sXPy!{u9H z`?&^;Q-Yms%Jn?=5(Yz~R67g?!-69TgF)gy27|$1Fc=I5gTY`h7z_r3!C){L3JfG!vhLm731 zJI^q?x&&7?_wi`G(|`|!$)dV0_4pQ;lfb=`J`VUym9#h`w<8Y!D zf3q>iJ9_1t@D73u_cRzs(pR?S&@Q)O@S@`mW+v)7!#j&ktp(ocK&{l8ZiaX07R0<$ z6iW839o4YPI{~>Yz)^xmOPe-n>8S&h=6=Em6dQKSoLp7!f9~#l-@ZTJ_q`{!D%yU_4(g+|0ToNo+IA6x zkGgdoyN{Gh&Pk_SXqY0>#lqUQAdgT9lVNnTK96mNN zLCfOrucX+7crDBS^r);f0xk-TPs62Vlqn+${3YP6+nVNdlk`pY)VeLbW3kRjIOS2T zQRSbXM9K#d$80wG#G&OYXG&AkF5`|k7W$Qu8};JLhD{#-Gq$-a+7xd=J*Z*=w>dBH zsz%E0M;pLJw<=ko1HpnHZ76JKbi*6Cs_AJnjqq^qS7Lm&K=ssq5jS# zkEMK)O9(#TUmO~X(rAa2iW(_oc>6y@lq;O?MKy2^ivDthd5+_tlD2v{!szb#xN}@| z1w3F_RR+s%m}Kny>^E$2S;}ZDbbp*s>N;zRUcO^_NV#+AAxXQTea~c^4HIKSK^|V* z`u_IwW7j8#0|6)N2(U-@{f%ZdGl-kw)6j#6=x{&Q003CA@Xw*94Y6!5nRFoY8NR}Rpb@;IqO^I_bAT?4k zYBX3V*u0{q_JEUGdJ1@Wo#S2&Emz-}Np37w1T{_Z$sM~@cZ)uT7fIb)PrYr%@G7|= zrmT4Q_r#p3?ula36aFaFyGK2oCl}2gyBdHBFBTI5GJfa1jpHrI7U+a$l)Ttdv@H6? z@*)o;!PF7onRTpbdhXW}ZP#@}2J4dzs&awje zV456XTGK3hqggPO@OY$YchVqfS`;PqgS|_TeswcXUs`5|$TuO>__&|>L%;lb49(Su zbUiOtTPvlR;ELu9m!M{0olsDR=S-t2GQpm(I#!AreQ86++WsO})GvO_Fv zP6iIXIN5SXXAJt9?X=S?+|0@7fO`eGsH=c0n?ab@6ZNaNL9IOQs4E7>qh@LtS}13&7Oz3L1mU(?dyVTrKtSTAd389-}PQl_pX+wc^6&5E~Aa@?lcsgT{Zt~jO{0JL~ zKiFYj1i>|iL+dNZEc`OfqqR6o=2X2Il)l}_2lf!?#^S%uIv(>hz&!dvW*I~ z>zs4#g)M%;R!9WNnEC9zey-|a72-i=_Z450`hfNUsiskH#}D<&yi01R;p~{w@Nh_; zohpc8?9%QA09n`l<)OoiTSuo=-~2D1Ur0Tl*gj7V#1fPnP%t^O?SV_`m}t<|s#oXR z76TM5+ifgp$=zIlS)socuI^@I+Fh5Rz7Yj6Ee4-dHuBr*>C7vl(!LI+Xe!_X)kPe* zs%7kV?;0$T1~F7nKc&&vo;)icyqP{*_|X|6?t(mKd-l&9b|m(@Ov4Sze@fT#kdA*Z zAYbJ&z3373Yp;&*K-fKl?YZet{mlJ;3ckB{+}4`-(RAwSAHb1cu`+Rqi4*5_$#WfJ zTy~jQGyu%N92r4SbUeVRY-v+!Mtp3!H07=37_D&hK59TNuV547dX z=p~1o;%%EJJHPql49#z$YJ`uVGA>I}C@Y#cai)k*8FVlLVxxy#GU tX`6G_@o&y&^|mF;t4{TgDJJfI@LjQt*x%oj$)Nw6*^EWsNc!{YzW{Qx15W?| -- 2.40.1 From 2b835221a7fabc41d018e2834ce659a77b2fd525 Mon Sep 17 00:00:00 2001 From: cora Date: Tue, 12 Jul 2022 01:30:41 +0200 Subject: [PATCH 300/357] Make them spawn at (somewhat) random positions --- .../mcl_structures_woodland_outpost.mts | Bin 3162 -> 3210 bytes .../mcl_structures/woodland_mansion.lua | 23 +++++++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_woodland_outpost.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_woodland_outpost.mts index 18cb4339344a93847598f44b00902f624987a369..dac927b66762f163abca557a8f30112d0e96235c 100644 GIT binary patch delta 1854 zcmV-E2f_H-7>XH?9|1P8AV32qcW-ZOI&x)XUt?i%aAkA=6>Vc|Uw3bBY&v3cZ+C8A zV_|Y|WpuMz1499mvINe5G!WRDB&El)+p=t7du`j_*S}utvaT6fasmltp1#;-{4C2F zJ&!Cafw7atEclxPHjBC3@3ZG9yV7j#uq%|!0XB}1rPf%lD?A-G30`^(o ze$JvKY|t?^Yr#~b>;>?F*s}yX*4jM5j@2_ylsjhE$rR%oG{q1)SoY-%({e;R%M6}> z%rb*lvkP|Fe^%_OU#c~JH>vx*E9VHYPOO9m60HP^J#BwK z6X`nG+k)C@**o@sE$aX~%!UEm%h)x$ktw!AfLc9nFJT{7+*z@8l&(@r2V%E_ z7ennp>;?M{JnI5st98tdZCsuail>k+xr}rW`;@d(%jmLyk`cy4kXQ{D1KY+Ub;MPY z9Vc8n(7pXy@2hmnx*pn;VBgBmt=_V&ts3}?MBXgoFLW)1C2WG0toYb{`V6_saqZZ0 z!?_Fg_ux4(HjGj>+;rfW#*??~qfS4|1Y;2#m4>SwgFNm0qSF-ZDBQD8GTkRj{G3lP)3vij z>=tgTuMj(IeHdXMQaf?nNNFeDmtvP{hxK}K6NEN@Sf^q78zpR5JD>I6TZe7nYKIs1 z+3xzaQq8?qP)^+WRi@bP=3NqZ%6fRNMz+kYl`-wueyMMV*$@4*>H}c6@U>%~Y;&|T zAL04O#N%vnB!PQjstxA$@Dw{&JAV6qluK7TPckvhQtaD|>plLsV_U4%4qjrneShhb z)z0pJPcWryiaU@R;9eM}9b*x&wrSe=js4!Yo<;Bo;1r<+Mjaym&5k) zyw5wPO}WoI`-?l!6S^CBzKq13{XOr{SV3x>O^vXb5wuh!Sp_3)sS)kmaW<28JQgNu zYooQZk+s)4Y-pU#j8m)i*f<-+#>d(G{$kF57`3mR)ZIRQ-YJU>P)W+vK-x(m=lu=` z)o_8bQzP0jyX5^2mzr?3b1gL@5Wn9M?61sM!&ipA-x2I>z}_=-55 zamU#{>5ss8+!?pO)bmb`{ZzE0-r-#8*rJwr`&P3MuJoJ&6_xfguYeEH;*tH`e{$x3 z6)YtCAIV;z?3u@Y^w=*yuYgJQ_@8UA#g?}3ml|gqx1WY~3`C9n%W|Kxt6-f*JrZ$z zd~nufvj@l6@%+vdH=HAh!OUl~F~`hjgMiNqi;?j2+XvN>{{bEgcJ%h7q%mhIkC z#^zD)dnWa9#vOIf%+-!!=W54akLB&JUklrvYd|<9n9-(O&r>TQ5EM$aLm&_gD3TBe zDE=c52m}IwKp+qZ1OkCTAP@)y0)apv5C{YU;h;G5n{$a^-fLGGa~IO8m|Y=%W`>z7 zZSEkmch08j4a!_KK{nbva%Ie)I6nvW;8W!Tm@X_t#oZgl~OU#4CPaS=1tQX zG&jg4m6->0@L!$lk!CP2eb@qa7S1ot?#(+Th)cI8AXOzMJ`Sf0PC9(cV4`<0G|uHY zogC1{UU=Mr z%t%=$cxTqhy^(jis8n)KH^Do24MN^23MKp2j;vVe9gkcVU@-G>YG;yn!Y|_wnapBq zH7wF+blZ21cILo=#c}7@dj*LDfIgeYwqJIht{o7*cYtU$x5hkg9Fw`1~-LdjJ%EYV>@ zeuyA6*PvNFqSwB4)9BmRdY$pS0|V)IW9Gtfwzb8f$Js`_vkN+4OQF{pkALc;mj0{} s&xe41$f7eXqF=dV)GA|X_OG;7$Hym)@z%UUAP@+Iw~PM)t)R65vxs!De*gdg delta 1816 zcmV+z2j}>T8QK_-9|1M7AV34Ni~~IZ787k_Y+rY8Z)`epWn^DtVRCR~bO0Wc3j!LG z&RT3hxhC0{2zyPk>t4Naq1Diet@$)u zxwoolPhw*f$98{|f-%Cu5k!zSv$P35-ctl)5r(*oRWuX@h-yD{w!w+A0lSI~IA``N@>|+PN1WRk=^r_$BXP=4)q1*d6>{UlDfP`Y^#hq;_E3 zNNESIOR-C}lY=%|PO)V%8`sW%&*tx)$F}gbBa6pu1GH-Hje_VJyNL0ND$wrlyCm+E zjqrSp?1bMcQ`&Lk($J2xANqUM2gL3WYRBE#=4fX*!3(#6^K3AZ;G;0z2XjYwnw_hi zuzx>-dOxWm3`?``GS2t-%_FHSqpzk?}dbKJqyfRDm|DD7Cw0B4)0 zonOUoeed~Q^&!3efG6>XDo=*xEA3D9{+GuN@v`?jwom!@JNt_}*d4kbcRo$To&DYK z@LWM^o=wlN*%>q}l34aSnrTbTXy?weS*5|bu%WfKMmt;8dacLC=Gp8#wO&rmvtev{ zo-G_N=FCxt+DTpQ;r&j3S!}>+QlPdMo3JHB=*!-go)j^ATHnwPbwI z#1{Qd_ivqraBXr5bX3|;UV$8=#iRJUf92#AtQ7kn#a@x@MZkW44A`%qSAgLLwU_qq z*P3UWwx5c2G=>)YSLEJhSJ5(!dLrWN3sV_$Fuya!jk6vp*nBn@b8J2v20AYcB9);A zk;+gjV^i60oX>`%Y%aJ|J9;Ga(%MM@%j!wxQA18Dk9vUC&zaJUoM;)B!JLyNo13A# zK-rQw&!txf$CYG%9<^ip*OaL|>V0QYA7|Xr*UVh)Xm+l4!sXPy!{u9H`?&^;Q-Yms z%Jn?=5(Yz~R67g?!-69TgF)gy27|$1Fc=I5gTY`h7z_r3!C){L3$%9^{FRzY?}m<467jJcaMH&t(~^f8)fH`<($vFj&)lrNDrbgF!W3QrKODzqA? zwbEw^8>JfG!vhLm731JI^q?x&&7? z_wi`G(|`|!$)dV0_4pQ;lfb=`J`VUym9#h`w<8Y!DvoXgzdgYt& z4uTB#G#E$HSGMKQF1KOuqT>!`Ch9uFJBv=O1>Wg@K&{l8ZiaX07R0<$6iW839o4YP zI{~>Yz)^xmOP6OTJtjnbj!$)>`+L$MDPcMJ~e9b&FP>Nj*F${dgCX3P~B zc 0 then + for i=1,5 do + local pos = sp[pr:next(1,#sp)] + if pos then + minetest.add_entity(pos,"mobs_mc:vindicator") + end + end + local pos = sp[pr:next(1,#sp)] + if pos then + minetest.add_entity(pos,"mobs_mc:evoker") end - end - local evoker = minetest.find_node_near(p,25,spawnon) - if evoker then - minetest.add_entity(evoker,"mobs_mc:evoker") end local parrot = minetest.find_node_near(p,25,{"mcl_heads:wither_skeleton"}) if parrot then -- 2.40.1 From 8d9c5059f3aa8fc6e83a58ceb85808ce362fa207 Mon Sep 17 00:00:00 2001 From: cora Date: Tue, 12 Jul 2022 23:03:52 +0200 Subject: [PATCH 301/357] Fix wither dupe faulty on_place would not removed placed wither skelly head from inv. This also prevents the execution of the schematic checking routine if there is no soul sand under the head. --- mods/ENTITIES/mcl_wither_spawning/init.lua | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/mods/ENTITIES/mcl_wither_spawning/init.lua b/mods/ENTITIES/mcl_wither_spawning/init.lua index 2f1d744d8..a8f7f108d 100644 --- a/mods/ENTITIES/mcl_wither_spawning/init.lua +++ b/mods/ENTITIES/mcl_wither_spawning/init.lua @@ -46,6 +46,9 @@ end local wither_head = minetest.registered_nodes["mcl_heads:wither_skeleton"] local old_on_place = wither_head.on_place function wither_head.on_place(itemstack, placer, pointed) - minetest.after(0, wither_spawn, pointed.above) - old_on_place(itemstack, placer, pointed) + local n = minetest.get_node(vector.offset(pointed.above,0,-1,0)) + if n and n.name == "mcl_nether:soul_sand" then + minetest.after(0, wither_spawn, pointed.above) + end + return old_on_place(itemstack, placer, pointed) end -- 2.40.1 From 9e60d24fe06714af231ad6b546e7968524ff4127 Mon Sep 17 00:00:00 2001 From: cora Date: Wed, 13 Jul 2022 16:45:41 +0200 Subject: [PATCH 302/357] Never spawn mobs on leaves --- mods/ENTITIES/mcl_mobs/spawning.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mods/ENTITIES/mcl_mobs/spawning.lua b/mods/ENTITIES/mcl_mobs/spawning.lua index e4988183d..2108ecf41 100644 --- a/mods/ENTITIES/mcl_mobs/spawning.lua +++ b/mods/ENTITIES/mcl_mobs/spawning.lua @@ -428,6 +428,7 @@ if mobs_spawn then local is_water = get_item_group(gotten_node, "water") ~= 0 local is_lava = get_item_group(gotten_node, "lava") ~= 0 + local is_leaf = get_item_group(gotten_node, "leaves") ~= 0 local is_ground = not (is_water or is_lava) local is_grass = minetest.get_item_group(gotten_node,"grass_block") ~= 0 local has_bed = minetest.find_node_near(pos,25,{"group:bed"}) @@ -469,6 +470,7 @@ if mobs_spawn then and gotten_light >= mob_def.min_light and gotten_light <= mob_def.max_light and (is_ground or mob_def.type_of_spawning ~= "ground") + and (mob_def.type_of_spawning ~= "ground" or not is_leaf) and (mob_def.check_position and mob_def.check_position(spawning_position) or true) and (not is_farm_animal(mob_def.name) or is_grass) and (mob_type ~= "npc" or has_bed) -- 2.40.1 From 931cb2b99112849648013b443d8bd7df3220e131 Mon Sep 17 00:00:00 2001 From: cora Date: Wed, 13 Jul 2022 23:16:19 +0200 Subject: [PATCH 303/357] Add fallen tree logs --- mods/MAPGEN/mcl_terrain_features/init.lua | 84 +++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/mods/MAPGEN/mcl_terrain_features/init.lua b/mods/MAPGEN/mcl_terrain_features/init.lua index 0c95eb9b2..18f242e36 100644 --- a/mods/MAPGEN/mcl_terrain_features/init.lua +++ b/mods/MAPGEN/mcl_terrain_features/init.lua @@ -85,6 +85,90 @@ local function makelake(pos,size,liquid,placein,border,pr) return true end +local mushrooms = {"mcl_mushrooms:mushroom_brown","mcl_mushrooms:mushroom_red"} + +local function get_fallen_tree_schematic(pos,pr) + local tree = minetest.find_node_near(pos,15,{"group:tree"}) + if not tree then return end + tree = minetest.get_node(tree).name + local maxlen = 8 + local minlen = 2 + local vprob = 120 + local mprob = 160 + local len = pr:next(minlen,maxlen) + local schem = { + size = {x = len + 2, y = 2, z = 3}, + data = { + {name = "air", prob=0}, + {name = "air", prob=0}, + } + } + for i = 1,len do + table.insert(schem.data,{name = "mcl_core:vine",param2=4, prob=vprob}) + end + table.insert(schem.data,{name = "air", prob=0}) + table.insert(schem.data,{name = "air", prob=0}) + for i = 1,len do + table.insert(schem.data,{name = "air", prob=0}) + end + + table.insert(schem.data,{name = tree, param2 = 0}) + table.insert(schem.data,{name = "air", prob=0}) + for i = 1,len do + table.insert(schem.data,{name = tree, param2 = 12}) + end + table.insert(schem.data,{name = "air", prob=0}) + table.insert(schem.data,{name = "air", prob=0}) + for i = 1,len do + table.insert(schem.data,{name = mushrooms[pr:next(1,#mushrooms)], param2 = 12, prob=mprob}) + end + + table.insert(schem.data,{name = "air", prob=0}) + table.insert(schem.data,{name = "air", prob=0}) + for i = 1,len do + table.insert(schem.data,{name = "mcl_core:vine",param2=5, prob=vprob}) + end + table.insert(schem.data,{name = "air", prob=0}) + table.insert(schem.data,{name = "air", prob=0}) + for i = 1,len do + table.insert(schem.data,{name = "air", prob=0}) + end + + return schem +end + +mcl_structures.register_structure("fallen_tree",{ + place_on = {"group:grass_block"}, + terrain_feature = true, + noise_params = { + offset = 0.00018, + scale = 0.01011, + spread = {x = 250, y = 250, z = 250}, + seed = 24533, + octaves = 3, + persist = 0.66 + }, + flags = "place_center_x, place_center_z", + sidelen = 18, + solid_ground = true, + y_max = mcl_vars.mg_overworld_max, + y_min = minetest.get_mapgen_setting("water_level"), + on_place = function(pos,def,pr) + local air_p1 = vector.offset(pos,-def.sidelen/2,1,-def.sidelen/2) + local air_p2 = vector.offset(pos,def.sidelen/2,1,def.sidelen/2) + local air = minetest.find_nodes_in_area(air_p1,air_p2,{"air"}) + if #air < ( def.sidelen * def.sidelen ) / 2 then + return false + end + return true + end, + place_func = function(pos,def,pr) + local schem=get_fallen_tree_schematic(pos,pr) + if not schem then return end + return minetest.place_schematic(pos,schem,"random") + end +}) + mcl_structures.register_structure("lavapool",{ place_on = {"group:sand", "group:dirt", "group:stone"}, terrain_feature = true, -- 2.40.1 From 8cad4a688672e990ad4391e8b825b7713efb54a3 Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 10 Jul 2022 02:32:37 +0200 Subject: [PATCH 304/357] Add ruined portals --- mods/MAPGEN/mcl_structures/init.lua | 1 + mods/MAPGEN/mcl_structures/ruined_portal.lua | 82 ++++++++++++++++++ .../mcl_structures_ruined_portal_1.mts | Bin 0 -> 524 bytes .../mcl_structures_ruined_portal_2.mts | Bin 0 -> 521 bytes .../mcl_structures_ruined_portal_99.mts | Bin 0 -> 521 bytes 5 files changed, 83 insertions(+) create mode 100644 mods/MAPGEN/mcl_structures/ruined_portal.lua create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_ruined_portal_1.mts create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_ruined_portal_2.mts create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_ruined_portal_99.mts diff --git a/mods/MAPGEN/mcl_structures/init.lua b/mods/MAPGEN/mcl_structures/init.lua index 5b6be892d..44d21cd96 100644 --- a/mods/MAPGEN/mcl_structures/init.lua +++ b/mods/MAPGEN/mcl_structures/init.lua @@ -244,6 +244,7 @@ dofile(modpath.."/ocean_ruins.lua") dofile(modpath.."/witch_hut.lua") dofile(modpath.."/igloo.lua") dofile(modpath.."/woodland_mansion.lua") +dofile(modpath.."/ruined_portal.lua") dofile(modpath.."/geode.lua") diff --git a/mods/MAPGEN/mcl_structures/ruined_portal.lua b/mods/MAPGEN/mcl_structures/ruined_portal.lua new file mode 100644 index 000000000..cea89e0e9 --- /dev/null +++ b/mods/MAPGEN/mcl_structures/ruined_portal.lua @@ -0,0 +1,82 @@ +local modname = minetest.get_current_modname() +local modpath = minetest.get_modpath(modname) + +local function get_replacements(b,c,pr) + local r = {} + if not b then return r end + for k,v in pairs(b) do + if pr:next(1,100) < c then table.insert(r,v) end + end + return r +end + +local def = { + place_on = {"group:grass_block","group:dirt","mcl_core:dirt_with_grass","group:grass_block","group:sand","group:grass_block_snow","mcl_core:snow"}, + fill_ratio = 0.01, + flags = "place_center_x, place_center_z, all_floors", + solid_ground = true, + make_foundation = true, + chunk_probability = 400, + y_max = mcl_vars.mg_overworld_max, + y_min = 1, + sidelen = 10, + y_offset = -4, + filenames = { + modpath.."/schematics/mcl_structures_ruined_portal_1.mts", + modpath.."/schematics/mcl_structures_ruined_portal_2.mts", + modpath.."/schematics/mcl_structures_ruined_portal_99.mts", + }, + after_place = function(pos,def,pr) + local hl = def.sidelen / 2 + local p1 = vector.offset(pos,-hl,-hl,-hl) + local p2 = vector.offset(pos,hl,hl,hl) + local gold = minetest.find_nodes_in_area(p1,p2,{"mcl_core:goldblock"}) + local lava = minetest.find_nodes_in_area(p1,p2,{"mcl_core:lava_source"}) + local rack = minetest.find_nodes_in_area(p1,p2,{"mcl_nether:netherrack"}) + local brick = minetest.find_nodes_in_area(p1,p2,{"mcl_core:stonebrick"}) + local obby = minetest.find_nodes_in_area(p1,p2,{"mcl_core:obsidian"}) + minetest.bulk_set_node(get_replacements(gold,30,pr),{name="air"}) + minetest.bulk_set_node(get_replacements(lava,20,pr),{name="mcl_nether:magma"}) + minetest.bulk_set_node(get_replacements(rack,7,pr),{name="mcl_nether:magma"}) + minetest.bulk_set_node(get_replacements(obby,30,pr),{name="mcl_core:crying_obsidian"}) + minetest.bulk_set_node(get_replacements(obby,10,pr),{name="air"}) + minetest.bulk_set_node(get_replacements(brick,50,pr),{name="mcl_core:stonebrickcracked"}) + brick = minetest.find_nodes_in_area(p1,p2,{"mcl_core:stonebrick"}) + minetest.bulk_set_node(get_replacements(brick,50,pr),{name="mcl_core:stonebrickmossy"}) + end, + loot = { + ["mcl_chests:chest_small" ] ={{ + stacks_min = 2, + stacks_max = 6, + items = { + { itemstring = "mcl_core:iron_nugget", weight = 40, amount_min = 9, amount_max = 18 }, + { itemstring = "mcl_core:flint", weight = 40, amount_min = 1, amount_max=4 }, + { itemstring = "mcl_core:obsidian", weight = 40, amount_min = 1, amount_max=2 }, + { itemstring = "mcl_fire:fire_charge", weight = 40, amount_min = 1, amount_max = 1 }, + { itemstring = "mcl_fire:flint_and_steel", weight = 40, amount_min = 1, amount_max = 1 }, + { itemstring = "mcl_core:gold_nugget", weight = 15, amount_min = 4, amount_max = 24 }, + { itemstring = "mcl_core:apple_gold", weight = 15, }, + + { itemstring = "mcl_books:book", weight = 1, func = function(stack, pr) + mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}, pr) + end }, + --{ itemstring = "mcl_bamboo:bamboo", weight = 15, amount_min = 1, amount_max=3 }, --FIXME BAMBOO + + { itemstring = "mcl_core:diamond", weight = 3, amount_min = 1, amount_max = 3 }, + { itemstring = "mcl_mobitems:saddle", weight = 3, }, + { itemstring = "mcl_core:emerald", weight = 2, amount_min = 1, amount_max = 3 }, + + { itemstring = "mcl_mobitems:iron_horse_armor", weight = 1, }, + { itemstring = "mcl_mobitems:gold_horse_armor", weight = 1, }, + { itemstring = "mcl_mobitems:diamond_horse_armor", weight = 1, }, + { itemstring = "mcl_core:apple_gold", weight = 15, }, + } + }} + } +} +mcl_structures.register_structure("ruined_portal_overworld",def) +local ndef = table.copy(def) +ndef.y_min=mcl_vars.mg_nether_lava_min +ndef.y_max=mcl_vars.mg_nether_max - 15 +ndef.place_on = {"mcl_nether:netherrack","group:soul_block","mcl_blackstone:basalt,mcl_blackstone:blackstone","mcl_crimson:crimson_nylium","mcl_crimson:warped_nylium"}, +mcl_structures.register_structure("ruined_portal_nether",ndef) diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ruined_portal_1.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ruined_portal_1.mts new file mode 100644 index 0000000000000000000000000000000000000000..ae37576dc259184903dd7af589154b8c066aeeda GIT binary patch literal 524 zcmeYb3HD`RVPI$AVc@Js0t{RX%!!#r45GQoIq`X^B^jwjRuHNvF*%z-8YEm?0#s3K z1*U+U{JhkpqD-J9SWj|(QL0r=Vp(E*T26j>W?njj5J(SLI6XfnB`GH#s8kp(hNNEv zE(q3NoL^d$oXQ{w7tK#9&P>Tn%wv!O38A9=HP0Y!un6r1< zTd^huo;LGkN&mI=uSfHKabf!9ld@0lK4uehSa_jFgEb_ppjqd!f(83wPaP)1 z)nETt&ho^J#==}iQ>la nvOW&0qF1?=f`;PrWsSXe+-q++`F&+q{MXR^yz(C>DkcH|E$re` literal 0 HcmV?d00001 diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ruined_portal_2.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ruined_portal_2.mts new file mode 100644 index 0000000000000000000000000000000000000000..fd17f1365b9e9770b5337aea9e266e52b6ff8e12 GIT binary patch literal 521 zcmeYb3HD`RVPI$AVc@Js0t{RX%!!#r45GQoIq`X^B^jwjRuHNvF*%z-8YEm?0#s3K z1*U+U{JhkpqD-Kq5J)mPzbMrzJwGQUDJLH&CJYxtQV2F2tS~3BEHOSUC%-&1FP%XI zt`;m@oL^d$oXQ{w7tK#9&P>Tn%wv!O38A9=HP0Y!um~(a7 zYoR6uf!0RTjsIu%pI&{O>%}^*Q>knC79UkO-ru~yDaGs7CaZj(gQckK&`=$J9)%ul;Yr)^BuFM%#AhX2FANWz%~lAI1o;k^MSta>cJ@RsKfS zr8CkbfAwv9C}TQf)r{x!JvR4d39Vl(dtR^PcK>gOUB99%CeK;B=J|{dbB?@N#~NfU l;^6IPTh7k#XwwFjC*{w-D?WVoJ>+I|?Zw>>nS(48V*q7<>8t<% literal 0 HcmV?d00001 diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ruined_portal_99.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ruined_portal_99.mts new file mode 100644 index 0000000000000000000000000000000000000000..0834d8923e7ec5617c12bd757dc0119fa6d4133f GIT binary patch literal 521 zcmeYb3HD`RVPI$AVc@Js0t{RX%!!#r45GQoIq`X^B^jwjRuHNvF*%z-8YEm?0#s3K z1*U+U{JhkpqD-Kq5J)mPzbMrzJwGQUDJLH&CJYxtQYZo!%tMlu2JFb?LZF?z$w|TO6gg|J|(a=fZj?(xVjKwdoi1rGy9hXKs4) zbw@>glw17u=X2-HjkkIqbD-?#_4nsXub#JDDkE*X^Rw2TX!~t8{T~ kRDYhbOIfM#W`t4E_Rrd0JF3M)Yp>4#Wxj{e?Y5#e0M^an`v3p{ literal 0 HcmV?d00001 -- 2.40.1 From 455fac93506bc4b27ea074c2b4325512cb7a38ba Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 14 Jul 2022 06:09:55 +0200 Subject: [PATCH 305/357] Add schematics by RandomLegoBrick and PrarieWind --- mods/MAPGEN/mcl_structures/ruined_portal.lua | 5 ++++- .../mcl_structures_ruined_portal_3.mts | Bin 0 -> 684 bytes .../mcl_structures_ruined_portal_4.mts | Bin 0 -> 872 bytes .../mcl_structures_ruined_portal_5.mts | Bin 0 -> 1000 bytes 4 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_ruined_portal_3.mts create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_ruined_portal_4.mts create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_ruined_portal_5.mts diff --git a/mods/MAPGEN/mcl_structures/ruined_portal.lua b/mods/MAPGEN/mcl_structures/ruined_portal.lua index cea89e0e9..002195f76 100644 --- a/mods/MAPGEN/mcl_structures/ruined_portal.lua +++ b/mods/MAPGEN/mcl_structures/ruined_portal.lua @@ -24,6 +24,9 @@ local def = { filenames = { modpath.."/schematics/mcl_structures_ruined_portal_1.mts", modpath.."/schematics/mcl_structures_ruined_portal_2.mts", + modpath.."/schematics/mcl_structures_ruined_portal_3.mts", + modpath.."/schematics/mcl_structures_ruined_portal_4.mts", + modpath.."/schematics/mcl_structures_ruined_portal_5.mts", modpath.."/schematics/mcl_structures_ruined_portal_99.mts", }, after_place = function(pos,def,pr) @@ -76,7 +79,7 @@ local def = { } mcl_structures.register_structure("ruined_portal_overworld",def) local ndef = table.copy(def) -ndef.y_min=mcl_vars.mg_nether_lava_min +ndef.y_min=mcl_vars.mg_lava_nether_max +10 ndef.y_max=mcl_vars.mg_nether_max - 15 ndef.place_on = {"mcl_nether:netherrack","group:soul_block","mcl_blackstone:basalt,mcl_blackstone:blackstone","mcl_crimson:crimson_nylium","mcl_crimson:warped_nylium"}, mcl_structures.register_structure("ruined_portal_nether",ndef) diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ruined_portal_3.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ruined_portal_3.mts new file mode 100644 index 0000000000000000000000000000000000000000..88c0acb28b77dd13e01cb54fce427260564ded6a GIT binary patch literal 684 zcmeYb3HD`RVc=olXW*(w1q^%)%!!#r3<9~yIq`X^B^jwjR=J7kxrq#-NFor4qQvBE z1`&{Oa(+>&RZe1AVtjFaX;E@2120@OC9|l6K>~#vU!GZ#5uaX^SX|5?3z8`=0a{sX z1*V{u#wQhJ0!>#0N#`Wym82Hs0Ttwz!g=w@shK&MdFc=n(o*x1Q;V%2?tD+VtG8!JH=KYMtXiuN_byvw?ezOXJzh9NmY#4q{8|7T3LJVdR>ZB-D5IHly1NjbleLnT=b2@z;lB zSSkIqaT83NvEo|toc~{c2>j9)UH?(z>8h%8>1S&A`t)?F6JP5Te4Y5sdfh~OMfG$0 zH`HXxzT8#ww^Fvy(EVrLo8T4g>yy^Iy!*7+E?>Eg@40?}wZZ&}p(f9zzg_)oytQhX zmA|I_`z7j%lP+JbG7B{Qyz&11^uO=JnZLAuoIf?ZVNIw?&dV!iN$Zm)-D*yIuru+| zN|WfKYfa}9Zst7un6xoZ>1D59?dM+GRn)$4E5lN*68XQ{Ygbmpf1Y}+Jon9G+a=<2PvzxRx-QEG0O1oW AZvX%Q literal 0 HcmV?d00001 diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ruined_portal_4.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ruined_portal_4.mts new file mode 100644 index 0000000000000000000000000000000000000000..404256ed9970e7e6e50694c2fb1d752141b62649 GIT binary patch literal 872 zcmeYb3HD`RVc=%qXAr1I1q=cV%!!#r3<9~yIq`X^B^jwjR=J7kxrq#-NFor4qQvBE z1`&{Oa(+>&RZe1AVtjFaX;E@2gDgn2xCCfYu@#ttniZc^lnK)X67+Sfy9z>fT2-b zlAo6fvpYRMCk3J&96TUyQcgb5_c9>$u)xVlOhO5piaBp*z3yvP5NH+5*&h4)-TZy} z>-SYSr|?PVKbTPDvr6`0oh9G786h1fRweyE(C*Q7&b!jot!&Z}yOOqhsY|lcQN* z=NSd7uF*Bo%Jt)$di?3BvnS;x{8MNtc(Bmehjnv%qwNIMYVKy#{3t*eJ|FD>NkGb;l1i?&tZ|i31xQ-+&8yvnS8^+ z>iMz4&oX%vqN;nWzTW-Ee#tWZ{kE@@_?PUCdbW7A!reE_6NH~0Df{_q+3KSY=c<2f zp2Kd`81o^k=meioVLHRgw{z2ZH2>T>EK(E`bw{!L+@xJn2~$5U*s^KIoH+KYN#S!J zy!`z^)X7TFXcyO$$S$_ZFY>Bv-o6>uiuXT!$dPT~(YPdEwB(F}diSTx@+a-LE(HMH C#ef9> literal 0 HcmV?d00001 diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ruined_portal_5.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ruined_portal_5.mts new file mode 100644 index 0000000000000000000000000000000000000000..f14105154ea4c6c51f90710a93e82b8fb385128d GIT binary patch literal 1000 zcmeYb3HD`RVc=%qXArDM1q^}=%!!#r45GQoIq`X^B^jwjRuHNvF*%z-1SFiCUzBQ< zlUSA*Uz}fBl$^>SfTTD#F+DdCq8*_wEhoP`GcTRN7^JYc1ZY9A6_|=o$^jZ%T#}!c z8lRkzS)7`ani5}-pOaaf0c7NtmZTOj=#r#~K^X2tu(3%+nLu|dVVHrCOa}QZHHASM zj~WIcxT)#+IVnjw`9MR(L1HLj6c4ctY!XzW2CF1)a})aEHn21_FWLVa=Q2ae`5Ix$n_JEP(2Vbt<= zwDN7Gx_6lQdzJYs?PtF~Hh0Gr2CjAe;(f|UuZ8C`*WtCzN8EOWHYuK7WXo_f*=?nt+E*o(P2pR@ zSS%%#8+{hee7wO%#Yt94(@#QeotW74sv90QPTg5f-!5LAGV#wXC$8hql@=Wd>uT)T zY4vE4>r}OeN=ISGv|cwR~6 Date: Thu, 14 Jul 2022 15:39:37 +0200 Subject: [PATCH 306/357] Add soul lantern recipe --- mods/ITEMS/mcl_lanterns/register.lua | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_lanterns/register.lua b/mods/ITEMS/mcl_lanterns/register.lua index efdd1ed98..deb012306 100644 --- a/mods/ITEMS/mcl_lanterns/register.lua +++ b/mods/ITEMS/mcl_lanterns/register.lua @@ -23,4 +23,13 @@ minetest.register_craft({ {"mcl_core:iron_nugget", "mcl_torches:torch" , "mcl_core:iron_nugget"}, {"mcl_core:iron_nugget", "mcl_core:iron_nugget", "mcl_core:iron_nugget"}, }, -}) \ No newline at end of file +}) + +minetest.register_craft({ + output = "mcl_lanterns:soul_lantern_floor", + recipe = { + {"mcl_core:iron_nugget", "mcl_core:iron_nugget" , "mcl_core:iron_nugget"}, + {"mcl_core:iron_nugget", "mcl_blackstone:soul_torch", "mcl_core:iron_nugget"}, + {"mcl_core:iron_nugget", "mcl_core:iron_nugget" , "mcl_core:iron_nugget"}, + }, +}) -- 2.40.1 From e271e87aca5f256671045530233c22f335ed119e Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 14 Jul 2022 17:32:43 +0200 Subject: [PATCH 307/357] fix indentation --- mods/ITEMS/mcl_lanterns/register.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mods/ITEMS/mcl_lanterns/register.lua b/mods/ITEMS/mcl_lanterns/register.lua index deb012306..86305052b 100644 --- a/mods/ITEMS/mcl_lanterns/register.lua +++ b/mods/ITEMS/mcl_lanterns/register.lua @@ -28,8 +28,8 @@ minetest.register_craft({ minetest.register_craft({ output = "mcl_lanterns:soul_lantern_floor", recipe = { - {"mcl_core:iron_nugget", "mcl_core:iron_nugget" , "mcl_core:iron_nugget"}, - {"mcl_core:iron_nugget", "mcl_blackstone:soul_torch", "mcl_core:iron_nugget"}, - {"mcl_core:iron_nugget", "mcl_core:iron_nugget" , "mcl_core:iron_nugget"}, + {"mcl_core:iron_nugget", "mcl_core:iron_nugget" , "mcl_core:iron_nugget"}, + {"mcl_core:iron_nugget", "mcl_blackstone:soul_torch" , "mcl_core:iron_nugget"}, + {"mcl_core:iron_nugget", "mcl_core:iron_nugget" , "mcl_core:iron_nugget"}, }, }) -- 2.40.1 From aab31802696b8dd547786219f90cdabe0eed9f5d Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 15 Jul 2022 04:40:12 +0200 Subject: [PATCH 308/357] clear empty nametag as well as nil --- mods/ENTITIES/mcl_mobs/api.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 998b05547..da74f6918 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -91,7 +91,7 @@ minetest.register_chatcommand("clearmobs",{ if o.is_mob then if param == "all" or ( param == "nametagged" and o.nametag ) or - ( param == "" and not o.nametag and not o.tamed ) or + ( param == "" and ( not o.nametag or o.nametag == "" ) and not o.tamed ) or ( num and num > 0 and vector.distance(p:get_pos(),o.object:get_pos()) <= num ) then o.object:remove() end -- 2.40.1 From e413bbaf367e08430f45b21114e1d5b3473c4d3c Mon Sep 17 00:00:00 2001 From: Nathan Fritzler Date: Fri, 15 Jul 2022 13:24:45 -0600 Subject: [PATCH 309/357] Fix create_luacheck I've tested this code. --- tools/create_luacheck.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/create_luacheck.py b/tools/create_luacheck.py index 8b55c1376..d3ee5d038 100755 --- a/tools/create_luacheck.py +++ b/tools/create_luacheck.py @@ -19,7 +19,7 @@ pathlist = Path(path).rglob('*.lua') for path in pathlist: path_in_str = str(path) # print(path_in_str) - trouve = False + found = False with open(path_in_str) as f: local_vars = [] for i, line in enumerate(f.readlines()): @@ -38,7 +38,7 @@ for path in pathlist: local_vars.append(n.group('local_var')) if not found: - nb_varloc = len(variables_locales) + nb_varloc = len(local_vars) #print(path_in_str, ": -", "({} variables locales)".format(nb_varloc) if nb_varloc > 0 else '') print(', '.join(['"{}"'.format(v) for v in global_vars])) -- 2.40.1 From ee9cc5341b3fffc325715c464fb5ba1ecb1d54c9 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 15 Jul 2022 19:10:19 +0200 Subject: [PATCH 310/357] Fix villager crash when opening iron doors --- mods/ENTITIES/mcl_mobs/api.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index da74f6918..5485e7cc1 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -2312,9 +2312,9 @@ local function check_doors(self) local def = minetest.registered_nodes[n.name] local closed = n.name:find("_b_1") if t < 0.3 or t > 0.8 then - if not closed then def.on_rightclick(d,n,self) end + if not closed and def.on_rightclick then def.on_rightclick(d,n,self) end else - if closed then def.on_rightclick(d,n,self) end + if closed and def.on_rightclick then def.on_rightclick(d,n,self) end end end -- 2.40.1 From 27482ede7f12619f42368761844c80a04061f233 Mon Sep 17 00:00:00 2001 From: Ale Date: Thu, 14 Jul 2022 18:59:52 +0200 Subject: [PATCH 311/357] update locale es --- mods/ENTITIES/mobs_mc/locale/mobs_mc.es.tr | 52 ++++++++++------------ 1 file changed, 23 insertions(+), 29 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/locale/mobs_mc.es.tr b/mods/ENTITIES/mobs_mc/locale/mobs_mc.es.tr index 7f89bb664..09e0335b8 100644 --- a/mods/ENTITIES/mobs_mc/locale/mobs_mc.es.tr +++ b/mods/ENTITIES/mobs_mc/locale/mobs_mc.es.tr @@ -1,64 +1,58 @@ # textdomain: mobs_mc -Agent=Agente Bat=Murciélago Blaze=Blaze Chicken=Pollo +Cod=Bacalao Cow=Vaca -Mooshroom=Champiñaca +Mooshroom=Champivaca Creeper=Creeper -Ender Dragon=Enderdragón +Dolphin=Delfín +Ender Dragon=Ender Dragon Enderman=Enderman Endermite=Endermite Ghast=Ghast -Elder Guardian=Gran guardián Guardian=Guardián -Horse=Caballo -Skeleton Horse=Caballo esquelético -Zombie Horse=Caballo zombie +Elder Guardian=Guardián Anciano Donkey=Burro +Horse=Caballo Mule=Mula +Skeleton Horse=Caballo esqueleto +Zombie Horse=Caballo zombi Iron Golem=Golem de hierro Llama=Llama +Cat=Gato Ocelot=Ocelote Parrot=Loro Pig=Cerdo Polar Bear=Oso polar -Rabbit=Conejo Killer Bunny=Conejo asesino +Rabbit=Conejo +Salmon=Salmón Sheep=Oveja Shulker=Shulker Silverfish=Lepisma Skeleton=Esqueleto -Stray=Esqueleto -Wither Skeleton=Esqueleto wither +Stray=Esqueleto glacial +Wither Skeleton=Esqueleto del Wither Magma Cube=Cubo de Magma Slime=Slime Snow Golem=Golem de nieve -Spider=Araña Cave Spider=Araña de las cuevas +Spider=Araña Squid=Calamar Vex=Ánima +Master=Maestro +Villager=Aldeano Evoker=Invocador Illusioner=Illusionista -Villager=Aldeano Vindicator=Vindicador -Zombie Villager=Aldeano zombie +Zombie Villager=Aldeano zombi Witch=Bruja Wither=Wither Wolf=Lobo -Husk=Husk -Zombie=Zombie -Zombie Pigman=Cerdo Zombie -Farmer=Granjero -Fisherman=Pescador -Fletcher=Flechador -Shepherd=Sacerdote -Librarian=Bibliotecario -Cartographer=Cartógrafo -Armorer=Armero -Leatherworker=Peletero -Butcher=Carnicero -Weapon Smith=Herrero de Armas -Tool Smith=Herrero de Herramientas -Cleric=Sacerdote -Nitwit=Simple +Baby Husk=Bebé Zombi Momificado +Baby Zombie=Bebé Zombi +Husk=Zombi Momificado +Zombie=Zombi +Baby Zombie Pigman=Bebé Hombrecerdo Zombi +Zombie Pigman=Hombrecerdo Zombi -- 2.40.1 From 8ff559d4ada6cbc2fb7342ac614d0fa6960ebe7d Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 16 Jul 2022 02:07:17 +0200 Subject: [PATCH 312/357] Add ancient debris as normal ore --- mods/MAPGEN/mcl_mapgen_core/init.lua | 40 ++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/mods/MAPGEN/mcl_mapgen_core/init.lua b/mods/MAPGEN/mcl_mapgen_core/init.lua index 5a6082533..a59dfc935 100644 --- a/mods/MAPGEN/mcl_mapgen_core/init.lua +++ b/mods/MAPGEN/mcl_mapgen_core/init.lua @@ -404,6 +404,46 @@ if minetest.settings:get_bool("mcl_generate_ores", true) then y_max = mcl_worlds.layer_to_y(15), }) + -- + -- Ancient debris + -- + local ancient_debris_wherein = {"mcl_nether:netherrack","mcl_blackstone:blackstone","mcl_blackstone:basalt"} + -- Common spawn + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_nether:ancient_debris", + wherein = ancient_debris_wherein, + clust_scarcity = 25000, -- 0.004% chance + clust_num_ores = 3, + clust_size = 3, + y_min = mcl_vars.mg_nether_min + 8, + y_max = mcl_vars.mg_nether_min + 22, + }) + + -- Rare spawn (below) + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_nether:ancient_debris", + wherein = ancient_debris_wherein, + clust_scarcity = 32000, + clust_num_ores = 2, + clust_size = 3, + y_min = mcl_vars.mg_nether_min, + y_max = mcl_vars.mg_nether_min + 8, + }) + + -- Rare spawn (above) + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_nether:ancient_debris", + wherein = ancient_debris_wherein, + clust_scarcity = 32000, + clust_num_ores = 2, + clust_size = 3, + y_min = mcl_vars.mg_nether_min + 22, + y_max = mcl_vars.mg_nether_min + 119, + }) + -- -- Redstone -- -- 2.40.1 From 454d7e8b041fc3aa42345b8fafcb6128f50aadfc Mon Sep 17 00:00:00 2001 From: GNU Hacker Date: Wed, 29 Jun 2022 20:44:21 +0200 Subject: [PATCH 313/357] arrow check if pvp is enable --- mods/ITEMS/mcl_bows/arrow.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_bows/arrow.lua b/mods/ITEMS/mcl_bows/arrow.lua index 8edf75011..a2ba96f36 100644 --- a/mods/ITEMS/mcl_bows/arrow.lua +++ b/mods/ITEMS/mcl_bows/arrow.lua @@ -1,6 +1,7 @@ local S = minetest.get_translator(minetest.get_current_modname()) local mod_target = minetest.get_modpath("mcl_target") +local enable_pvp = minetest.settings:get_bool("enable_pvp") local math = math local vector = vector @@ -204,7 +205,7 @@ function ARROW_ENTITY.on_step(self, dtime) if hitpoint.type == "object" then -- find the closest object that is in the way of the arrow local ok = false - if hitpoint.ref:is_player() then + if hitpoint.ref:is_player() and enable_pvp then ok = true elseif hitpoint.ref:get_luaentity() then if (hitpoint.ref:get_luaentity().is_mob or hitpoint.ref:get_luaentity()._hittable_by_projectile) then -- 2.40.1 From b7f8a75d0417413c8a96d18063f153d633f47fac Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 15 Jul 2022 17:07:51 +0200 Subject: [PATCH 314/357] Add PVP check for rocket arrows --- mods/ITEMS/mcl_bows/rocket.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_bows/rocket.lua b/mods/ITEMS/mcl_bows/rocket.lua index c47989e3e..3d311eeb2 100644 --- a/mods/ITEMS/mcl_bows/rocket.lua +++ b/mods/ITEMS/mcl_bows/rocket.lua @@ -231,6 +231,7 @@ end local mod_awards = minetest.get_modpath("awards") and minetest.get_modpath("mcl_achievements") local mod_button = minetest.get_modpath("mesecons_button") local mod_target = minetest.get_modpath("mcl_target") +local enable_pvp = minetest.settings:get_bool("enable_pvp") minetest.register_craftitem("mcl_bows:rocket", { description = S("Arrow"), @@ -417,7 +418,7 @@ function ARROW_ENTITY.on_step(self, dtime) if hitpoint.type == "object" then -- find the closest object that is in the way of the arrow local ok = false - if hitpoint.ref:is_player() then + if hitpoint.ref:is_player() and enable_pvp then ok = true elseif hitpoint.ref:get_luaentity() then if (hitpoint.ref:get_luaentity().is_mob or hitpoint.ref:get_luaentity()._hittable_by_projectile) then -- 2.40.1 From 77d834ac5ed442a66472789315ee63956a2e8827 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 15 Jul 2022 17:09:04 +0200 Subject: [PATCH 315/357] Add PVP check to tipped arrows --- mods/ITEMS/mcl_potions/tipped_arrow.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_potions/tipped_arrow.lua b/mods/ITEMS/mcl_potions/tipped_arrow.lua index a3dbe84c2..3c18fe725 100644 --- a/mods/ITEMS/mcl_potions/tipped_arrow.lua +++ b/mods/ITEMS/mcl_potions/tipped_arrow.lua @@ -30,6 +30,7 @@ local how_to_shoot = minetest.registered_items["mcl_bows:arrow"]._doc_items_usag local mod_awards = minetest.get_modpath("awards") and minetest.get_modpath("mcl_achievements") local mod_button = minetest.get_modpath("mesecons_button") +local enable_pvp = minetest.settings:get_bool("enable_pvp") local arrow_longdesc = minetest.registered_items["mcl_bows:arrow"]._doc_items_longdesc or "" local arrow_tt = minetest.registered_items["mcl_bows:arrow"]._tt_help or "" @@ -217,7 +218,7 @@ function mcl_potions.register_arrow(name, desc, color, def) if hitpoint.type == "object" then -- find the closest object that is in the way of the arrow local ok = false - if hitpoint.ref:is_player() then + if hitpoint.ref:is_player() and enable_pvp then ok = true elseif hitpoint.ref:get_luaentity() then if (hitpoint.ref:get_luaentity().is_mob or hitpoint.ref:get_luaentity()._hittable_by_projectile) then -- 2.40.1 From bf23c61e34b36fcd0a9c788d5088c882f6b66edc Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 16 Jul 2022 00:43:18 +0200 Subject: [PATCH 316/357] skip damage completely when player & pvp disabled --- mods/ITEMS/mcl_bows/arrow.lua | 2 +- mods/ITEMS/mcl_bows/rocket.lua | 2 +- mods/ITEMS/mcl_potions/tipped_arrow.lua | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mods/ITEMS/mcl_bows/arrow.lua b/mods/ITEMS/mcl_bows/arrow.lua index a2ba96f36..a03b875cb 100644 --- a/mods/ITEMS/mcl_bows/arrow.lua +++ b/mods/ITEMS/mcl_bows/arrow.lua @@ -207,7 +207,7 @@ function ARROW_ENTITY.on_step(self, dtime) local ok = false if hitpoint.ref:is_player() and enable_pvp then ok = true - elseif hitpoint.ref:get_luaentity() then + elseif not hitpoint.ref:is_player() and hitpoint.ref:get_luaentity() then if (hitpoint.ref:get_luaentity().is_mob or hitpoint.ref:get_luaentity()._hittable_by_projectile) then ok = true end diff --git a/mods/ITEMS/mcl_bows/rocket.lua b/mods/ITEMS/mcl_bows/rocket.lua index 3d311eeb2..d25c52647 100644 --- a/mods/ITEMS/mcl_bows/rocket.lua +++ b/mods/ITEMS/mcl_bows/rocket.lua @@ -420,7 +420,7 @@ function ARROW_ENTITY.on_step(self, dtime) local ok = false if hitpoint.ref:is_player() and enable_pvp then ok = true - elseif hitpoint.ref:get_luaentity() then + elseif not hitpoint.ref:is_player() and hitpoint.ref:get_luaentity() then if (hitpoint.ref:get_luaentity().is_mob or hitpoint.ref:get_luaentity()._hittable_by_projectile) then ok = true end diff --git a/mods/ITEMS/mcl_potions/tipped_arrow.lua b/mods/ITEMS/mcl_potions/tipped_arrow.lua index 3c18fe725..f42718a12 100644 --- a/mods/ITEMS/mcl_potions/tipped_arrow.lua +++ b/mods/ITEMS/mcl_potions/tipped_arrow.lua @@ -220,7 +220,7 @@ function mcl_potions.register_arrow(name, desc, color, def) local ok = false if hitpoint.ref:is_player() and enable_pvp then ok = true - elseif hitpoint.ref:get_luaentity() then + elseif not hitpoint.ref:is_player() and hitpoint.ref:get_luaentity() then if (hitpoint.ref:get_luaentity().is_mob or hitpoint.ref:get_luaentity()._hittable_by_projectile) then ok = true end -- 2.40.1 From 0b157c953f95589955f6d181d4839d1cd7df14ca Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 16 Jul 2022 00:44:04 +0200 Subject: [PATCH 317/357] fix wrong argument to sound_play --- mods/ITEMS/mcl_potions/tipped_arrow.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_potions/tipped_arrow.lua b/mods/ITEMS/mcl_potions/tipped_arrow.lua index f42718a12..53a37705e 100644 --- a/mods/ITEMS/mcl_potions/tipped_arrow.lua +++ b/mods/ITEMS/mcl_potions/tipped_arrow.lua @@ -284,7 +284,7 @@ function mcl_potions.register_arrow(name, desc, color, def) if is_player then if self._shooter and self._shooter:is_player() then -- “Ding” sound for hitting another player - minetest.sound_play({name="mcl_bows_hit_player", gain=0.1}, {to_player=self._shooter}, true) + minetest.sound_play({name="mcl_bows_hit_player", gain=0.1}, {to_player=self._shooter:get_player_name()}, true) end end -- 2.40.1 From ecea1224fc0cd8acb43c59f1272633f0840db510 Mon Sep 17 00:00:00 2001 From: cora Date: Tue, 21 Jun 2022 12:36:15 +0200 Subject: [PATCH 318/357] Set version to 0.77 in readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 908769438..5af7b2568 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ An unofficial Minecraft-like game for Minetest. Forked from MineClone by davedevils. Developed by many people. Not developed or endorsed by Mojang AB. -Version: 0.75 (in development) +Version: 0.77 ### Gameplay You start in a randomly-generated world made entirely of cubes. You can explore -- 2.40.1 From 0b3f9d66a4bd88295ecadd895ce65bbef82b080d Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 15 Jul 2022 20:40:46 +0200 Subject: [PATCH 319/357] Update some wordings in readme, remove 1.12 target --- README.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 5af7b2568..d05139bc7 100644 --- a/README.md +++ b/README.md @@ -91,11 +91,11 @@ The MineClone2 repository is hosted at Mesehub. To contribute or report issues, ## Target - Crucially, create a stable, moddable, free/libre clone of Minecraft based on the Minetest engine with polished features, usable in both -singleplayer and multiplayer. Currently, most of **Minecraft Java -Edition 1.12.2** features are already implemented and polishing existing +singleplayer and multiplayer. Currently, a lot of **Minecraft Java +Edition** features are already implemented and polishing existing features are prioritized over new feature requests. - With lessened priority yet strictly, implement features targetting -**Minecraft version 1.17 + OptiFine** (OptiFine only as far as supported +**Current Minecraft versions + OptiFine** (OptiFine only as far as supported by the Minetest Engine). This means features in parity with the listed Minecraft experiences are prioritized over those that don't fulfill this scope. @@ -108,8 +108,7 @@ playerbase on low spec computers, optimizations are hard to investigate. This game is currently in **beta** stage. It is playable, but not yet feature-complete. Backwards-compability is not entirely guaranteed, updating your world might cause small bugs. -If you want to use the git version of MineClone2 in production, consider using the production branch. -It is updated weekly and contains relatively stable code for servers. +If you want to use the development version of MineClone2 in production, the master branch is usually relatively stable. The testing branch often features some experimental PRs and should be considered less stable. The following main features are available: @@ -124,7 +123,7 @@ The following main features are available: * Most blocks in the overworld * Water and lava * Weather -* 28 biomes +* 28 biomes + 5 Nether Biomes * The Nether, a fiery underworld in another dimension * Redstone circuits (partially) * Minecarts (partial) @@ -162,7 +161,7 @@ The following features are incomplete: * Special minecarts * A couple of non-trivial blocks and items -Bonus features (not found in Minecraft 1.12): +Bonus features (not found in Minecraft): * Built-in crafting guide which shows you crafting and smelting recipes * In-game help system containing extensive help about gameplay basics, blocks, items and more @@ -175,6 +174,9 @@ Bonus features (not found in Minecraft 1.12): * Nether Brick Fence Gate * Red Nether Brick Fence * Red Nether Brick Fence Gate +* Structure replacements - these small variants of Minecraft structures serve as replacements until we can get large structures working: + * Woodland Cabin (Mansions) + * Nether Outpost (Fortress) Technical differences from Minecraft: -- 2.40.1 From 0e60f0ca5c02f98e16f4451767de3081d4dd0e12 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 15 Jul 2022 20:52:38 +0200 Subject: [PATCH 320/357] Update CREDITS.md --- CREDITS.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/CREDITS.md b/CREDITS.md index c1174e797..644d37612 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -27,6 +27,8 @@ * Code-Sploit * NO11 * kabou +* PrarieWind +* RandomLegoBrick ## Contributors * Laurent Rocher @@ -71,6 +73,10 @@ * Sven792 * aldum * Dieter44 +* Pepebotella +* MrRar +* Lazerbeak12345 +* mrminer ## MineClone5 * kay27 @@ -134,6 +140,8 @@ * yutyo * NO11 * kay27 +* RandomLegoBrick +* cora ## Translations * Wuzzy @@ -143,6 +151,8 @@ * pitchum * todoporlalibertad * Marcin Serwin +* Pepebotella +* Emojigit ## Funders * 40W @@ -150,5 +160,6 @@ ## Special thanks * celeron55 for creating Minetest * Jordach for the jukebox music compilation from Big Freaking Dig +* wsor for working tirelessly in the shadows for the good of all of us, particularly helping with solving contentDB and copyright issues. * The workaholics who spent way too much time writing for the Minecraft Wiki. It's an invaluable resource for creating this game * Notch and Jeb for being the major forces behind Minecraft -- 2.40.1 From 433242b247b76254b716f304b0bcf92b3c74b717 Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 16 Jul 2022 16:41:58 +0200 Subject: [PATCH 321/357] Some more additions to CREDITS.md --- CREDITS.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CREDITS.md b/CREDITS.md index 644d37612..c2c59b504 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -27,6 +27,8 @@ * Code-Sploit * NO11 * kabou +* rudzik8 +* chmodsayshello * PrarieWind * RandomLegoBrick @@ -84,10 +86,12 @@ * epCode * NO11 * j45 +* chmodsayshello * 3raven * PrarieWind * Gustavo1 * CableGuy67 +* MrRar ## Mineclonia * erlehmann @@ -140,6 +144,7 @@ * yutyo * NO11 * kay27 +* MysticTempest * RandomLegoBrick * cora -- 2.40.1 From 91d36a20d737db7f120c9f54ca92ad01b296be7a Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 16 Jul 2022 17:47:54 +0200 Subject: [PATCH 322/357] Set version to 0.78 (indev) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d05139bc7..01719a7a7 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ An unofficial Minecraft-like game for Minetest. Forked from MineClone by davedevils. Developed by many people. Not developed or endorsed by Mojang AB. -Version: 0.77 +Version: 0.78 (in development) ### Gameplay You start in a randomly-generated world made entirely of cubes. You can explore -- 2.40.1 From e4c7d575fcc52d492a38b0a8084814bc9dd553fe Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Sun, 17 Jul 2022 21:46:36 +1000 Subject: [PATCH 323/357] take no damage when swimming near roof, no ability to no-clip through roof when swimming --- mods/PLAYER/mcl_playerinfo/init.lua | 10 ++++++++-- mods/PLAYER/mcl_playerplus/init.lua | 28 ++++++++++++++++++++++------ 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/mods/PLAYER/mcl_playerinfo/init.lua b/mods/PLAYER/mcl_playerinfo/init.lua index 9c5d1433f..e37d6750b 100644 --- a/mods/PLAYER/mcl_playerinfo/init.lua +++ b/mods/PLAYER/mcl_playerinfo/init.lua @@ -34,10 +34,14 @@ local function get_player_nodes(player_pos) work_pos.y = work_pos.y + 1.5 -- head level local node_head = node_ok(work_pos) + work_pos.y = work_pos.y + 2.2 -- above head level + local node_above_head = node_ok(work_pos) + work_pos.y = work_pos.y - 2.2 -- above head level + work_pos.y = work_pos.y - 1.2 -- feet level local node_feet = node_ok(work_pos) - return node_stand, node_stand_below, node_head, node_feet + return node_stand, node_stand_below, node_head, node_feet, node_above_head end minetest.register_globalstep(function(dtime) @@ -62,11 +66,12 @@ minetest.register_globalstep(function(dtime) local pos = player:get_pos() -- what is around me? - local node_stand, node_stand_below, node_head, node_feet = get_player_nodes(pos) + local node_stand, node_stand_below, node_head, node_feet, node_above_head = get_player_nodes(pos) mcl_playerinfo[name].node_stand = node_stand mcl_playerinfo[name].node_stand_below = node_stand_below mcl_playerinfo[name].node_head = node_head mcl_playerinfo[name].node_feet = node_feet + mcl_playerinfo[name].node_above_head = node_above_head end @@ -81,6 +86,7 @@ minetest.register_on_joinplayer(function(player) node_feet = "", node_stand = "", node_stand_below = "", + node_above_head = "", } end) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 924b60c97..bb6734a8d 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -118,7 +118,8 @@ function limit_vel_yaw(player_vel_yaw, yaw) return player_vel_yaw end -local node_stand, node_stand_below, node_head, node_feet +local node_stand, node_stand_below, node_head, node_feet, node_above_head +local is_swimming -- This following part is 2 wrapper functions for player:set_bones -- and player:set_properties preventing them from being resent on @@ -370,13 +371,15 @@ minetest.register_globalstep(function(dtime) set_bone_position_conditional(player,"Body_Control", vector.new(0,6.3,0), vector.new(0, -player_vel_yaw + yaw, 0)) elseif get_item_group(mcl_playerinfo[name].node_head, "water") ~= 0 and is_sprinting(name) == true then -- set head pitch and yaw when swimming + is_swimming = true set_bone_position_conditional(player,"Head_Control", vector.new(0,6.3,0), vector.new(pitch-degrees(dir_to_pitch(player_velocity)),player_vel_yaw - yaw,0)) -- sets eye height, and nametag color accordingly set_properties_conditional(player,{collisionbox = {-0.312,0,-0.312,0.312,0.8,0.312}, eye_height = 0.5, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) -- control body bone when swimming set_bone_position_conditional(player,"Body_Control", vector.new(0,6.3,0), vector.new(degrees(dir_to_pitch(player_velocity)) - 90,-player_vel_yaw + yaw + 180,0)) - else + elseif is_swimming and mcl_playerinfo[name].node_head == "air" or get_item_group(mcl_playerinfo[name].node_head, "water") ~= 0 then -- sets eye height, and nametag color accordingly + is_swimming = false set_properties_conditional(player,{collisionbox = {-0.312,0,-0.312,0.312,1.8,0.312}, eye_height = 1.5, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) set_bone_position_conditional(player,"Head_Control", vector.new(0,6.3,0), vector.new(pitch, player_vel_yaw - yaw, 0)) @@ -397,11 +400,16 @@ minetest.register_globalstep(function(dtime) node_stand = mcl_playerinfo[name].node_stand node_stand_below = mcl_playerinfo[name].node_stand_below node_head = mcl_playerinfo[name].node_head + node_above_head = mcl_playerinfo[name].node_above_head node_feet = mcl_playerinfo[name].node_feet - if not node_stand or not node_stand_below or not node_head or not node_feet then + if not node_stand or not node_stand_below or not node_head or not node_feet or not node_above_head then return end - if not minetest.registered_nodes[node_stand] or not minetest.registered_nodes[node_stand_below] or not minetest.registered_nodes[node_head] or not minetest.registered_nodes[node_feet] then + if (not minetest.registered_nodes[node_stand] + or not minetest.registered_nodes[node_stand_below] + or not minetest.registered_nodes[node_head] + or not minetest.registered_nodes[node_feet] + or not minetest.registered_nodes[node_above_head]) then return end @@ -459,8 +467,9 @@ minetest.register_globalstep(function(dtime) local node_stand = mcl_playerinfo[name].node_stand local node_stand_below = mcl_playerinfo[name].node_stand_below local node_head = mcl_playerinfo[name].node_head + local node_above_head = mcl_playerinfo[name].node_above_head local node_feet = mcl_playerinfo[name].node_feet - if not node_stand or not node_stand_below or not node_head or not node_feet then + if not node_stand or not node_stand_below or not node_head or not node_feet or not node_above_head then return end @@ -493,9 +502,16 @@ minetest.register_globalstep(function(dtime) -- Is player suffocating inside node? (Only for solid full opaque cube type nodes -- without group disable_suffocation=1) - local ndef = minetest.registered_nodes[node_head] + local ndef = nil + if is_swimming then + ndef = minetest.registered_nodes[node_feet] + -- mcl_util.deal_damage(player, 1, {type = "in_wall"}) + else + ndef = minetest.registered_nodes[node_head] + end if (ndef.walkable == nil or ndef.walkable == true) + or not is_swimming and (ndef.collision_box == nil or ndef.collision_box.type == "regular") and (ndef.node_box == nil or ndef.node_box.type == "regular") and (ndef.groups.disable_suffocation ~= 1) -- 2.40.1 From 2e06e22d7082854d3c9e02f6c483cb2e80b9e8dd Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Sun, 17 Jul 2022 21:50:22 +1000 Subject: [PATCH 324/357] removed unnecessary node_above_head variable --- mods/PLAYER/mcl_playerinfo/init.lua | 10 ++-------- mods/PLAYER/mcl_playerplus/init.lua | 11 ++++------- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/mods/PLAYER/mcl_playerinfo/init.lua b/mods/PLAYER/mcl_playerinfo/init.lua index e37d6750b..9c5d1433f 100644 --- a/mods/PLAYER/mcl_playerinfo/init.lua +++ b/mods/PLAYER/mcl_playerinfo/init.lua @@ -34,14 +34,10 @@ local function get_player_nodes(player_pos) work_pos.y = work_pos.y + 1.5 -- head level local node_head = node_ok(work_pos) - work_pos.y = work_pos.y + 2.2 -- above head level - local node_above_head = node_ok(work_pos) - work_pos.y = work_pos.y - 2.2 -- above head level - work_pos.y = work_pos.y - 1.2 -- feet level local node_feet = node_ok(work_pos) - return node_stand, node_stand_below, node_head, node_feet, node_above_head + return node_stand, node_stand_below, node_head, node_feet end minetest.register_globalstep(function(dtime) @@ -66,12 +62,11 @@ minetest.register_globalstep(function(dtime) local pos = player:get_pos() -- what is around me? - local node_stand, node_stand_below, node_head, node_feet, node_above_head = get_player_nodes(pos) + local node_stand, node_stand_below, node_head, node_feet = get_player_nodes(pos) mcl_playerinfo[name].node_stand = node_stand mcl_playerinfo[name].node_stand_below = node_stand_below mcl_playerinfo[name].node_head = node_head mcl_playerinfo[name].node_feet = node_feet - mcl_playerinfo[name].node_above_head = node_above_head end @@ -86,7 +81,6 @@ minetest.register_on_joinplayer(function(player) node_feet = "", node_stand = "", node_stand_below = "", - node_above_head = "", } end) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index bb6734a8d..713a079da 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -118,7 +118,7 @@ function limit_vel_yaw(player_vel_yaw, yaw) return player_vel_yaw end -local node_stand, node_stand_below, node_head, node_feet, node_above_head +local node_stand, node_stand_below, node_head, node_feet local is_swimming -- This following part is 2 wrapper functions for player:set_bones @@ -400,16 +400,14 @@ minetest.register_globalstep(function(dtime) node_stand = mcl_playerinfo[name].node_stand node_stand_below = mcl_playerinfo[name].node_stand_below node_head = mcl_playerinfo[name].node_head - node_above_head = mcl_playerinfo[name].node_above_head node_feet = mcl_playerinfo[name].node_feet - if not node_stand or not node_stand_below or not node_head or not node_feet or not node_above_head then + if not node_stand or not node_stand_below or not node_head or not node_feet then return end if (not minetest.registered_nodes[node_stand] or not minetest.registered_nodes[node_stand_below] or not minetest.registered_nodes[node_head] - or not minetest.registered_nodes[node_feet] - or not minetest.registered_nodes[node_above_head]) then + or not minetest.registered_nodes[node_feet]) then return end @@ -467,9 +465,8 @@ minetest.register_globalstep(function(dtime) local node_stand = mcl_playerinfo[name].node_stand local node_stand_below = mcl_playerinfo[name].node_stand_below local node_head = mcl_playerinfo[name].node_head - local node_above_head = mcl_playerinfo[name].node_above_head local node_feet = mcl_playerinfo[name].node_feet - if not node_stand or not node_stand_below or not node_head or not node_feet or not node_above_head then + if not node_stand or not node_stand_below or not node_head or not node_feet then return end -- 2.40.1 From 4738834ddd31cd4e960d8def3d3facd92d51efed Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Sun, 17 Jul 2022 22:40:33 +1000 Subject: [PATCH 325/357] remove unecessary code --- mods/PLAYER/mcl_playerplus/init.lua | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 713a079da..37e7ea60c 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -377,7 +377,7 @@ minetest.register_globalstep(function(dtime) set_properties_conditional(player,{collisionbox = {-0.312,0,-0.312,0.312,0.8,0.312}, eye_height = 0.5, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) -- control body bone when swimming set_bone_position_conditional(player,"Body_Control", vector.new(0,6.3,0), vector.new(degrees(dir_to_pitch(player_velocity)) - 90,-player_vel_yaw + yaw + 180,0)) - elseif is_swimming and mcl_playerinfo[name].node_head == "air" or get_item_group(mcl_playerinfo[name].node_head, "water") ~= 0 then + elseif mcl_playerinfo[name].node_head == "air" or get_item_group(mcl_playerinfo[name].node_head, "water") ~= 0 then -- sets eye height, and nametag color accordingly is_swimming = false set_properties_conditional(player,{collisionbox = {-0.312,0,-0.312,0.312,1.8,0.312}, eye_height = 1.5, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) @@ -503,12 +503,10 @@ minetest.register_globalstep(function(dtime) local ndef = nil if is_swimming then ndef = minetest.registered_nodes[node_feet] - -- mcl_util.deal_damage(player, 1, {type = "in_wall"}) else ndef = minetest.registered_nodes[node_head] end if (ndef.walkable == nil or ndef.walkable == true) - or not is_swimming and (ndef.collision_box == nil or ndef.collision_box.type == "regular") and (ndef.node_box == nil or ndef.node_box.type == "regular") and (ndef.groups.disable_suffocation ~= 1) -- 2.40.1 From a41cbb7ebf45e2ac0216cc11d6297695b7062828 Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Sun, 17 Jul 2022 22:50:22 +1000 Subject: [PATCH 326/357] added comment and removed unnecessary code --- mods/PLAYER/mcl_playerplus/init.lua | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 37e7ea60c..48b09adae 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -499,12 +499,10 @@ minetest.register_globalstep(function(dtime) -- Is player suffocating inside node? (Only for solid full opaque cube type nodes -- without group disable_suffocation=1) - - local ndef = nil + -- if swimming, check the feet node instead, because the head node will be above the player when swimming + local ndef = minetest.registered_nodes[node_head] if is_swimming then ndef = minetest.registered_nodes[node_feet] - else - ndef = minetest.registered_nodes[node_head] end if (ndef.walkable == nil or ndef.walkable == true) and (ndef.collision_box == nil or ndef.collision_box.type == "regular") -- 2.40.1 From 9062a6e22efe6d8199c07cda82caf656fb322ce9 Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Sun, 17 Jul 2022 23:14:24 +1000 Subject: [PATCH 327/357] add node_head_top to check to make sure you won't clip through blocks before going out of swim / fly mode --- mods/PLAYER/mcl_playerinfo/init.lua | 9 +++++++-- mods/PLAYER/mcl_playerplus/init.lua | 14 ++++++++++---- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/mods/PLAYER/mcl_playerinfo/init.lua b/mods/PLAYER/mcl_playerinfo/init.lua index 9c5d1433f..1f1b84749 100644 --- a/mods/PLAYER/mcl_playerinfo/init.lua +++ b/mods/PLAYER/mcl_playerinfo/init.lua @@ -33,11 +33,14 @@ local function get_player_nodes(player_pos) work_pos.y = work_pos.y + 1.5 -- head level local node_head = node_ok(work_pos) + work_pos.y = work_pos.y + 0.5 -- top of head level, at collision box height + local node_head_top = node_ok(work_pos) + work_pos.y = work_pos.y - 0.5 work_pos.y = work_pos.y - 1.2 -- feet level local node_feet = node_ok(work_pos) - return node_stand, node_stand_below, node_head, node_feet + return node_stand, node_stand_below, node_head, node_feet, node_head_top end minetest.register_globalstep(function(dtime) @@ -62,11 +65,12 @@ minetest.register_globalstep(function(dtime) local pos = player:get_pos() -- what is around me? - local node_stand, node_stand_below, node_head, node_feet = get_player_nodes(pos) + local node_stand, node_stand_below, node_head, node_feet, node_head_top = get_player_nodes(pos) mcl_playerinfo[name].node_stand = node_stand mcl_playerinfo[name].node_stand_below = node_stand_below mcl_playerinfo[name].node_head = node_head mcl_playerinfo[name].node_feet = node_feet + mcl_playerinfo[name].node_head_top = node_head_top end @@ -81,6 +85,7 @@ minetest.register_on_joinplayer(function(player) node_feet = "", node_stand = "", node_stand_below = "", + node_head_top = "", } end) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 48b09adae..cdee0b798 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -118,7 +118,7 @@ function limit_vel_yaw(player_vel_yaw, yaw) return player_vel_yaw end -local node_stand, node_stand_below, node_head, node_feet +local node_stand, node_stand_below, node_head, node_feet, node_head_top local is_swimming -- This following part is 2 wrapper functions for player:set_bones @@ -377,7 +377,10 @@ minetest.register_globalstep(function(dtime) set_properties_conditional(player,{collisionbox = {-0.312,0,-0.312,0.312,0.8,0.312}, eye_height = 0.5, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) -- control body bone when swimming set_bone_position_conditional(player,"Body_Control", vector.new(0,6.3,0), vector.new(degrees(dir_to_pitch(player_velocity)) - 90,-player_vel_yaw + yaw + 180,0)) - elseif mcl_playerinfo[name].node_head == "air" or get_item_group(mcl_playerinfo[name].node_head, "water") ~= 0 then + elseif (mcl_playerinfo[name].node_head_top == "air" -- make sure the collision box is not going to clip through the ceiling + or get_item_group(mcl_playerinfo[name].node_head_top, "water") ~= 0) + and (mcl_playerinfo[name].node_head == "air" + or get_item_group(mcl_playerinfo[name].node_head, "water") ~= 0) then -- sets eye height, and nametag color accordingly is_swimming = false set_properties_conditional(player,{collisionbox = {-0.312,0,-0.312,0.312,1.8,0.312}, eye_height = 1.5, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) @@ -401,13 +404,15 @@ minetest.register_globalstep(function(dtime) node_stand_below = mcl_playerinfo[name].node_stand_below node_head = mcl_playerinfo[name].node_head node_feet = mcl_playerinfo[name].node_feet + node_head_top = mcl_playerinfo[name].node_head_top if not node_stand or not node_stand_below or not node_head or not node_feet then return end if (not minetest.registered_nodes[node_stand] or not minetest.registered_nodes[node_stand_below] or not minetest.registered_nodes[node_head] - or not minetest.registered_nodes[node_feet]) then + or not minetest.registered_nodes[node_feet] + or not minetest.registered_nodes[node_head_top]) then return end @@ -466,7 +471,8 @@ minetest.register_globalstep(function(dtime) local node_stand_below = mcl_playerinfo[name].node_stand_below local node_head = mcl_playerinfo[name].node_head local node_feet = mcl_playerinfo[name].node_feet - if not node_stand or not node_stand_below or not node_head or not node_feet then + local node_head_top = mcl_playerinfo[name].node_head_top + if not node_stand or not node_stand_below or not node_head or not node_feet or not node_head_top then return end -- 2.40.1 From e9ad2cfe1103e260975cf73125eff377229b1c9c Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 17 Jul 2022 23:34:39 +0200 Subject: [PATCH 328/357] Make parrots imitate nearby mobs --- mods/ENTITIES/mobs_mc/parrot.lua | 40 ++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/mods/ENTITIES/mobs_mc/parrot.lua b/mods/ENTITIES/mobs_mc/parrot.lua index 84b3aaead..850fac7c3 100644 --- a/mods/ENTITIES/mobs_mc/parrot.lua +++ b/mods/ENTITIES/mobs_mc/parrot.lua @@ -13,6 +13,45 @@ local shoulders = { right = vector.new(3.75,10.5,0) } +local function get_random_mob_sound() + local t = table.copy(minetest.registered_entities) + table.shuffle(t) + for _,e in pairs(t) do + if e.is_mob and e.sounds then + return e.sounds[math.random(#e.sounds)] + end + end + return minetest.registered_entities["mobs_mc:parrot"].sounds.random +end + +local function imitate_mob_sound(self,mob) + local snd = mob.sounds.random + if not snd or mob.name == "mobs_mc:parrot" or math.random(20) == 1 then + snd = get_random_mob_sound() + end + return minetest.sound_play(snd, { + pos = self.object:get_pos(), + gain = 1.0, + pitch = 2.5, + max_hear_distance = self.sounds and self.sounds.distance or 32 + }, true) +end + +local function check_mobimitate(self,dtime) + if not self._mobimitate_timer or self._mobimitate_timer > 30 then + self._mobimitate_timer = 0 + for _,o in pairs(minetest.get_objects_inside_radius(self.object:get_pos(),32)) do + local l = o:get_luaentity() + if l and l.is_mob and l.name ~= "mobs_mc:parrot" then + imitate_mob_sound(self,l) + return + end + end + end + self._mobimitate_timer = self._mobimitate_timer + dtime + +end + --find a free shoulder or return nil local function get_shoulder(player) local sh = "left" @@ -159,6 +198,7 @@ mcl_mobs:register_mob("mobs_mc:parrot", { end, do_custom = function(self,dtime) check_perch(self,dtime) + check_mobimitate(self,dtime) end, do_punch = function(self,puncher) --do_punch is the mcl_mobs_redo variant - it gets called by on_punch later.... if self.object:get_attach() == puncher then -- 2.40.1 From a49e66dbd3344d2c053ce6aba57bbd68ad4247aa Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 17 Jul 2022 23:42:34 +0200 Subject: [PATCH 329/357] Detection radius is 20 according to the wiki --- mods/ENTITIES/mobs_mc/parrot.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/ENTITIES/mobs_mc/parrot.lua b/mods/ENTITIES/mobs_mc/parrot.lua index 850fac7c3..80a5b9318 100644 --- a/mods/ENTITIES/mobs_mc/parrot.lua +++ b/mods/ENTITIES/mobs_mc/parrot.lua @@ -40,7 +40,7 @@ end local function check_mobimitate(self,dtime) if not self._mobimitate_timer or self._mobimitate_timer > 30 then self._mobimitate_timer = 0 - for _,o in pairs(minetest.get_objects_inside_radius(self.object:get_pos(),32)) do + for _,o in pairs(minetest.get_objects_inside_radius(self.object:get_pos(),20)) do local l = o:get_luaentity() if l and l.is_mob and l.name ~= "mobs_mc:parrot" then imitate_mob_sound(self,l) -- 2.40.1 From de0a78012de18968db9e2d0ea849c73bf1d143b5 Mon Sep 17 00:00:00 2001 From: SumianVoice Date: Mon, 18 Jul 2022 10:09:04 +1000 Subject: [PATCH 330/357] fix getting stuck under non-opaque blocks --- mods/PLAYER/mcl_playerplus/init.lua | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index cdee0b798..c3876269c 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -377,10 +377,8 @@ minetest.register_globalstep(function(dtime) set_properties_conditional(player,{collisionbox = {-0.312,0,-0.312,0.312,0.8,0.312}, eye_height = 0.5, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) -- control body bone when swimming set_bone_position_conditional(player,"Body_Control", vector.new(0,6.3,0), vector.new(degrees(dir_to_pitch(player_velocity)) - 90,-player_vel_yaw + yaw + 180,0)) - elseif (mcl_playerinfo[name].node_head_top == "air" -- make sure the collision box is not going to clip through the ceiling - or get_item_group(mcl_playerinfo[name].node_head_top, "water") ~= 0) - and (mcl_playerinfo[name].node_head == "air" - or get_item_group(mcl_playerinfo[name].node_head, "water") ~= 0) then + elseif get_item_group(mcl_playerinfo[name].node_head, "opaque") == 0 + and get_item_group(mcl_playerinfo[name].node_head_top, "opaque") == 0 then -- sets eye height, and nametag color accordingly is_swimming = false set_properties_conditional(player,{collisionbox = {-0.312,0,-0.312,0.312,1.8,0.312}, eye_height = 1.5, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) -- 2.40.1 From a077e4535fc173bda23013b71d65f98117b9d2fb Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 17 Jul 2022 00:32:06 +0200 Subject: [PATCH 331/357] Fix non-monsters being unable to attack A check in the relevant function excluded all non-monsters from looking for targets to attack. This removes that check and relies on the passive attribute of the entity --- mods/ENTITIES/mcl_mobs/api.lua | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 5485e7cc1..61bed6901 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -1905,11 +1905,10 @@ local specific_attack = function(list, what) return false end --- monster find someone to attack +-- find someone to attack local monster_attack = function(self) - if self.type ~= "monster" - or not damage_enabled + if not damage_enabled or minetest.is_creative_enabled("") or self.passive or self.state == "attack" -- 2.40.1 From a68343b71d7625e31e57adcbce4a82061b1eb54f Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 17 Jul 2022 02:20:12 +0200 Subject: [PATCH 332/357] Add group spawning minimum attribute --- mods/ENTITIES/mcl_mobs/spawning.lua | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/spawning.lua b/mods/ENTITIES/mcl_mobs/spawning.lua index 2108ecf41..b3de6f50f 100644 --- a/mods/ENTITIES/mcl_mobs/spawning.lua +++ b/mods/ENTITIES/mcl_mobs/spawning.lua @@ -386,15 +386,18 @@ local function get_water_spawn(p) end end -local function spawn_group(p,mob,spawn_on,group_max) - local nn = minetest.find_nodes_in_area(vector.offset(p,-3,-3,-3),vector.offset(p,3,3,3),spawn_on) +local function spawn_group(p,mob,spawn_on,group_max,group_min) + if not group_min then group_min = 1 end + local nn = minetest.find_nodes_in_area(vector.offset(p,-5,-3,-5),vector.offset(p,5,3,5),spawn_on) + local o if not nn or #nn < 1 then nn = {} table.insert(nn,p) end - for i = 1, math.random(group_max) do - minetest.add_entity(nn[math.random(#nn)],mob) + for i = 1, math.random(group_min,group_max) do + o = minetest.add_entity(nn[math.random(#nn)],mob) end + return o end if mobs_spawn then @@ -461,7 +464,7 @@ if mobs_spawn then end local mob_def = mob_library_worker_table[mob_index] local mob_type = minetest.registered_entities[mob_def.name].type - local spawn_in_group = minetest.registered_entities[mob_def.name].spawn_in_group + local spawn_in_group = minetest.registered_entities[mob_def.name].spawn_in_group or 4 if mob_def and spawning_position.y >= mob_def.min_height and spawning_position.y <= mob_def.max_height @@ -483,10 +486,13 @@ if mobs_spawn then end end --everything is correct, spawn mob - local object = minetest.add_entity(spawning_position, mob_def.name) + local object if spawn_in_group then - spawn_group(spawning_position,mob_def.name,{gotten_node},spawn_in_group) + object = spawn_group(spawning_position,mob_def.name,{gotten_node},spawn_in_group,spawn_in_group_min) + else object = minetest.add_entity(spawning_position, mob_def.name) end + + if object then return mob_def.on_spawn and mob_def.on_spawn(object, spawning_position) end -- 2.40.1 From 9883a37754e9479adeb2dfd554ec05b2362efca8 Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 17 Jul 2022 02:20:51 +0200 Subject: [PATCH 333/357] Enable group spawning for all mobs, add mc values --- mods/ENTITIES/mobs_mc/bat.lua | 1 + mods/ENTITIES/mobs_mc/blaze.lua | 2 ++ mods/ENTITIES/mobs_mc/cod.lua | 3 ++- mods/ENTITIES/mobs_mc/cow+mooshroom.lua | 2 ++ mods/ENTITIES/mobs_mc/ghast.lua | 1 + mods/ENTITIES/mobs_mc/guardian.lua | 4 +++- mods/ENTITIES/mobs_mc/horse.lua | 4 ++++ mods/ENTITIES/mobs_mc/llama.lua | 2 ++ mods/ENTITIES/mobs_mc/ocelot.lua | 2 ++ mods/ENTITIES/mobs_mc/rabbit.lua | 3 ++- mods/ENTITIES/mobs_mc/villager_zombie.lua | 1 + mods/ENTITIES/mobs_mc/wolf.lua | 1 + 12 files changed, 23 insertions(+), 3 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/bat.lua b/mods/ENTITIES/mobs_mc/bat.lua index b41dabcba..1a40203c0 100644 --- a/mods/ENTITIES/mobs_mc/bat.lua +++ b/mods/ENTITIES/mobs_mc/bat.lua @@ -7,6 +7,7 @@ mcl_mobs:register_mob("mobs_mc:bat", { type = "animal", spawn_class = "ambient", can_despawn = true, + spawn_in_group = 8, passive = true, hp_min = 6, hp_max = 6, diff --git a/mods/ENTITIES/mobs_mc/blaze.lua b/mods/ENTITIES/mobs_mc/blaze.lua index e0ff50909..c06e0bea6 100644 --- a/mods/ENTITIES/mobs_mc/blaze.lua +++ b/mods/ENTITIES/mobs_mc/blaze.lua @@ -16,6 +16,8 @@ mcl_mobs:register_mob("mobs_mc:blaze", { description = S("Blaze"), type = "monster", spawn_class = "hostile", + spawn_in_group_min = 2, + spawn_in_group = 3, hp_min = 20, hp_max = 20, xp_min = 10, diff --git a/mods/ENTITIES/mobs_mc/cod.lua b/mods/ENTITIES/mobs_mc/cod.lua index 9174cd65f..fe72c2f84 100644 --- a/mods/ENTITIES/mobs_mc/cod.lua +++ b/mods/ENTITIES/mobs_mc/cod.lua @@ -40,7 +40,8 @@ local cod = { xp_max = 3, armor = 100, rotate = 180, - spawn_in_group = 10, + spawn_in_group_min = 3, + spawn_in_group = 8, tilt_swim = true, collisionbox = {-0.3, 0.0, -0.3, 0.3, 0.79, 0.3}, visual = "mesh", diff --git a/mods/ENTITIES/mobs_mc/cow+mooshroom.lua b/mods/ENTITIES/mobs_mc/cow+mooshroom.lua index b2d6158bc..256c3d8aa 100644 --- a/mods/ENTITIES/mobs_mc/cow+mooshroom.lua +++ b/mods/ENTITIES/mobs_mc/cow+mooshroom.lua @@ -83,6 +83,8 @@ mcl_mobs:register_mob("mobs_mc:cow", cow_def) local mooshroom_def = table.copy(cow_def) mooshroom_def.description = S("Mooshroom") mooshroom_def.mesh = "mobs_mc_cow.b3d" +mooshroom_def.spawn_in_group_min = 4 +mooshroom_def.spawn_in_group = 8 mooshroom_def.textures = { {"mobs_mc_mooshroom.png", "mobs_mc_mushroom_red.png"}, {"mobs_mc_mooshroom_brown.png", "mobs_mc_mushroom_brown.png" } } mooshroom_def.on_rightclick = function(self, clicker) if mcl_mobs:feed_tame(self, clicker, 1, true, true) then return end diff --git a/mods/ENTITIES/mobs_mc/ghast.lua b/mods/ENTITIES/mobs_mc/ghast.lua index d08b0055c..c5172c4e5 100644 --- a/mods/ENTITIES/mobs_mc/ghast.lua +++ b/mods/ENTITIES/mobs_mc/ghast.lua @@ -23,6 +23,7 @@ mcl_mobs:register_mob("mobs_mc:ghast", { collisionbox = {-2, 5, -2, 2, 9, 2}, visual = "mesh", mesh = "mobs_mc_ghast.b3d", + spawn_in_group = 1, textures = { {"mobs_mc_ghast.png"}, }, diff --git a/mods/ENTITIES/mobs_mc/guardian.lua b/mods/ENTITIES/mobs_mc/guardian.lua index 53e93f472..dd5f3a83e 100644 --- a/mods/ENTITIES/mobs_mc/guardian.lua +++ b/mods/ENTITIES/mobs_mc/guardian.lua @@ -8,12 +8,14 @@ mcl_mobs:register_mob("mobs_mc:guardian", { description = S("Guardian"), type = "monster", spawn_class = "hostile", + spawn_in_group_min = 2, + spawn_in_group = 4, hp_min = 30, hp_max = 30, xp_min = 10, xp_max = 10, breath_max = -1, - passive = false, + passive = false, attack_type = "dogfight", pathfinding = 1, view_range = 16, diff --git a/mods/ENTITIES/mobs_mc/horse.lua b/mods/ENTITIES/mobs_mc/horse.lua index 20ff8b718..ffa2548d0 100644 --- a/mods/ENTITIES/mobs_mc/horse.lua +++ b/mods/ENTITIES/mobs_mc/horse.lua @@ -100,6 +100,8 @@ local horse = { description = S("Horse"), type = "animal", spawn_class = "passive", + spawn_in_group_min = 2, + spawn_in_group = 6, visual = "mesh", mesh = "mobs_mc_horse.b3d", visual_size = {x=3.0, y=3.0}, @@ -490,6 +492,8 @@ local d = 0.86 -- donkey scale local donkey = table.copy(horse) donkey.description = S("Donkey") donkey.textures = {{"blank.png", "mobs_mc_donkey.png", "blank.png"}} +donkey.spawn_in_group = 3 +donkey.spawn_in_group_min = 1 donkey.animation = { speed_normal = 25, stand_start = 0, stand_end = 0, diff --git a/mods/ENTITIES/mobs_mc/llama.lua b/mods/ENTITIES/mobs_mc/llama.lua index a211b117a..94ab7a094 100644 --- a/mods/ENTITIES/mobs_mc/llama.lua +++ b/mods/ENTITIES/mobs_mc/llama.lua @@ -28,6 +28,8 @@ mcl_mobs:register_mob("mobs_mc:llama", { description = S("Llama"), type = "animal", spawn_class = "passive", + spawn_in_group_min = 4, + spawn_in_group = 6, hp_min = 15, hp_max = 30, xp_min = 1, diff --git a/mods/ENTITIES/mobs_mc/ocelot.lua b/mods/ENTITIES/mobs_mc/ocelot.lua index 983199762..7d8b444da 100644 --- a/mods/ENTITIES/mobs_mc/ocelot.lua +++ b/mods/ENTITIES/mobs_mc/ocelot.lua @@ -30,6 +30,8 @@ local ocelot = { type = "animal", spawn_class = "passive", can_despawn = true, + spawn_in_group = 3, + spawn_in_group_min = 1, hp_min = 10, hp_max = 10, xp_min = 1, diff --git a/mods/ENTITIES/mobs_mc/rabbit.lua b/mods/ENTITIES/mobs_mc/rabbit.lua index 2632eafce..c11167007 100644 --- a/mods/ENTITIES/mobs_mc/rabbit.lua +++ b/mods/ENTITIES/mobs_mc/rabbit.lua @@ -6,9 +6,10 @@ local rabbit = { description = S("Rabbit"), type = "animal", spawn_class = "passive", + spawn_in_group_min = 2, + spawn_in_group = 3, passive = true, reach = 1, - hp_min = 3, hp_max = 3, xp_min = 1, diff --git a/mods/ENTITIES/mobs_mc/villager_zombie.lua b/mods/ENTITIES/mobs_mc/villager_zombie.lua index daeed9e9a..fedbf5a6e 100644 --- a/mods/ENTITIES/mobs_mc/villager_zombie.lua +++ b/mods/ENTITIES/mobs_mc/villager_zombie.lua @@ -29,6 +29,7 @@ mcl_mobs:register_mob("mobs_mc:villager_zombie", { description = S("Zombie Villager"), type = "monster", spawn_class = "hostile", + spawn_in_group = 1, hp_min = 20, hp_max = 20, xp_min = 5, diff --git a/mods/ENTITIES/mobs_mc/wolf.lua b/mods/ENTITIES/mobs_mc/wolf.lua index d875bebf9..a1606836d 100644 --- a/mods/ENTITIES/mobs_mc/wolf.lua +++ b/mods/ENTITIES/mobs_mc/wolf.lua @@ -18,6 +18,7 @@ local wolf = { xp_max = 3, passive = false, group_attack = true, + spawn_in_group = 8, collisionbox = {-0.3, -0.01, -0.3, 0.3, 0.84, 0.3}, visual = "mesh", mesh = "mobs_mc_wolf.b3d", -- 2.40.1 From 3a32e4e4e9716c9b9b3b4dc6b4d6b3e86fa2802e Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 17 Jul 2022 02:30:16 +0200 Subject: [PATCH 334/357] Never spawn mobs on bedrock --- mods/ENTITIES/mcl_mobs/spawning.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mods/ENTITIES/mcl_mobs/spawning.lua b/mods/ENTITIES/mcl_mobs/spawning.lua index b3de6f50f..d97d99536 100644 --- a/mods/ENTITIES/mcl_mobs/spawning.lua +++ b/mods/ENTITIES/mcl_mobs/spawning.lua @@ -432,6 +432,7 @@ if mobs_spawn then local is_water = get_item_group(gotten_node, "water") ~= 0 local is_lava = get_item_group(gotten_node, "lava") ~= 0 local is_leaf = get_item_group(gotten_node, "leaves") ~= 0 + local is_bedrock = gotten_node == "mcl_core:bedrock" local is_ground = not (is_water or is_lava) local is_grass = minetest.get_item_group(gotten_node,"grass_block") ~= 0 local has_bed = minetest.find_node_near(pos,25,{"group:bed"}) @@ -478,6 +479,7 @@ if mobs_spawn then and (not is_farm_animal(mob_def.name) or is_grass) and (mob_type ~= "npc" or has_bed) and (mob_def.type_of_spawning ~= "water" or is_water) + and not is_bedrock then if mob_def.type_of_spawning == "water" then spawning_position = get_water_spawn(spawning_position) -- 2.40.1 From 987ae3c6e88474f9a22c25119d1747331013a15c Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 17 Jul 2022 02:34:34 +0200 Subject: [PATCH 335/357] Fix mobs spawning inside nodes --- mods/ENTITIES/mcl_mobs/api.lua | 1 + mods/ENTITIES/mcl_mobs/spawning.lua | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 61bed6901..d77a9c419 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -4036,6 +4036,7 @@ minetest.register_entity(name, { fire_damage_resistant = def.fire_damage_resistant or false, ignited_by_sunlight = def.ignited_by_sunlight or false, spawn_in_group = def.spawn_in_group, + spawn_in_group_min = def.spawn_in_group_min, -- End of MCL2 extensions on_spawn = def.on_spawn, diff --git a/mods/ENTITIES/mcl_mobs/spawning.lua b/mods/ENTITIES/mcl_mobs/spawning.lua index d97d99536..943d751f2 100644 --- a/mods/ENTITIES/mcl_mobs/spawning.lua +++ b/mods/ENTITIES/mcl_mobs/spawning.lua @@ -388,7 +388,12 @@ end local function spawn_group(p,mob,spawn_on,group_max,group_min) if not group_min then group_min = 1 end - local nn = minetest.find_nodes_in_area(vector.offset(p,-5,-3,-5),vector.offset(p,5,3,5),spawn_on) + local nn + if mob.spawn_class == "water" then + nn= minetest.find_nodes_in_area(vector.offset(p,-5,-3,-5),vector.offset(p,5,3,5),spawn_on) + else + nn= minetest.find_nodes_in_area_under_air(vector.offset(p,-5,-3,-5),vector.offset(p,5,3,5),spawn_on) + end local o if not nn or #nn < 1 then nn = {} -- 2.40.1 From 2d3f4531c94cfd21a2af5539601e30483c90c128 Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 17 Jul 2022 03:45:41 +0200 Subject: [PATCH 336/357] Add mob spawning debug command --- mods/ENTITIES/mcl_mobs/spawning.lua | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/mods/ENTITIES/mcl_mobs/spawning.lua b/mods/ENTITIES/mcl_mobs/spawning.lua index 943d751f2..6d17be0ad 100644 --- a/mods/ENTITIES/mcl_mobs/spawning.lua +++ b/mods/ENTITIES/mcl_mobs/spawning.lua @@ -205,6 +205,16 @@ local function count_mobs(pos) return num end +local function count_mobs_total() + local num = 0 + for _,l in pairs(minetest.luaentities) do + if l.is_mob then + num = num + 1 + end + end + return num +end + -- global functions @@ -386,6 +396,9 @@ local function get_water_spawn(p) end end +local dbg_spawn_attempts = 0 +local dbg_spawn_succ = 0 + local function spawn_group(p,mob,spawn_on,group_max,group_min) if not group_min then group_min = 1 end local nn @@ -401,15 +414,28 @@ local function spawn_group(p,mob,spawn_on,group_max,group_min) end for i = 1, math.random(group_min,group_max) do o = minetest.add_entity(nn[math.random(#nn)],mob) + if o then dbg_spawn_succ = dbg_spawn_succ + 1 end end return o end +minetest.register_chatcommand("mobstats",{ + privs = { debug = true }, + func = function(n,param) + local pos = minetest.get_player_by_name(n):get_pos() + minetest.chat_send_player(n,"mobs within 32 radius of player:"..count_mobs(pos)) + minetest.chat_send_player(n,"total mobs:"..count_mobs_total()) + minetest.chat_send_player(n,"spawning attempts since server start:"..dbg_spawn_attempts) + minetest.chat_send_player(n,"successful spawns since server start:"..dbg_spawn_succ) + end +}) + if mobs_spawn then local perlin_noise local function spawn_a_mob(pos, dimension, y_min, y_max) + dbg_spawn_attempts = dbg_spawn_attempts + 1 local dimension = dimension or mcl_worlds.pos_to_dimension(pos) local goal_pos = get_next_mob_spawn_pos(pos) local spawning_position_list = find_nodes_in_area_under_air( -- 2.40.1 From 1087d9e54b295dc26fcf008b8c6792036e7f0f36 Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 17 Jul 2022 05:42:45 +0200 Subject: [PATCH 337/357] Implement mc like mob cap --- mods/ENTITIES/mcl_mobs/spawning.lua | 62 ++++++++++++++++++----------- mods/ENTITIES/mobs_mc/dolphin.lua | 2 +- 2 files changed, 39 insertions(+), 25 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/spawning.lua b/mods/ENTITIES/mcl_mobs/spawning.lua index 6d17be0ad..4fdcf251a 100644 --- a/mods/ENTITIES/mcl_mobs/spawning.lua +++ b/mods/ENTITIES/mcl_mobs/spawning.lua @@ -15,7 +15,7 @@ local math_cos = math.cos local math_sin = math.sin local math_round = function(x) return (x > 0) and math_floor(x + 0.5) or math_ceil(x - 0.5) end ---local vector_distance = vector.distance +local vector_distance = vector.distance local vector_new = vector.new local vector_floor = vector.floor @@ -25,7 +25,15 @@ local table_remove = table.remove local pairs = pairs -- range for mob count -local aoc_range = 32 +local aoc_range = 136 + +local mob_cap = { + monster = 70, + animal =10, + ambient =15, + water = 5, --currently unused + water_ambient = 20, --currently unused +} --do mobs spawn? local mobs_spawn = minetest.settings:get_bool("mobs_spawn", true) ~= false @@ -153,6 +161,10 @@ local list_of_all_biomes = { -- dimension biome: "Nether", + "BasaltDelta", + "CrimsonForest", + "WarpedForest", + "SoulsandValley", "End", -- Overworld regular: @@ -189,27 +201,29 @@ local list_of_all_biomes = { "MesaBryce", "JungleEdge", "SavannaM", - "Nether", - "WarpedForest", - "SoulsandValley" } -- count how many mobs are in an area -local function count_mobs(pos) +local function count_mobs(pos,r,mob_type) local num = 0 - for _,object in pairs(get_objects_inside_radius(pos, aoc_range)) do - if object and object:get_luaentity() and object:get_luaentity().is_mob then - num = num + 1 + for _,l in pairs(minetest.luaentities) do + if l and l.is_mob and (mob_type == nil or l.type == mob_type) then + local p = l.object:get_pos() + if p and vector_distance(p,pos) < r then + num = num + 1 + end end end return num end -local function count_mobs_total() +local function count_mobs_total(mob_type) local num = 0 for _,l in pairs(minetest.luaentities) do if l.is_mob then - num = num + 1 + if mob_type == nil or l.type == mob_type then + num = num + 1 + end end end return num @@ -302,7 +316,7 @@ function mcl_mobs:spawn_setup(def) spawn_dictionary[#spawn_dictionary + 1] = { name = name, dimension = dimension, - type_of_spawning = type_of_spawning, + type_of_spawning = type_of_spawning, biomes = biomes, min_light = min_light, max_light = max_light, @@ -401,19 +415,18 @@ local dbg_spawn_succ = 0 local function spawn_group(p,mob,spawn_on,group_max,group_min) if not group_min then group_min = 1 end - local nn - if mob.spawn_class == "water" then - nn= minetest.find_nodes_in_area(vector.offset(p,-5,-3,-5),vector.offset(p,5,3,5),spawn_on) - else - nn= minetest.find_nodes_in_area_under_air(vector.offset(p,-5,-3,-5),vector.offset(p,5,3,5),spawn_on) - end + local nn= minetest.find_nodes_in_area_under_air(vector.offset(p,-5,-3,-5),vector.offset(p,5,3,5),spawn_on) local o if not nn or #nn < 1 then nn = {} table.insert(nn,p) end for i = 1, math.random(group_min,group_max) do - o = minetest.add_entity(nn[math.random(#nn)],mob) + local sp = vector.offset(nn[math.random(#nn)],0,1,0) + if mob.type_of_spawning == "water" then + sp = get_water_spawn(sp) + end + o = minetest.add_entity(sp,mob.name) if o then dbg_spawn_succ = dbg_spawn_succ + 1 end end return o @@ -423,7 +436,7 @@ minetest.register_chatcommand("mobstats",{ privs = { debug = true }, func = function(n,param) local pos = minetest.get_player_by_name(n):get_pos() - minetest.chat_send_player(n,"mobs within 32 radius of player:"..count_mobs(pos)) + minetest.chat_send_player(n,"mobs within 32 radius of player:"..count_mobs(pos,32)) minetest.chat_send_player(n,"total mobs:"..count_mobs_total()) minetest.chat_send_player(n,"spawning attempts since server start:"..dbg_spawn_attempts) minetest.chat_send_player(n,"successful spawns since server start:"..dbg_spawn_succ) @@ -446,9 +459,6 @@ if mobs_spawn then if #spawning_position_list <= 0 then return end local spawning_position = spawning_position_list[math_random(1, #spawning_position_list)] - --hard code mob limit in area to 5 for now - if count_mobs(spawning_position) >= 5 then return end - local gotten_node = get_node(spawning_position).name local gotten_biome = minetest.get_biome_data(spawning_position) if not gotten_node or not gotten_biome then return end @@ -497,7 +507,11 @@ if mobs_spawn then local mob_def = mob_library_worker_table[mob_index] local mob_type = minetest.registered_entities[mob_def.name].type local spawn_in_group = minetest.registered_entities[mob_def.name].spawn_in_group or 4 + local mob_count_wide = count_mobs(pos,aoc_range,mob_type) + local mob_count = count_mobs(spawning_position,32,mob_type) if mob_def + and mob_count_wide < (mob_cap[mob_type] or 15) + and mob_count < 5 and spawning_position.y >= mob_def.min_height and spawning_position.y <= mob_def.max_height and mob_def.dimension == dimension @@ -521,7 +535,7 @@ if mobs_spawn then --everything is correct, spawn mob local object if spawn_in_group then - object = spawn_group(spawning_position,mob_def.name,{gotten_node},spawn_in_group,spawn_in_group_min) + object = spawn_group(spawning_position,mob_def,{gotten_node},spawn_in_group,spawn_in_group_min) else object = minetest.add_entity(spawning_position, mob_def.name) end diff --git a/mods/ENTITIES/mobs_mc/dolphin.lua b/mods/ENTITIES/mobs_mc/dolphin.lua index 01e6f56ee..095657470 100644 --- a/mods/ENTITIES/mobs_mc/dolphin.lua +++ b/mods/ENTITIES/mobs_mc/dolphin.lua @@ -30,7 +30,7 @@ local S = minetest.get_translator(minetest.get_current_modname()) --################### local dolphin = { - type = "monster", + type = "animal", spawn_class = "water", can_despawn = true, passive = true, -- 2.40.1 From 99037cb0ecd467bcfc2a92ae5161f924e6bcf02c Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 17 Jul 2022 15:33:06 +0200 Subject: [PATCH 338/357] adapt several mob spawning conditions to mc --- mods/ENTITIES/mcl_mobs/spawning.lua | 3 ++- mods/ENTITIES/mobs_mc/chicken.lua | 2 -- mods/ENTITIES/mobs_mc/common.lua | 0 mods/ENTITIES/mobs_mc/cow+mooshroom.lua | 5 ----- mods/ENTITIES/mobs_mc/creeper.lua | 5 ----- mods/ENTITIES/mobs_mc/dolphin.lua | 4 ++-- mods/ENTITIES/mobs_mc/enderman.lua | 6 +++--- mods/ENTITIES/mobs_mc/horse.lua | 2 +- mods/ENTITIES/mobs_mc/llama.lua | 18 ++++++++---------- mods/ENTITIES/mobs_mc/pig.lua | 5 ----- mods/ENTITIES/mobs_mc/sheep.lua | 2 +- mods/ENTITIES/mobs_mc/skeleton_wither.lua | 3 ++- mods/ENTITIES/mobs_mc/slime+magma_cube.lua | 5 ----- mods/ENTITIES/mobs_mc/spider.lua | 5 ----- mods/ENTITIES/mobs_mc/zombie.lua | 6 ------ mods/ENTITIES/mobs_mc/zombiepig.lua | 3 ++- 16 files changed, 21 insertions(+), 53 deletions(-) delete mode 100644 mods/ENTITIES/mobs_mc/common.lua diff --git a/mods/ENTITIES/mcl_mobs/spawning.lua b/mods/ENTITIES/mcl_mobs/spawning.lua index 4fdcf251a..4e45a0045 100644 --- a/mods/ENTITIES/mcl_mobs/spawning.lua +++ b/mods/ENTITIES/mcl_mobs/spawning.lua @@ -174,6 +174,8 @@ local list_of_all_biomes = { "Swampland", "Taiga", "ExtremeHills", + "ExtremeHillsM", + "ExtremeHills+_snowtop", "Jungle", "Savanna", "BirchForest", @@ -192,7 +194,6 @@ local list_of_all_biomes = { "ExtremeHills+_snowtop", "MesaPlateauFM_grasstop", "JungleEdgeM", - "ExtremeHillsM", "JungleM", "BirchForestM", "MesaPlateauF", diff --git a/mods/ENTITIES/mobs_mc/chicken.lua b/mods/ENTITIES/mobs_mc/chicken.lua index a36b58502..886a945b9 100644 --- a/mods/ENTITIES/mobs_mc/chicken.lua +++ b/mods/ENTITIES/mobs_mc/chicken.lua @@ -122,8 +122,6 @@ mcl_mobs:spawn_specific( "ExtremeHills_beach", "ExtremeHillsM", "ExtremeHills+", - "ExtremeHills+_snowtop", - "StoneBeach", "Plains", "Plains_beach", "SunflowerPlains", diff --git a/mods/ENTITIES/mobs_mc/common.lua b/mods/ENTITIES/mobs_mc/common.lua deleted file mode 100644 index e69de29bb..000000000 diff --git a/mods/ENTITIES/mobs_mc/cow+mooshroom.lua b/mods/ENTITIES/mobs_mc/cow+mooshroom.lua index 256c3d8aa..d72a6c0f9 100644 --- a/mods/ENTITIES/mobs_mc/cow+mooshroom.lua +++ b/mods/ENTITIES/mobs_mc/cow+mooshroom.lua @@ -153,17 +153,12 @@ mcl_mobs:spawn_specific( "ground", { "flat", - "IcePlainsSpikes", - "ColdTaiga", - "ColdTaiga_beach", - "ColdTaiga_beach_water", "MegaTaiga", "MegaSpruceTaiga", "ExtremeHills", "ExtremeHills_beach", "ExtremeHillsM", "ExtremeHills+", - "ExtremeHills+_snowtop", "StoneBeach", "Plains", "Plains_beach", diff --git a/mods/ENTITIES/mobs_mc/creeper.lua b/mods/ENTITIES/mobs_mc/creeper.lua index 8d50c6755..c98abe718 100644 --- a/mods/ENTITIES/mobs_mc/creeper.lua +++ b/mods/ENTITIES/mobs_mc/creeper.lua @@ -274,7 +274,6 @@ mcl_mobs:spawn_specific( "Plains", "Desert", "ColdTaiga", -"MushroomIsland", "IcePlainsSpikes", "SunflowerPlains", "IcePlains", @@ -301,7 +300,6 @@ mcl_mobs:spawn_specific( "ExtremeHills_beach", "ColdTaiga_beach", "Swampland_shore", -"MushroomIslandShore", "JungleM_shore", "Jungle_shore", "MesaPlateauFM_sandlevel", @@ -340,7 +338,6 @@ mcl_mobs:spawn_specific( "Forest_deep_ocean", "JungleM_deep_ocean", "FlowerForest_deep_ocean", -"MushroomIsland_ocean", "MegaTaiga_ocean", "StoneBeach_deep_ocean", "IcePlainsSpikes_deep_ocean", @@ -350,7 +347,6 @@ mcl_mobs:spawn_specific( "MesaBryce_deep_ocean", "ExtremeHills+_deep_ocean", "ExtremeHills_ocean", -"MushroomIsland_deep_ocean", "Forest_ocean", "MegaTaiga_deep_ocean", "JungleEdge_ocean", @@ -376,7 +372,6 @@ mcl_mobs:spawn_specific( "RoofedForest_underground", "Jungle_underground", "Swampland_underground", -"MushroomIsland_underground", "BirchForest_underground", "Plains_underground", "MesaPlateauF_underground", diff --git a/mods/ENTITIES/mobs_mc/dolphin.lua b/mods/ENTITIES/mobs_mc/dolphin.lua index 095657470..2afe04c43 100644 --- a/mods/ENTITIES/mobs_mc/dolphin.lua +++ b/mods/ENTITIES/mobs_mc/dolphin.lua @@ -42,7 +42,8 @@ local dolphin = { walk_chance = 100, breath_max = 120, rotate = 180, - spawn_in_group = 3, + spawn_in_group_min = 3, + spawn_in_group = 5, tilt_swim = true, collisionbox = {-0.3, 0.0, -0.3, 0.3, 0.79, 0.3}, visual = "mesh", @@ -136,7 +137,6 @@ mcl_mobs:spawn_specific( "FlowerForest_beach", "Forest_beach", "StoneBeach", -"ColdTaiga_beach_water", "Taiga_beach", "Savanna_beach", "Plains_beach", diff --git a/mods/ENTITIES/mobs_mc/enderman.lua b/mods/ENTITIES/mobs_mc/enderman.lua index 4dcd6693c..e49a22957 100644 --- a/mods/ENTITIES/mobs_mc/enderman.lua +++ b/mods/ENTITIES/mobs_mc/enderman.lua @@ -767,10 +767,10 @@ mcl_mobs:spawn_specific( "ground", { "Nether", -"SoulsandValley", +"SoulsandVall3ey", }, 0, -minetest.LIGHT_MAX+1, +11, 30, 27500, 4, @@ -786,7 +786,7 @@ mcl_mobs:spawn_specific( "WarpedForest" }, 0, -minetest.LIGHT_MAX+1, +11, 30, 5000, 4, diff --git a/mods/ENTITIES/mobs_mc/horse.lua b/mods/ENTITIES/mobs_mc/horse.lua index ffa2548d0..30c8e7d94 100644 --- a/mods/ENTITIES/mobs_mc/horse.lua +++ b/mods/ENTITIES/mobs_mc/horse.lua @@ -578,7 +578,7 @@ mcl_mobs:spawn_specific( "Savanna_beach", "Plains_beach", }, -0, +9, minetest.LIGHT_MAX+1, 30, 15000, diff --git a/mods/ENTITIES/mobs_mc/llama.lua b/mods/ENTITIES/mobs_mc/llama.lua index 94ab7a094..e11566e3e 100644 --- a/mods/ENTITIES/mobs_mc/llama.lua +++ b/mods/ENTITIES/mobs_mc/llama.lua @@ -219,18 +219,16 @@ mcl_mobs:spawn_specific( "overworld", "ground", { - "Mesa", - "MesaPlateauFM_grasstop", - "MesaPlateauF", - "MesaPlateauFM", - "MesaPlateauF_grasstop", - "MesaBryce", - "Jungle", - "Jungle_shore", - "JungleM", - "JungleM_shore", + "Savanna", + "SavannaM", + "SavannaM_beach", + "Savanna_beach", + "Savanna_ocean", "JungleEdge", "JungleEdgeM", + "ExtremeHills", + "ExtremeHills_beach", + "ExtremeHillsM", }, 0, minetest.LIGHT_MAX+1, diff --git a/mods/ENTITIES/mobs_mc/pig.lua b/mods/ENTITIES/mobs_mc/pig.lua index 3cf88b915..b1958dc69 100644 --- a/mods/ENTITIES/mobs_mc/pig.lua +++ b/mods/ENTITIES/mobs_mc/pig.lua @@ -194,17 +194,12 @@ mcl_mobs:spawn_specific( "ground", { "flat", - "IcePlainsSpikes", - "ColdTaiga", - "ColdTaiga_beach", - "ColdTaiga_beach_water", "MegaTaiga", "MegaSpruceTaiga", "ExtremeHills", "ExtremeHills_beach", "ExtremeHillsM", "ExtremeHills+", - "ExtremeHills+_snowtop", "StoneBeach", "Plains", "Plains_beach", diff --git a/mods/ENTITIES/mobs_mc/sheep.lua b/mods/ENTITIES/mobs_mc/sheep.lua index d2d09be50..412c0cbdb 100644 --- a/mods/ENTITIES/mobs_mc/sheep.lua +++ b/mods/ENTITIES/mobs_mc/sheep.lua @@ -346,7 +346,7 @@ mcl_mobs:spawn_specific( "Swampland", "Swampland_shore" }, -0, +9, minetest.LIGHT_MAX+1, 30, 15000, diff --git a/mods/ENTITIES/mobs_mc/skeleton_wither.lua b/mods/ENTITIES/mobs_mc/skeleton_wither.lua index 5e31453fa..040f22d66 100644 --- a/mods/ENTITIES/mobs_mc/skeleton_wither.lua +++ b/mods/ENTITIES/mobs_mc/skeleton_wither.lua @@ -101,7 +101,8 @@ mcl_mobs:spawn_specific( "nether", "ground", { -"Nether" +"Nether", +"SoulsandValley", }, 0, 7, diff --git a/mods/ENTITIES/mobs_mc/slime+magma_cube.lua b/mods/ENTITIES/mobs_mc/slime+magma_cube.lua index 911ae15e8..701ae852a 100644 --- a/mods/ENTITIES/mobs_mc/slime+magma_cube.lua +++ b/mods/ENTITIES/mobs_mc/slime+magma_cube.lua @@ -446,11 +446,6 @@ minetest.LIGHT_MAX+1, mmin, mmax) ---mcl_mobs:spawn_specific("mobs_mc:magma_cube_tiny", { "mcl_nether:nether_brick", "mcl_nether:netherrack" }, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11000, 4, mmin, mmax) ---mcl_mobs:spawn_specific("mobs_mc:magma_cube_small", { "mcl_nether:nether_brick", "mcl_nether:netherrack" }, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11100, 4, mmin, mmax) ---mcl_mobs:spawn_specific("mobs_mc:magma_cube_big", { "mcl_nether:nether_brick", "mcl_nether:netherrack" }, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11200, 4, mmin, mmax) - - -- spawn eggs mcl_mobs:register_egg("mobs_mc:magma_cube_big", S("Magma Cube"), "mobs_mc_spawn_icon_magmacube.png") mcl_mobs:register_egg("mobs_mc:slime_big", S("Slime"), "mobs_mc_spawn_icon_slime.png") diff --git a/mods/ENTITIES/mobs_mc/spider.lua b/mods/ENTITIES/mobs_mc/spider.lua index 0fc16928e..b39db1ea1 100644 --- a/mods/ENTITIES/mobs_mc/spider.lua +++ b/mods/ENTITIES/mobs_mc/spider.lua @@ -109,7 +109,6 @@ mcl_mobs:spawn_specific( "Plains", "Desert", "ColdTaiga", -"MushroomIsland", "IcePlainsSpikes", "SunflowerPlains", "IcePlains", @@ -136,7 +135,6 @@ mcl_mobs:spawn_specific( "ExtremeHills_beach", "ColdTaiga_beach", "Swampland_shore", -"MushroomIslandShore", "JungleM_shore", "Jungle_shore", "MesaPlateauFM_sandlevel", @@ -175,7 +173,6 @@ mcl_mobs:spawn_specific( "Forest_deep_ocean", "JungleM_deep_ocean", "FlowerForest_deep_ocean", -"MushroomIsland_ocean", "MegaTaiga_ocean", "StoneBeach_deep_ocean", "IcePlainsSpikes_deep_ocean", @@ -185,7 +182,6 @@ mcl_mobs:spawn_specific( "MesaBryce_deep_ocean", "ExtremeHills+_deep_ocean", "ExtremeHills_ocean", -"MushroomIsland_deep_ocean", "Forest_ocean", "MegaTaiga_deep_ocean", "JungleEdge_ocean", @@ -211,7 +207,6 @@ mcl_mobs:spawn_specific( "RoofedForest_underground", "Jungle_underground", "Swampland_underground", -"MushroomIsland_underground", "BirchForest_underground", "Plains_underground", "MesaPlateauF_underground", diff --git a/mods/ENTITIES/mobs_mc/zombie.lua b/mods/ENTITIES/mobs_mc/zombie.lua index 640b2ed11..c27d9b8f4 100644 --- a/mods/ENTITIES/mobs_mc/zombie.lua +++ b/mods/ENTITIES/mobs_mc/zombie.lua @@ -162,7 +162,6 @@ mcl_mobs:spawn_specific( "RoofedForest_underground", "Jungle_underground", "Swampland_underground", -"MushroomIsland_underground", "BirchForest_underground", "Plains_underground", "MesaPlateauF_underground", @@ -198,7 +197,6 @@ mcl_mobs:spawn_specific( "Forest", "Plains", "ColdTaiga", -"MushroomIsland", "IcePlainsSpikes", "SunflowerPlains", "IcePlains", @@ -225,7 +223,6 @@ mcl_mobs:spawn_specific( "ExtremeHills_beach", "ColdTaiga_beach", "Swampland_shore", -"MushroomIslandShore", "JungleM_shore", "Jungle_shore", "MesaPlateauFM_sandlevel", @@ -254,7 +251,6 @@ mcl_mobs:spawn_specific( "RoofedForest_underground", "Jungle_underground", "Swampland_underground", -"MushroomIsland_underground", "BirchForest_underground", "Plains_underground", "MesaPlateauF_underground", @@ -290,7 +286,6 @@ mcl_mobs:spawn_specific( "Forest", "Plains", "ColdTaiga", -"MushroomIsland", "IcePlainsSpikes", "SunflowerPlains", "IcePlains", @@ -317,7 +312,6 @@ mcl_mobs:spawn_specific( "ExtremeHills_beach", "ColdTaiga_beach", "Swampland_shore", -"MushroomIslandShore", "JungleM_shore", "Jungle_shore", "MesaPlateauFM_sandlevel", diff --git a/mods/ENTITIES/mobs_mc/zombiepig.lua b/mods/ENTITIES/mobs_mc/zombiepig.lua index b054734bc..33838a9b5 100644 --- a/mods/ENTITIES/mobs_mc/zombiepig.lua +++ b/mods/ENTITIES/mobs_mc/zombiepig.lua @@ -134,7 +134,8 @@ mcl_mobs:spawn_specific( "nether", "ground", { -"Nether" +"Nether", +"CrimsonForest", }, 0, minetest.LIGHT_MAX+1, -- 2.40.1 From bf756403a379fc140cc55401f13e721d1b80eeee Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 17 Jul 2022 16:16:53 +0200 Subject: [PATCH 339/357] Fix animals attacking players for no reason --- mods/ENTITIES/mcl_mobs/api.lua | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index d77a9c419..c7b55b32a 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -1926,10 +1926,9 @@ local monster_attack = function(self) for n = 1, #objs do if objs[n]:is_player() then - if mcl_mobs.invis[ objs[n]:get_player_name() ] or (not object_in_range(self, objs[n])) then type = "" - else + elseif (self.type == "monster" or self._aggro) then player = objs[n] type = "player" name = "player" @@ -3345,11 +3344,11 @@ local mob_punch = function(self, hitter, tflp, tool_capabilities, dir) and (self.child == false or self.type == "monster") and hitter:get_player_name() ~= self.owner and not mcl_mobs.invis[ name ] then - if not die then -- attack whoever punched mob self.state = "" do_attack(self, hitter) + self._aggro= true end -- alert others to the attack @@ -3361,7 +3360,6 @@ local mob_punch = function(self, hitter, tflp, tool_capabilities, dir) obj = objs[n]:get_luaentity() if obj then - -- only alert members of same mob or friends if obj.group_attack and obj.state ~= "attack" @@ -3371,6 +3369,7 @@ local mob_punch = function(self, hitter, tflp, tool_capabilities, dir) elseif type(obj.group_attack) == "table" then for i=1, #obj.group_attack do if obj.name == obj.group_attack[i] then + obj._aggro = true do_attack(obj, hitter) break end -- 2.40.1 From 68d45ff606a98bef57123d87257901825d9689fb Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 18 Jul 2022 02:09:28 +0200 Subject: [PATCH 340/357] Remove MushroomIsland from several mobs spawn list --- mods/ENTITIES/mobs_mc/enderman.lua | 5 ----- mods/ENTITIES/mobs_mc/skeleton+stray.lua | 5 ----- mods/ENTITIES/mobs_mc/villager_zombie.lua | 3 --- 3 files changed, 13 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/enderman.lua b/mods/ENTITIES/mobs_mc/enderman.lua index e49a22957..8472f76e0 100644 --- a/mods/ENTITIES/mobs_mc/enderman.lua +++ b/mods/ENTITIES/mobs_mc/enderman.lua @@ -627,7 +627,6 @@ mcl_mobs:spawn_specific( "Plains", "Desert", "ColdTaiga", -"MushroomIsland", "IcePlainsSpikes", "SunflowerPlains", "IcePlains", @@ -654,7 +653,6 @@ mcl_mobs:spawn_specific( "ExtremeHills_beach", "ColdTaiga_beach", "Swampland_shore", -"MushroomIslandShore", "JungleM_shore", "Jungle_shore", "MesaPlateauFM_sandlevel", @@ -693,7 +691,6 @@ mcl_mobs:spawn_specific( "Forest_deep_ocean", "JungleM_deep_ocean", "FlowerForest_deep_ocean", -"MushroomIsland_ocean", "MegaTaiga_ocean", "StoneBeach_deep_ocean", "IcePlainsSpikes_deep_ocean", @@ -703,7 +700,6 @@ mcl_mobs:spawn_specific( "MesaBryce_deep_ocean", "ExtremeHills+_deep_ocean", "ExtremeHills_ocean", -"MushroomIsland_deep_ocean", "Forest_ocean", "MegaTaiga_deep_ocean", "JungleEdge_ocean", @@ -729,7 +725,6 @@ mcl_mobs:spawn_specific( "RoofedForest_underground", "Jungle_underground", "Swampland_underground", -"MushroomIsland_underground", "BirchForest_underground", "Plains_underground", "MesaPlateauF_underground", diff --git a/mods/ENTITIES/mobs_mc/skeleton+stray.lua b/mods/ENTITIES/mobs_mc/skeleton+stray.lua index 005bed66d..fbf16961a 100644 --- a/mods/ENTITIES/mobs_mc/skeleton+stray.lua +++ b/mods/ENTITIES/mobs_mc/skeleton+stray.lua @@ -162,7 +162,6 @@ mcl_mobs:spawn_specific( "Plains", "Desert", "ColdTaiga", -"MushroomIsland", "IcePlainsSpikes", "SunflowerPlains", "IcePlains", @@ -189,7 +188,6 @@ mcl_mobs:spawn_specific( "ExtremeHills_beach", "ColdTaiga_beach", "Swampland_shore", -"MushroomIslandShore", "JungleM_shore", "Jungle_shore", "MesaPlateauFM_sandlevel", @@ -228,7 +226,6 @@ mcl_mobs:spawn_specific( "Forest_deep_ocean", "JungleM_deep_ocean", "FlowerForest_deep_ocean", -"MushroomIsland_ocean", "MegaTaiga_ocean", "StoneBeach_deep_ocean", "IcePlainsSpikes_deep_ocean", @@ -238,7 +235,6 @@ mcl_mobs:spawn_specific( "MesaBryce_deep_ocean", "ExtremeHills+_deep_ocean", "ExtremeHills_ocean", -"MushroomIsland_deep_ocean", "Forest_ocean", "MegaTaiga_deep_ocean", "JungleEdge_ocean", @@ -264,7 +260,6 @@ mcl_mobs:spawn_specific( "RoofedForest_underground", "Jungle_underground", "Swampland_underground", -"MushroomIsland_underground", "BirchForest_underground", "Plains_underground", "MesaPlateauF_underground", diff --git a/mods/ENTITIES/mobs_mc/villager_zombie.lua b/mods/ENTITIES/mobs_mc/villager_zombie.lua index fedbf5a6e..cd0e89215 100644 --- a/mods/ENTITIES/mobs_mc/villager_zombie.lua +++ b/mods/ENTITIES/mobs_mc/villager_zombie.lua @@ -148,7 +148,6 @@ mcl_mobs:spawn_specific( "RoofedForest_underground", "Jungle_underground", "Swampland_underground", -"MushroomIsland_underground", "BirchForest_underground", "Plains_underground", "MesaPlateauF_underground", @@ -185,7 +184,6 @@ mcl_mobs:spawn_specific( "Plains", "Desert", "ColdTaiga", -"MushroomIsland", "IcePlainsSpikes", "SunflowerPlains", "IcePlains", @@ -212,7 +210,6 @@ mcl_mobs:spawn_specific( "ExtremeHills_beach", "ColdTaiga_beach", "Swampland_shore", -"MushroomIslandShore", "JungleM_shore", "Jungle_shore", "MesaPlateauFM_sandlevel", -- 2.40.1 From a3596d22e38b1de0aa5f29ae2fe4dda669897caf Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 16 Jul 2022 21:24:45 +0200 Subject: [PATCH 341/357] Fix nether dust particles using wrong setting --- mods/ENVIRONMENT/mcl_weather/nether_dust.lua | 2 +- mods/ENVIRONMENT/mcl_weather/snow.lua | 2 +- settingtypes.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mods/ENVIRONMENT/mcl_weather/nether_dust.lua b/mods/ENVIRONMENT/mcl_weather/nether_dust.lua index 2a90b2215..023c8b20d 100644 --- a/mods/ENVIRONMENT/mcl_weather/nether_dust.lua +++ b/mods/ENVIRONMENT/mcl_weather/nether_dust.lua @@ -1,7 +1,7 @@ mcl_weather.nether_dust = {} mcl_weather.nether_dust.particlespawners = {} -local PARTICLES_COUNT_NETHER_DUST = tonumber(minetest.settings:get("mcl_weather_rain_particles")) or 150 +local PARTICLES_COUNT_NETHER_DUST = tonumber(minetest.settings:get("mcl_weather_dust_particles")) or 150 local psdef= { amount = PARTICLES_COUNT_NETHER_DUST, diff --git a/mods/ENVIRONMENT/mcl_weather/snow.lua b/mods/ENVIRONMENT/mcl_weather/snow.lua index f169620dd..fc9526d63 100644 --- a/mods/ENVIRONMENT/mcl_weather/snow.lua +++ b/mods/ENVIRONMENT/mcl_weather/snow.lua @@ -2,7 +2,7 @@ local get_connected_players = minetest.get_connected_players mcl_weather.snow = {} -local PARTICLES_COUNT_SNOW = tonumber(minetest.settings:get("mcl_weather_snow_particles")) or 99 +local PARTICLES_COUNT_SNOW = tonumber(minetest.settings:get("mcl_weather_snow_particles")) or 100 mcl_weather.snow.init_done = false local psdef= { diff --git a/settingtypes.txt b/settingtypes.txt index b35e5c7f0..35db8bde7 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -30,7 +30,7 @@ mcl_weather_thunder_particles (Thunderstorm rain particles) int 900 0 mcl_weather_snow_particles (Snow particles) int 100 0 # Amount of nether dust particles. You can reduce this to get better FPS (default: 150) -mcl_weather_snow_particles (Nether dust particles) int 150 0 +mcl_weather_dust_particles (Nether dust particles) int 150 0 # If enabled, breaking blocks will cause them to drop as item. # Note that blocks never have drops when in Creative Mode. -- 2.40.1 From da4aa9bc35abd3e4ee28d8678fdad7a2613c6423 Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 18 Jul 2022 01:51:21 +0200 Subject: [PATCH 342/357] improve crying obsidian visuals --- mods/ITEMS/mcl_core/functions.lua | 67 +++++++++---------------------- 1 file changed, 18 insertions(+), 49 deletions(-) diff --git a/mods/ITEMS/mcl_core/functions.lua b/mods/ITEMS/mcl_core/functions.lua index c56ae51c3..c9caf9423 100644 --- a/mods/ITEMS/mcl_core/functions.lua +++ b/mods/ITEMS/mcl_core/functions.lua @@ -1702,41 +1702,14 @@ end -- Obsidian crying -local crobby_psdef = { - amount = 1, - time = 0.9, --everything longer than 1 is a coord exploit - minvel = vector.new(0,-2,0), - maxvel = vector.new(0,-0.5,0), - minacc = vector.new(0,-10,0), - maxacc = vector.new(0,-8,0), - minexptime = 1, - maxexptime = 6, - minsize = 1.5, - maxsize = 2, - collisiondetection = true, - collision_removal = true, - object_collision = true, - vertical = true, - texture = "mcl_core_crying_obsidian_tear.png", -} -local crobby_psdef2 = { - amount = 1, - time = 0.9, --everything longer than 1 is a coord exploit - minvel = vector.new(0,-0.01,0), - maxvel = vector.new(0,-0.005,0), - minacc = vector.new(0,-0.1,0), - maxacc = vector.new(0,-0.01,0), - minexptime = 2, - maxexptime = 3, - minsize = 0.3, - maxsize = 0.6, - collisiondetection = true, - collision_removal = true, - object_collision = true, - vertical = true, - texture = "mcl_core_crying_obsidian_tear.png", +local crobby_particle = { + velocity = vector.new(0,0,0), + size = math.random(1.3,2.5), + texture = "mcl_core_crying_obsidian_tear.png", + collision_removal = false, } + minetest.register_abm({ label = "Obsidian cries", nodenames = {"mcl_core:crying_obsidian"}, @@ -1744,22 +1717,18 @@ minetest.register_abm({ chance = 10, action = function(pos, node) minetest.after(math.random(0.1,1.5),function() - crobby_psdef.minpos = vector.offset(pos,-0.6,-0.51,-0.6) - crobby_psdef.maxpos = vector.offset(pos,0.6,0.51,0.6) - minetest.add_particlespawner(crobby_psdef) - crobby_psdef2.minpos = vector.offset(pos,-0.51,-0.51,-0.51) - crobby_psdef2.maxpos = vector.offset(pos,-0.5,0.51,-0.5) - minetest.add_particlespawner(crobby_psdef2) - crobby_psdef2.minpos = vector.offset(pos,0.51,-0.51,-0.51) - crobby_psdef2.maxpos = vector.offset(pos,0.5,0.51,-0.5) - minetest.add_particlespawner(crobby_psdef2) - crobby_psdef2.minpos = vector.offset(pos,0.51,-0.51,0.51) - crobby_psdef2.maxpos = vector.offset(pos,0.5,0.51,0.5) - minetest.add_particlespawner(crobby_psdef2) - crobby_psdef2.minpos = vector.offset(pos,-0.51,-0.51,0.51) - crobby_psdef2.maxpos = vector.offset(pos,-0.5,0.51,0.5) - minetest.add_particlespawner(crobby_psdef2) - + local pt = table.copy(crobby_particle) + pt.acceleration = vector.new(0,0,0) + pt.collisiondetection = false + pt.expirationtime = math.random(0.5,1.5) + pt.pos = vector.offset(pos,math.random(-0.5,0.5),-0.51,math.random(-0.5,0.5)) + minetest.add_particle(pt) + minetest.after(pt.expirationtime,function() + pt.acceleration = vector.new(0,-9,0) + pt.collisiondetection = true + pt.expirationtime = math.random(1.2,4.5) + minetest.add_particle(pt) + end) end) end }) -- 2.40.1 From 0298cecbcda94c2d1a5380d1cf286bb4365b1a4b Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 18 Jul 2022 04:56:20 +0200 Subject: [PATCH 343/357] change dripping entities to particles --- mods/ENTITIES/mcl_dripping/init.lua | 71 +++++++++++------------------ 1 file changed, 26 insertions(+), 45 deletions(-) diff --git a/mods/ENTITIES/mcl_dripping/init.lua b/mods/ENTITIES/mcl_dripping/init.lua index 57ba7ecfe..5d4d8fa49 100644 --- a/mods/ENTITIES/mcl_dripping/init.lua +++ b/mods/ENTITIES/mcl_dripping/init.lua @@ -1,51 +1,16 @@ -- Dripping Water Mod -- by kddekadenz +-- License of code, textures & sounds: CC0 local math = math --- License of code, textures & sounds: CC0 - local function register_drop(liquid, glow, sound, nodes) - minetest.register_entity("mcl_dripping:drop_" .. liquid, { - hp_max = 1, - physical = true, - collide_with_objects = false, - collisionbox = {-0.01, 0.01, -0.01, 0.01, 0.01, 0.01}, - glow = glow, - pointable = false, - visual = "sprite", - visual_size = {x = 0.1, y = 0.1}, - textures = {""}, - spritediv = {x = 1, y = 1}, - initial_sprite_basepos = {x = 0, y = 0}, - static_save = false, - _dropped = false, - on_activate = function(self) - self.object:set_properties({ - textures = {"[combine:2x2:" .. -math.random(1, 16) .. "," .. -math.random(1, 16) .. "=default_" .. liquid .. "_source_animated.png"} - }) - end, - on_step = function(self, dtime) - local k = math.random(1, 222) - local ownpos = self.object:get_pos() - if k == 1 then - self.object:set_acceleration(vector.new(0, -5, 0)) - end - if minetest.get_node(vector.offset(ownpos, 0, 0.5, 0)).name == "air" then - self.object:set_acceleration(vector.new(0, -5, 0)) - end - if minetest.get_node(vector.offset(ownpos, 0, -0.1, 0)).name ~= "air" then - local ent = self.object:get_luaentity() - if not ent._dropped then - ent._dropped = true - minetest.sound_play({name = "drippingwater_" .. sound .. "drip"}, {pos = ownpos, gain = 0.5, max_hear_distance = 8}, true) - end - if k < 3 then - self.object:remove() - end - end - end, - }) + + local pdef = { + velocity = vector.new(0,0,0), + collision_removal = false, + } + minetest.register_abm({ label = "Create drops", nodenames = nodes, @@ -55,12 +20,28 @@ local function register_drop(liquid, glow, sound, nodes) action = function(pos) if minetest.get_item_group(minetest.get_node(vector.offset(pos, 0, 1, 0)).name, liquid) ~= 0 and minetest.get_node(vector.offset(pos, 0, -1, 0)).name == "air" then - local x, z = math.random(-45, 45) / 100, math.random(-45, 45) / 100 - minetest.add_entity(vector.offset(pos, x, -0.520, z), "mcl_dripping:drop_" .. liquid) + minetest.after(math.random(0.1,1.5),function() + local pt = table.copy(pdef) + local x, z = math.random(-45, 45) / 100, math.random(-45, 45) / 100 + pt.pos = vector.offset(pos,x,-0.52,z) + pt.acceleration = vector.new(0,0,0) + pt.collisiondetection = false + pt.expirationtime = math.random(9.5,28.5) + + pt.texture="[combine:2x2:" .. -math.random(1, 16) .. "," .. -math.random(1, 16) .. "=default_" .. liquid .. "_source_animated.png" + minetest.add_particle(pt) + minetest.after(pt.expirationtime,function() + pt.acceleration = vector.new(0,-5,0) + pt.collisiondetection = true + pt.expirationtime = math.random(6.2,17.5) + minetest.add_particle(pt) + minetest.sound_play({name = "drippingwater_" .. sound .. "drip"}, {pos = ownpos, gain = 0.5, max_hear_distance = 8}, true) + end) + end) end end, }) end register_drop("water", 1, "", {"group:opaque", "group:leaves"}) -register_drop("lava", math.max(7, minetest.registered_nodes["mcl_core:lava_source"].light_source - 3), "lava", {"group:opaque"}) \ No newline at end of file +register_drop("lava", math.max(7, minetest.registered_nodes["mcl_core:lava_source"].light_source - 3), "lava", {"group:opaque"}) -- 2.40.1 From d89ef0581f126e6dbece16760b61f238d78bd7af Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 18 Jul 2022 06:10:38 +0200 Subject: [PATCH 344/357] Optimize ABMs --- mods/ENTITIES/mcl_dripping/init.lua | 64 ++++++++++++++++------------- 1 file changed, 36 insertions(+), 28 deletions(-) diff --git a/mods/ENTITIES/mcl_dripping/init.lua b/mods/ENTITIES/mcl_dripping/init.lua index 5d4d8fa49..96bc0b839 100644 --- a/mods/ENTITIES/mcl_dripping/init.lua +++ b/mods/ENTITIES/mcl_dripping/init.lua @@ -3,45 +3,53 @@ -- License of code, textures & sounds: CC0 local math = math - -local function register_drop(liquid, glow, sound, nodes) - - local pdef = { +local function make_drop(pos,liquid,sound,interval) + local pt = { velocity = vector.new(0,0,0), collision_removal = false, } + local t = math.random() + math.random(1, interval) + minetest.after(t,function() + local x, z = math.random(-45, 45) / 100, math.random(-45, 45) / 100 + pt.pos = vector.offset(pos,x,-0.52,z) + pt.acceleration = vector.new(0,0,0) + pt.collisiondetection = false + pt.expirationtime = t + pt.texture="[combine:2x2:" .. -math.random(1, 16) .. "," .. -math.random(1, 16) .. "=default_" .. liquid .. "_source_animated.png" + minetest.add_particle(pt) + minetest.after(t,function() + pt.acceleration = vector.new(0,-5,0) + pt.collisiondetection = true + pt.expirationtime = math.random() + math.random(1, interval/2) + minetest.add_particle(pt) + minetest.sound_play({name = "drippingwater_" .. sound .. "drip"}, {pos = ownpos, gain = 0.5, max_hear_distance = 8}, true) + end) + end) +end + +local function register_drop(liquid, glow, sound, nodes, interval, chance) minetest.register_abm({ label = "Create drops", nodenames = nodes, neighbors = {"group:" .. liquid}, - interval = 2, - chance = 22, + interval = interval, + chance = chance, action = function(pos) - if minetest.get_item_group(minetest.get_node(vector.offset(pos, 0, 1, 0)).name, liquid) ~= 0 - and minetest.get_node(vector.offset(pos, 0, -1, 0)).name == "air" then - minetest.after(math.random(0.1,1.5),function() - local pt = table.copy(pdef) - local x, z = math.random(-45, 45) / 100, math.random(-45, 45) / 100 - pt.pos = vector.offset(pos,x,-0.52,z) - pt.acceleration = vector.new(0,0,0) - pt.collisiondetection = false - pt.expirationtime = math.random(9.5,28.5) - - pt.texture="[combine:2x2:" .. -math.random(1, 16) .. "," .. -math.random(1, 16) .. "=default_" .. liquid .. "_source_animated.png" - minetest.add_particle(pt) - minetest.after(pt.expirationtime,function() - pt.acceleration = vector.new(0,-5,0) - pt.collisiondetection = true - pt.expirationtime = math.random(6.2,17.5) - minetest.add_particle(pt) - minetest.sound_play({name = "drippingwater_" .. sound .. "drip"}, {pos = ownpos, gain = 0.5, max_hear_distance = 8}, true) - end) - end) + local r = math.ceil(interval / 20) + local nn=minetest.find_nodes_in_area(vector.offset(pos,-r,0,-r),vector.offset(pos,r,0,r),nodes) + --start a bunch of particle cycles to be able to get away + --with longer abm cycles + table.shuffle(nn) + for i=1,math.random(#nn) do + if minetest.get_item_group(minetest.get_node(vector.offset(nn[i], 0, 1, 0)).name, liquid) ~= 0 + and minetest.get_node(vector.offset(nn[i], 0, -1, 0)).name == "air" then + make_drop(nn[i],liquid,sound,interval) + end end end, }) end -register_drop("water", 1, "", {"group:opaque", "group:leaves"}) -register_drop("lava", math.max(7, minetest.registered_nodes["mcl_core:lava_source"].light_source - 3), "lava", {"group:opaque"}) +register_drop("water", 1, "", {"group:opaque", "group:leaves"},60,10) +register_drop("lava", math.max(7, minetest.registered_nodes["mcl_core:lava_source"].light_source - 3), "lava", {"group:opaque"},60,10) -- 2.40.1 From aaf103e3aa0fb87d8a8c5c45b4b4df4a437c40cc Mon Sep 17 00:00:00 2001 From: SumianVoice Date: Mon, 18 Jul 2022 23:30:46 +1000 Subject: [PATCH 345/357] Update api.lua --- mods/ENTITIES/mcl_mobs/api.lua | 40 +++++++++++++++++----------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index c7b55b32a..9f73824d7 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -4365,40 +4365,28 @@ function mcl_mobs:feed_tame(self, clicker, feed_count, breed, tame, notake) if not self.follow then return false end - -- can eat/tame with item in hand if self.nofollow or follow_holding(self, clicker) then - - -- if not in creative then take item - if not minetest.is_creative_enabled(clicker:get_player_name()) then - - local item = clicker:get_wielded_item() - - if not notake then item:take_item() end - - clicker:set_wielded_item(item) - end - - mob_sound(self, "eat", nil, true) + local consume_food = false -- increase health - self.health = self.health + 4 - if self.health >= self.hp_max then - - self.health = self.hp_max + if self.health < self.hp_max then + consume_food = true + self.health = min(self.health + 4, self.hp_max) if self.htimer < 1 then self.htimer = 5 end + self.object:set_hp(self.health) end - self.object:set_hp(self.health) update_tag(self) -- make children grow quicker if self.child == true then + consume_food = true -- deduct 10% of the time to adulthood self.hornytimer = self.hornytimer + ((CHILD_GROW_TIME - self.hornytimer) * 0.1) @@ -4412,8 +4400,9 @@ function mcl_mobs:feed_tame(self, clicker, feed_count, breed, tame, notake) self.food = 0 - if breed and self.hornytimer == 0 then + if breed and self.hornytimer == 0 and not self.horny then self.horny = true + consume_food = true end if tame then @@ -4422,16 +4411,27 @@ function mcl_mobs:feed_tame(self, clicker, feed_count, breed, tame, notake) if not self.owner or self.owner == "" then self.owner = clicker:get_player_name() + consume_food = true end end -- make sound when fed so many times mob_sound(self, "random", true) end + -- if not in creative then take item + if not minetest.is_creative_enabled(clicker:get_player_name()) and consume_food then + local item = clicker:get_wielded_item() + + if not notake then + item:take_item() + mob_sound(self, "eat", nil, true) + end + + clicker:set_wielded_item(item) + end return true end - return false end -- 2.40.1 From c82f2a39a5d6040b2dfdd8949d5d6dd34e5f7bad Mon Sep 17 00:00:00 2001 From: SumianVoice Date: Mon, 18 Jul 2022 23:36:26 +1000 Subject: [PATCH 346/357] animals don't take food from player unless it is used for something --- mods/ENTITIES/mcl_mobs/api.lua | 2 -- 1 file changed, 2 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 9f73824d7..053b5d951 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -4390,8 +4390,6 @@ function mcl_mobs:feed_tame(self, clicker, feed_count, breed, tame, notake) -- deduct 10% of the time to adulthood self.hornytimer = self.hornytimer + ((CHILD_GROW_TIME - self.hornytimer) * 0.1) - - return true end -- feed and tame -- 2.40.1 From 7de7911fd2918d2e20ec067f9a7534758ca98eea Mon Sep 17 00:00:00 2001 From: SumianVoice Date: Mon, 18 Jul 2022 23:41:27 +1000 Subject: [PATCH 347/357] make it check not child, since the return statement was removed --- mods/ENTITIES/mcl_mobs/api.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 053b5d951..ae8fd25a3 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -4394,7 +4394,7 @@ function mcl_mobs:feed_tame(self, clicker, feed_count, breed, tame, notake) -- feed and tame self.food = (self.food or 0) + 1 - if self.food >= feed_count then + if not self.child and self.food >= feed_count then self.food = 0 @@ -4416,7 +4416,7 @@ function mcl_mobs:feed_tame(self, clicker, feed_count, breed, tame, notake) -- make sound when fed so many times mob_sound(self, "random", true) end - -- if not in creative then take item + -- if not in creative then take item if it was used if not minetest.is_creative_enabled(clicker:get_player_name()) and consume_food then local item = clicker:get_wielded_item() -- 2.40.1 From 2c70483c12080735accefdaa549622e515f26ec4 Mon Sep 17 00:00:00 2001 From: SumianVoice Date: Tue, 19 Jul 2022 14:05:04 +1000 Subject: [PATCH 348/357] non-tamable mobs will not send tame param to feed_tame func, changed event flow so it tries in order: heal, tame, breed, grow child --- mods/ENTITIES/mcl_mobs/api.lua | 39 ++++++++++++------------- mods/ENTITIES/mobs_mc/chicken.lua | 2 +- mods/ENTITIES/mobs_mc/cow+mooshroom.lua | 4 +-- mods/ENTITIES/mobs_mc/pig.lua | 2 +- mods/ENTITIES/mobs_mc/rabbit.lua | 2 +- mods/ENTITIES/mobs_mc/sheep.lua | 2 +- 6 files changed, 25 insertions(+), 26 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index ae8fd25a3..9596d606a 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -4371,7 +4371,7 @@ function mcl_mobs:feed_tame(self, clicker, feed_count, breed, tame, notake) -- increase health - if self.health < self.hp_max then + if not consume_food and self.health < self.hp_max then consume_food = true self.health = min(self.health + 4, self.hp_max) @@ -4381,41 +4381,40 @@ function mcl_mobs:feed_tame(self, clicker, feed_count, breed, tame, notake) self.object:set_hp(self.health) end - - update_tag(self) - - -- make children grow quicker - if self.child == true then - consume_food = true - - -- deduct 10% of the time to adulthood - self.hornytimer = self.hornytimer + ((CHILD_GROW_TIME - self.hornytimer) * 0.1) - end - -- feed and tame + self.food = (self.food or 0) + 1 - if not self.child and self.food >= feed_count then + if self.food >= feed_count then self.food = 0 - if breed and self.hornytimer == 0 and not self.horny then - self.horny = true - consume_food = true - end - if tame then - self.tamed = true - if not self.owner or self.owner == "" then self.owner = clicker:get_player_name() consume_food = true end end + if breed and not self.child and not consume_food + and self.hornytimer == 0 and not self.horny then + self.horny = true + consume_food = true + end -- make sound when fed so many times mob_sound(self, "random", true) end + + update_tag(self) + + -- make children grow quicker + if not consume_food and self.child == true then + consume_food = true + + -- deduct 10% of the time to adulthood + self.hornytimer = self.hornytimer + ((CHILD_GROW_TIME - self.hornytimer) * 0.1) + end + -- if not in creative then take item if it was used if not minetest.is_creative_enabled(clicker:get_player_name()) and consume_food then diff --git a/mods/ENTITIES/mobs_mc/chicken.lua b/mods/ENTITIES/mobs_mc/chicken.lua index 886a945b9..5dc417582 100644 --- a/mods/ENTITIES/mobs_mc/chicken.lua +++ b/mods/ENTITIES/mobs_mc/chicken.lua @@ -74,7 +74,7 @@ mcl_mobs:register_mob("mobs_mc:chicken", { fear_height = 4, on_rightclick = function(self, clicker) - if mcl_mobs:feed_tame(self, clicker, 1, true, true) then return end + if mcl_mobs:feed_tame(self, clicker, 1, true, false) then return end if mcl_mobs:protect(self, clicker) then return end if mcl_mobs:capture_mob(self, clicker, 0, 60, 5, false, nil) then return end end, diff --git a/mods/ENTITIES/mobs_mc/cow+mooshroom.lua b/mods/ENTITIES/mobs_mc/cow+mooshroom.lua index d72a6c0f9..fe04650cd 100644 --- a/mods/ENTITIES/mobs_mc/cow+mooshroom.lua +++ b/mods/ENTITIES/mobs_mc/cow+mooshroom.lua @@ -48,7 +48,7 @@ local cow_def = { run_end = 40, }, on_rightclick = function(self, clicker) - if mcl_mobs:feed_tame(self, clicker, 1, true, true) then return end + if mcl_mobs:feed_tame(self, clicker, 1, true, false) then return end if mcl_mobs:protect(self, clicker) then return end if self.child then @@ -87,7 +87,7 @@ mooshroom_def.spawn_in_group_min = 4 mooshroom_def.spawn_in_group = 8 mooshroom_def.textures = { {"mobs_mc_mooshroom.png", "mobs_mc_mushroom_red.png"}, {"mobs_mc_mooshroom_brown.png", "mobs_mc_mushroom_brown.png" } } mooshroom_def.on_rightclick = function(self, clicker) - if mcl_mobs:feed_tame(self, clicker, 1, true, true) then return end + if mcl_mobs:feed_tame(self, clicker, 1, true, false) then return end if mcl_mobs:protect(self, clicker) then return end if self.child then diff --git a/mods/ENTITIES/mobs_mc/pig.lua b/mods/ENTITIES/mobs_mc/pig.lua index b1958dc69..b88e88d49 100644 --- a/mods/ENTITIES/mobs_mc/pig.lua +++ b/mods/ENTITIES/mobs_mc/pig.lua @@ -99,7 +99,7 @@ mcl_mobs:register_mob("mobs_mc:pig", { local wielditem = clicker:get_wielded_item() -- Feed pig if wielditem:get_name() ~= "mcl_mobitems:carrot_on_a_stick" then - if mcl_mobs:feed_tame(self, clicker, 1, true, true) then return end + if mcl_mobs:feed_tame(self, clicker, 1, true, false) then return end end if mcl_mobs:protect(self, clicker) then return end diff --git a/mods/ENTITIES/mobs_mc/rabbit.lua b/mods/ENTITIES/mobs_mc/rabbit.lua index c11167007..2d7bc5e7e 100644 --- a/mods/ENTITIES/mobs_mc/rabbit.lua +++ b/mods/ENTITIES/mobs_mc/rabbit.lua @@ -75,7 +75,7 @@ local rabbit = { }, on_rightclick = function(self, clicker) -- Feed, tame protect or capture - if mcl_mobs:feed_tame(self, clicker, 1, true, true) then return end + if mcl_mobs:feed_tame(self, clicker, 1, true, false) then return end if mcl_mobs:protect(self, clicker) then return end if mcl_mobs:capture_mob(self, clicker, 0, 50, 80, false, nil) then return end end, diff --git a/mods/ENTITIES/mobs_mc/sheep.lua b/mods/ENTITIES/mobs_mc/sheep.lua index 412c0cbdb..3ab794c05 100644 --- a/mods/ENTITIES/mobs_mc/sheep.lua +++ b/mods/ENTITIES/mobs_mc/sheep.lua @@ -195,7 +195,7 @@ mcl_mobs:register_mob("mobs_mc:sheep", { on_rightclick = function(self, clicker) local item = clicker:get_wielded_item() - if mcl_mobs:feed_tame(self, clicker, 1, true, true) then return end + if mcl_mobs:feed_tame(self, clicker, 1, true, false) then return end if mcl_mobs:protect(self, clicker) then return end if item:get_name() == "mcl_tools:shears" and not self.gotten and not self.child then -- 2.40.1 From a1666dd3cde2c2566a2df0e1893c092aef09a1d1 Mon Sep 17 00:00:00 2001 From: SumianVoice Date: Tue, 19 Jul 2022 14:23:54 +1000 Subject: [PATCH 349/357] move self.food check --- mods/ENTITIES/mcl_mobs/api.lua | 36 +++++++++++++++++----------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 9596d606a..430bc0e25 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -4383,26 +4383,23 @@ function mcl_mobs:feed_tame(self, clicker, feed_count, breed, tame, notake) -- feed and tame - self.food = (self.food or 0) + 1 - if self.food >= feed_count then - - self.food = 0 - - if tame then - self.tamed = true - if not self.owner or self.owner == "" then - self.owner = clicker:get_player_name() - consume_food = true - end - end - - if breed and not self.child and not consume_food - and self.hornytimer == 0 and not self.horny then - self.horny = true + if tame then + self.tamed = true + if not self.owner or self.owner == "" then + self.owner = clicker:get_player_name() consume_food = true end - -- make sound when fed so many times - mob_sound(self, "random", true) + end + + + if breed and not self.child and not consume_food + and self.hornytimer == 0 and not self.horny then + self.food = (self.food or 0) + 1 + consume_food = true + if self.food >= feed_count then + self.food = 0 + self.horny = true + end end update_tag(self) @@ -4426,6 +4423,9 @@ function mcl_mobs:feed_tame(self, clicker, feed_count, breed, tame, notake) end clicker:set_wielded_item(item) + else + -- make sound when fed so many times + mob_sound(self, "random", true) end return true end -- 2.40.1 From a89f76563c148be81dd33ca39e0e71325d9cf10e Mon Sep 17 00:00:00 2001 From: SumianVoice Date: Tue, 19 Jul 2022 14:26:58 +1000 Subject: [PATCH 350/357] remove unnecessary check --- mods/ENTITIES/mcl_mobs/api.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 430bc0e25..39c10e561 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -4371,7 +4371,7 @@ function mcl_mobs:feed_tame(self, clicker, feed_count, breed, tame, notake) -- increase health - if not consume_food and self.health < self.hp_max then + if self.health < self.hp_max then consume_food = true self.health = min(self.health + 4, self.hp_max) -- 2.40.1 From 2b79bab7efc1eb7eca0f7d908ee5457d6ea1efa3 Mon Sep 17 00:00:00 2001 From: SumianVoice Date: Tue, 19 Jul 2022 14:38:32 +1000 Subject: [PATCH 351/357] move heal under tame so that you can tame an animal and then heal it, like in MC --- mods/ENTITIES/mcl_mobs/api.lua | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 39c10e561..3ff508554 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -4369,6 +4369,16 @@ function mcl_mobs:feed_tame(self, clicker, feed_count, breed, tame, notake) if self.nofollow or follow_holding(self, clicker) then local consume_food = false + -- feed and tame + + if tame then + self.tamed = true + if not self.owner or self.owner == "" then + self.owner = clicker:get_player_name() + consume_food = true + end + end + -- increase health if self.health < self.hp_max then @@ -4381,17 +4391,6 @@ function mcl_mobs:feed_tame(self, clicker, feed_count, breed, tame, notake) self.object:set_hp(self.health) end - -- feed and tame - - if tame then - self.tamed = true - if not self.owner or self.owner == "" then - self.owner = clicker:get_player_name() - consume_food = true - end - end - - if breed and not self.child and not consume_food and self.hornytimer == 0 and not self.horny then self.food = (self.food or 0) + 1 -- 2.40.1 From 6d669a90ff09b0ad723c2c7f2c9758903409957c Mon Sep 17 00:00:00 2001 From: SumianVoice Date: Tue, 19 Jul 2022 14:39:44 +1000 Subject: [PATCH 352/357] make sure you can't heal and tame at the same time --- mods/ENTITIES/mcl_mobs/api.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 3ff508554..8d84c48f5 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -4381,7 +4381,7 @@ function mcl_mobs:feed_tame(self, clicker, feed_count, breed, tame, notake) -- increase health - if self.health < self.hp_max then + if self.health < self.hp_max and not consume_food then consume_food = true self.health = min(self.health + 4, self.hp_max) -- 2.40.1 From 69440e48fac1846efab96e5553528f3cc3ee8222 Mon Sep 17 00:00:00 2001 From: SumianVoice Date: Tue, 19 Jul 2022 15:13:48 +1000 Subject: [PATCH 353/357] don't tame baby animals yet --- mods/ENTITIES/mcl_mobs/api.lua | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 8d84c48f5..8500160f0 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -4371,9 +4371,9 @@ function mcl_mobs:feed_tame(self, clicker, feed_count, breed, tame, notake) -- feed and tame - if tame then - self.tamed = true + if tame and not self.child then if not self.owner or self.owner == "" then + self.tamed = true self.owner = clicker:get_player_name() consume_food = true end @@ -4391,8 +4391,17 @@ function mcl_mobs:feed_tame(self, clicker, feed_count, breed, tame, notake) self.object:set_hp(self.health) end - if breed and not self.child and not consume_food - and self.hornytimer == 0 and not self.horny then + -- make children grow quicker + + if not consume_food and self.child == true then + consume_food = true + -- deduct 10% of the time to adulthood + self.hornytimer = self.hornytimer + ((CHILD_GROW_TIME - self.hornytimer) * 0.1) + end + + -- breed animals + + if breed and not consume_food and self.hornytimer == 0 and not self.horny then self.food = (self.food or 0) + 1 consume_food = true if self.food >= feed_count then @@ -4403,14 +4412,6 @@ function mcl_mobs:feed_tame(self, clicker, feed_count, breed, tame, notake) update_tag(self) - -- make children grow quicker - if not consume_food and self.child == true then - consume_food = true - - -- deduct 10% of the time to adulthood - self.hornytimer = self.hornytimer + ((CHILD_GROW_TIME - self.hornytimer) * 0.1) - end - -- if not in creative then take item if it was used if not minetest.is_creative_enabled(clicker:get_player_name()) and consume_food then -- 2.40.1 From 40f94d795bff674adc9680106591ab3dcfd91fdc Mon Sep 17 00:00:00 2001 From: SumianVoice Date: Tue, 19 Jul 2022 15:33:13 +1000 Subject: [PATCH 354/357] Update api.lua --- mods/ENTITIES/mcl_mobs/api.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 8500160f0..95fb230c6 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -4369,7 +4369,7 @@ function mcl_mobs:feed_tame(self, clicker, feed_count, breed, tame, notake) if self.nofollow or follow_holding(self, clicker) then local consume_food = false - -- feed and tame + -- tame if not still a baby if tame and not self.child then if not self.owner or self.owner == "" then -- 2.40.1 From 0da25fae385c718d992cc036b610025922988804 Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 18 Jul 2022 23:44:33 +0200 Subject: [PATCH 355/357] Reset aggro when player far --- mods/ENTITIES/mcl_mobs/api.lua | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 95fb230c6..0f847b22d 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -1907,10 +1907,9 @@ end -- find someone to attack local monster_attack = function(self) - if not damage_enabled or minetest.is_creative_enabled("") - or self.passive + or self.passive ~= false or self.state == "attack" or day_docile(self) then return @@ -3596,10 +3595,23 @@ local mob_activate = function(self, staticdata, def, dtime) end end +local function check_aggro(self,dtime) + if not self._aggro or not self.attack then return end + if not self._check_aggro_timer or self._check_aggro_timer > 5 then + self._check_aggro_timer = 0 + if not self.attack:get_pos() or vector.distance(self.attack:get_pos(),self.object:get_pos()) > 128 then + self._aggro = nil + self.attack = nil + self.state = "stand" + end + end + self._check_aggro_timer = self._check_aggro_timer + dtime +end -- main mob function local mob_step = function(self, dtime) check_item_pickup(self) + check_aggro(self,dtime) if not self.fire_resistant then mcl_burning.tick(self.object, dtime, self) end @@ -3930,7 +3942,7 @@ minetest.register_entity(name, { xp_max = def.xp_max or 0, xp_timestamp = 0, breath_max = def.breath_max or 15, - breathes_in_water = def.breathes_in_water or false, + breathes_in_water = def.breathes_in_water or false, physical = true, collisionbox = collisionbox, selectionbox = def.selectionbox or def.collisionbox, -- 2.40.1 From 4b3a899e791b21e826a51f3688fc28e3f2a0abd6 Mon Sep 17 00:00:00 2001 From: cora Date: Tue, 19 Jul 2022 00:11:40 +0200 Subject: [PATCH 356/357] make llamas retaliate by spitting. it's a bit picky when and how it will spit still but works. --- mods/ENTITIES/mobs_mc/llama.lua | 32 ++++++++++++++++-- .../mobs_mc/textures/mobs_mc_llama_spit.png | Bin 0 -> 307 bytes 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_spit.png diff --git a/mods/ENTITIES/mobs_mc/llama.lua b/mods/ENTITIES/mobs_mc/llama.lua index e11566e3e..5d3ed7718 100644 --- a/mods/ENTITIES/mobs_mc/llama.lua +++ b/mods/ENTITIES/mobs_mc/llama.lua @@ -28,13 +28,17 @@ mcl_mobs:register_mob("mobs_mc:llama", { description = S("Llama"), type = "animal", spawn_class = "passive", + passive = false, + attack_type = "shoot", + shoot_interval = 5.5, + arrow = "mobs_mc:llamaspit", + shoot_offset = 1, --3.5 *would* be a good value visually but it somehow messes with the projectiles trajectory spawn_in_group_min = 4, spawn_in_group = 6, hp_min = 15, hp_max = 30, xp_min = 1, xp_max = 3, - passive = false, collisionbox = {-0.45, -0.01, -0.45, 0.45, 1.86, 0.45}, visual = "mesh", mesh = "mobs_mc_llama.b3d", @@ -47,7 +51,7 @@ mcl_mobs:register_mob("mobs_mc:llama", { }, visual_size = {x=3, y=3}, makes_footstep_sound = true, - runaway = true, + runaway = false, walk_velocity = 1, run_velocity = 4.4, follow_velocity = 4.4, @@ -213,6 +217,30 @@ mcl_mobs:register_mob("mobs_mc:llama", { }) +-- spit arrow (weapon) +mcl_mobs:register_arrow("mobs_mc:llamaspit", { + visual = "sprite", + visual_size = {x = 0.10, y = 0.10}, + textures = {"mobs_mc_llama_spit.png"}, + velocity = 5, + hit_player = function(self, player) + player:punch(self.object, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = 1}, + }, nil) + end, + + hit_mob = function(self, mob) + mob:punch(self.object, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = 1}, + }, nil) + end, + + hit_node = function(self, pos, node) + end +}) + --spawn mcl_mobs:spawn_specific( "mobs_mc:llama", diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_spit.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_spit.png new file mode 100644 index 0000000000000000000000000000000000000000..9433d2f86c309825dc4a15081338e596ef1e73c8 GIT binary patch literal 307 zcmV-30nGl1P)x7@k0%Qr115nUXAzX3@C}_C=E#f59&~X4dx-?t>M2Db*AW)=WIWaU7 z;S+ literal 0 HcmV?d00001 -- 2.40.1 From 2ecdcf50675763f33c0b673f17dc3eb54118a23c Mon Sep 17 00:00:00 2001 From: cora Date: Tue, 19 Jul 2022 05:20:17 +0200 Subject: [PATCH 357/357] Sheep run away when hit --- mods/ENTITIES/mobs_mc/sheep.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mods/ENTITIES/mobs_mc/sheep.lua b/mods/ENTITIES/mobs_mc/sheep.lua index 3ab794c05..7e2027c6c 100644 --- a/mods/ENTITIES/mobs_mc/sheep.lua +++ b/mods/ENTITIES/mobs_mc/sheep.lua @@ -70,6 +70,8 @@ mcl_mobs:register_mob("mobs_mc:sheep", { color = "unicolor_white", makes_footstep_sound = true, walk_velocity = 1, + runaway = true, + runaway_from = {"mobs_mc:wolf"}, drops = { {name = "mcl_mobitems:mutton", chance = 1, -- 2.40.1

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 W-Hv|O{tFSnBNSv*q$?#&1OE?}b|8BI literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_spyglass/textures/mcl_spyglass.png b/mods/ITEMS/mcl_spyglass/textures/mcl_spyglass.png new file mode 100644 index 0000000000000000000000000000000000000000..cc5eb4d962546238cae705dd85d13907c391ebd8 GIT binary patch literal 2042 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 cJ@q}n@0%2Oceu0q&j$rSwTk literal 0 HcmV?d00001 -- 2.40.1 From e58387d123279791fcef9c2b88476bd169cd73b3 Mon Sep 17 00:00:00 2001 From: PrairieAstronomer Date: Sun, 12 Jun 2022 14:25:22 -0600 Subject: [PATCH 065/357] Removed screenshots and Liscense --- mods/ITEMS/mcl_spyglass/LICENSE | 674 ----------------------- mods/ITEMS/mcl_spyglass/screenshot.1.png | Bin 5515 -> 0 bytes mods/ITEMS/mcl_spyglass/screenshot.png | Bin 277426 -> 0 bytes 3 files changed, 674 deletions(-) delete mode 100644 mods/ITEMS/mcl_spyglass/LICENSE delete mode 100644 mods/ITEMS/mcl_spyglass/screenshot.1.png delete mode 100644 mods/ITEMS/mcl_spyglass/screenshot.png diff --git a/mods/ITEMS/mcl_spyglass/LICENSE b/mods/ITEMS/mcl_spyglass/LICENSE deleted file mode 100644 index f288702d2..000000000 --- a/mods/ITEMS/mcl_spyglass/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU 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 -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/mods/ITEMS/mcl_spyglass/screenshot.1.png b/mods/ITEMS/mcl_spyglass/screenshot.1.png deleted file mode 100644 index 935c797f22e0fd5ef561cbdcf9ef4b277a7953c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5515 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 YJr(j!Cule>@b(h0FtIT%Fgz3YKgB)FQ2+n{ diff --git a/mods/ITEMS/mcl_spyglass/screenshot.png b/mods/ITEMS/mcl_spyglass/screenshot.png deleted file mode 100644 index 80be1a00156a15055c90a76641b701363e16c772..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 277426 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