From 0aa2a22a2cecab04a1952d9de23b3a80b444aa70 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Sun, 5 Feb 2017 22:01:20 +0100 Subject: [PATCH] Import [craftguide] mod --- mods/craftguide/.luacheckrc | 7 + mods/craftguide/LICENSE | 681 ++++++++++++++++++ mods/craftguide/README.md | 14 + mods/craftguide/description.txt | 2 + mods/craftguide/init.lua | 462 ++++++++++++ mods/craftguide/mod.conf | 1 + mods/craftguide/screenshot.png | Bin 0 -> 35837 bytes mods/craftguide/textures/craftguide_arrow.png | Bin 0 -> 242 bytes mods/craftguide/textures/craftguide_bg.png | Bin 0 -> 169 bytes mods/craftguide/textures/craftguide_book.png | Bin 0 -> 3128 bytes mods/craftguide/textures/craftguide_fire.png | Bin 0 -> 3131 bytes .../textures/craftguide_furnace.png | Bin 0 -> 3365 bytes mods/craftguide/textures/craftguide_sign.png | Bin 0 -> 685 bytes .../textures/craftguide_sign_inv.png | Bin 0 -> 685 bytes 14 files changed, 1167 insertions(+) create mode 100644 mods/craftguide/.luacheckrc create mode 100644 mods/craftguide/LICENSE create mode 100644 mods/craftguide/README.md create mode 100644 mods/craftguide/description.txt create mode 100644 mods/craftguide/init.lua create mode 100644 mods/craftguide/mod.conf create mode 100644 mods/craftguide/screenshot.png create mode 100644 mods/craftguide/textures/craftguide_arrow.png create mode 100644 mods/craftguide/textures/craftguide_bg.png create mode 100644 mods/craftguide/textures/craftguide_book.png create mode 100644 mods/craftguide/textures/craftguide_fire.png create mode 100644 mods/craftguide/textures/craftguide_furnace.png create mode 100644 mods/craftguide/textures/craftguide_sign.png create mode 100644 mods/craftguide/textures/craftguide_sign_inv.png diff --git a/mods/craftguide/.luacheckrc b/mods/craftguide/.luacheckrc new file mode 100644 index 00000000..a21bce1f --- /dev/null +++ b/mods/craftguide/.luacheckrc @@ -0,0 +1,7 @@ +unused_args = false +allow_defined_top = true + +read_globals = { + "minetest", + "default", +} diff --git a/mods/craftguide/LICENSE b/mods/craftguide/LICENSE new file mode 100644 index 00000000..fedaf1ee --- /dev/null +++ b/mods/craftguide/LICENSE @@ -0,0 +1,681 @@ +┌───────────────────────────────────────────────────────────────────┐ +│ Copyright (c) 2015-2017 kilbith │ +│ │ +│ Code: GPL version 3 │ +│ Textures: WTFPL (credits: Gambit) │ +└───────────────────────────────────────────────────────────────────┘ + + 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. + + {one line to give the program's name and a brief idea of what it does.} + Copyright (C) {year} {name of author} + + 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: + + {project} Copyright (C) {year} {fullname} + 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/craftguide/README.md b/mods/craftguide/README.md new file mode 100644 index 00000000..c3b1a158 --- /dev/null +++ b/mods/craftguide/README.md @@ -0,0 +1,14 @@ +## ![Preview1](http://i.imgur.com/fIPNYkb.png) Crafting Guide ## + +#### A Crafting Guide for Minetest that doesn't suck. #### + +#### `craftguide` is simply the most comprehensive mod of his category, with the cleanest code. #### +#### Consult the [Minetest Wiki](http://wiki.minetest.net/Crafting_guide) for more details and comparisons. #### + +#### This crafting guide is usable with a blue book named *"Crafting Guide"*. #### + +#### This crafting guide features two modes : Standard and Progressive. #### +The Progressive mode is a Terraria-like system that only shows recipes you can craft from items in inventory. +The progressive mode can be enabled with `craftguide_progressive_mode = true` in `minetest.conf`. + +![Preview2](http://i.imgur.com/3q7rVSo.png) diff --git a/mods/craftguide/description.txt b/mods/craftguide/description.txt new file mode 100644 index 00000000..b5c05403 --- /dev/null +++ b/mods/craftguide/description.txt @@ -0,0 +1,2 @@ +The most comprehensive Crafting Guide +on Minetest. diff --git a/mods/craftguide/init.lua b/mods/craftguide/init.lua new file mode 100644 index 00000000..59220983 --- /dev/null +++ b/mods/craftguide/init.lua @@ -0,0 +1,462 @@ +local craftguide, datas, mt = {}, {}, minetest +local progressive_mode = mt.setting_getbool("craftguide_progressive_mode") +local get_recipe, get_recipes = mt.get_craft_recipe, mt.get_all_craft_recipes +local get_result, show_formspec = mt.get_craft_result, mt.show_formspec +local reg_items = mt.registered_items + +-- Lua 5.3 removed `table.maxn`, use this alternative in case of breakage: +-- https://github.com/kilbith/xdecor/blob/master/handlers/helpers.lua#L1 +local remove, maxn, sort = table.remove, table.maxn, table.sort +local min, max, floor, ceil = math.min, math.max, math.floor, math.ceil + +local group_stereotypes = { + wool = "wool:white", + dye = "dye:white", + water_bucket = "bucket:bucket_water", + vessel = "vessels:glass_bottle", + coal = "default:coal_lump", + flower = "flowers:dandelion_yellow", + mesecon_conductor_craftable = "mesecons:wire_00000000_off", +} + +function craftguide:group_to_item(item) + if item:sub(1,6) == "group:" then + local itemsub = item:sub(7) + if group_stereotypes[itemsub] then + item = group_stereotypes[itemsub] + elseif reg_items["default:"..itemsub] then + item = item:gsub("group:", "default:") + else + for name, def in pairs(reg_items) do + if def.groups[item:match("[^,:]+$")] then + item = name + end + end + end + end + return item:sub(1,6) == "group:" and "" or item +end + +local function extract_groups(str) + if str:sub(1,6) ~= "group:" then return end + return str:sub(7):split(",") +end + +local function colorize(str) + -- If client <= 0.4.14, don't colorize for compatibility. + return mt.colorize and mt.colorize("#FFFF00", str) or str +end + +local function get_fueltime(item) + return get_result({method="fuel", width=1, items={item}}).time +end + +function craftguide:get_tooltip(item, recipe_type, cooktime, groups) + local tooltip, item_desc = "tooltip["..item..";", "" + local fueltime = get_fueltime(item) + local has_extras = groups or recipe_type == "cooking" or fueltime > 0 + + if reg_items[item] then + if not groups then + item_desc = reg_items[item].description + end + else + return tooltip.."Unknown Item ("..item..")]" + end + if groups then + local groupstr = "Any item belonging to the " + for i=1, #groups do + groupstr = groupstr..colorize(groups[i]).. + (groups[i+1] and " and " or "") + end + tooltip = tooltip..groupstr.." group(s)" + end + if recipe_type == "cooking" then + tooltip = tooltip..item_desc.."\nCooking time: ".. + colorize(cooktime) + end + if fueltime > 0 then + tooltip = tooltip..item_desc.."\nBurning time: ".. + colorize(fueltime) + end + + return has_extras and tooltip.."]" or "" +end + +function craftguide:get_recipe(iY, xoffset, tooltip, item, recipe_num, recipes) + local formspec, recipes_total = "", #recipes + if recipes_total > 1 then + formspec = formspec.. + "button[0,"..(iY+3)..";2,1;alternate;Alternate]".. + "label[0,"..(iY+2)..".5;Recipe ".. + recipe_num.." of "..recipes_total.."]" + end + local recipe_type = recipes[recipe_num].type + if recipe_type == "cooking" then + formspec = formspec.. + "image["..(xoffset-0.8)..","..(iY+1).. + ".5;0.5,0.5;craftguide_furnace.png]" + end + + local items = recipes[recipe_num].items + local width = recipes[recipe_num].width + if width == 0 then width = min(3, #items) end + local rows = ceil(maxn(items) / width) + local btn_size, craftgrid_limit = 1, 5 + + if recipe_type == "normal" and + width > craftgrid_limit or rows > craftgrid_limit then + formspec = formspec.. + "label["..xoffset..","..(iY+2).. + ";Recipe is too big to\nbe displayed (".. + width.."x"..rows..")]" + else + for i, v in pairs(items) do + local X = (i-1) % width + xoffset + local Y = ceil(i / width + iY+2 - min(2, rows)) + + if recipe_type == "normal" and + width > 3 or rows > 3 then + btn_size = width > 3 and 3 / width or 3 / rows + X = btn_size * (i % width) + xoffset + Y = btn_size * floor((i-1) / width) + iY+3 - + min(2, rows) + end + + local groups = extract_groups(v) + local label = groups and "\nG" or "" + local item_r = self:group_to_item(v) + local tltip = self:get_tooltip( + item_r, recipe_type, width, groups) + + formspec = formspec.. + "item_image_button["..X..","..Y..";".. + btn_size..","..btn_size..";"..item_r.. + ";"..item_r..";"..label.."]"..tltip + end + end + local output = recipes[recipe_num].output + return formspec.. + "image["..(xoffset-1)..","..(iY+2).. + ".12;0.9,0.7;craftguide_arrow.png]".. + "item_image_button["..(xoffset-2)..","..(iY+2)..";1,1;".. + output..";"..item..";]"..tooltip +end + +function craftguide:get_formspec(player_name, is_fuel) + local data = datas[player_name] + local iY = data.iX - 5 + local ipp = data.iX * iY + + if not data.items then + data.items = datas.init_items + end + data.pagemax = max(1, ceil(#data.items / ipp)) + + local formspec = "size["..data.iX..","..(iY+3)..".6;]"..[[ + background[1,1;1,1;craftguide_bg.png;true] + button[2.4,0.21;0.8,0.5;search;?] + button[3.05,0.21;0.8,0.5;clear;X] + tooltip[search;Search] + tooltip[clear;Reset] + tooltip[size_inc;Increase window size] + tooltip[size_dec;Decrease window size] + field_close_on_enter[filter, false] ]].. + "button["..(data.iX/2)..",-0.02;0.7,1;size_inc;+]".. + "button["..((data.iX/2) + 0.5).. + ",-0.02;0.7,1;size_dec;-]".. + "button["..(data.iX-3)..".4,0;0.8,0.95;prev;<]".. + "label["..(data.iX-2)..".1,0.18;".. + colorize(data.pagenum).." / "..data.pagemax.."]".. + "button["..(data.iX-1)..".2,0;0.8,0.95;next;>]".. + "field[0.3,0.32;2.5,1;filter;;".. + mt.formspec_escape(data.filter).."]" + + local even_num = data.iX % 2 == 0 + local xoffset = data.iX / 2 + (even_num and 0.5 or 0) + + if not next(data.items) then + formspec = formspec.. + "label["..(xoffset - (even_num and 1.5 or 1)).. + ",2;No item to show]" + end + + local first_item = (data.pagenum - 1) * ipp + for i = first_item, first_item + ipp - 1 do + local name = data.items[i+1] + if not name then break end + local X = i % data.iX + local Y = (i % ipp - X) / data.iX + 1 + + formspec = formspec.. + "item_image_button["..X..","..Y..";1,1;".. + name..";"..name.."_inv;]" + end + + if data.item and reg_items[data.item] then + local tooltip = self:get_tooltip(data.item) + if not data.recipes_item or (is_fuel and not + get_recipe(data.item).items) then + formspec = formspec.. + "image["..(xoffset-1)..","..(iY+2).. + ".12;0.9,0.7;craftguide_arrow.png]".. + "item_image_button["..xoffset..","..(iY+2).. + ";1,1;"..data.item..";"..data.item..";]".. + tooltip.."image["..(xoffset-2)..",".. + (iY+1.98)..";1,1;craftguide_fire.png]" + else + formspec = formspec..self:get_recipe( + iY, xoffset, tooltip, data.item, + data.recipe_num, data.recipes_item) + end + end + + data.formspec = formspec + show_formspec(player_name, "craftguide", formspec) +end + +local function player_has_item(T) + for i=1, #T do + if T[i] then return true end + end +end + +local function group_to_items(group) + local items_with_group, counter = {}, 0 + for name, def in pairs(reg_items) do + if def.groups[group:sub(7)] then + counter = counter + 1 + items_with_group[counter] = name + end + end + return items_with_group +end + +local function item_in_inv(inv, item) + return inv:contains_item("main", item) +end + +function craftguide:recipe_in_inv(inv, item_name, recipes_f) + local recipes = recipes_f or get_recipes(item_name) or {} + local show_item_recipes = {} + + for i=1, #recipes do + show_item_recipes[i] = true + for _, item in pairs(recipes[i].items) do + local group_in_inv = false + if item:sub(1,6) == "group:" then + local groups = group_to_items(item) + for j=1, #groups do + if item_in_inv(inv, groups[j]) then + group_in_inv = true + end + end + end + if not group_in_inv and not item_in_inv(inv, item) then + show_item_recipes[i] = false + end + end + end + for i=#show_item_recipes, 1, -1 do + if not show_item_recipes[i] then + remove(recipes, i) + end + end + + return recipes, player_has_item(show_item_recipes) +end + +function craftguide:get_init_items() + local items_list, counter = {}, 0 + for name, def in pairs(reg_items) do + local is_fuel = get_fueltime(name) > 0 + if not (def.groups.not_in_creative_inventory == 1) and + (get_recipe(name).items or is_fuel) and + def.description and def.description ~= "" then + + counter = counter + 1 + items_list[counter] = name + end + end + + sort(items_list) + datas.init_items = items_list +end + +function craftguide:get_filter_items(data, player) + local filter = data.filter + local items_list = progressive_mode and data.init_filter_items or + datas.init_items + local inv = player:get_inventory() + local filtered_list, counter = {}, 0 + + for i=1, #items_list do + local item = items_list[i] + local item_desc = reg_items[item].description:lower() + + if filter ~= "" then + if item:find(filter, 1, true) or + item_desc:find(filter, 1, true) then + counter = counter + 1 + filtered_list[counter] = item + end + elseif progressive_mode then + local _, has_item = self:recipe_in_inv(inv, item) + if has_item then + counter = counter + 1 + filtered_list[counter] = item + end + end + end + + if progressive_mode and not data.items then + data.init_filter_items = filtered_list + end + data.items = filtered_list +end + +mt.register_on_player_receive_fields(function(player, formname, fields) + if formname ~= "craftguide" then return end + local player_name = player:get_player_name() + local data = datas[player_name] + + if fields.clear then + data.filter, data.item, data.pagenum, data.recipe_num = + "", nil, 1, 1 + data.items = progressive_mode and data.init_filter_items or + datas.init_items + craftguide:get_formspec(player_name) + elseif fields.alternate then + local recipe = data.recipes_item[data.recipe_num + 1] + data.recipe_num = recipe and data.recipe_num + 1 or 1 + craftguide:get_formspec(player_name) + elseif (fields.key_enter_field == "filter" or fields.search) and + fields.filter ~= "" then + data.filter = fields.filter:lower() + data.pagenum = 1 + craftguide:get_filter_items(data, player) + craftguide:get_formspec(player_name) + elseif fields.prev or fields.next then + data.pagenum = data.pagenum - (fields.prev and 1 or -1) + if data.pagenum > data.pagemax then + data.pagenum = 1 + elseif data.pagenum == 0 then + data.pagenum = data.pagemax + end + craftguide:get_formspec(player_name) + elseif (fields.size_inc and data.iX < 12) or + (fields.size_dec and data.iX > 8) then + data.pagenum = 1 + data.iX = data.iX - (fields.size_dec and 1 or -1) + craftguide:get_formspec(player_name) + else for item in pairs(fields) do + if item:find(":") then + if item:sub(-4) == "_inv" then + item = item:sub(1,-5) + end + + local recipes = get_recipes(item) + local is_fuel = get_fueltime(item) > 0 + if not recipes and not is_fuel then return end + + if progressive_mode then + local inv = player:get_inventory() + local _, has_item = + craftguide:recipe_in_inv(inv, item) + + if not has_item then return end + recipes = craftguide:recipe_in_inv( + inv, item, recipes) + end + + data.item = item + data.recipe_num = 1 + data.recipes_item = recipes + craftguide:get_formspec(player_name, is_fuel) + end + end + end +end) + +function craftguide:on_use(itemstack, user) + if not datas.init_items then + craftguide:get_init_items() + end + + local player_name = user:get_player_name() + local data = datas[player_name] + + if progressive_mode or not data then + datas[player_name] = {filter="", pagenum=1, iX=9} + if progressive_mode then + craftguide:get_filter_items( + datas[player_name], user) + end + craftguide:get_formspec(player_name) + else + show_formspec(player_name, "craftguide", data.formspec) + end +end + +mt.register_craftitem("craftguide:book", { + description = "Crafting Guide", + inventory_image = "craftguide_book.png", + wield_image = "craftguide_book.png", + stack_max = 1, + groups = {book=1}, + on_use = function(itemstack, user) + craftguide:on_use(itemstack, user) + end +}) + +mt.register_node("craftguide:sign", { + description = "Crafting Guide Sign", + drawtype = "nodebox", + tiles = {"craftguide_sign.png"}, + inventory_image = "craftguide_sign_inv.png", + wield_image = "craftguide_sign_inv.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + groups = {wood=1, oddly_breakable_by_hand=1, flammable=3}, + node_box = { + type = "wallmounted", + wall_top = {-0.4375, 0.4375, -0.3125, 0.4375, 0.5, 0.3125}, + wall_bottom = {-0.4375, -0.5, -0.3125, 0.4375, -0.4375, 0.3125}, + wall_side = {-0.5, -0.3125, -0.4375, -0.4375, 0.3125, 0.4375} + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "Crafting Guide Sign") + end, + on_rightclick = function(pos, node, user, itemstack) + craftguide:on_use(itemstack, user) + end +}) + +mt.register_craft({ + output = "craftguide:book", + type = "shapeless", + recipe = {"default:book"} +}) + +mt.register_craft({ + type = "fuel", + recipe = "craftguide:book", + burntime = 3 +}) + +mt.register_craft({ + output = "craftguide:sign", + type = "shapeless", + recipe = {"default:sign_wall_wood"} +}) + +mt.register_craft({ + type = "fuel", + recipe = "craftguide:sign", + burntime = 10 +}) + +mt.register_alias("xdecor:crafting_guide", "craftguide:book") + diff --git a/mods/craftguide/mod.conf b/mods/craftguide/mod.conf new file mode 100644 index 00000000..c32f7142 --- /dev/null +++ b/mods/craftguide/mod.conf @@ -0,0 +1 @@ +name = craftguide diff --git a/mods/craftguide/screenshot.png b/mods/craftguide/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..ebb8e4d768d753fd298504a75bc86fe6e42f5c5d GIT binary patch literal 35837 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 S(J}@G1_n=8KbLh*2~7Zbtm!)d literal 0 HcmV?d00001 diff --git a/mods/craftguide/textures/craftguide_fire.png b/mods/craftguide/textures/craftguide_fire.png new file mode 100644 index 0000000000000000000000000000000000000000..6e3a83282875d71c2dd33cb42964a58ca8b3a044 GIT binary patch literal 3131 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 GLK6T0_fC8O literal 0 HcmV?d00001 diff --git a/mods/craftguide/textures/craftguide_sign.png b/mods/craftguide/textures/craftguide_sign.png new file mode 100644 index 0000000000000000000000000000000000000000..f64b5ab5a67db1501315eefd08a6dc32e685074a GIT binary patch literal 685 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7*pj^6T^Rm@;DWu&Co?cG za29w(7Bet#3xhBt!>l<<~`Sa>ya>Q&Pi7?`X)T^vI!PS2gZKU>6+ zp>_YMDVMhYw&gF~7Yh?)Ik7i(J4s!-O%)zvz;MZ!6tn zbxkgdZcnSmB9&uj-@ZNf_Rl7d)Xcb_4{YN;?tAj>sj#6p>pe9I`9P%!DqICAD;riw zNVqRFZaWrGV$@X3v-gl|yH-hi@$@v|Z40c!{oOC>dvDVcW!37KvOC=G*#CL*GFH+SsIj1FqyhVX_A%aln2qj`^6WzYcy`2SH3glcjsDb&kuW1>h59G zyPa>U=AQdJ(N8BDJv@E<{E3i-iyT8i~|qV{VlHd-8i^?kif^bFT>t38obUdAgbD&C8A z2axx7JX#w_vfVi~)-p6UK# zD_)ttvR~biAgOC|@^5zfqYGAj^Q=z0?d<#Fe5~xv61k8kJC8+mzbm=%<14Rz@v*Ag z9}a&0^wGxoveK{APM3|_{>`1rFaLq1?*E^*@_7Qx2Xhr#6r^W6c%A%Ro}bCaylR)@ zshrR3dYmQQh2P%FyK^`PI|r{#ZkJ{eH@F(U=2MDd;`MoVEuxL1GI~m9+Z#Ba{)neU nKk^Cb{Pq5)QSTPB58}6;St`fOSDM4Xz`)??>gTe~DWM4fIIb+U literal 0 HcmV?d00001 diff --git a/mods/craftguide/textures/craftguide_sign_inv.png b/mods/craftguide/textures/craftguide_sign_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..61372344bbb71a1af0164333415bb90d750bb609 GIT binary patch literal 685 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7*pj^6T^Rm@;DWu&Co?cG za29w(7Bet#3xhBt!>l<<~`Sok#EgUXgNFfdtpx;TbdoSr**Z?;Gv z!;$*;$>sNR^(<8`dbtSb!Q`F1{x-&ys`ps$?XBxws~fcNW%#sr+up9JiCTDF)^SPO z0~@QWEgK}utQJgpaQgW96)uaTJA3$Kot(|zUpO{x@8rn}MaQ;3U$fqGiyz0qiL>U| zoY(A@_mP`%D9n`ce8&2A6Sal$B0OE8hc-Mp`bcK={r#VE62&gR{E+ri^Xq~q5BEkZ zxEJ_3PfCrr9S~-^DL!(MkHkyg1)KER)BQfb`YCkTSUqB1{edeBGvjp575?~P7-tu` zV9m7^|JEoiPBt;`_CAvdf8&ubVfWl6ak~ zeB{9C1Y}&hwtw@dhs=#9-p{|!VJC3gn=SxslD&1 zJ9o+{<*mzBNgE}v$T{3`QNgCSyJ1$&vp-*dPSV!6zo&rZrR$wf;%?Qp oM|!)BGZy}@-scr1CH|AUWtORiPP4BU0|Nttr>mdKI;Vst06Bm#g8%>k literal 0 HcmV?d00001