From 84e858fccfc248e5cb4948bd371a21e45dfadd8b Mon Sep 17 00:00:00 2001 From: crabman77 Date: Fri, 7 Apr 2017 23:18:55 +0200 Subject: [PATCH 1/5] add new mod player_physics and update sprint and 3d_armor to use player_physics --- .../mods/player_physics/LICENSE | 674 ++++++++++++++++++ .../mods/player_physics/README.md | 35 + .../mods/player_physics/init.lua | 121 ++++ mods/3d_armor/3d_armor/armor.lua | 3 +- mods/3d_armor/3d_armor/depends.txt | 1 + mods/sprint/depends.txt | 1 + mods/sprint/esprint.lua | 27 +- mods/sprint/init.lua | 4 +- mods/sprint/wsprint.lua | 4 +- 9 files changed, 840 insertions(+), 30 deletions(-) create mode 100644 minetestforfun_game/mods/player_physics/LICENSE create mode 100644 minetestforfun_game/mods/player_physics/README.md create mode 100644 minetestforfun_game/mods/player_physics/init.lua diff --git a/minetestforfun_game/mods/player_physics/LICENSE b/minetestforfun_game/mods/player_physics/LICENSE new file mode 100644 index 00000000..9cecc1d4 --- /dev/null +++ b/minetestforfun_game/mods/player_physics/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. + + {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/minetestforfun_game/mods/player_physics/README.md b/minetestforfun_game/mods/player_physics/README.md new file mode 100644 index 00000000..f0626cac --- /dev/null +++ b/minetestforfun_game/mods/player_physics/README.md @@ -0,0 +1,35 @@ +# player_physics +A minetest mod to centralize the management of player's stats(sprint, jump, gravity) +Because many mods (sprint, 3d_armor and others) rewrite the stats in their corner and it cancel + + +***API*** + + - player_physics.set_stats(player, "uniq_name", table) + + - player_physics.remove_stats(player, "uniq_name") + +**Exemple** + + - player_physics.set_stats(player, "potion_speedlvl1", {speed=0.35}) + + - player_physics.set_stats(player, "sprint_mod", {speed=0.35, jump=0.1}) + + - player_physics.remove_stats(player, "potion_speedlvl1") + +**Temporary effect** + + - player_physics.add_effect(player, "uniq_name", time, stats) + - player_physics.remove_effect(player, "uniq_name") + +**Exemple** +You make a potion that adds speed for 10 seconds. + + on_use = function(itemstack, user, pointed_thing) + player_physics.add_effect(user, "potion_speedlvl1", 10, {speed=0.6}) + itemstack:take_item() + return itemstack + end + + + diff --git a/minetestforfun_game/mods/player_physics/init.lua b/minetestforfun_game/mods/player_physics/init.lua new file mode 100644 index 00000000..ed1e5e28 --- /dev/null +++ b/minetestforfun_game/mods/player_physics/init.lua @@ -0,0 +1,121 @@ +local players = {} +player_physics = {} + + +function player_physics.check(playerName) + if players[playerName] == nil then + players[playerName] = {speed = {}, jump = {}, gravity={}, temp={}} + end +end + + +minetest.register_on_joinplayer(function(player) + local playerName = player:get_player_name() + player_physics.check(playerName) +end) + + +minetest.register_on_leaveplayer(function(player) + local playerName = player:get_player_name() + players[playerName] = nil +end) + + +function player_physics.set_stats(player, uuid, stats) + if type(stats) ~= "table" then + minetest.log("error", "player_physics: set_stats(player, uuid, stat) stats must be table(eg:{speed=1})") + return + end + local playerName = player:get_player_name() + player_physics.check(playerName) + for stat, v in pairs(stats) do + if (stat == "speed" or stat == "jump" or stat == "gravity") and type(v) == "number" then + players[playerName][stat][uuid] = v + end + end +end + + +function player_physics.remove_stats(player, uuid) + local playerName = player:get_player_name() + player_physics.check(playerName) + for _, stat in pairs({"speed", "jump", "gravity"}) do + players[playerName][stat][uuid] = nil + end +end + + +function player_physics.add_effect(player, uuid, time, stats) + if type(stats) ~= "table" then + minetest.log("error", "player_physics: add_effect(player, uuid, time, stats) stats must be table(eg:{speed=1})") + return + end + if type(time) ~= "number" then + minetest.log("error", "player_physics: add_effect(player, uuid, time, stats) time must be number") + return + end + local playerName = player:get_player_name() + player_physics.check(playerName) + for stat, v in pairs(stats) do + if (stat == "speed" or stat == "jump" or stat == "gravity") and type(v) == "number" then + players[playerName]["temp"][uuid][stat] = {value=v, time=time} + end + end +end + + +function player_physics.remove_effect(player, uuid) + local playerName = player:get_player_name() + player_physics.check(playerName) + players[playerName]["temp"][uuid] = nil +end + + +minetest.register_globalstep(function(dtime) + for _,player in ipairs(minetest.get_connected_players()) do + local playerName = player:get_player_name() + if playerName ~= "" then + player_physics.check(playerName) + local stats ={speed=1, jump=1, gravity=1} + + for _, stat in pairs({"speed", "jump", "gravity"}) do + for uuid, v in pairs(players[playerName][stat]) do + stats[stat] = stats[stat] + v + end + end + + --temporary effect + for uuid, _ in pairs(players[playerName]["temp"]) do + for stat, v in pairs(players[playerName]["temp"][uuid]) do + stats[stat] = stats[stat] + v.value + local t = v.time-dtime + if t > 0 then + players[playerName]["temp"][uuid][stat].time = t + else + players[playerName]["temp"][uuid][stat] = nil + end + end + end --/temporary effect + + if stats.speed > 4 then + stats.speed = 4 + elseif stats.speed < 0 then + stats.speed = 0 + end + + if stats.jump > 3 then + stats.jump = 3 + elseif stats.jump < 0 then + stats.jump = 0 + end + + if stats.gravity > 2 then + stats.gravity = 2 + elseif stats.gravity < -2 then + stats.gravity = -2 + end + player:set_physics_override(stats) + end + end +end) + diff --git a/mods/3d_armor/3d_armor/armor.lua b/mods/3d_armor/3d_armor/armor.lua index b7e26d99..43edfb9f 100755 --- a/mods/3d_armor/3d_armor/armor.lua +++ b/mods/3d_armor/3d_armor/armor.lua @@ -244,7 +244,8 @@ armor.set_player_armor = function(self, player) armor_groups.radiation = 100 - armor_radiation end player:set_armor_groups(armor_groups) - player:set_physics_override(physics_o) + --player:set_physics_override(physics_o) + player_physics.set_stats(player, "3d_armor", {speed=physics_o.speed-1, jump=physics_o.jump-1, gravity=physics_o.gravity-1}) self.textures[name].armor = armor_texture self.textures[name].preview = preview self.def[name].state = state diff --git a/mods/3d_armor/3d_armor/depends.txt b/mods/3d_armor/3d_armor/depends.txt index 3acf737c..0dd76f9f 100755 --- a/mods/3d_armor/3d_armor/depends.txt +++ b/mods/3d_armor/3d_armor/depends.txt @@ -1,4 +1,5 @@ default +player_physics inventory_plus? unified_inventory? fire? diff --git a/mods/sprint/depends.txt b/mods/sprint/depends.txt index 3e1d5c20..0388f669 100755 --- a/mods/sprint/depends.txt +++ b/mods/sprint/depends.txt @@ -1 +1,2 @@ hudbars? +player_physics diff --git a/mods/sprint/esprint.lua b/mods/sprint/esprint.lua index 7f617511..2c0b2806 100755 --- a/mods/sprint/esprint.lua +++ b/mods/sprint/esprint.lua @@ -182,35 +182,12 @@ end) function setSprinting(playerName, sprinting) --Sets the state of a player (0=stopped/moving, 1=sprinting) local player = minetest.get_player_by_name(playerName) - local bonus_speed = 0 - local bonus_jump = 0 - if minetest.get_modpath("3d_armor") then - local player_inv = player:get_inventory() - if player_inv then - for i=1, player_inv:get_size("armor") do - local stack = player_inv:get_stack("armor", i) - if stack:get_count() > 0 then - local def = stack:get_definition() - if def and def.groups then - if def.groups["physics_speed"] then - bonus_speed = bonus_speed + def.groups["physics_speed"] - end - - if def.groups["physics_jump"] then - bonus_jump = bonus_jump + def.groups["physics_jump"] - end - end - end - end - end - end - if sprint.players[playerName] then sprint.players[playerName]["sprinting"] = sprinting if sprinting == true then - player:set_physics_override({speed=SPRINT_SPEED + bonus_speed,jump=SPRINT_JUMP + bonus_jump}) + player_physics.set_stats(player, "sprint", {speed=SPRINT_SPEED, jump=SPRINT_JUMP}) elseif sprinting == false then - player:set_physics_override({speed=1.0 + bonus_speed,jump=1.0 + bonus_jump}) + player_physics.set_stats(player, "sprint", {speed=0, jump=0}) end return true end diff --git a/mods/sprint/init.lua b/mods/sprint/init.lua index e8fc69b2..0bf1034d 100755 --- a/mods/sprint/init.lua +++ b/mods/sprint/init.lua @@ -9,8 +9,8 @@ distributed without any warranty. --Configuration variables, these are all explained in README.md SPRINT_METHOD = 1 -SPRINT_SPEED = 1.35 -SPRINT_JUMP = 1.1 +SPRINT_SPEED = 0.35 +SPRINT_JUMP = 0.1 SPRINT_STAMINA = 10 SPRINT_TIMEOUT = 0.5 --Only used if SPRINT_METHOD = 0 diff --git a/mods/sprint/wsprint.lua b/mods/sprint/wsprint.lua index 2923d83c..3abda45b 100755 --- a/mods/sprint/wsprint.lua +++ b/mods/sprint/wsprint.lua @@ -140,11 +140,11 @@ function setState(playerName, state) --Sets the state of a player (0=stopped, 1= if players[playerName] then players[playerName]["state"] = state if state == 0 then--Stopped - player:set_physics_override({speed=1.0,jump=1.0}) + player_physics.set_stats(player, "sprint", {speed=0, jump=0}) elseif state == 2 then --Primed players[playerName]["timeOut"] = gameTime elseif state == 3 then --Sprinting - player:set_physics_override({speed=SPRINT_SPEED,jump=SPRINT_JUMP}) + player_physics.set_stats(player, "sprint", {speed=SPRINT_SPEED, jump=SPRINT_JUMP}) end return true end From 1a7c63f6bda2a2951c3036a2a40b199d2c73d697 Mon Sep 17 00:00:00 2001 From: sys4-fr Date: Sun, 9 Apr 2017 03:49:24 +0200 Subject: [PATCH 2/5] Fix server crash if filter-injector placed on the right of a connected chest is punched --- mods/pipeworks/filter-injector.lua | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/mods/pipeworks/filter-injector.lua b/mods/pipeworks/filter-injector.lua index 7fbabc2b..c63b3364 100755 --- a/mods/pipeworks/filter-injector.lua +++ b/mods/pipeworks/filter-injector.lua @@ -144,6 +144,14 @@ local function punch_filter(data, filtpos, filtnode, msg) local dir = minetest.facedir_to_right_dir(filtnode.param2) local frompos = vector.subtract(filtpos, dir) local fromnode = minetest.get_node(frompos) + + -- Fix crash with connected_chests (sys4 fix for MFF) + if fromnode.name == "connected_chests:chest_right" then + local v_mul = vector.multiply(dir, 2) + frompos = vector.subtract(filtpos, v_mul) + fromnode = minetest.get_node(frompos) + end + if not fromnode then return end local fromdef = minetest.registered_nodes[fromnode.name] if not fromdef then return end From a2dd80356d96504d27089fb69c7e35ac1d59c891 Mon Sep 17 00:00:00 2001 From: sys4-fr Date: Sun, 9 Apr 2017 11:02:48 +0200 Subject: [PATCH 3/5] Fix digiline filter injector --- mods/pipeworks/filter-injector.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/pipeworks/filter-injector.lua b/mods/pipeworks/filter-injector.lua index c63b3364..fa2e9450 100755 --- a/mods/pipeworks/filter-injector.lua +++ b/mods/pipeworks/filter-injector.lua @@ -217,7 +217,7 @@ local function punch_filter(data, filtpos, filtnode, msg) if type(msg.name) == "string" then table.insert(filters, {name = msg.name, count = tonumber(msg.count) or 1}) else - for _, filter in ipairs(msg) do + for _, filter in ipairs(msg.name) do local t_filter = type(filter) if t_filter == "table" then if type(filter.name) == "string" then From cd1b2e1ba7e280e786feeeeeb13784fb08d36a02 Mon Sep 17 00:00:00 2001 From: sys4-fr Date: Sun, 9 Apr 2017 11:09:32 +0200 Subject: [PATCH 4/5] Merge submodule unifieddyes into mods directory --- .gitmodules | 3 - mods/unifieddyes | 1 - mods/unifieddyes/LICENSE | 282 +++++ mods/unifieddyes/README | 248 ++++ mods/unifieddyes/bottle_overlay.png | Bin 0 -> 292 bytes mods/unifieddyes/changelog.txt | 101 ++ mods/unifieddyes/colors.txt | 90 ++ mods/unifieddyes/depends.txt | 4 + mods/unifieddyes/description.txt | 1 + mods/unifieddyes/init.lua | 1056 +++++++++++++++++ mods/unifieddyes/locale/de.txt | 74 ++ mods/unifieddyes/locale/template.txt | 87 ++ mods/unifieddyes/locale/tr.txt | 88 ++ mods/unifieddyes/mod.conf | 1 + mods/unifieddyes/textures/unifieddyes_dye.png | Bin 0 -> 150 bytes .../textures/unifieddyes_palette.png | Bin 0 -> 207 bytes .../textures/unifieddyes_palette_aquas.png | Bin 0 -> 99 bytes .../textures/unifieddyes_palette_blues.png | Bin 0 -> 99 bytes .../unifieddyes_palette_colorwallmounted.png | Bin 0 -> 136 bytes .../textures/unifieddyes_palette_cyans.png | Bin 0 -> 101 bytes .../textures/unifieddyes_palette_extended.png | Bin 0 -> 290 bytes .../textures/unifieddyes_palette_greens.png | Bin 0 -> 91 bytes .../textures/unifieddyes_palette_greys.png | Bin 0 -> 90 bytes .../textures/unifieddyes_palette_limes.png | Bin 0 -> 99 bytes .../textures/unifieddyes_palette_magentas.png | Bin 0 -> 101 bytes .../textures/unifieddyes_palette_oranges.png | Bin 0 -> 99 bytes .../textures/unifieddyes_palette_reds.png | Bin 0 -> 99 bytes .../unifieddyes_palette_redviolets.png | Bin 0 -> 99 bytes .../textures/unifieddyes_palette_skyblues.png | Bin 0 -> 99 bytes .../textures/unifieddyes_palette_violets.png | Bin 0 -> 99 bytes .../textures/unifieddyes_palette_yellows.png | Bin 0 -> 101 bytes 31 files changed, 2032 insertions(+), 4 deletions(-) delete mode 160000 mods/unifieddyes create mode 100644 mods/unifieddyes/LICENSE create mode 100644 mods/unifieddyes/README create mode 100644 mods/unifieddyes/bottle_overlay.png create mode 100644 mods/unifieddyes/changelog.txt create mode 100644 mods/unifieddyes/colors.txt create mode 100644 mods/unifieddyes/depends.txt create mode 100644 mods/unifieddyes/description.txt create mode 100644 mods/unifieddyes/init.lua create mode 100644 mods/unifieddyes/locale/de.txt create mode 100644 mods/unifieddyes/locale/template.txt create mode 100644 mods/unifieddyes/locale/tr.txt create mode 100644 mods/unifieddyes/mod.conf create mode 100644 mods/unifieddyes/textures/unifieddyes_dye.png create mode 100644 mods/unifieddyes/textures/unifieddyes_palette.png create mode 100644 mods/unifieddyes/textures/unifieddyes_palette_aquas.png create mode 100644 mods/unifieddyes/textures/unifieddyes_palette_blues.png create mode 100644 mods/unifieddyes/textures/unifieddyes_palette_colorwallmounted.png create mode 100644 mods/unifieddyes/textures/unifieddyes_palette_cyans.png create mode 100644 mods/unifieddyes/textures/unifieddyes_palette_extended.png create mode 100644 mods/unifieddyes/textures/unifieddyes_palette_greens.png create mode 100644 mods/unifieddyes/textures/unifieddyes_palette_greys.png create mode 100644 mods/unifieddyes/textures/unifieddyes_palette_limes.png create mode 100644 mods/unifieddyes/textures/unifieddyes_palette_magentas.png create mode 100644 mods/unifieddyes/textures/unifieddyes_palette_oranges.png create mode 100644 mods/unifieddyes/textures/unifieddyes_palette_reds.png create mode 100644 mods/unifieddyes/textures/unifieddyes_palette_redviolets.png create mode 100644 mods/unifieddyes/textures/unifieddyes_palette_skyblues.png create mode 100644 mods/unifieddyes/textures/unifieddyes_palette_violets.png create mode 100644 mods/unifieddyes/textures/unifieddyes_palette_yellows.png diff --git a/.gitmodules b/.gitmodules index 0d480186..35ebfdc9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -84,6 +84,3 @@ path = mods/moreflowers url = https://github.com/sys4-fr/moreflowers.git branch = master -[submodule "mods/unifieddyes"] - path = mods/unifieddyes - url = https://github.com/minetest-mods/unifieddyes.git diff --git a/mods/unifieddyes b/mods/unifieddyes deleted file mode 160000 index df177c26..00000000 --- a/mods/unifieddyes +++ /dev/null @@ -1 +0,0 @@ -Subproject commit df177c26a75ec1880704b24dafe402cfe91cfe33 diff --git a/mods/unifieddyes/LICENSE b/mods/unifieddyes/LICENSE new file mode 100644 index 00000000..4eb75981 --- /dev/null +++ b/mods/unifieddyes/LICENSE @@ -0,0 +1,282 @@ + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) 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 +this service 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 make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. 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. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +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 +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the 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 a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE 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. + + END OF TERMS AND CONDITIONS + diff --git a/mods/unifieddyes/README b/mods/unifieddyes/README new file mode 100644 index 00000000..eba6d526 --- /dev/null +++ b/mods/unifieddyes/README @@ -0,0 +1,248 @@ +VanessaE's Unified Dyes +======================= + +The purpose of this mod originally was to supply a complete set of colors for +Minetest mod authors to use in their recipes. Since the default dyes mod that +is supplied with Minetest "common" is now usable (via flowers, also included in +"common"), this mod has become more of an extension pack. + +Unified Dyes expands the standard dye set from 15 to 90 colors. + +IMPORTANT: This mod is not intended to suggest that you should use the entire +palette. Rather, I was hoping people would just choose maybe the dozen or so +most useful colors to use in their mods. + +Dependencies: default and dye from Minetest "common". This mod will NOT work +without these. This mod will NOT work without these. The default dye mod is +normally activated only in the standard "build" and "minetest_game" games, or perhaps if +someone has a modpack or game that includes them. + +Recommends: flowers from common. + +License: GPL 2.0 or above + +Install: Unzip the distribution file, rename the resultant +VanessaE-unifieddyes-blahblah folder to just "unifieddyes", and move it into +Minetest's mods folder. + +The Palette: + +[ http://digitalaudioconcepts.com/vanessa/hobbies/minetest/screenshots/color-swatches.png ] +[ The official palette, showing 84 colors and 5 greys. ] + +In the image above, the "50%" markings on the left next to each shade mean 50% +saturation for all hues in that shade line. Note that the "light" shades don't +have (or need) that variant. For the greys, the percentages shown are of +brightness relative to pure white. There are three special cases: Light red +has been aliased to default pink dye, and dark green has been aliased to +default dark greey dye. Brown dye also exists in the default set, it's just +not shown in the palette above. + + +Usage instructions, technical information +========================================= + +Getting Started +--------------- + +First thing's first: you're going to need to harvest some materials to make the +dyes from. For this, you need one or more of the following: roses (red), +tulips (orange), yellow dandelions (yellow), cactus (green), geraniums (blue), +violas (purple), coal (black), or white dandelions (white). Simply wander +around your world and collect whichever of the above you need to get your +colors. + +[ http://digitalaudioconcepts.com/vanessa/hobbies/minetest/screenshots/unifieddyes1.png ] +[ The 8 base colors directly obtainable from a material in the world. ] + +Simply place one of the above materials into the crafting grid to obtain four +portions of dye in that color From those initial 8 colors, you can directly +fashion another 11, for a total of 19 standard colors (including the various +greys): + +[ http://digitalaudioconcepts.com/vanessa/hobbies/minetest/screenshots/unifieddyes2.png ] +[ The complete 19-color standard set. ] + +The standardized colors and their crafting methods are as follows: + +* Red (0°): one rose +* Orange (30°): one tulip, or put one red dye and one yellow dye into the + crafting grid to mix them (yields 2) +* Yellow (60°): one yellow dandelion +* Lime (90°): mix yellow + green (yields 2) +* Green (120°): one cactus, or mix yellow + blue (yields 2) +* Aqua (150°): mix green + cyan (yields 2) +* Cyan (180°): mix green + blue (yields 2) +* Sky blue (210°): mix cyan + blue (yields 2) +* Blue (240°): one geranium +* Violet (270°): one viola, or mix blue + magenta (yields 2). +* Magenta (300°): mix blue + red (yields 2) +* Red-violet (330°): mix magenta + red (yields 2) + +* Black (7.5%): one piece of coal +* Dark grey (25%): mix one white + two black (yields 3) +* Medium grey (50%): mix one white and one black (yields 2) +* Light grey (75%): Mix two white and one black (yields 3) +* White (95%): one white dandelion. + +The degree figures are the colors' hues on a standard HSV color wheel, and are +what I used in the textures supplied with this mod. For the greys, the figures +in parenthesis indicate the intended brightness of the shade, relative to +white. Note that black and white don't go all the way to the bottom/top of the +scale, as doing so may crush some details in textures made in those shades (see +below, regarding semi-automatic texture generation). + + +Darker/Lighter colors +--------------------- + +To obtain a dark (33%) version of a given color, use two portions of black dye +along with the base color from the list above, which yields three portions of +the final color. + +To obtain a medium-brightness (66%) version of a given color, mix one portion +the base color with one portion of black dye (for example, medium lime = lime + +black). All such mixtures yield two portions of the final color. + +To obtain a light (150% over full) version of a given color, mix one portion of +the base color with one portion of white dye. Yields 2 portions of the final +color. + + +Low-saturation colors +--------------------- + +To get the low saturation (50%) version of one of the base colors, mix one or +more of white, black, or a shade of grey with the desired base color: + +Dark, low saturation: dark grey dye + color (yields 2), or two blacks + 1 white ++ color (yields 4). For example, dark, low-saturation red = red + dark grey, +or red + two black + one white. + +Medium brightness, low saturation: medium grey dye + color (yields 2), or black ++ white + color (yields 3). For example, medium, low-saturation green = green ++ medium grey, or green + black + white. + +Full, low saturation: light grey dye + color (yields 2), or 1 black + 2 whites ++ color (yields 4). For example, bright, low-saturation blue = blue + light +grey, or blue + black + 2 white. + +There is no low-saturation version of the "light" colors. + +Red + white always returns default pink dye, and black + green always returns +default dark green dye. + + +RGB values +---------- + +All RGB values and filenames for all colors and shades of grey are represented +in the file "colors.txt" (which was generated with the bash script +"listcolors.sh"), included in the distribution directory. Note that +listcolors.sh is an example only and was written for a different set of +textures than what Unified Dyes includes now. + + +Misc. Notes +----------- + +If you need to use /give commands, the item names for the standard set of 12 +regular "full" colors (plus pink, brown, and dark green) is simply "dye:color", +e.g. "dye:red", "dye:pink", or "dye:skyblue". Greys have a similar naming +convention: dye:white, dye:light_grey, dye:grey, dye:dark_grey, or dye:black. + +For everything beyond those initial 19 colors, the item names are of the +following format: + +unifieddyes:{"light_" or "medium_" or "dark_"}{color}{nothing or "_s50"}. + +For example, low saturation dark yellow is "unifieddyes:dark_yellow_s50", while +light normal-saturation red-violet would be "unifieddyes:light_redviolet". + +See the texture filenames in the textures/ folder for further hints - all of +the item names follow the same format as the corresponding filenames, save for +having a colon (:) instead of the first underscore (_). + + +Semi-automatic generation of textures +===================================== + +The texture generator script +---------------------------- + +Obviously, in order for this mod or the above template to be useful, you'll +need textures. If you plan to support the entire range of colors offered by +Unified Dyes, there is a BASH script included with this mod as well with the +above template named gentextures.sh, which will, with an appropriately- colored +and appropriately-named source texture, and possibly an overlay texture, +generate a complete set of colored and greyscale textures. + +The script requires bc (the calculator program) to handle some basic math +regarding the hue adjustments, and Imagemagick's "convert" program handles all +of the actual conversions. + +First thing's first though - you need source textures. Using your favorite +image editor, create a single version of your desired texture. Draw it in the +brightest, deepest shade of RED you can muster without losing any detail, and +save it out. Ideally, you will want the average color of the texture, when +taking into account all bright and dark areas, to be as close as possible to +the hex value #FF0000 (0 degrees, 100% saturation, pure red) without losing any +appreciable #detail. + +Save this source texture out as a PNG image, with a filename of +"whatever_base.png", where "whatever" is the one-word name of your mod - for +example, mymod_base.png. + +If you want to add an image on top of the colored blocks, such as a frame, +which you want to be the same color throughout all of the textures, create it +now. It should consist only of those parts of the textures that you want to +leave unchanged, with some level of alpha transparency everywhere else, +depending on how much of the image needs to remain unchanged. Save it out as a +PNG image, using any filename you want, for example myoverlay.png. + +Now, use chmod to make the script executable, if necessary, and run it. + +If you don't need the overlay, you just need to supply one command line +argument: the base name of your mod. The script will use that parameter as the +basis of its texture filenames. For example: + +./gentextures.sh mymod + +The script will then look for mymod_base.png and copy and convert it into +things like mymod_red.png, mymod_dark_blue.png, and so on. + +If you want to use an overlay also, skip the above step and run the script with +the base name as the first parameter, and the complete filename of your overlay +as the second instead. For example: + +./gentextures.sh mymod myoverlay.png + +Otherwise, the program will iterate through all of the hues and shades that are +supported by unifieddyes (though this is done manually, not by reading anything +from the mod), compositing your overlay image in after the recolor step, if +you're using that option. + +All of the output files will be placed in a new folder, generated-textures/ in +the current directory. Note that the script looks for the above files in the +current directory also. + +The script has a third mode as well: + +./gentextures.sh -t mymod myoverlay.png + +In this mode, the script will leave the base texture mymod_base.png unchanged, +and instead will rotate the colors of the overlay image and then composite that +onto the base texture. The same color changes will happen with the overlay in +this mode, so it's a good idea to make the overlay some fairly saturated shade +of red. Along with that, the base image should be some neutral color; any +color is fine as long as the result is what you wanted. + +The program attempts to verify that the files you've asked it to use will +actually work, and will exit immediately if the any are invalid, missing, etc. + +Use your favorite image browser or file manager to review the results in +generated-textures/, and if they're right, copy them over to the textures/ +folder in your mod. + +Note that this script does not generate brown and pink variations of your base +texture - you'll have to do those two manually. diff --git a/mods/unifieddyes/bottle_overlay.png b/mods/unifieddyes/bottle_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..e3341a6f77433b7a7e26ce96022da47e6ece2041 GIT binary patch literal 292 zcmV+<0o(qGP)lt*7YZK`PR?2W2XVp@cvzhP zYb~8p(TWzTs`}YTb8FzQQC>?BtpKG|J`6+dz0b#Soc math.pi/8 then + fdir = 1 + end + minetest.swap_node(pos, { name = node.name, param2 = fdir }) +end + +-- use this when you have a "wallmounted" node that should never be oriented +-- to floor or ceiling... + +function unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing) + local node = minetest.get_node(pos) + local yaw = placer:get_look_yaw() + local dir = minetest.yaw_to_dir(yaw) + local fdir = minetest.dir_to_wallmounted(dir) + minetest.swap_node(pos, { name = node.name, param2 = fdir }) +end + +-- ... and use this one to force that kind of node off of floor/ceiling +-- orientation after the screwdriver rotates it. + +function unifieddyes.fix_after_screwdriver_nsew(pos, node, user, mode, new_param2) + local new_fdir = new_param2 % 8 + local color = new_param2 - new_fdir + if new_fdir < 2 then + new_fdir = 2 + minetest.swap_node(pos, { name = node.name, param2 = new_fdir + color }) + return true + end +end + +function unifieddyes.select_node(pointed_thing) + local pos = pointed_thing.under + local node = minetest.get_node_or_nil(pos) + local def = node and minetest.registered_nodes[node.name] + + if not def or not def.buildable_to then + pos = pointed_thing.above + node = minetest.get_node_or_nil(pos) + def = node and minetest.registered_nodes[node.name] + end + return def and pos, def +end + +function unifieddyes.is_buildable_to(placer_name, ...) + for _, pos in ipairs({...}) do + local node = minetest.get_node_or_nil(pos) + local def = node and minetest.registered_nodes[node.name] + if not (def and def.buildable_to) or minetest.is_protected(pos, placer_name) then + return false + end + end + return true +end + +function unifieddyes.get_hsv(name) -- expects a node/item name + local hue = "" + local a,b + for _, i in ipairs(unifieddyes.HUES) do + a,b = string.find(name, "_"..i) + if a and not ( string.find(name, "_redviolet") and i == "red" ) then + hue = i + break + end + end + + if string.find(name, "_light_grey") then hue = "light_grey" + elseif string.find(name, "_lightgrey") then hue = "light_grey" + elseif string.find(name, "_dark_grey") then hue = "dark_grey" + elseif string.find(name, "_darkgrey") then hue = "dark_grey" + elseif string.find(name, "_grey") then hue = "grey" + elseif string.find(name, "_white") then hue = "white" + elseif string.find(name, "_black") then hue = "black" + end + + local sat = "" + if string.find(name, "_s50") then sat = "_s50" end + + local val = "" + if string.find(name, "dark_") then val = "dark_" end + if string.find(name, "medium_") then val = "medium_" end + if string.find(name, "light_") then val = "light_" end + + return hue, sat, val +end + +-- code partially borrowed from cheapie's plasticbox mod + +-- in the function below, color is just a color string, while +-- palette_type can be: +-- +-- false/nil = standard 89 color palette +-- true = 89 color palette split into pieces for colorfacedir +-- "wallmounted" = 32-color abridged palette +-- "extended" = 256 color palette + +function unifieddyes.getpaletteidx(color, palette_type) + + local origcolor = color + local aliases = { + ["pink"] = "light_red", + ["brown"] = "dark_orange", + } + + local grayscale = { + ["white"] = 1, + ["light_grey"] = 2, + ["grey"] = 3, + ["dark_grey"] = 4, + ["black"] = 5, + } + + local grayscale_extended = { + ["white"] = 0, + ["grey_14"] = 1, + ["grey_13"] = 2, + ["grey_12"] = 3, + ["light_grey"] = 3, + ["grey_11"] = 4, + ["grey_10"] = 5, + ["grey_9"] = 6, + ["grey_8"] = 7, + ["grey"] = 7, + ["grey_7"] = 8, + ["grey_6"] = 9, + ["grey_5"] = 10, + ["grey_4"] = 11, + ["dark_grey"] = 11, + ["grey_3"] = 12, + ["grey_2"] = 13, + ["grey_1"] = 14, + ["black"] = 15, + } + + local grayscale_wallmounted = { + ["white"] = 0, + ["light_grey"] = 1, + ["grey"] = 2, + ["dark_grey"] = 3, + ["black"] = 4, + } + + local hues = { + ["red"] = 1, + ["orange"] = 2, + ["yellow"] = 3, + ["lime"] = 4, + ["green"] = 5, + ["aqua"] = 6, + ["cyan"] = 7, + ["skyblue"] = 8, + ["blue"] = 9, + ["violet"] = 10, + ["magenta"] = 11, + ["redviolet"] = 12, + } + + local hues_extended = { + ["red"] = 0, + ["vermilion"] = 1, + ["orange"] = 2, + ["amber"] = 3, + ["yellow"] = 4, + ["lime"] = 5, + ["chartreuse"] = 6, + ["harlequin"] = 7, + ["green"] = 8, + ["malachite"] = 9, + ["spring"] = 10, + ["turquoise"] = 11, + ["cyan"] = 12, + ["cerulean"] = 13, + ["azure"] = 14, + ["sapphire"] = 15, + ["blue"] = 16, + ["indigo"] = 17, + ["violet"] = 18, + ["mulberry"] = 19, + ["magenta"] = 20, + ["fuchsia"] = 21, + ["rose"] = 22, + ["crimson"] = 23, + } + + local hues_wallmounted = { + ["red"] = 0, + ["orange"] = 1, + ["yellow"] = 2, + ["green"] = 3, + ["cyan"] = 4, + ["blue"] = 5, + ["violet"] = 6, + ["magenta"] = 7 + } + + local shades = { + [""] = 1, + ["s50"] = 2, + ["light"] = 3, + ["medium"] = 4, + ["mediums50"] = 5, + ["dark"] = 6, + ["darks50"] = 7, + } + + local shades_extended = { + ["faint"] = 0, + ["pastel"] = 1, + ["light"] = 2, + ["bright"] = 3, + [""] = 4, + ["s50"] = 5, + ["medium"] = 6, + ["mediums50"] = 7, + ["dark"] = 8, + ["darks50"] = 9 + } + + local shades_wallmounted = { + [""] = 1, + ["medium"] = 2, + ["dark"] = 3 + } + + if string.sub(color,1,4) == "dye:" then + color = string.sub(color,5,-1) + elseif string.sub(color,1,12) == "unifieddyes:" then + color = string.sub(color,13,-1) + else + return + end + + if palette_type == "wallmounted" then + if grayscale_wallmounted[color] then + return (grayscale_wallmounted[color] * 8), 0 + end + elseif palette_type == true then + if grayscale[color] then + return (grayscale[color] * 32), 0 + end + elseif palette_type == "extended" then + if grayscale_extended[color] then + return grayscale_extended[color]+240, 0 + end + else + if grayscale[color] then + return grayscale[color], 0 + end + end + + local shade = "" -- assume full + if string.sub(color,1,6) == "faint_" then + shade = "faint" + color = string.sub(color,7,-1) + elseif string.sub(color,1,7) == "pastel_" then + shade = "pastel" + color = string.sub(color,8,-1) + elseif string.sub(color,1,6) == "light_" then + shade = "light" + color = string.sub(color,7,-1) + elseif string.sub(color,1,7) == "bright_" then + shade = "bright" + color = string.sub(color,8,-1) + elseif string.sub(color,1,7) == "medium_" then + shade = "medium" + color = string.sub(color,8,-1) + elseif string.sub(color,1,5) == "dark_" then + shade = "dark" + color = string.sub(color,6,-1) + end + if string.sub(color,-4,-1) == "_s50" then + shade = shade.."s50" + color = string.sub(color,1,-5) + end + + if palette_type == "wallmounted" then + if color == "brown" then return 48,1 + elseif color == "pink" then return 56,7 + elseif color == "blue" and shade == "light" then return 40,5 + elseif hues_wallmounted[color] and shades_wallmounted[shade] then + return (shades_wallmounted[shade] * 64 + hues_wallmounted[color] * 8), hues_wallmounted[color] + end + else + if color == "brown" then + color = "orange" + shade = "dark" + elseif color == "pink" then + color = "red" + shade = "light" + end + if palette_type == true then -- it's colorfacedir + if hues[color] and shades[shade] then + return (shades[shade] * 32), hues[color] + end + elseif palette_type == "extended" then + if hues_extended[color] and shades_extended[shade] then + return (hues_extended[color] + shades_extended[shade]*24), hues_extended[color] + end + else -- it's the 89-color palette + + -- If using this palette, translate new color names back to old. + + if shade == "" then + if color == "spring" then + color = "aqua" + elseif color == "azure" then + color = "skyblue" + elseif color == "rose" then + color = "redviolet" + end + end + if hues[color] and shades[shade] then + return (hues[color] * 8 + shades[shade]), hues[color] + end + end + end +end + +-- if your node was once 89-color and uses an LBM to convert to the 256-color palette, +-- call this in that node def's on_construct: + +function unifieddyes.on_construct(pos) + local meta = minetest.get_meta(pos) + meta:set_string("palette", "ext") +end + +-- call this in your node's after_dig_node to get the last-used dye back. + +function unifieddyes.after_dig_node(pos, oldnode, oldmetadata, digger) + local prevdye + + if oldmetadata and oldmetadata.fields then + prevdye = oldmetadata.fields.dye + end + + local inv = digger:get_inventory() + + if prevdye and not (inv:contains_item("main", prevdye) and creative_mode) and minetest.registered_items[prevdye] then + if inv:room_for_item("main", prevdye) then + inv:add_item("main", prevdye) + else + minetest.add_item(pos, prevdye) + end + end +end + +function unifieddyes.on_use(itemstack, player, pointed_thing) + local stackname = itemstack:get_name() + local playername = player:get_player_name() + + if pointed_thing and pointed_thing.type == "node" then + if minetest.is_protected(unifieddyes.select_node(pointed_thing), playername) + and not minetest.check_player_privs(playername, "protection_bypass") then + minetest.chat_send_player(playername, "Sorry, someone else owns that spot.") + return + end + end + + if pointed_thing and pointed_thing.type == "object" then + pointed_thing.ref:punch(player, 0, itemstack:get_tool_capabilities()) + return player:get_wielded_item() -- punch may modified the wielded item, load the new and return it + end + + if not (pointed_thing and pointed_thing.type == "node") then return end -- if "using" the dye on nothing at all (e.g. air) + + local pos = minetest.get_pointed_thing_position(pointed_thing) + local node = minetest.get_node(pos) + + local nodedef = minetest.registered_nodes[node.name] + + if not nodedef then return end -- target was an unknown node, just bail out + + -- if the node has an on_punch defined, bail out and call that instead, unless "sneak" is pressed. + if not player:get_player_control().sneak then + local onpunch = nodedef.on_punch(pos, node, player, pointed_thing) + if onpunch then + return onpunch + end + end + + if player:get_player_control().sneak then + if unifieddyes.last_used_dye[playername] then + minetest.chat_send_player(playername, "Shift-punched a node, switching back to neutral color." ) + end + unifieddyes.last_used_dye[playername] = nil + return + end + + -- if the target is unknown, has no groups defined, or isn't UD-colorable, just bail out + if not (nodedef and nodedef.groups and nodedef.groups.ud_param2_colorable) then + minetest.chat_send_player(playername, "That node can't be colored.") + return + end + + local newnode = nodedef.ud_replacement_node + local palette_type + + if nodedef.palette == "unifieddyes_palette_extended.png" then + palette_type = "extended" + elseif nodedef.palette == "unifieddyes_palette.png" then + palette_type = false + elseif nodedef.paramtype2 == "colorfacedir" then + palette_type = true + elseif nodedef.paramtype2 == "colorwallmounted" then + palette_type = "wallmounted" + end + + if minetest.is_protected(pos, playername) and not minetest.check_player_privs(playername, {protection_bypass=true}) then + minetest.record_protection_violation(pos, playername) + return + end + + local pos2 = unifieddyes.select_node(pointed_thing) + local paletteidx, hue = unifieddyes.getpaletteidx(stackname, palette_type) + + if paletteidx then + + if unifieddyes.last_used_dye[playername] ~= stackname then + minetest.chat_send_player(playername, "Color "..stackname.." selected, auto-coloring activated." ) + unifieddyes.last_used_dye[playername] = stackname + end + + local meta = minetest.get_meta(pos) + local prevdye = meta:get_string("dye") + local inv = player:get_inventory() + + if not (inv:contains_item("main", prevdye) and creative_mode) and minetest.registered_items[prevdye] then + if inv:room_for_item("main", prevdye) then + inv:add_item("main", prevdye) + else + minetest.add_item(pos, prevdye) + end + end + + meta:set_string("dye", stackname) + + if prevdye == stackname then + local a,b = string.find(stackname, ":") + minetest.chat_send_player(playername, "That node is already "..string.sub(stackname, a + 1).."." ) + return + elseif not creative_mode then + itemstack:take_item() + end + + node.param2 = paletteidx + + local oldpaletteidx, oldhuenum = unifieddyes.getpaletteidx(prevdye, palette_type) + local oldnode = minetest.get_node(pos) + + local oldhue = nil + for _, i in ipairs(unifieddyes.HUES) do + if string.find(oldnode.name, "_"..i) and not + ( string.find(oldnode.name, "_redviolet") and i == "red" ) then + oldhue = i + break + end + end + + if newnode then -- this path is used when the calling mod want to supply a replacement node + if palette_type == "wallmounted" then + node.param2 = paletteidx + (minetest.get_node(pos).param2 % 8) + elseif palette_type == true then -- it's colorfacedir + if oldhue ~=0 then -- it's colored, not grey + if oldhue ~= nil then -- it's been painted before + if hue ~= 0 then -- the player's wielding a colored dye + newnode = string.gsub(newnode, "_"..oldhue, "_"..unifieddyes.HUES[hue]) + else -- it's a greyscale dye + newnode = string.gsub(newnode, "_"..oldhue, "_grey") + end + else -- it's never had a color at all + if hue ~= 0 then -- and if the wield is greyscale, don't change the node name + newnode = string.gsub(newnode, "_grey", "_"..unifieddyes.HUES[hue]) + end + end + else + if hue ~= 0 then -- greyscale dye on greyscale node = no hue change + newnode = string.gsub(newnode, "_grey", "_"..unifieddyes.HUES[hue]) + end + end + node.param2 = paletteidx + (minetest.get_node(pos).param2 % 32) + else -- it's the 89-color palette, or the extended palette + node.param2 = paletteidx + end + node.name = newnode + minetest.swap_node(pos, node) + if palette_type == "extended" then + meta:set_string("palette", "ext") + end + if not creative_mode then + return itemstack + end + else -- this path is used when you're just painting an existing node, rather than replacing one. + newnode = oldnode -- note that here, newnode/oldnode are a full node, not just the name. + if palette_type == "wallmounted" then + newnode.param2 = paletteidx + (minetest.get_node(pos).param2 % 8) + elseif palette_type == true then -- it's colorfacedir + if oldhue then + if hue ~= 0 then + newnode.name = string.gsub(newnode.name, "_"..oldhue, "_"..unifieddyes.HUES[hue]) + else + newnode.name = string.gsub(newnode.name, "_"..oldhue, "_grey") + end + elseif string.find(minetest.get_node(pos).name, "_grey") and hue ~= 0 then + newnode.name = string.gsub(newnode.name, "_grey", "_"..unifieddyes.HUES[hue]) + end + newnode.param2 = paletteidx + (minetest.get_node(pos).param2 % 32) + else -- it's the 89-color palette, or the extended palette + newnode.param2 = paletteidx + end + minetest.swap_node(pos, newnode) + if palette_type == "extended" then + meta:set_string("palette", "ext") + end + if not creative_mode then + return itemstack + end + end + else + local a,b = string.find(stackname, ":") + if a then + minetest.chat_send_player(playername, "That node can't be colored "..string.sub(stackname, a + 1).."." ) + end + end +end + +-- re-define default dyes slightly, to add on_use + +for _, color in ipairs(default_dyes) do + minetest.override_item("dye:"..color, { + on_use = unifieddyes.on_use + }) +end + +-- build a table to convert from classic/89-color palette to extended palette + +-- the first five entries are for the old greyscale - white, light, grey, dark, black +unifieddyes.convert_classic_palette = { + 240, + 244, + 247, + 251, + 253 +} + +for hue = 0, 11 do + -- light + local paletteidx = unifieddyes.getpaletteidx("dye:light_"..unifieddyes.HUES[hue+1], false) + unifieddyes.convert_classic_palette[paletteidx] = hue*2 + 48 + for sat = 0, 1 do + for val = 0, 2 do + -- all other shades + local paletteidx = unifieddyes.getpaletteidx("dye:"..unifieddyes.VALS[val+1]..unifieddyes.HUES[hue+1]..unifieddyes.SATS[sat+1], false) + unifieddyes.convert_classic_palette[paletteidx] = hue*2 + sat*24 + (val*48+96) + end + end +end + +-- Generate all dyes that are not part of the default minetest_game dyes mod + +for _, h in ipairs(unifieddyes.HUES_EXTENDED) do + local hue = h[1] + local r = h[2] + local g = h[3] + local b = h[4] + + for v = 0, 6 do + local val = unifieddyes.VALS_EXTENDED[v+1] + + local factor = 40 + if v > 3 then factor = 75 end + + local r2 = math.max(math.min(r + (4-v)*factor, 255), 0) + local g2 = math.max(math.min(g + (4-v)*factor, 255), 0) + local b2 = math.max(math.min(b + (4-v)*factor, 255), 0) + + -- full-sat color + + local desc = hue:gsub("%a", string.upper, 1).." Dye" + + if val ~= "" then + desc = val:sub(1, -2):gsub("%a", string.upper, 1) .." "..desc + end + + local color = string.format("%02x", r2)..string.format("%02x", g2)..string.format("%02x", b2) + if minetest.registered_items["dye:"..val..hue] then + minetest.override_item("dye:"..val..hue, { + inventory_image = "unifieddyes_dye.png^[colorize:#"..color..":200", + on_use = unifieddyes.on_use + }) + else + minetest.register_craftitem(":dye:"..val..hue, { + description = S(desc), + inventory_image = "unifieddyes_dye.png^[colorize:#"..color..":200", + groups = { dye=1, not_in_creative_inventory=1 }, + on_use = unifieddyes.on_use + }) + end + minetest.register_alias("unifieddyes:"..val..hue, "dye:"..val..hue) + + if v > 3 then -- also register the low-sat version + + local pr = 0.299 + local pg = 0.587 + local pb = 0.114 + + local p = math.sqrt(r2*r2*pr + g2*g2*pg + b2*b2*pb) + local r3 = math.floor(p+(r2-p)*0.5) + local g3 = math.floor(p+(g2-p)*0.5) + local b3 = math.floor(p+(b2-p)*0.5) + + local color = string.format("%02x", r3)..string.format("%02x", g3)..string.format("%02x", b3) + + minetest.register_craftitem(":dye:"..val..hue.."_s50", { + description = S(desc.." (low saturation)"), + inventory_image = "unifieddyes_dye.png^[colorize:#"..color..":200", + groups = { dye=1, not_in_creative_inventory=1 }, + on_use = unifieddyes.on_use + }) + minetest.register_alias("unifieddyes:"..val..hue.."_s50", "dye:"..val..hue.."_s50") + end + end +end + +-- register the greyscales too :P + +for y = 1, 14 do -- colors 0 and 15 are black and white, default dyes + + if y ~= 4 and y ~= 8 and y~= 11 then -- don't register the three greys, they're done separately. + + local rgb = string.format("%02x", y*17)..string.format("%02x", y*17)..string.format("%02x", y*17) + local name = "grey_"..y + local desc = "Grey Dye #"..y + + minetest.register_craftitem(":dye:"..name, { + description = S(desc), + inventory_image = "unifieddyes_dye.png^[colorize:#"..rgb..":200", + groups = { dye=1, not_in_creative_inventory=1 }, + on_use = unifieddyes.on_use + }) + minetest.register_alias("unifieddyes:"..name, "dye:"..name) + end +end + +minetest.override_item("dye:grey", { + inventory_image = "unifieddyes_dye.png^[colorize:#888888:200", + on_use = unifieddyes.on_use +}) + +minetest.override_item("dye:dark_grey", { + inventory_image = "unifieddyes_dye.png^[colorize:#444444:200", + on_use = unifieddyes.on_use +}) + +minetest.register_craftitem(":dye:light_grey", { + description = S("Light grey Dye"), + inventory_image = "unifieddyes_dye.png^[colorize:#cccccc:200", + groups = { dye=1, not_in_creative_inventory=1 }, + on_use = unifieddyes.on_use +}) + +unifieddyes.base_color_crafts = { + { "red", "flowers:rose", nil, nil, nil, nil, 4 }, + { "vermilion", "dye:red", "dye:orange", nil, nil, nil, 3 }, + { "orange", "flowers:tulip", nil, nil, nil, nil, 4 }, + { "orange", "dye:red", "dye:yellow", nil, nil, nil, 2 }, + { "amber", "dye:orange", "dye:yellow", nil, nil, nil, 2 }, + { "yellow", "flowers:dandelion_yellow", nil, nil, nil, nil, 4 }, + { "lime", "dye:yellow", "dye:chartreuse", nil, nil, nil, 2 }, + { "lime", "dye:yellow", "dye:yellow", "dye:green", nil, nil, 3 }, + { "chartreuse", "dye:yellow", "dye:green", nil, nil, nil, 2 }, + { "harlequin", "dye:chartreuse", "dye:green", nil, nil, nil, 2 }, + { "harlequin", "dye:yellow", "dye:green", "dye:green", nil, nil, 3 }, + { "green", "default:cactus", nil, nil, nil, nil, 4 }, + { "green", "dye:yellow", "dye:blue", nil, nil, nil, 2 }, + { "malachite", "dye:green", "dye:spring", nil, nil, nil, 2 }, + { "malachite", "dye:green", "dye:green", "dye:cyan", nil, nil, 3 }, + { "malachite", "dye:green", "dye:green", "dye:green", "dye:blue", nil, 4 }, + { "spring", "dye:green", "dye:cyan", nil, nil, nil, 2 }, + { "spring", "dye:green", "dye:green", "dye:blue", nil, nil, 3 }, + { "turquoise", "dye:spring", "dye:cyan", nil, nil, nil, 2 }, + { "turquoise", "dye:green", "dye:cyan", "dye:cyan", nil, nil, 3 }, + { "turquoise", "dye:green", "dye:green", "dye:green", "dye:blue", "dye:blue", 5 }, + { "cyan", "dye:green", "dye:blue", nil, nil, nil, 2 }, + { "cerulean", "dye:cyan", "dye:azure", nil, nil, nil, 2 }, + { "cerulean", "dye:cyan", "dye:cyan", "dye:blue", nil, nil, 3 }, + { "cerulean", "dye:green", "dye:green", "dye:blue", "dye:blue", "dye:blue", 5 }, + { "azure", "dye:cyan", "dye:blue", nil, nil, nil, 2 }, + { "azure", "dye:green", "dye:blue", "dye:blue", nil, nil, 3 }, + { "sapphire", "dye:azure", "dye:blue", nil, nil, nil, 2 }, + { "sapphire", "dye:cyan", "dye:blue", "dye:blue", nil, nil, 3 }, + { "sapphire", "dye:green", "dye:blue", "dye:blue", "dye:blue", nil, 4 }, + { "blue", "flowers:geranium", nil, nil, nil, nil, 4 }, + { "indigo", "dye:blue", "dye:violet", nil, nil, nil, 2 }, + { "violet", "flowers:viola", nil, nil, nil, nil, 4 }, + { "violet", "dye:blue", "dye:magenta", nil, nil, nil, 2 }, + { "mulberry", "dye:violet", "dye:magenta", nil, nil, nil, 2 }, + { "mulberry", "dye:violet", "dye:blue", "dye:red", nil, nil, 3 }, + { "magenta", "dye:blue", "dye:red", nil, nil, nil, 2 }, + { "fuchsia", "dye:magenta", "dye:rose", nil, nil, nil, 2 }, + { "fuchsia", "dye:blue", "dye:red", "dye:rose", nil, nil, 3 }, + { "fuchsia", "dye:red", "dye:violet", nil, nil, nil, 2 }, + { "rose", "dye:magenta", "dye:red", nil, nil, nil, 2 }, + { "rose", "dye:red", "dye:red", "dye:blue", nil, nil, 3 }, + { "crimson", "dye:rose", "dye:red", nil, nil, nil, 2 }, + { "crimson", "dye:magenta", "dye:red", "dye:red", nil, nil, 3 }, + { "crimson", "dye:red", "dye:red", "dye:red", "dye:blue", nil, 4 }, + + { "black", "default:coal_lump", nil, nil, nil, nil, 4 }, + { "white", "flowers:dandelion_white", nil, nil, nil, nil, 4 }, +} + +unifieddyes.shade_crafts = { + { "faint_", "", "dye:white", "dye:white", "dye:white", 4 }, + { "pastel_", "", "dye:white", "dye:white", nil, 3 }, + { "light_", "", "dye:white", nil, nil, 2 }, + { "bright_", "", "color", "dye:white", nil, 3 }, + { "", "_s50", "dye:light_grey", nil, nil, 2 }, + { "", "_s50", "dye:black", "dye:white", "dye:white", 3 }, + { "medium_", "", "dye:black", nil, nil, 2 }, + { "medium_", "_s50", "dye:grey", nil, nil, 2 }, + { "medium_", "_s50", "dye:black", "dye:white", nil, 3 }, + { "dark_", "", "dye:black", "dye:black", nil, 3 }, + { "dark_", "_s50", "dye:dark_grey", nil, nil, 2 }, + { "dark_", "_s50", "dye:black", "dye:black", "dye:white", 4 }, +} + +for _,i in ipairs(unifieddyes.base_color_crafts) do + local color = i[1] + local yield = i[7] + + minetest.register_craft( { + type = "shapeless", + output = "dye:"..color.." "..yield, + recipe = { + i[2], + i[3], + i[4], + i[5], + i[6], + }, + }) + + for _,j in ipairs(unifieddyes.shade_crafts) do + local firstdye = j[3] + if firstdye == "color" then firstdye = "dye:"..color end + + if color ~= "black" and color ~= "white" and not string.find(color, "grey") then + + minetest.register_craft( { + type = "shapeless", + output = "dye:"..j[1]..color..j[2].." "..yield, + recipe = { + "dye:"..color, + firstdye, + j[4], + j[5] + }, + }) + end + end +end + +unifieddyes.greymixes = { + { 1, "dye:black", "dye:black", "dye:black", "dye:dark_grey", 4 }, + { 2, "dye:black", "dye:black", "dye:dark_grey", nil, 3 }, + { 3, "dye:black", "dye:dark_grey", nil, nil, 2 }, + { 4, "dye:white", "dye:black", "dye:black", nil, 3 }, + { 5, "dye:dark_grey", "dye:dark_grey", "dye:grey", nil, 3 }, + { 6, "dye:dark_grey", "dye:grey", nil, nil, 2 }, + { 7, "dye:dark_grey", "dye:grey", "dye:grey", nil, 3 }, + { 8, "dye:white", "dye:black", nil, nil, 2 }, + { 9, "dye:grey", "dye:grey", "dye:light_grey", nil, 3 }, + { 10, "dye:grey", "dye:light_grey", "dye:light_grey", nil, 3 }, + { 11, "dye:white", "dye:white", "dye:black", nil, 3 }, + { 12, "dye:light_grey", "dye:light_grey", "dye:white", nil, 3 }, + { 13, "dye:light_grey", "dye:white", nil, nil, 2 }, + { 14, "dye:white", "dye:white", "dye:light_grey", nil, 3 }, +} + +for _, i in ipairs(unifieddyes.greymixes) do + local shade = i[1] + local dye1 = i[2] + local dye2 = i[3] + local dye3 = i[4] + local dye4 = i[5] + local yield = i[6] + local color = "grey_"..shade + if shade == 4 then + color = "dark_grey" + elseif shade == 8 then + color = "grey" + elseif shade == 11 then + color = "light_grey" + end + + minetest.register_craft( { + type = "shapeless", + output = "dye:"..color.." "..yield, + recipe = { + dye1, + dye2, + dye3, + dye4, + }, + }) +end + +minetest.register_alias("unifieddyes:light_red", "dye:pink") +minetest.register_alias("unifieddyes:dark_green", "dye:dark_green") +minetest.register_alias("unifieddyes:black", "dye:black") +minetest.register_alias("unifieddyes:darkgrey", "dye:dark_grey") +minetest.register_alias("unifieddyes:dark_grey", "dye:dark_grey") +minetest.register_alias("unifieddyes:grey", "dye:grey") +minetest.register_alias("unifieddyes:lightgrey", "dye:light_grey") +minetest.register_alias("unifieddyes:light_grey", "dye:light_grey") +minetest.register_alias("unifieddyes:white", "dye:white") + +minetest.register_alias("unifieddyes:grey_0", "dye:black") +minetest.register_alias("unifieddyes:grey_4", "dye:dark_grey") +minetest.register_alias("unifieddyes:grey_8", "dye:grey") +minetest.register_alias("unifieddyes:grey_11", "dye:light_grey") +minetest.register_alias("unifieddyes:grey_15", "dye:white") + +minetest.register_alias("unifieddyes:white_paint", "dye:white") +minetest.register_alias("unifieddyes:titanium_dioxide", "dye:white") +minetest.register_alias("unifieddyes:lightgrey_paint", "dye:light_grey") +minetest.register_alias("unifieddyes:grey_paint", "dye:grey") +minetest.register_alias("unifieddyes:darkgrey_paint", "dye:dark_grey") +minetest.register_alias("unifieddyes:carbon_black", "dye:black") + +-- aqua -> spring, skyblue -> azure, and redviolet -> rose aliases +-- note that technically, lime should be aliased, but can't be (there IS +-- lime in the new color table, it's just shifted up a bit) + +minetest.register_alias("unifieddyes:aqua", "unifieddyes:spring") +minetest.register_alias("unifieddyes:skyblue", "unifieddyes:azure") +minetest.register_alias("unifieddyes:redviolet", "unifieddyes:rose") + +print(S("[UnifiedDyes] Loaded!")) + diff --git a/mods/unifieddyes/locale/de.txt b/mods/unifieddyes/locale/de.txt new file mode 100644 index 00000000..01d6da4e --- /dev/null +++ b/mods/unifieddyes/locale/de.txt @@ -0,0 +1,74 @@ +# Translation by Xanthin + +Lime Dye = Gelbgruener Farbstoff (Gelbgruen) +Aqua Dye = Aqua Farbstoff +Sky-blue Dye = Himmelblauer Farbstoff +Red-violet Dye = Rotvioletter Farbstoff +Light Grey Dye = Hellgrauer Farbstoff + +Dark Red Dye (low saturation) = Dunkelroter Farbstoff (geringe Saettigung) +Dark Orange Dye (low saturation) = Dunkeloranger Farbstoff (geringe Saettigung) +Dark Yellow Dye (low saturation) = Dunkelgelber Farbstoff (geringe Saettigung) +Dark Lime Dye (low saturation) = Gelbgruenerlime Farbstoff (geringe Saettigung) +Dark Green Dye (low saturation) = Dunkelgruener Farbstoff (geringe Saettigung) +Dark Aqua Dye (low saturation) = Dunkelaqua Farbstoff (geringe Saettigung) +Dark Cyan Dye (low saturation) = Dunkeltuerkiser Farbstoff (geringe Saettigung) +Dark Sky-blue Dye (low saturation) = Dunkelhimmelblauer Farbstoff (geringe Saettigung) +Dark Blue Dye (low saturation) = Dunkelblauer Farbstoff (geringe Saettigung) +Dark Violet Dye (low saturation) = Dunkelvioletter Farbstoff (geringe Saettigung) +Dark Magenta Dye (low saturation) = Dunkelmagenta Farbstoff (geringe Saettigung) +Dark Red-violet Dye (low saturation) = Dunkelrotvioletter Farbstoff (geringe Saettigung) + +Dark Red Dye = Dunkelroter Farbstoff +Dark Orange Dye = Dunkeloranger Farbstoff +Dark Yellow Dye = Dunkelgelber Farbstoff +Dark Lime Dye = Dunkelgelbgruener Farbstoff +Dark Green Dye = Dunkelgruener Farbstoff +Dark Aqua Dye = Dunkelaqua Farbstoff +Dark Cyan Dye = Dunkeltuerkiser Farbstoff +Dark Sky-blue Dye = Dunkelhimmelblauer Farbstoff +Dark Blue Dye = Dunkelblauer Farbstoff +Dark Violet Dye = Dunkelvioletter Farbstoff +Dark Magenta Dye = Dunkelmagenta Farbstoff +Dark Red-violet Dye = Dunkelrotvioletter Farbstoff + +Medium Red Dye (low saturation) = Mittelroter Farbstoff (geringe Saettigung) +Medium Orange Dye (low saturation) = Mitteloranger Farbstoff (geringe Saettigung) +Medium Yellow Dye (low saturation) = Mittelgelber Farbstoff (geringe Saettigung) +Medium Lime Dye (low saturation) = Mittelgelbgruener Farbstoff (geringe Saettigung) +Medium Green Dye (low saturation) = Mittelgruener Farbstoff (geringe Saettigung) +Medium Aqua Dye (low saturation) = Mittelaqua Farbstoff (geringe Saettigung) +Medium Cyan Dye (low saturation) = Mitteltuerkiser Farbstoff (geringe Saettigung) +Medium Sky-blue Dye (low saturation) = Mittelhimmelblauer Farbstoff (geringe Saettigung) +Medium Blue Dye (low saturation) = Mittelblauer Farbstoff (geringe Saettigung) +Medium Violet Dye (low saturation) = Mittelvioletter Farbstoff (geringe Saettigung) +Medium Magenta Dye (low saturation) = Mittelmagenta Farbstoff (geringe Saettigung) +Medium Red-violet Dye (low saturation) = Mittelrotvioletter Farbstoff (geringe Saettigung) + +Medium Red Dye = Mittelroter Farbstoff +Medium Orange Dye = Mitteloranger Farbstoff +Medium Yellow Dye = Mittelgelber Farbstoff +Medium Lime Dye = Mittelgelbgruener Farbstoff +Medium Green Dye = Mittelgruener Farbstoff +Medium Aqua Dye = Mittelaqua Farbstoff +Medium Cyan Dye = Mitteltuerkiser Farbstoff +Medium Sky-blue = Mittelhimmelblauer Farbstoff +Medium Blue Dye = Mittelblauer Farbstoff +Medium Violet Dye = Mittelvioletter Farbstoff +Medium Magenta Dye = Mittelmagenta Farbstoff +Medium Red-violet Dye = Mittelrotvioletter Farbstoff + +Red Dye (low saturation) = Roter Farbstoff (geringe Saettigung) +Orange Dye (low saturation) = Oranger Farbstoff (geringe Saettigung) +Yellow Dye (low saturation) = Gelber Farbstoff (geringe Saettigung) +Lime Dye (low saturation) = Gelbgruener Farbstoff (geringe Saettigung) +Green Dye (low saturation) = Gruener Farbstoff (geringe Saettigung) +Aqua Dye (low saturation) = Aqua Farbstoff (geringe Saettigung) +Cyan Dye (low saturation) = Tuerkiser Farbstoff (geringe Saettigung) +Sky-blue Dye (low saturation) = Himmelblauer Farbstoff (geringe Saettigung) +Blue Dye (low saturation) = Blauer Farbstoff (geringe Saettigung) +Violet Dye (low saturation) = Violetter Farbstoff (geringe Saettigung) +Magenta Dye (low saturation) = Magenta Farbstoff (geringe Saettigung) lila +Red-violet Dye (low saturation) = Rotvioletter Farbstoff (geringe Saettigung) + +[UnifiedDyes] Loaded! = [UnifiedDyes] geladen! diff --git a/mods/unifieddyes/locale/template.txt b/mods/unifieddyes/locale/template.txt new file mode 100644 index 00000000..126bef81 --- /dev/null +++ b/mods/unifieddyes/locale/template.txt @@ -0,0 +1,87 @@ +# Template + +Lime Dye = +Aqua Dye = +Sky-blue Dye = +Red-violet Dye = +Light Grey Dye = + +Dark Red Dye (low saturation) = +Dark Orange Dye (low saturation) = +Dark Yellow Dye (low saturation) = +Dark Lime Dye (low saturation) = +Dark Green Dye (low saturation) = +Dark Aqua Dye (low saturation) = +Dark Cyan Dye (low saturation) = +Dark Sky-blue Dye (low saturation) = +Dark Blue Dye (low saturation) = +Dark Violet Dye (low saturation) = +Dark Magenta Dye (low saturation) = +Dark Red-violet Dye (low saturation) = + +Dark Red Dye = +Dark Orange Dye = +Dark Yellow Dye = +Dark Lime Dye = +Dark Green Dye = +Dark Aqua Dye = +Dark Cyan Dye = +Dark Sky-blue Dye = +Dark Blue Dye = +Dark Violet Dye = +Dark Magenta Dye = +Dark Red-violet Dye = + +Medium Red Dye (low saturation) = +Medium Orange Dye (low saturation) = +Medium Yellow Dye (low saturation) = +Medium Lime Dye (low saturation) = +Medium Green Dye (low saturation) = +Medium Aqua Dye (low saturation) = +Medium Cyan Dye (low saturation) = +Medium Sky-blue Dye (low saturation) = +Medium Blue Dye (low saturation) = +Medium Violet Dye (low saturation) = +Medium Magenta Dye (low saturation) = +Medium Red-violet Dye (low saturation) = + +Medium Red Dye = +Medium Orange Dye = +Medium Yellow Dye = +Medium Lime Dye = +Medium Green Dye = +Medium Aqua Dye = +Medium Cyan Dye = +Medium Sky-blue = +Medium Blue Dye = +Medium Violet Dye = +Medium Magenta Dye = +Medium Red-violet Dye = + +Red Dye (low saturation) = +Orange Dye (low saturation) = +Yellow Dye (low saturation) = +Lime Dye (low saturation) = +Green Dye (low saturation) = +Aqua Dye (low saturation) = +Cyan Dye (low saturation) = +Sky-blue Dye (low saturation) = +Blue Dye (low saturation) = +Violet Dye (low saturation) = +Magenta Dye (low saturation) = +Red-violet Dye (low saturation) = + +Red Dye = +Orange Dye = +Yellow Dye = +Lime Dye = +Green Dye = +Aqua Dye = +Cyan Dye = +Sky-blue Dye = +Blue Dye = +Violet Dye = +Magenta Dye = +Red-violet Dye = + +[UnifiedDyes] Loaded! = diff --git a/mods/unifieddyes/locale/tr.txt b/mods/unifieddyes/locale/tr.txt new file mode 100644 index 00000000..6109389c --- /dev/null +++ b/mods/unifieddyes/locale/tr.txt @@ -0,0 +1,88 @@ +# TUrkish translation +# Mahmutelmas06@hotmail.com + +Lime Dye = Limon Yeşili Boya +Aqua Dye = Deniz mavisi Boya +Sky-blue Dye = Gök-Mavi Boya +Red-violet Dye = Kırmızılı Boya +Light Grey Dye = Açık Grey Boya + +Dark Red Dye (low saturation) = Koyu Kırmızı Boya (düşük doygunluk) +Dark Orange Dye (low saturation) = Koyu Turuncu Boya (düşük doygunluk) +Dark Yellow Dye (low saturation) = Koyu Sarı Boya (düşük doygunluk) +Dark Lime Dye (low saturation) = Koyu Limon Yeşili Boya (düşük doygunluk) +Dark Green Dye (low saturation) = Koyu Yeşil Boya (düşük doygunluk) +Dark Aqua Dye (low saturation) = Koyu Deniz mavisi boya (düşük doygunluk) +Dark Cyan Dye (low saturation) = Koyu Cam göbeği Boya (düşük doygunluk) +Dark Sky-blue Dye (low saturation) = Koyu Gök-Mavi Boya (düşük doygunluk) +Dark Blue Dye (low saturation) = Koyu Mavi Boya (düşük doygunluk) +Dark Violet Dye (low saturation) = Koyu mor Boya (düşük doygunluk) +Dark Magenta Dye (low saturation) = Koyu Kızılımsı Mor Boya (düşük doygunluk) +Dark Red-violet Dye (low saturation) = Koyu Kırmızılı Boya (düşük doygunluk) + +Dark Red Dye = Koyu Kırmızı Boya +Dark Orange Dye = Koyu Turuncu Boya +Dark Yellow Dye = Koyu Sarı Boya +Dark Lime Dye = Koyu Limon Yeşili Boya +Dark Green Dye = Koyu Yeşil Boya +Dark Aqua Dye = Koyu Deniz mavisi Boya +Dark Cyan Dye = Koyu Cam göbeği Boya +Dark Sky-blue Dye = Koyu Gök-Mavi Boya +Dark Blue Dye = Koyu Mavi Boya +Dark Violet Dye = Koyu mor Boya +Dark Magenta Dye = Koyu Kızılımsı Mor Boya +Dark Red-violet Dye = Koyu Kırmızılı Boya + +Medium Red Dye (low saturation) = Kırmızı Boya (düşük doygunluk) +Medium Orange Dye (low saturation) = Turuncu Boya (düşük doygunluk) +Medium Yellow Dye (low saturation) = Sarı Boya (düşük doygunluk) +Medium Lime Dye (low saturation) = Limon Yeşili Boya (düşük doygunluk) +Medium Green Dye (low saturation) = Yeşil Boya (düşük doygunluk) +Medium Aqua Dye (low saturation) = Deniz mavisi Boya (düşük doygunluk) +Medium Cyan Dye (low saturation) = Cam göbeği Boya (düşük doygunluk) +Medium Sky-blue Dye (low saturation) = Gök-Mavi Boya (düşük doygunluk) +Medium Blue Dye (low saturation) = Mavi Boya (düşük doygunluk) +Medium Violet Dye (low saturation) = Koyu mor Boya (düşük doygunluk) +Medium Magenta Dye (low saturation) = Kızılımsı Mor Boya (düşük doygunluk) +Medium Red-violet Dye (low saturation) = Kırmızılı Boya (düşük doygunluk) + +Medium Red Dye = Kırmızı Boya +Medium Orange Dye = Turuncu Boya +Medium Yellow Dye = Sarı Boya +Medium Lime Dye = Limon Yeşili Boya +Medium Green Dye = Yeşil Boya +Medium Aqua Dye = Deniz mavisi Boya +Medium Cyan Dye = Cam göbeği Boya +Medium Sky-blue = Gök-Mavi +Medium Blue Dye = Mavi Boya +Medium Violet Dye = Koyu mor Boya +Medium Magenta Dye = Kızılımsı Mor Boya +Medium Red-violet Dye = Kırmızılı Boya + +Red Dye (low saturation) = Kırmızı Boya (düşük doygunluk) +Orange Dye (low saturation) = Turuncu Boya (düşük doygunluk) +Yellow Dye (low saturation) = Sarı Boya (düşük doygunluk) +Lime Dye (low saturation) = Limon Yeşili Boya (düşük doygunluk) +Green Dye (low saturation) = Yeşil Boya (düşük doygunluk) +Aqua Dye (low saturation) = Deniz mavisi Boya (düşük doygunluk) +Cyan Dye (low saturation) = Cam göbeği Boya (düşük doygunluk) +Sky-blue Dye (low saturation) = Gök-Mavi Boya (düşük doygunluk) +Blue Dye (low saturation) = Mavi Boya (düşük doygunluk) +Violet Dye (low saturation) = Koyu mor Boya (düşük doygunluk) +Magenta Dye (low saturation) = Kızılımsı Mor Boya (düşük doygunluk) +Red-violet Dye (low saturation) = Kırmızılı Boya (düşük doygunluk) + +Red Dye = Kırmızı Boya +Orange Dye = Turuncu Boya +Yellow Dye = Sarı Boya +Lime Dye = Limon Yeşili Boya +Green Dye = Yeşil Boya +Aqua Dye = Deniz mavisi Boya +Cyan Dye = Cam göbeği Boya +Sky-blue Dye = Gök-Mavi Boya +Blue Dye = Mavi Boya +Violet Dye = Koyu mor Boya +Magenta Dye = Kızılımsı Mor Boya +Red-violet Dye = Kırmızılı Boya + +[UnifiedDyes] Loaded! = [UnifiedBoyas] yüklendi! diff --git a/mods/unifieddyes/mod.conf b/mods/unifieddyes/mod.conf new file mode 100644 index 00000000..861cb265 --- /dev/null +++ b/mods/unifieddyes/mod.conf @@ -0,0 +1 @@ +name = unifieddyes diff --git a/mods/unifieddyes/textures/unifieddyes_dye.png b/mods/unifieddyes/textures/unifieddyes_dye.png new file mode 100644 index 0000000000000000000000000000000000000000..ee792e54ebae0a7bc4d9b59f94f7359e9426ef88 GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`v7RoDAr`0KPB7#m_ocZwGV=e}3_Sx$Ul#f?^l*xNOAxuYZp~HEgMGT&~Z!O#wYJwud(lT+*g0`y-$h(|Jd?Bwg?V@=P55u1z-X@#Q`g)))22WQ%mvv4FO#m=JAASG; literal 0 HcmV?d00001 diff --git a/mods/unifieddyes/textures/unifieddyes_palette_blues.png b/mods/unifieddyes/textures/unifieddyes_palette_blues.png new file mode 100644 index 0000000000000000000000000000000000000000..b83e22de66dcd1d840cb7b88871429fdc5f0fda2 GIT binary patch literal 99 zcmeAS@N?(olHy`uVBq!ia0vp^96-#-!3HEBGrV^OQd*uajv*Y^Sr0M_GAM8`Y}9w; w407OjU2(*)?d&|>&?Y%FaQ7m literal 0 HcmV?d00001 diff --git a/mods/unifieddyes/textures/unifieddyes_palette_cyans.png b/mods/unifieddyes/textures/unifieddyes_palette_cyans.png new file mode 100644 index 0000000000000000000000000000000000000000..0b0b094ac3fde80d6bf20b20a8aee9b897d8938d GIT binary patch literal 101 zcmeAS@N?(olHy`uVBq!ia0vp^96-#-!3HEBGrV^OQaYY4jv*Y^85J4s{b&3S1dKpI xhy4c`931T#8dk1k(7Jk!;o6Ps45F{!Fnkr}o6fi(dLK{;gQu&X%Q~loCII)c9wh(( literal 0 HcmV?d00001 diff --git a/mods/unifieddyes/textures/unifieddyes_palette_extended.png b/mods/unifieddyes/textures/unifieddyes_palette_extended.png new file mode 100644 index 0000000000000000000000000000000000000000..2ff0323aadaa03a49133702f67c0d4a47d37a158 GIT binary patch literal 290 zcmV+-0p0$IP)Q~yD0002#NklWskVU{Il*zopr0Fw9@#{d8T literal 0 HcmV?d00001 diff --git a/mods/unifieddyes/textures/unifieddyes_palette_greys.png b/mods/unifieddyes/textures/unifieddyes_palette_greys.png new file mode 100644 index 0000000000000000000000000000000000000000..e0d87aadf3cebec97fbe23f47cd481dca6877cac GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^96-#-!2~38k}5=il%l7LV+hA})`N_U3 literal 0 HcmV?d00001 diff --git a/mods/unifieddyes/textures/unifieddyes_palette_limes.png b/mods/unifieddyes/textures/unifieddyes_palette_limes.png new file mode 100644 index 0000000000000000000000000000000000000000..b104c6e2e9f0165c338583aeceb2fbb14a63bb7c GIT binary patch literal 99 zcmeAS@N?(olHy`uVBq!ia0vp^96-#-!3HEBGrV^OQd*uajv*Y^lmGk&0yj3dw*Tz1 w5;AXOC6=wrNl4hS>}bK;U#4uw%op)6{Hx<_vXVUa8mNoG)78&qol`;+06TOb2><{9 literal 0 HcmV?d00001 diff --git a/mods/unifieddyes/textures/unifieddyes_palette_magentas.png b/mods/unifieddyes/textures/unifieddyes_palette_magentas.png new file mode 100644 index 0000000000000000000000000000000000000000..16abf001d70352d1979837f6c6454b35124b9eb4 GIT binary patch literal 101 zcmeAS@N?(olHy`uVBq!ia0vp^96-#-!3HEBGrV^OQaYY4jv*Y^85J4s{b&3S1PqJ} y3(1YsZ0tTcvDn7tMJX{si$h9p2@t4%Efq>FVdQ&MBb@052dPasU7T literal 0 HcmV?d00001 diff --git a/mods/unifieddyes/textures/unifieddyes_palette_yellows.png b/mods/unifieddyes/textures/unifieddyes_palette_yellows.png new file mode 100644 index 0000000000000000000000000000000000000000..0a458a7e14d366722a50a0ee6c4ba46e24bd4113 GIT binary patch literal 101 zcmeAS@N?(olHy`uVBq!ia0vp^96-#-!3HEBGrV^OQaYY4jv*Y^85J4s{b&3S1VDL) x{RbTw9PJ$#R<3MdxOz>C;l}lA46omaGW^Wqo6a%urW8;ggQu&X%Q~loCIA5Z9#Q}R literal 0 HcmV?d00001 From 5c7d2ea9faec1128dd9d3af1e2906b6a35e45127 Mon Sep 17 00:00:00 2001 From: sys4-fr Date: Sun, 9 Apr 2017 12:32:03 +0200 Subject: [PATCH 5/5] check if fromnode is not nil before apply connected_chests fix --- mods/pipeworks/filter-injector.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/pipeworks/filter-injector.lua b/mods/pipeworks/filter-injector.lua index c63b3364..ac76ba59 100755 --- a/mods/pipeworks/filter-injector.lua +++ b/mods/pipeworks/filter-injector.lua @@ -146,7 +146,7 @@ local function punch_filter(data, filtpos, filtnode, msg) local fromnode = minetest.get_node(frompos) -- Fix crash with connected_chests (sys4 fix for MFF) - if fromnode.name == "connected_chests:chest_right" then + if fromnode and fromnode.name == "connected_chests:chest_right" then local v_mul = vector.multiply(dir, 2) frompos = vector.subtract(filtpos, v_mul) fromnode = minetest.get_node(frompos)