diff --git a/game.conf b/game.conf new file mode 100644 index 0000000..03c983a --- /dev/null +++ b/game.conf @@ -0,0 +1,2 @@ +name = Simple Shooter Game +allowed_mapgens = singlenode diff --git a/mods/basic_materials/.github/workflows/luacheck.yml b/mods/basic_materials/.github/workflows/luacheck.yml new file mode 100644 index 0000000..a13efa9 --- /dev/null +++ b/mods/basic_materials/.github/workflows/luacheck.yml @@ -0,0 +1,13 @@ +name: luacheck +on: [push, pull_request] +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@master + - name: apt + run: sudo apt-get install -y luarocks + - name: luacheck install + run: luarocks install --local luacheck + - name: luacheck run + run: $HOME/.luarocks/bin/luacheck ./ diff --git a/mods/basic_materials/.luacheckrc b/mods/basic_materials/.luacheckrc new file mode 100644 index 0000000..1dabf67 --- /dev/null +++ b/mods/basic_materials/.luacheckrc @@ -0,0 +1,7 @@ +globals = { + "minetest", "basic_materials", "crafting", +} + +read_globals = { + "default", "xcompat", +} \ No newline at end of file diff --git a/mods/basic_materials/LICENSE b/mods/basic_materials/LICENSE new file mode 100644 index 0000000..c5885ae --- /dev/null +++ b/mods/basic_materials/LICENSE @@ -0,0 +1,600 @@ +License for code: LGPL 3.0 +License for media and all other assets: CC-by-SA 4.0 + +############################################################################### + + GNU LESSER 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. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. + +############################################################################### + +Attribution-ShareAlike 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution-ShareAlike 4.0 International Public +License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-ShareAlike 4.0 International Public License ("Public +License"). To the extent this Public License may be interpreted as a +contract, You are granted the Licensed Rights in consideration of Your +acceptance of these terms and conditions, and the Licensor grants You +such rights in consideration of benefits the Licensor receives from +making the Licensed Material available under these terms and +conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. BY-SA Compatible License means a license listed at + creativecommons.org/compatiblelicenses, approved by Creative + Commons as essentially the equivalent of this Public License. + + d. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + e. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + f. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + g. License Elements means the license attributes listed in the name + of a Creative Commons Public License. The License Elements of this + Public License are Attribution and ShareAlike. + + h. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + i. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + j. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + k. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + l. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + m. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. Additional offer from the Licensor -- Adapted Material. + Every recipient of Adapted Material from You + automatically receives an offer from the Licensor to + exercise the Licensed Rights in the Adapted Material + under the conditions of the Adapter's License You apply. + + c. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + b. ShareAlike. + + In addition to the conditions in Section 3(a), if You Share + Adapted Material You produce, the following conditions also apply. + + 1. The Adapter's License You apply must be a Creative Commons + license with the same License Elements, this version or + later, or a BY-SA Compatible License. + + 2. You must include the text of, or the URI or hyperlink to, the + Adapter's License You apply. You may satisfy this condition + in any reasonable manner based on the medium, means, and + context in which You Share Adapted Material. + + 3. You may not offer or impose any additional or different terms + or conditions on, or apply any Effective Technological + Measures to, Adapted Material that restrict exercise of the + rights granted under the Adapter's License You apply. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material, + + including for purposes of Section 3(b); and + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/mods/basic_materials/README.md b/mods/basic_materials/README.md new file mode 100644 index 0000000..919e4f0 --- /dev/null +++ b/mods/basic_materials/README.md @@ -0,0 +1,23 @@ +# Basic Materials mod + +mod that adds basic material nodes and items + +## Install + +### Option 1: use content tab in minetest + +* click the content tab +* search for basic materials +* click install on basic materials + +### Option 2: download from [ContentDB](https://content.minetest.net/packages/VanessaE/basic_materials/) + +* click the above link or search for basic materials on ContentDB +* select the download button on the basic materials page +* extract the zip downloaded from the previous step +* place in your mods folder + +### Option 3: use git + +* `git clone https://github.com/mt-mods/basic_materials.git` +* `cd basic_materials` \ No newline at end of file diff --git a/mods/basic_materials/aliases.lua b/mods/basic_materials/aliases.lua new file mode 100644 index 0000000..30185f4 --- /dev/null +++ b/mods/basic_materials/aliases.lua @@ -0,0 +1,34 @@ +minetest.register_alias("homedecor:plastic_sheeting", "basic_materials:plastic_sheet") +minetest.register_alias("homedecor:plastic_strips", "basic_materials:plastic_strip") +minetest.register_alias("homedecor:empty_spool", "basic_materials:empty_spool") +minetest.register_alias("homedecor:oil_extract", "basic_materials:oil_extract") +minetest.register_alias("homedecor:paraffin", "basic_materials:paraffin") +minetest.register_alias("homedecor:plastic_base", "basic_materials:paraffin") +minetest.register_alias("homedecor:terracotta_base", "basic_materials:terracotta_base") +minetest.register_alias("gloopblocks:wet_cement", "basic_materials:wet_cement") +minetest.register_alias("gloopblocks:cement", "basic_materials:cement_block") +minetest.register_alias("technic:concrete", "basic_materials:concrete_block") +minetest.register_alias("homedecor:ic", "basic_materials:ic") +minetest.register_alias("homedecor:motor", "basic_materials:motor") +minetest.register_alias("technic:motor", "basic_materials:motor") +minetest.register_alias("homedecor:heating_element", "basic_materials:heating_element") +minetest.register_alias("homedecor:power_crystal", "basic_materials:energy_crystal_simple") +minetest.register_alias("homedecor:copper_wire", "basic_materials:copper_wire") +minetest.register_alias("technic:fine_copper_wire", "basic_materials:copper_wire") +minetest.register_alias("technic:fine_silver_wire", "basic_materials:silver_wire") +minetest.register_alias("technic:fine_gold_wire", "basic_materials:gold_wire") +minetest.register_alias("homedecor:steel_wire", "basic_materials:steel_wire") +minetest.register_alias("homedecor:brass_ingot", "basic_materials:brass_ingot") +minetest.register_alias("technic:brass_ingot", "basic_materials:brass_ingot") +minetest.register_alias("technic:brass_block", "basic_materials:brass_block") +minetest.register_alias("homedecor:copper_strip", "basic_materials:copper_strip") +minetest.register_alias("homedecor:steel_strip", "basic_materials:steel_strip") +minetest.register_alias("homedecor:chainlink_brass", "basic_materials:chainlink_brass") +minetest.register_alias("chains:chain", "basic_materials:chain_steel") +minetest.register_alias("chains:chain_brass", "basic_materials:chain_brass") +minetest.register_alias("pipeworks:gear", "basic_materials:gear_steel") +minetest.register_alias("technic:rebar", "basic_materials:steel_bar") + +minetest.register_alias_force("mesecons_materials:silicon", "basic_materials:silicon") +minetest.register_alias_force("glooptest:chainlink", "basic_materials:chainlink_steel") +minetest.register_alias_force("homedecor:chainlink_steel", "basic_materials:chainlink_steel") \ No newline at end of file diff --git a/mods/basic_materials/craftitems.lua b/mods/basic_materials/craftitems.lua new file mode 100644 index 0000000..0040c67 --- /dev/null +++ b/mods/basic_materials/craftitems.lua @@ -0,0 +1,188 @@ +local S = minetest.get_translator("basic_materials") + +minetest.register_craftitem("basic_materials:plastic_sheet", { + description = S("Plastic sheet"), + inventory_image = "basic_materials_plastic_sheet.png", +}) + +minetest.register_craftitem("basic_materials:plastic_strip", { + description = S("Plastic strips"), + groups = { strip = 1 }, + inventory_image = "basic_materials_plastic_strip.png", +}) + +minetest.register_craftitem("basic_materials:empty_spool", { + description = S("Empty wire spool"), + inventory_image = "basic_materials_empty_spool.png" +}) + +minetest.register_craftitem("basic_materials:oil_extract", { + description = S("Oil extract"), + inventory_image = "basic_materials_oil_extract.png", +}) + +minetest.register_craftitem("basic_materials:paraffin", { + description = S("Unprocessed paraffin"), + inventory_image = "basic_materials_paraffin.png", +}) + +minetest.register_craftitem("basic_materials:terracotta_base", { + description = S("Uncooked Terracotta Base"), + inventory_image = "basic_materials_terracotta_base.png", +}) + +minetest.register_craftitem("basic_materials:wet_cement", { + description = S("Wet Cement"), + inventory_image = "basic_materials_wet_cement.png", +}) + +minetest.register_craftitem("basic_materials:silicon", { + description = S("Silicon lump"), + inventory_image = "basic_materials_silicon.png", +}) + +minetest.register_craftitem("basic_materials:ic", { + description = S("Simple Integrated Circuit"), + inventory_image = "basic_materials_ic.png", +}) + +minetest.register_craftitem("basic_materials:motor", { + description = S("Simple Motor"), + inventory_image = "basic_materials_motor.png", +}) + +minetest.register_craftitem("basic_materials:heating_element", { + description = S("Heating element"), + inventory_image = "basic_materials_heating_element.png", +}) + +minetest.register_craftitem("basic_materials:energy_crystal_simple", { + description = S("Simple energy crystal"), + inventory_image = "basic_materials_energy_crystal.png", +}) + +minetest.register_craftitem("basic_materials:steel_wire", { + description = S("Spool of steel wire"), + groups = { wire = 1 }, + inventory_image = "basic_materials_steel_wire.png" +}) + +minetest.register_craftitem("basic_materials:copper_wire", { + description = S("Spool of copper wire"), + groups = { wire = 1 }, + inventory_image = "basic_materials_copper_wire.png" +}) + +minetest.register_craftitem("basic_materials:silver_wire", { + description = S("Spool of silver wire"), + groups = { wire = 1 }, + inventory_image = "basic_materials_silver_wire.png" +}) + +minetest.register_craftitem("basic_materials:gold_wire", { + description = S("Spool of gold wire"), + groups = { wire = 1 }, + inventory_image = "basic_materials_gold_wire.png" +}) + +minetest.register_craftitem("basic_materials:stainless_steel_wire", { + description = S("Spool of stainless steel wire"), + groups = { wire = 1 }, + inventory_image = "basic_materials_stainless_steel_wire.png" +}) + +minetest.register_craftitem("basic_materials:aluminum_wire", { + description = S("Spool of aluminum wire"), + groups = { wire = 1 }, + inventory_image = "basic_materials_aluminum_wire.png" +}) + +minetest.register_craftitem("basic_materials:steel_strip", { + description = S("Steel Strip"), + groups = { strip = 1 }, + inventory_image = "basic_materials_steel_strip.png" +}) + +minetest.register_craftitem("basic_materials:copper_strip", { + description = S("Copper Strip"), + groups = { strip = 1 }, + inventory_image = "basic_materials_copper_strip.png" +}) + +minetest.register_craftitem("basic_materials:lead_strip", { + description = S("Lead Strip"), + groups = { strip = 1 }, + inventory_image = "basic_materials_lead_strip.png" +}) + +minetest.register_craftitem("basic_materials:gold_strip", { + description = S("Gold Strip"), + groups = { strip = 1 }, + inventory_image = "basic_materials_gold_strip.png" +}) + +minetest.register_craftitem("basic_materials:stainless_steel_strip", { + description = S("Stainless Steel Strip"), + groups = { strip = 1 }, + inventory_image = "basic_materials_stainless_steel_strip.png" +}) + +minetest.register_craftitem("basic_materials:aluminum_strip", { + description = S("Aluminum Strip"), + groups = { strip = 1 }, + inventory_image = "basic_materials_aluminum_strip.png" +}) + +minetest.register_craftitem("basic_materials:steel_bar", { + description = S("Steel Bar"), + inventory_image = "basic_materials_steel_bar.png", +}) + +minetest.register_craftitem("basic_materials:carbon_steel_bar", { + description = S("Carbon Steel Bar"), + inventory_image = "basic_materials_carbon_steel_bar.png", +}) + +minetest.register_craftitem("basic_materials:stainless_steel_bar", { + description = S("Stainless Steel Bar"), + inventory_image = "basic_materials_stainless_steel_bar.png", +}) + +minetest.register_craftitem("basic_materials:aluminum_bar", { + description = S("Aluminum Bar"), + inventory_image = "basic_materials_aluminum_bar.png", +}) + +minetest.register_craftitem("basic_materials:chainlink_brass", { + description = S("Chainlinks (brass)"), + groups = { chainlinks = 1 }, + inventory_image = "basic_materials_chainlink_brass.png" +}) + +minetest.register_craftitem("basic_materials:chainlink_steel", { + description = S("Chainlinks (steel)"), + groups = { chainlinks = 1 }, + inventory_image = "basic_materials_chainlink_steel.png" +}) + +minetest.register_craftitem("basic_materials:brass_ingot", { + description = S("Brass Ingot"), + inventory_image = "basic_materials_brass_ingot.png", +}) + +minetest.register_craftitem("basic_materials:gear_steel", { + description = S("Steel gear"), + inventory_image = "basic_materials_gear_steel.png" +}) + +minetest.register_craftitem("basic_materials:padlock", { + description = S("Padlock"), + inventory_image = "basic_materials_padlock.png" +}) + +if minetest.get_modpath("hades_materials") then + minetest.register_alias_force("basic_materials:plastic_sheet", "hades_materials:plastic_sheeting") + minetest.register_alias_force("basic_materials:paraffin", "hades_materials:plastic_base") + minetest.register_alias_force("basic_materials:silicon", "hades_materials:silicon") +end + diff --git a/mods/basic_materials/crafts.lua b/mods/basic_materials/crafts.lua new file mode 100644 index 0000000..0f24e11 --- /dev/null +++ b/mods/basic_materials/crafts.lua @@ -0,0 +1,441 @@ +local materials = xcompat.materials + +local have_hades_materials = minetest.get_modpath("hades_materials") + +local function compress_craft(input) + local buffer = {} + for _, item in pairs(input) do + if type(item)=="table" then + for _, inneritem in pairs(item) do + buffer[inneritem] = (buffer[inneritem] or 0) + 1 + end + elseif item ~= "" then + buffer[item] = (buffer[item] or 0) + 1 + end + end + + local output = {} + for item, count in pairs(buffer) do + output[#output + 1] = item .. " " .. count + end + return output +end + +local function register_craft(input) + if minetest.get_modpath("rp_crafting") then + local rp_craft = compress_craft(input.recipe) + if #rp_craft > crafting.MAX_INPUTS then + minetest.log("error", "[basic_materials] unable to register craft for " .. input.output) + return + end + + crafting.register_craft({ + output = input.output, + items = rp_craft + }) + else + minetest.register_craft(input) + end +end + +-- Craft recipes +register_craft({ + output = "basic_materials:chainlink_brass 12", + recipe = { + {"", "basic_materials:brass_ingot", "basic_materials:brass_ingot"}, + {"basic_materials:brass_ingot", "", "basic_materials:brass_ingot"}, + {"basic_materials:brass_ingot", "basic_materials:brass_ingot", ""}, + }, +}) + +register_craft({ + output = "basic_materials:chain_steel 2", + recipe = { + {"basic_materials:chainlink_steel"}, + {"basic_materials:chainlink_steel"}, + {"basic_materials:chainlink_steel"} + } +}) + +register_craft({ + output = "basic_materials:chain_brass 2", + recipe = { + {"basic_materials:chainlink_brass"}, + {"basic_materials:chainlink_brass"}, + {"basic_materials:chainlink_brass"} + } +}) + +register_craft( { + type = "shapeless", + output = "basic_materials:brass_ingot 9", + recipe = {"basic_materials:brass_block"}, +}) + +register_craft( { + output = "basic_materials:brass_block", + recipe = { + {"basic_materials:brass_ingot", "basic_materials:brass_ingot", "basic_materials:brass_ingot"}, + {"basic_materials:brass_ingot", "basic_materials:brass_ingot", "basic_materials:brass_ingot"}, + {"basic_materials:brass_ingot", "basic_materials:brass_ingot", "basic_materials:brass_ingot"}, + }, +}) + +register_craft( { + output = "basic_materials:plastic_strip 9", + recipe = { + {"basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet"} + }, +}) + +register_craft( { + output = "basic_materials:empty_spool 3", + recipe = { + {"basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet"}, + {"", "basic_materials:plastic_sheet", ""}, + {"basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet"} + }, +}) + +if have_hades_materials then + minetest.clear_craft({ + type = "shapeless", + recipe = {"group:leaves", "group:leaves", "group:leaves", "group:leaves", "group:leaves", "group:leaves"} + }) +end + +register_craft({ + type = "shapeless", + output = "basic_materials:oil_extract 2", + recipe = {"group:leaves", "group:leaves", "group:leaves", "group:leaves", "group:leaves", "group:leaves"} +}) + +-- Cooking recipes +if not have_hades_materials then + minetest.register_craft({ + type = "cooking", + output = "basic_materials:plastic_sheet", + recipe = "basic_materials:paraffin", + }) +end + +minetest.register_craft({ + type = "cooking", + output = "basic_materials:paraffin", + recipe = "basic_materials:oil_extract", +}) + +minetest.register_craft({ + type = "cooking", + output = "basic_materials:cement_block", + recipe = "basic_materials:wet_cement", + cooktime = 8 +}) + +-- Fuel recipes +minetest.register_craft({ + type = "fuel", + recipe = "basic_materials:plastic_sheet", + burntime = 30, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "basic_materials:oil_extract", + burntime = 30, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "basic_materials:paraffin", + burntime = 30, +}) + +register_craft({ + output = "basic_materials:concrete_block 6", + recipe = { + {"group:sand", "basic_materials:wet_cement", materials.gravel}, + {"basic_materials:steel_bar", "basic_materials:wet_cement", "basic_materials:steel_bar"}, + {materials.gravel, "basic_materials:wet_cement", "group:sand"}, + } +}) + +register_craft( { + output = "basic_materials:motor 2", + recipe = { + {materials.mese_crystal_fragment, "basic_materials:copper_wire", "basic_materials:plastic_sheet"}, + {materials.copper_ingot, materials.steel_ingot, materials.steel_ingot}, + {materials.mese_crystal_fragment, "basic_materials:copper_wire", "basic_materials:plastic_sheet"} + }, + replacements = { + {"basic_materials:copper_wire", "basic_materials:empty_spool"}, + {"basic_materials:copper_wire", "basic_materials:empty_spool"}, + } +}) + +register_craft( { + output = "basic_materials:heating_element 2", + recipe = { + {materials.copper_ingot, materials.mese_crystal_fragment, materials.copper_ingot} + }, +}) + +register_craft({ + --type = "shapeless", + output = "basic_materials:energy_crystal_simple 2", + recipe = { + {materials.mese_crystal_fragment, materials.torch, materials.mese_crystal_fragment}, + {materials.diamond, materials.gold_ingot, materials.diamond} + }, +}) + +register_craft( { + output = "basic_materials:copper_wire 2", + type = "shapeless", + recipe = { + materials.copper_ingot, + "basic_materials:empty_spool", + "basic_materials:empty_spool", + }, +}) + +register_craft( { + output = "basic_materials:gold_wire 2", + type = "shapeless", + recipe = { + materials.gold_ingot, + "basic_materials:empty_spool", + "basic_materials:empty_spool", + }, +}) + +register_craft( { + output = "basic_materials:steel_wire 2", + type = "shapeless", + recipe = { + materials.steel_ingot, + "basic_materials:empty_spool", + "basic_materials:empty_spool", + }, +}) + +if materials.stainless_steel_ingot then + register_craft( { + output = "basic_materials:stainless_steel_wire 2", + type = "shapeless", + recipe = { + materials.stainless_steel_ingot, + "basic_materials:empty_spool", + "basic_materials:empty_spool", + }, + }) +end + +if materials.aluminum_ingot then + register_craft( { + output = "basic_materials:aluminum_wire 2", + type = "shapeless", + recipe = { + materials.aluminum_ingot, + "basic_materials:empty_spool", + "basic_materials:empty_spool", + }, + }) +end + +register_craft( { + output = "basic_materials:steel_strip 12", + recipe = { + {"", materials.steel_ingot, ""}, + {materials.steel_ingot, "", ""}, + }, +}) + +register_craft( { + output = "basic_materials:copper_strip 12", + recipe = { + {"", materials.copper_ingot, ""}, + {materials.copper_ingot, "", ""}, + }, +}) + +register_craft( { + output = "basic_materials:gold_strip 12", + recipe = { + {"", materials.gold_ingot, ""}, + {materials.gold_ingot, "", ""}, + }, +}) + +if materials.lead_ingot then + register_craft( { + output = "basic_materials:lead_strip 12", + recipe = { + {"", materials.lead_ingot, ""}, + {materials.lead_ingot, "", ""}, + }, + }) +end + +if materials.stainless_steel_ingot then + register_craft( { + output = "basic_materials:stainless_steel_strip 12", + recipe = { + {"", materials.stainless_steel_ingot, ""}, + {materials.stainless_steel_ingot, "", ""}, + }, + }) +end + +if materials.aluminum_ingot then + register_craft( { + output = "basic_materials:aluminum_strip 12", + recipe = { + {"", materials.aluminum_ingot, ""}, + {materials.aluminum_ingot, "", ""}, + }, + }) +end + +register_craft( { + output = "basic_materials:steel_bar 6", + recipe = { + {"", "", materials.steel_ingot}, + {"", materials.steel_ingot, ""}, + {materials.steel_ingot, "", ""}, + }, +}) + +if materials.carbon_steel_ingot then + register_craft( { + output = "basic_materials:carbon_steel_bar 6", + recipe = { + {"", "", materials.carbon_steel_ingot}, + {"", materials.carbon_steel_ingot, ""}, + {materials.carbon_steel_ingot, "", ""}, + }, + }) +end + +if materials.stainless_steel_ingot then + register_craft( { + output = "basic_materials:stainless_steel_bar 6", + recipe = { + {"", "", materials.stainless_steel_ingot}, + {"", materials.stainless_steel_ingot, ""}, + {materials.stainless_steel_ingot, "", ""}, + }, + }) +end + +if materials.aluminum_ingot then + register_craft( { + output = "basic_materials:aluminum_bar 6", + recipe = { + {"", "", materials.aluminum_ingot}, + {"", materials.aluminum_ingot, ""}, + {materials.aluminum_ingot, "", ""}, + }, + }) +end + +register_craft( { + output = "basic_materials:padlock 2", + recipe = { + {"basic_materials:steel_bar"}, + {materials.steel_ingot}, + {materials.steel_ingot}, + }, +}) + +register_craft({ + output = "basic_materials:chainlink_steel 12", + recipe = { + {"", materials.steel_ingot, materials.steel_ingot}, + {materials.steel_ingot, "", materials.steel_ingot}, + {materials.steel_ingot, materials.steel_ingot, ""}, + }, +}) + +register_craft( { + output = "basic_materials:gear_steel 6", + recipe = { + {"", materials.steel_ingot, ""}, + {materials.steel_ingot,"basic_materials:chainlink_steel", materials.steel_ingot}, + {"", materials.steel_ingot, ""} + }, +}) + +register_craft( { + type = "shapeless", + output = "basic_materials:terracotta_base 8", + recipe = { + materials.water_bucket, + materials.clay_lump, + materials.gravel, + }, + replacements = {{materials.water_bucket, materials.empty_bucket}}, +}) + +register_craft({ + type = "shapeless", + output = "basic_materials:wet_cement 3", + recipe = { + materials.dirt, + materials.dye_dark_grey, + materials.dye_dark_grey, + materials.dye_dark_grey, + materials.water_bucket + }, + replacements = {{materials.water_bucket, materials.empty_bucket}}, +}) + +if not have_hades_materials then + register_craft( { + output = "basic_materials:silicon 4", + recipe = { + {materials.sand, materials.sand}, + {materials.sand, materials.steel_ingot}, + }, + }) +end + +register_craft( { + output = "basic_materials:ic 4", + recipe = { + {"basic_materials:silicon", "basic_materials:silicon"}, + {"basic_materials:silicon", materials.copper_ingot}, + }, +}) + +-- Without moreores, there still should be a way to create brass. +register_craft( { + output = "basic_materials:brass_ingot 9", + recipe = { + {materials.copper_ingot, materials.tin_ingot, materials.copper_ingot}, + {materials.gold_ingot, materials.copper_ingot, materials.tin_ingot}, + {materials.copper_ingot, materials.tin_ingot, materials.copper_ingot}, + }, +}) + +if materials.silver_ingot then + register_craft( { + output = "basic_materials:silver_wire 2", + type = "shapeless", + recipe = { + materials.silver_ingot, + "basic_materials:empty_spool", + "basic_materials:empty_spool", + }, + }) + + register_craft( { + type = "shapeless", + output = "basic_materials:brass_ingot 3", + recipe = { + materials.copper_ingot, + materials.copper_ingot, + materials.silver_ingot, + }, + }) +end diff --git a/mods/basic_materials/init.lua b/mods/basic_materials/init.lua new file mode 100644 index 0000000..ad5ea10 --- /dev/null +++ b/mods/basic_materials/init.lua @@ -0,0 +1,14 @@ +-- Basic materials mod +-- by Vanessa Dannenberg + +-- This mod supplies all those little random craft items that everyone always +-- seems to need, such as metal bars (ala rebar), plastic, wire, and so on. + +basic_materials = {} +basic_materials.mod = { author = "Vanessa Dannenberg" } +basic_materials.modpath = minetest.get_modpath("basic_materials") + +dofile(basic_materials.modpath .. "/nodes.lua") +dofile(basic_materials.modpath .. "/craftitems.lua") +dofile(basic_materials.modpath .. "/crafts.lua") +dofile(basic_materials.modpath .. "/aliases.lua") \ No newline at end of file diff --git a/mods/basic_materials/locale/basic_materials.de.tr b/mods/basic_materials/locale/basic_materials.de.tr new file mode 100644 index 0000000..8fddd8a --- /dev/null +++ b/mods/basic_materials/locale/basic_materials.de.tr @@ -0,0 +1,33 @@ +# textdomain: basic_materials +Silicon lump=Siliziumklumpen +Simple Integrated Circuit=Einfacher Integrierter Schaltkreis +Simple Motor=Einfacher Motor +Heating element=Heizelement +Simple energy crystal=Einfacher Energiekristall + +Spool of steel wire=Spule mit Stahldraht +Spool of copper wire=Spule mit Kupferdraht +Spool of silver wire=Spule mit Silberdraht +Spool of gold wire=Spule mit Golddraht +Steel Strip=Stahlstreifen +Copper Strip=Kupferstreifen +Steel Bar=Stahlstab +Chainlinks (brass)=Messingkettenglieder +Chainlinks (steel)=Stahlkettenglieder +Brass Ingot=Messingbarren +Steel gear=Stahlzahnrad +Padlock=Vorhängeschloss +Chain (steel, hanging)=Hängende Stahlkette +Chain (brass, hanging)=Hängende Messingkette +Brass Block=Messingblock + +Oil extract=Ölextrakt +Unprocessed paraffin=Unverarbeitetes Paraffin +Uncooked Terracotta Base=Ungebranntes Terrakotta +Wet Cement=Nasser Zement +Cement=Zement +Concrete Block=Betonblock + +Plastic sheet=Kunststoffplatte +Plastic strips=Kunststoffstreifen +Empty wire spool=Leere Drahtspule diff --git a/mods/basic_materials/locale/basic_materials.fr.tr b/mods/basic_materials/locale/basic_materials.fr.tr new file mode 100644 index 0000000..0bebf79 --- /dev/null +++ b/mods/basic_materials/locale/basic_materials.fr.tr @@ -0,0 +1,33 @@ +# textdomain: basic_materials +Silicon lump=Morceau de silicium +Simple Integrated Circuit=Circuit intégré simple +Simple Motor=Moteur simple +Heating element=Élément chauffant +Simple energy crystal=Cristal d’énergie simple + +Spool of steel wire=Bobine de fil d’acier +Spool of copper wire=Bobine de fil de cuivre +Spool of silver wire=Bobine de fil d’argent +Spool of gold wire=Bobine de fil d’or +Steel Strip=Bande de acier +Copper Strip=Bande de cuivre +Steel Bar=Barre d’acier +Chainlinks (brass)=Maillon en laiton +Chainlinks (steel)=Maillon en acier +Brass Ingot=Lingot de laiton +Steel gear=Rouage en acier +Padlock=Cadenas +Chain (steel, hanging)=Chaine en acier +Chain (brass, hanging)=Chaine en laiton +Brass Block=Bloc de laiton + +Oil extract=Extrait d’huile +Unprocessed paraffin=Paraffine non transformée +Uncooked Terracotta Base=Argile crue +Wet Cement=Ciment humide +Cement=Ciment +Concrete Block=Bloc de béton + +Plastic sheet=Morceau de plastique +Plastic strips=Bande de plastique +Empty wire spool=Bobine de fil vide diff --git a/mods/basic_materials/locale/basic_materials.it.tr b/mods/basic_materials/locale/basic_materials.it.tr new file mode 100644 index 0000000..aae0b3b --- /dev/null +++ b/mods/basic_materials/locale/basic_materials.it.tr @@ -0,0 +1,34 @@ +# textdomain: basic_materials +# Author: Salvo 'LtWorf' Tomaselli +Silicon lump=Grumo di silicio +Simple Integrated Circuit=Circuito integrato semplice +Simple Motor=Motore semplice +Heating element=Elemento riscaldante +Simple energy crystal=Cristallo di energia semplice + +Spool of steel wire=Bobina di filo d'acciaio +Spool of copper wire=Bobina di filo di rame +Spool of silver wire=Bobina di filo d'argento +Spool of gold wire=Bobina di filo d'oro +Steel Strip=Striscia d'acciaio +Copper Strip=Striscia di rame +Steel Bar=Barra d'acciaio +Chainlinks (brass)=Catena (ottone) +Chainlinks (steel)=Catena (acciaio) +Brass Ingot=Lingotto di ottone +Steel gear=Ingranaggio d'acciaio +Padlock=Catenaccio +Chain (steel, hanging)=Catena (acciaio, pendente) +Chain (brass, hanging)=Catena (ottone, pendente) +Brass Block=Blocco di ottone + +Oil extract=Estratto d'olio +Unprocessed paraffin=Paraffina grezza +Uncooked Terracotta Base=Argilla cruda +Wet Cement=Cemento umido +Cement=Cemento +Concrete Block=Blocco di calcestruzzo + +Plastic sheet=Foglio di plastica +Plastic strips=Striscia di plastica +Empty wire spool=Rocchetto vuoto diff --git a/mods/basic_materials/locale/basic_materials.ru.tr b/mods/basic_materials/locale/basic_materials.ru.tr new file mode 100644 index 0000000..85e9c0c --- /dev/null +++ b/mods/basic_materials/locale/basic_materials.ru.tr @@ -0,0 +1,33 @@ +# textdomain: basic_materials +Silicon lump=Кусок Кремния +Simple Integrated Circuit=Микросхема +Simple Motor=Мотор +Heating element=Нить Накала +Simple energy crystal=Энергетический Кристалл + +Spool of steel wire=Катушка Стальной Проволоки +Spool of copper wire=Катушка Медной Проволоки +Spool of silver wire=Катушка Серебрянной Проволоки +Spool of gold wire=Катушка Золотой Проволоки +Steel Strip=Стальная Полоса +Copper Strip=Медная Полоса +Steel Bar=Стальной Прут +Chainlinks (brass)=Латунные Звенья +Chainlinks (steel)=Стальные Звенья +Brass Ingot=Латунный Брусок +Steel gear=Стальная Шестерня +Padlock=Навесной Замок +Chain (steel, hanging)=Стальная Цепь +Chain (brass, hanging)=Латунная Цепь +Brass Block=Латунный Блок + +Oil extract=Масляный Экстракт +Unprocessed paraffin=Необработанный Парафин +Uncooked Terracotta Base=Ком Мокрого Терракота +Wet Cement=Ком Мокрого Цемента +Cement=Цемент +Concrete Block=Железобетон + +Plastic sheet=Пластиковый Лист +Plastic strips=Пластиковая Полоса +Empty wire spool=Пустая Катушка diff --git a/mods/basic_materials/mod.conf b/mods/basic_materials/mod.conf new file mode 100644 index 0000000..d14197b --- /dev/null +++ b/mods/basic_materials/mod.conf @@ -0,0 +1,4 @@ +name = basic_materials +depends = xcompat +optional_depends = moreores, default, mesecons_materials, dye, bucket, fl_stone, fl_trees, mcl_sounds, hades_core, hades_sounds, hades_materials, hades_dye, hades_bucket, hades_extraores, hades_mesecons_materials, aloz, rp_crafting, mcl_core, mcl_copper +min_minetest_version = 5.2.0 diff --git a/mods/basic_materials/models/basic_materials_chains.obj b/mods/basic_materials/models/basic_materials_chains.obj new file mode 100644 index 0000000..78724c9 --- /dev/null +++ b/mods/basic_materials/models/basic_materials_chains.obj @@ -0,0 +1,881 @@ +# Blender v2.73 (sub 0) OBJ File: 'chains.blend' +# www.blender.org +o Torus.016_Torus +v 0.000000 -0.429978 0.000002 +v 0.000000 -0.401109 0.055211 +v -0.014044 -0.391975 0.048870 +v -0.014044 -0.423304 0.000002 +v -0.009826 -0.379748 0.040970 +v -0.009826 -0.406012 0.000002 +v 0.009826 -0.379748 0.040970 +v 0.009826 -0.406012 0.000002 +v 0.014044 -0.391975 0.048870 +v 0.014044 -0.423304 0.000002 +v 0.000000 -0.316336 0.080195 +v -0.014044 -0.316336 0.069112 +v -0.009826 -0.316336 0.057941 +v 0.009826 -0.316336 0.057941 +v 0.014044 -0.316336 0.069112 +v 0.000000 -0.231564 0.055211 +v -0.014044 -0.240700 0.048870 +v -0.009826 -0.252925 0.040970 +v 0.009826 -0.252925 0.040970 +v 0.014044 -0.240700 0.048870 +v 0.000000 -0.202695 0.000002 +v -0.014044 -0.209368 0.000002 +v -0.009826 -0.226661 0.000002 +v 0.009826 -0.226661 0.000002 +v 0.014044 -0.209368 0.000002 +v 0.000000 -0.231564 -0.055206 +v -0.014044 -0.240700 -0.048868 +v -0.009826 -0.252925 -0.040967 +v 0.009826 -0.252925 -0.040967 +v 0.014044 -0.240700 -0.048865 +v 0.000000 -0.316336 -0.080190 +v -0.014044 -0.316336 -0.069108 +v -0.009826 -0.316336 -0.057936 +v 0.009826 -0.316336 -0.057936 +v 0.014044 -0.316336 -0.069108 +v 0.000000 -0.400361 -0.055206 +v -0.014044 -0.391975 -0.048868 +v -0.009826 -0.379748 -0.040967 +v 0.009826 -0.379748 -0.040967 +v 0.014044 -0.391975 -0.048868 +v 0.000000 -0.262249 0.000002 +v -0.061672 -0.233381 0.000002 +v -0.054590 -0.224245 -0.012569 +v 0.000000 -0.255577 -0.012569 +v -0.045765 -0.212018 -0.008794 +v 0.000000 -0.238285 -0.008794 +v -0.045765 -0.212018 0.008798 +v 0.000000 -0.238285 0.008798 +v -0.054590 -0.224245 0.012574 +v 0.000000 -0.255577 0.012574 +v -0.089582 -0.148609 0.000002 +v -0.077200 -0.148609 -0.012569 +v -0.064722 -0.148609 -0.008794 +v -0.064722 -0.148609 0.008799 +v -0.077200 -0.148609 0.012574 +v -0.061672 -0.063837 0.000002 +v -0.054590 -0.072971 -0.012569 +v -0.045765 -0.085198 -0.008794 +v -0.045765 -0.085198 0.008799 +v -0.054590 -0.072971 0.012574 +v 0.000000 -0.034967 0.000002 +v 0.000000 -0.041641 -0.012569 +v 0.000000 -0.058933 -0.008794 +v 0.000000 -0.058933 0.008799 +v 0.000000 -0.041641 0.012574 +v 0.061672 -0.063837 0.000002 +v 0.054590 -0.072971 -0.012569 +v 0.045765 -0.085198 -0.008794 +v 0.045765 -0.085198 0.008799 +v 0.054590 -0.072971 0.012574 +v 0.089582 -0.148609 0.000002 +v 0.077200 -0.148609 -0.012569 +v 0.064722 -0.148609 -0.008794 +v 0.064722 -0.148609 0.008799 +v 0.077200 -0.148609 0.012574 +v 0.061672 -0.232631 0.000002 +v 0.054590 -0.224245 -0.012569 +v 0.045765 -0.212018 -0.008794 +v 0.045765 -0.212018 0.008798 +v 0.054590 -0.224245 0.012574 +v 0.000000 0.073316 0.000002 +v 0.061672 0.102183 0.000002 +v 0.054590 0.111319 0.012574 +v 0.000000 0.079988 0.012574 +v 0.045765 0.123546 0.008799 +v 0.000000 0.097280 0.008799 +v 0.045765 0.123546 -0.008794 +v 0.000000 0.097280 -0.008794 +v 0.054590 0.111319 -0.012569 +v 0.000000 0.079988 -0.012569 +v 0.089582 0.186956 0.000002 +v 0.077200 0.186956 0.012574 +v 0.064722 0.186956 0.008799 +v 0.064722 0.186956 -0.008794 +v 0.077200 0.186956 -0.012569 +v 0.061672 0.271728 0.000002 +v 0.054590 0.262594 0.012574 +v 0.045765 0.250367 0.008799 +v 0.045765 0.250367 -0.008794 +v 0.054590 0.262594 -0.012569 +v 0.000000 0.300597 0.000002 +v 0.000000 0.293923 0.012574 +v 0.000000 0.276631 0.008799 +v 0.000000 0.276631 -0.008794 +v 0.000000 0.293923 -0.012569 +v -0.061672 0.271728 0.000002 +v -0.054590 0.262594 0.012574 +v -0.045765 0.250367 0.008799 +v -0.045765 0.250367 -0.008794 +v -0.054590 0.262594 -0.012569 +v -0.089582 0.186956 0.000002 +v -0.077200 0.186956 0.012574 +v -0.064722 0.186956 0.008799 +v -0.064722 0.186956 -0.008794 +v -0.077200 0.186956 -0.012569 +v -0.061672 0.102931 0.000002 +v -0.054590 0.111319 0.012574 +v -0.045765 0.123546 0.008799 +v -0.045765 0.123546 -0.008794 +v -0.054590 0.111319 -0.012569 +v 0.000000 -0.095037 0.000002 +v 0.000000 -0.066168 -0.055206 +v 0.014044 -0.057034 -0.048868 +v 0.014044 -0.088363 0.000002 +v 0.009826 -0.044807 -0.040967 +v 0.009826 -0.071071 0.000002 +v -0.009826 -0.044807 -0.040967 +v -0.009826 -0.071071 0.000002 +v -0.014044 -0.057034 -0.048868 +v -0.014044 -0.088363 0.000002 +v 0.000000 0.018605 -0.080190 +v 0.014044 0.018605 -0.069108 +v 0.009826 0.018605 -0.057936 +v -0.009826 0.018605 -0.057936 +v -0.014044 0.018605 -0.069108 +v 0.000000 0.103377 -0.055206 +v 0.014044 0.094243 -0.048868 +v 0.009826 0.082016 -0.040967 +v -0.009826 0.082016 -0.040967 +v -0.014044 0.094243 -0.048868 +v 0.000000 0.132246 0.000002 +v 0.014044 0.125572 0.000002 +v 0.009826 0.108280 0.000002 +v -0.009826 0.108280 0.000002 +v -0.014044 0.125572 0.000002 +v 0.000000 0.103377 0.055211 +v 0.014044 0.094243 0.048870 +v 0.009826 0.082016 0.040970 +v -0.009826 0.082016 0.040970 +v -0.014044 0.094243 0.048870 +v 0.000000 0.018605 0.080195 +v 0.014044 0.018605 0.069112 +v 0.009826 0.018605 0.057941 +v -0.009826 0.018605 0.057941 +v -0.014044 0.018605 0.069112 +v 0.000000 -0.065420 0.055211 +v 0.014044 -0.057032 0.048870 +v 0.009826 -0.044807 0.040970 +v -0.009826 -0.044807 0.040970 +v -0.014044 -0.057032 0.048870 +v 0.000000 -0.598329 0.000002 +v 0.061672 -0.569460 0.000002 +v 0.054590 -0.560326 0.012574 +v 0.000000 -0.591655 0.012574 +v 0.045765 -0.548099 0.008798 +v 0.000000 -0.574363 0.008798 +v 0.045765 -0.548099 -0.008794 +v 0.000000 -0.574363 -0.008794 +v 0.054590 -0.560326 -0.012569 +v 0.000000 -0.591655 -0.012569 +v 0.089582 -0.484687 0.000002 +v 0.077200 -0.484687 0.012574 +v 0.064722 -0.484687 0.008798 +v 0.064722 -0.484687 -0.008794 +v 0.077200 -0.484687 -0.012569 +v 0.061672 -0.399915 0.000002 +v 0.054590 -0.409051 0.012574 +v 0.045765 -0.421278 0.008798 +v 0.045765 -0.421278 -0.008794 +v 0.054590 -0.409051 -0.012569 +v 0.000000 -0.371048 0.000002 +v 0.000000 -0.377719 0.012574 +v 0.000000 -0.395012 0.008798 +v 0.000000 -0.395012 -0.008794 +v 0.000000 -0.377719 -0.012569 +v -0.061672 -0.399915 0.000002 +v -0.054590 -0.409051 0.012574 +v -0.045765 -0.421278 0.008798 +v -0.045765 -0.421278 -0.008794 +v -0.054590 -0.409051 -0.012569 +v -0.089582 -0.484687 0.000002 +v -0.077200 -0.484687 0.012574 +v -0.064722 -0.484687 0.008798 +v -0.064722 -0.484687 -0.008794 +v -0.077200 -0.484687 -0.012569 +v -0.061672 -0.568712 0.000002 +v -0.054590 -0.560326 0.012574 +v -0.045765 -0.548099 0.008798 +v -0.045765 -0.548099 -0.008794 +v -0.054590 -0.560326 -0.012569 +v 0.000000 0.241043 0.000002 +v 0.000000 0.269910 0.055211 +v -0.014044 0.279047 0.048870 +v -0.014044 0.247717 0.000002 +v -0.009826 0.291274 0.040970 +v -0.009826 0.265007 0.000002 +v 0.009826 0.291274 0.040970 +v 0.009826 0.265007 0.000002 +v 0.014044 0.279047 0.048870 +v 0.014044 0.247717 0.000002 +v 0.000000 0.354683 0.080195 +v -0.014044 0.354683 0.069112 +v -0.009826 0.354683 0.057941 +v 0.009826 0.354683 0.057941 +v 0.014044 0.354683 0.069112 +v 0.000000 0.439455 0.055211 +v -0.014044 0.430321 0.048870 +v -0.009826 0.418094 0.040970 +v 0.009826 0.418094 0.040970 +v 0.014044 0.430321 0.048870 +v 0.000000 0.468325 0.000002 +v -0.014044 0.461651 0.000002 +v -0.009826 0.444361 0.000002 +v 0.009826 0.444361 0.000002 +v 0.014044 0.461651 0.000002 +v 0.000000 0.439455 -0.055206 +v -0.014044 0.430321 -0.048868 +v -0.009826 0.418094 -0.040967 +v 0.009826 0.418094 -0.040967 +v 0.014044 0.430321 -0.048868 +v 0.000000 0.354683 -0.080190 +v -0.014044 0.354683 -0.069108 +v -0.009826 0.354683 -0.057936 +v 0.009826 0.354683 -0.057936 +v 0.014044 0.354683 -0.069108 +v 0.000000 0.270661 -0.055206 +v -0.014044 0.279047 -0.048868 +v -0.009826 0.291274 -0.040967 +v 0.009826 0.291274 -0.040967 +v 0.014044 0.279047 -0.048868 +vt 0.187500 0.125000 +vt 0.250000 0.125000 +vt 0.250000 0.187500 +vt 0.187500 0.187500 +vt 0.250000 0.250000 +vt 0.187500 0.250000 +vt 0.250000 0.312500 +vt 0.187500 0.312500 +vt 0.250000 0.375000 +vt 0.187500 0.375000 +vt 0.187500 0.062500 +vt 0.250000 0.062500 +vt 0.312500 0.125000 +vt 0.312500 0.187500 +vt 0.312500 0.250000 +vt 0.312500 0.312500 +vt 0.312500 0.375000 +vt 0.312500 0.062500 +vt 0.375000 0.125000 +vt 0.375000 0.187500 +vt 0.375000 0.250000 +vt 0.375000 0.312500 +vt 0.375000 0.375000 +vt 0.375000 0.062500 +vt 0.437500 0.125000 +vt 0.437500 0.187500 +vt 0.437500 0.250000 +vt 0.437500 0.312500 +vt 0.437500 0.375000 +vt 0.437500 0.062500 +vt 0.500000 0.125000 +vt 0.500000 0.187500 +vt 0.500000 0.250000 +vt 0.500000 0.312500 +vt 0.500000 0.375000 +vt 0.500000 0.062500 +vt -0.000000 0.125000 +vt 0.062500 0.125000 +vt 0.062500 0.187500 +vt -0.000000 0.187500 +vt 0.062500 0.250000 +vt -0.000000 0.250000 +vt 0.062500 0.312500 +vt -0.000000 0.312500 +vt 0.062500 0.375000 +vt -0.000000 0.375000 +vt -0.000000 0.062500 +vt 0.062500 0.062500 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.125000 0.250000 +vt 0.125000 0.312500 +vt 0.125000 0.375000 +vt 0.125000 0.062500 +vt 0.750000 0.625000 +vt 0.812500 0.625000 +vt 0.812500 0.687500 +vt 0.750000 0.687500 +vt 0.750000 0.375000 +vt 0.812500 0.375000 +vt 0.812500 0.437500 +vt 0.750000 0.437500 +vt 0.812500 0.500000 +vt 0.750000 0.500000 +vt 0.812500 0.562500 +vt 0.750000 0.562500 +vt 0.875000 0.625000 +vt 0.875000 0.687500 +vt 0.875000 0.375000 +vt 0.875000 0.437500 +vt 0.875000 0.500000 +vt 0.875000 0.562500 +vt 0.937500 0.625000 +vt 0.937500 0.687500 +vt 0.937500 0.375000 +vt 0.937500 0.437500 +vt 0.937500 0.500000 +vt 0.937500 0.562500 +vt 1.000000 0.625000 +vt 1.000000 0.687500 +vt 1.000000 0.375000 +vt 1.000000 0.437500 +vt 1.000000 0.500000 +vt 1.000000 0.562500 +vt 0.500000 0.625000 +vt 0.562500 0.625000 +vt 0.562500 0.687500 +vt 0.500000 0.687500 +vt 0.562500 0.375000 +vt 0.562500 0.437500 +vt 0.500000 0.437500 +vt 0.562500 0.500000 +vt 0.500000 0.500000 +vt 0.562500 0.562500 +vt 0.500000 0.562500 +vt 0.625000 0.625000 +vt 0.625000 0.687500 +vt 0.625000 0.375000 +vt 0.625000 0.437500 +vt 0.625000 0.500000 +vt 0.625000 0.562500 +vt 0.687500 0.625000 +vt 0.687500 0.687500 +vt 0.687500 0.375000 +vt 0.687500 0.437500 +vt 0.687500 0.500000 +vt 0.687500 0.562500 +vt 0.250000 0.625000 +vt 0.312500 0.625000 +vt 0.312500 0.687500 +vt 0.250000 0.687500 +vt 0.312500 0.437500 +vt 0.250000 0.437500 +vt 0.312500 0.500000 +vt 0.250000 0.500000 +vt 0.312500 0.562500 +vt 0.250000 0.562500 +vt 0.375000 0.625000 +vt 0.375000 0.687500 +vt 0.375000 0.437500 +vt 0.375000 0.500000 +vt 0.375000 0.562500 +vt 0.437500 0.625000 +vt 0.437500 0.687500 +vt 0.437500 0.437500 +vt 0.437500 0.500000 +vt 0.437500 0.562500 +vt -0.000000 0.625000 +vt 0.062500 0.625000 +vt 0.062500 0.687500 +vt -0.000000 0.687500 +vt 0.062500 0.437500 +vt -0.000000 0.437500 +vt 0.062500 0.500000 +vt -0.000000 0.500000 +vt 0.062500 0.562500 +vt -0.000000 0.562500 +vt 0.125000 0.625000 +vt 0.125000 0.687500 +vt 0.125000 0.437500 +vt 0.125000 0.500000 +vt 0.125000 0.562500 +vt 0.187500 0.625000 +vt 0.187500 0.687500 +vt 0.187500 0.437500 +vt 0.187500 0.500000 +vt 0.187500 0.562500 +vt 0.687500 0.750000 +vt 0.750000 0.750000 +vt 0.750000 0.812500 +vt 0.687500 0.812500 +vt 0.750000 0.875000 +vt 0.687500 0.875000 +vt 0.750000 0.937500 +vt 0.687500 0.937500 +vt 0.750000 1.000000 +vt 0.687500 1.000000 +vt 0.812500 0.750000 +vt 0.812500 0.812500 +vt 0.812500 0.875000 +vt 0.812500 0.937500 +vt 0.812500 1.000000 +vt 0.875000 0.750000 +vt 0.875000 0.812500 +vt 0.875000 0.875000 +vt 0.875000 0.937500 +vt 0.875000 1.000000 +vt 0.937500 0.750000 +vt 0.937500 0.812500 +vt 0.937500 0.875000 +vt 0.937500 0.937500 +vt 0.937500 1.000000 +vt 1.000000 0.750000 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 1.000000 0.937500 +vt 1.000000 1.000000 +vt 0.500000 0.750000 +vt 0.562500 0.750000 +vt 0.562500 0.812500 +vt 0.500000 0.812500 +vt 0.562500 0.875000 +vt 0.500000 0.875000 +vt 0.562500 0.937500 +vt 0.500000 0.937500 +vt 0.562500 1.000000 +vt 0.500000 1.000000 +vt 0.625000 0.750000 +vt 0.625000 0.812500 +vt 0.625000 0.875000 +vt 0.625000 0.937500 +vt 0.625000 1.000000 +vt 0.750000 0.312500 +vt 0.812500 0.312500 +vt 0.750000 0.062500 +vt 0.812500 0.062500 +vt 0.812500 0.125000 +vt 0.750000 0.125000 +vt 0.812500 0.187500 +vt 0.750000 0.187500 +vt 0.812500 0.250000 +vt 0.750000 0.250000 +vt 0.875000 0.312500 +vt 0.875000 0.062500 +vt 0.875000 0.125000 +vt 0.875000 0.187500 +vt 0.875000 0.250000 +vt 0.937500 0.312500 +vt 0.937500 0.062500 +vt 0.937500 0.125000 +vt 0.937500 0.187500 +vt 0.937500 0.250000 +vt 1.000000 0.312500 +vt 1.000000 0.062500 +vt 1.000000 0.125000 +vt 1.000000 0.187500 +vt 1.000000 0.250000 +vt 0.562500 0.312500 +vt 0.562500 0.062500 +vt 0.562500 0.125000 +vt 0.562500 0.187500 +vt 0.562500 0.250000 +vt 0.625000 0.312500 +vt 0.625000 0.062500 +vt 0.625000 0.125000 +vt 0.625000 0.187500 +vt 0.625000 0.250000 +vt 0.687500 0.312500 +vt 0.687500 0.062500 +vt 0.687500 0.125000 +vt 0.687500 0.187500 +vt 0.687500 0.250000 +vt 0.250000 0.937500 +vt 0.312500 0.937500 +vt 0.312500 1.000000 +vt 0.250000 1.000000 +vt 0.312500 0.750000 +vt 0.250000 0.750000 +vt 0.312500 0.812500 +vt 0.250000 0.812500 +vt 0.312500 0.875000 +vt 0.250000 0.875000 +vt 0.375000 0.937500 +vt 0.375000 1.000000 +vt 0.375000 0.750000 +vt 0.375000 0.812500 +vt 0.375000 0.875000 +vt 0.437500 0.937500 +vt 0.437500 1.000000 +vt 0.437500 0.750000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.000000 0.937500 +vt 0.062500 0.937500 +vt 0.062500 1.000000 +vt 0.000000 1.000000 +vt 0.062500 0.750000 +vt 0.000000 0.750000 +vt 0.062500 0.812500 +vt 0.000000 0.812500 +vt 0.062500 0.875000 +vt 0.000000 0.875000 +vt 0.125000 0.937500 +vt 0.125000 1.000000 +vt 0.125000 0.750000 +vt 0.125000 0.812500 +vt 0.125000 0.875000 +vt 0.187500 0.937500 +vt 0.187500 1.000000 +vt 0.187500 0.750000 +vt 0.187500 0.812500 +vt 0.187500 0.875000 +vn 0.000000 -1.000000 -0.004800 +vn 0.000000 -0.657400 0.753500 +vn -0.898300 -0.248500 0.362300 +vn -0.863600 -0.504100 -0.003400 +vn -0.661500 0.421500 -0.620200 +vn -0.746000 0.665900 0.000000 +vn 0.661500 0.421500 -0.620200 +vn 0.746000 0.665900 0.000000 +vn 0.898300 -0.248500 0.362300 +vn 0.863600 -0.504100 -0.003400 +vn 0.000000 0.000000 1.000000 +vn -0.925200 0.000000 0.379500 +vn -0.617100 0.000000 -0.786900 +vn 0.617100 0.000000 -0.786900 +vn 0.925200 0.000000 0.379500 +vn 0.000000 0.657400 0.753500 +vn -0.898300 0.248400 0.362300 +vn -0.661500 -0.421500 -0.620200 +vn 0.661500 -0.421500 -0.620200 +vn 0.898300 0.248400 0.362300 +vn 0.000000 1.000000 0.000000 +vn -0.866100 0.499800 0.000000 +vn -0.746000 -0.665900 0.000000 +vn 0.746000 -0.665900 0.000000 +vn 0.866100 0.499800 0.000000 +vn 0.000000 0.657400 -0.753500 +vn -0.898300 0.248400 -0.362400 +vn -0.661600 -0.421500 0.620200 +vn 0.661500 -0.421500 0.620200 +vn 0.898300 0.248400 -0.362300 +vn 0.000000 -0.000900 -1.000000 +vn -0.924600 -0.000600 -0.380700 +vn -0.617100 0.000000 0.786900 +vn 0.617100 0.000000 0.786900 +vn 0.924700 -0.000600 -0.380700 +vn 0.000000 -0.650300 -0.759600 +vn -0.895600 -0.254600 -0.364800 +vn -0.661600 0.421500 0.620200 +vn 0.661600 0.421500 0.620200 +vn 0.895600 -0.254600 -0.364800 +vn 0.004900 -1.000000 0.000000 +vn -0.729700 -0.683800 0.000000 +vn -0.324500 -0.256300 -0.910500 +vn 0.003300 -0.475500 -0.879700 +vn 0.578700 0.436200 -0.689100 +vn 0.000000 0.666600 -0.745400 +vn 0.578700 0.436200 0.689100 +vn 0.000000 0.666600 0.745400 +vn -0.324500 -0.256300 0.910500 +vn 0.003300 -0.475500 0.879700 +vn -1.000000 0.000000 0.000000 +vn -0.359600 0.000000 -0.933100 +vn 0.756400 0.000000 -0.654100 +vn 0.756400 0.000000 0.654100 +vn -0.359600 0.000000 0.933100 +vn -0.729700 0.683700 0.000000 +vn -0.324500 0.256300 -0.910500 +vn 0.578700 -0.436200 -0.689100 +vn 0.578700 -0.436200 0.689100 +vn -0.324500 0.256300 0.910500 +vn 0.000000 0.470900 -0.882200 +vn 0.000000 -0.666600 -0.745400 +vn 0.000000 -0.666600 0.745400 +vn 0.000000 0.470900 0.882200 +vn 0.729700 0.683700 0.000000 +vn 0.324500 0.256300 -0.910500 +vn -0.578700 -0.436200 -0.689100 +vn -0.578700 -0.436200 0.689100 +vn 0.324500 0.256300 0.910500 +vn 1.000000 -0.001100 0.000000 +vn 0.361000 -0.000700 -0.932600 +vn -0.756400 0.000000 -0.654100 +vn -0.756400 0.000000 0.654100 +vn 0.361000 -0.000700 0.932600 +vn 0.736100 -0.676800 0.000000 +vn 0.327100 -0.263100 -0.907600 +vn -0.578700 0.436200 -0.689100 +vn -0.578700 0.436200 0.689100 +vn 0.327100 -0.263100 0.907600 +vn -0.004900 -1.000000 0.000000 +vn 0.729700 -0.683800 0.000000 +vn 0.324500 -0.256300 0.910500 +vn -0.003300 -0.475400 0.879700 +vn 0.324500 -0.256300 -0.910500 +vn -0.003300 -0.475400 -0.879700 +vn 1.000000 0.000000 0.000000 +vn 0.359600 0.000000 0.933100 +vn 0.359600 0.000000 -0.933100 +vn -1.000000 -0.001100 0.000000 +vn -0.361000 -0.000700 0.932600 +vn -0.361000 -0.000700 -0.932600 +vn -0.736100 -0.676800 0.000000 +vn -0.327100 -0.263100 0.907600 +vn -0.327100 -0.263100 -0.907600 +vn 0.000000 -1.000000 0.004800 +vn 0.000000 -0.657400 -0.753500 +vn 0.898300 -0.248500 -0.362400 +vn 0.863600 -0.504100 0.003400 +vn -0.898300 -0.248500 -0.362400 +vn -0.863600 -0.504100 0.003400 +vn 0.000000 0.000000 -1.000000 +vn 0.925200 0.000000 -0.379500 +vn -0.925200 0.000000 -0.379500 +vn 0.898300 0.248500 -0.362400 +vn 0.661600 -0.421500 0.620200 +vn -0.898300 0.248500 -0.362400 +vn 0.898300 0.248500 0.362300 +vn -0.898300 0.248500 0.362300 +vn 0.000000 -0.000900 1.000000 +vn 0.924700 -0.000600 0.380700 +vn -0.924700 -0.000600 0.380700 +vn 0.000000 -0.650300 0.759600 +vn 0.895600 -0.254600 0.364700 +vn -0.895600 -0.254600 0.364700 +vn 0.729700 -0.683700 0.000000 +vn 0.729700 0.683800 0.000000 +vn -0.729700 0.683800 0.000000 +vn -0.898300 -0.248400 0.362300 +vn -0.863600 -0.504100 -0.003500 +vn 0.898300 -0.248400 0.362300 +vn 0.863600 -0.504100 -0.003500 +vn -0.661500 -0.421500 0.620200 +vn 0.924600 -0.000600 -0.380700 +vn -0.661500 0.421500 0.620200 +vn 0.661500 0.421500 0.620200 +s 1 +f 1/1/1 2/2/2 3/3/3 4/4/4 +f 4/4/4 3/3/3 5/5/5 6/6/6 +f 6/6/6 5/5/5 7/7/7 8/8/8 +f 8/8/8 7/7/7 9/9/9 10/10/10 +f 1/1/1 10/11/10 9/12/9 2/2/2 +f 2/2/2 11/13/11 12/14/12 3/3/3 +f 3/3/3 12/14/12 13/15/13 5/5/5 +f 5/5/5 13/15/13 14/16/14 7/7/7 +f 7/7/7 14/16/14 15/17/15 9/9/9 +f 9/12/9 15/18/15 11/13/11 2/2/2 +f 11/13/11 16/19/16 17/20/17 12/14/12 +f 12/14/12 17/20/17 18/21/18 13/15/13 +f 13/15/13 18/21/18 19/22/19 14/16/14 +f 14/16/14 19/22/19 20/23/20 15/17/15 +f 15/18/15 20/24/20 16/19/16 11/13/11 +f 16/19/16 21/25/21 22/26/22 17/20/17 +f 17/20/17 22/26/22 23/27/23 18/21/18 +f 18/21/18 23/27/23 24/28/24 19/22/19 +f 19/22/19 24/28/24 25/29/25 20/23/20 +f 20/24/20 25/30/25 21/25/21 16/19/16 +f 21/25/21 26/31/26 27/32/27 22/26/22 +f 22/26/22 27/32/27 28/33/28 23/27/23 +f 23/27/23 28/33/28 29/34/29 24/28/24 +f 24/28/24 29/34/29 30/35/30 25/29/25 +f 25/30/25 30/36/30 26/31/26 21/25/21 +f 26/37/26 31/38/31 32/39/32 27/40/27 +f 27/40/27 32/39/32 33/41/33 28/42/28 +f 28/42/28 33/41/33 34/43/34 29/44/29 +f 29/44/29 34/43/34 35/45/35 30/46/30 +f 30/47/30 35/48/35 31/38/31 26/37/26 +f 31/38/31 36/49/36 37/50/37 32/39/32 +f 32/39/32 37/50/37 38/51/38 33/41/33 +f 33/41/33 38/51/38 39/52/39 34/43/34 +f 34/43/34 39/52/39 40/53/40 35/45/35 +f 35/48/35 40/54/40 36/49/36 31/38/31 +f 36/49/36 1/1/1 4/4/4 37/50/37 +f 37/50/37 4/4/4 6/6/6 38/51/38 +f 38/51/38 6/6/6 8/8/8 39/52/39 +f 39/52/39 8/8/8 10/10/10 40/53/40 +f 1/1/1 36/49/36 40/54/40 10/11/10 +f 41/55/41 42/56/42 43/57/43 44/58/44 +f 44/59/44 43/60/43 45/61/45 46/62/46 +f 46/62/46 45/61/45 47/63/47 48/64/48 +f 48/64/48 47/63/47 49/65/49 50/66/50 +f 41/55/41 50/66/50 49/65/49 42/56/42 +f 42/56/42 51/67/51 52/68/52 43/57/43 +f 43/60/43 52/69/52 53/70/53 45/61/45 +f 45/61/45 53/70/53 54/71/54 47/63/47 +f 47/63/47 54/71/54 55/72/55 49/65/49 +f 49/65/49 55/72/55 51/67/51 42/56/42 +f 51/67/51 56/73/56 57/74/57 52/68/52 +f 52/69/52 57/75/57 58/76/58 53/70/53 +f 53/70/53 58/76/58 59/77/59 54/71/54 +f 54/71/54 59/77/59 60/78/60 55/72/55 +f 55/72/55 60/78/60 56/73/56 51/67/51 +f 56/73/56 61/79/21 62/80/61 57/74/57 +f 57/75/57 62/81/61 63/82/62 58/76/58 +f 58/76/58 63/82/62 64/83/63 59/77/59 +f 59/77/59 64/83/63 65/84/64 60/78/60 +f 60/78/60 65/84/64 61/79/21 56/73/56 +f 61/85/21 66/86/65 67/87/66 62/88/61 +f 62/35/61 67/89/66 68/90/67 63/91/62 +f 63/91/62 68/90/67 69/92/68 64/93/63 +f 64/93/63 69/92/68 70/94/69 65/95/64 +f 65/95/64 70/94/69 66/86/65 61/85/21 +f 66/86/65 71/96/70 72/97/71 67/87/66 +f 67/89/66 72/98/71 73/99/72 68/90/67 +f 68/90/67 73/99/72 74/100/73 69/92/68 +f 69/92/68 74/100/73 75/101/74 70/94/69 +f 70/94/69 75/101/74 71/96/70 66/86/65 +f 71/96/70 76/102/75 77/103/76 72/97/71 +f 72/98/71 77/104/76 78/105/77 73/99/72 +f 73/99/72 78/105/77 79/106/78 74/100/73 +f 74/100/73 79/106/78 80/107/79 75/101/74 +f 75/101/74 80/107/79 76/102/75 71/96/70 +f 76/102/75 41/55/41 44/58/44 77/103/76 +f 77/104/76 44/59/44 46/62/46 78/105/77 +f 78/105/77 46/62/46 48/64/48 79/106/78 +f 79/106/78 48/64/48 50/66/50 80/107/79 +f 41/55/41 76/102/75 80/107/79 50/66/50 +f 81/108/80 82/109/81 83/110/82 84/111/83 +f 84/9/83 83/17/82 85/112/78 86/113/48 +f 86/113/48 85/112/78 87/114/77 88/115/46 +f 88/115/46 87/114/77 89/116/84 90/117/85 +f 81/108/80 90/117/85 89/116/84 82/109/81 +f 82/109/81 91/118/86 92/119/87 83/110/82 +f 83/17/82 92/23/87 93/120/73 85/112/78 +f 85/112/78 93/120/73 94/121/72 87/114/77 +f 87/114/77 94/121/72 95/122/88 89/116/84 +f 89/116/84 95/122/88 91/118/86 82/109/81 +f 91/118/86 96/123/65 97/124/69 92/119/87 +f 92/23/87 97/29/69 98/125/68 93/120/73 +f 93/120/73 98/125/68 99/126/67 94/121/72 +f 94/121/72 99/126/67 100/127/66 95/122/88 +f 95/122/88 100/127/66 96/123/65 91/118/86 +f 96/123/65 101/85/21 102/88/64 97/124/69 +f 97/29/69 102/35/64 103/91/63 98/125/68 +f 98/125/68 103/91/63 104/93/62 99/126/67 +f 99/126/67 104/93/62 105/95/61 100/127/66 +f 100/127/66 105/95/61 101/85/21 96/123/65 +f 101/128/21 106/129/56 107/130/60 102/131/64 +f 102/46/64 107/45/60 108/132/59 103/133/63 +f 103/133/63 108/132/59 109/134/58 104/135/62 +f 104/135/62 109/134/58 110/136/57 105/137/61 +f 105/137/61 110/136/57 106/129/56 101/128/21 +f 106/129/56 111/138/89 112/139/90 107/130/60 +f 107/45/60 112/53/90 113/140/54 108/132/59 +f 108/132/59 113/140/54 114/141/53 109/134/58 +f 109/134/58 114/141/53 115/142/91 110/136/57 +f 110/136/57 115/142/91 111/138/89 106/129/56 +f 111/138/89 116/143/92 117/144/93 112/139/90 +f 112/53/90 117/10/93 118/145/47 113/140/54 +f 113/140/54 118/145/47 119/146/45 114/141/53 +f 114/141/53 119/146/45 120/147/94 115/142/91 +f 115/142/91 120/147/94 116/143/92 111/138/89 +f 116/143/92 81/108/80 84/111/83 117/144/93 +f 117/10/93 84/9/83 86/113/48 118/145/47 +f 118/145/47 86/113/48 88/115/46 119/146/45 +f 119/146/45 88/115/46 90/117/85 120/147/94 +f 81/108/80 116/143/92 120/147/94 90/117/85 +f 121/148/95 122/149/96 123/150/97 124/151/98 +f 124/151/98 123/150/97 125/152/39 126/153/8 +f 126/153/8 125/152/39 127/154/38 128/155/6 +f 128/155/6 127/154/38 129/156/99 130/157/100 +f 121/148/95 130/103/100 129/58/99 122/149/96 +f 122/149/96 131/158/101 132/159/102 123/150/97 +f 123/150/97 132/159/102 133/160/34 125/152/39 +f 125/152/39 133/160/34 134/161/33 127/154/38 +f 127/154/38 134/161/33 135/162/103 129/156/99 +f 129/58/99 135/57/103 131/158/101 122/149/96 +f 131/158/101 136/163/26 137/164/104 132/159/102 +f 132/159/102 137/164/104 138/165/105 133/160/34 +f 133/160/34 138/165/105 139/166/28 134/161/33 +f 134/161/33 139/166/28 140/167/106 135/162/103 +f 135/57/103 140/68/106 136/163/26 131/158/101 +f 136/163/26 141/168/21 142/169/25 137/164/104 +f 137/164/104 142/169/25 143/170/24 138/165/105 +f 138/165/105 143/170/24 144/171/23 139/166/28 +f 139/166/28 144/171/23 145/172/22 140/167/106 +f 140/68/106 145/74/22 141/168/21 136/163/26 +f 141/168/21 146/173/16 147/174/107 142/169/25 +f 142/169/25 147/174/107 148/175/19 143/170/24 +f 143/170/24 148/175/19 149/176/18 144/171/23 +f 144/171/23 149/176/18 150/177/108 145/172/22 +f 145/74/22 150/80/108 146/173/16 141/168/21 +f 146/178/16 151/179/109 152/180/110 147/181/107 +f 147/181/107 152/180/110 153/182/14 148/183/19 +f 148/183/19 153/182/14 154/184/13 149/185/18 +f 149/185/18 154/184/13 155/186/111 150/187/108 +f 150/88/108 155/87/111 151/179/109 146/178/16 +f 151/179/109 156/188/112 157/189/113 152/180/110 +f 152/180/110 157/189/113 158/190/7 153/182/14 +f 153/182/14 158/190/7 159/191/5 154/184/13 +f 154/184/13 159/191/5 160/192/114 155/186/111 +f 155/87/111 160/97/114 156/188/112 151/179/109 +f 156/188/112 121/148/95 124/151/98 157/189/113 +f 157/189/113 124/151/98 126/153/8 158/190/7 +f 158/190/7 126/153/8 128/155/6 159/191/5 +f 159/191/5 128/155/6 130/157/100 160/192/114 +f 121/148/95 156/188/112 160/97/114 130/103/100 +f 161/193/80 162/194/115 163/60/82 164/59/83 +f 164/195/83 163/196/82 165/197/78 166/198/48 +f 166/198/48 165/197/78 167/199/77 168/200/46 +f 168/200/46 167/199/77 169/201/84 170/202/85 +f 161/193/80 170/202/85 169/201/84 162/194/115 +f 162/194/115 171/203/86 172/69/87 163/60/82 +f 163/196/82 172/204/87 173/205/73 165/197/78 +f 165/197/78 173/205/73 174/206/72 167/199/77 +f 167/199/77 174/206/72 175/207/88 169/201/84 +f 169/201/84 175/207/88 171/203/86 162/194/115 +f 171/203/86 176/208/116 177/75/69 172/69/87 +f 172/204/87 177/209/69 178/210/68 173/205/73 +f 173/205/73 178/210/68 179/211/67 174/206/72 +f 174/206/72 179/211/67 180/212/66 175/207/88 +f 175/207/88 180/212/66 176/208/116 171/203/86 +f 176/208/116 181/213/21 182/81/64 177/75/69 +f 177/209/69 182/214/64 183/215/63 178/210/68 +f 178/210/68 183/215/63 184/216/62 179/211/67 +f 179/211/67 184/216/62 185/217/61 180/212/66 +f 180/212/66 185/217/61 181/213/21 176/208/116 +f 181/34/21 186/218/117 187/89/60 182/35/64 +f 182/36/64 187/219/60 188/220/59 183/31/63 +f 183/31/63 188/220/59 189/221/58 184/32/62 +f 184/32/62 189/221/58 190/222/57 185/33/61 +f 185/33/61 190/222/57 186/218/117 181/34/21 +f 186/218/117 191/223/89 192/98/90 187/89/60 +f 187/219/60 192/224/90 193/225/54 188/220/59 +f 188/220/59 193/225/54 194/226/53 189/221/58 +f 189/221/58 194/226/53 195/227/91 190/222/57 +f 190/222/57 195/227/91 191/223/89 186/218/117 +f 191/223/89 196/228/92 197/104/93 192/98/90 +f 192/224/90 197/229/93 198/230/47 193/225/54 +f 193/225/54 198/230/47 199/231/45 194/226/53 +f 194/226/53 199/231/45 200/232/94 195/227/91 +f 195/227/91 200/232/94 196/228/92 191/223/89 +f 196/228/92 161/193/80 164/59/83 197/104/93 +f 197/229/93 164/195/83 166/198/48 198/230/47 +f 198/230/47 166/198/48 168/200/46 199/231/45 +f 199/231/45 168/200/46 170/202/85 200/232/94 +f 161/193/80 196/228/92 200/232/94 170/202/85 +f 201/233/1 202/234/2 203/235/118 204/236/119 +f 204/111/119 203/110/118 205/237/5 206/238/6 +f 206/238/6 205/237/5 207/239/7 208/240/8 +f 208/240/8 207/239/7 209/241/120 210/242/121 +f 201/233/1 210/242/121 209/241/120 202/234/2 +f 202/234/2 211/243/11 212/244/12 203/235/118 +f 203/110/118 212/119/12 213/245/13 205/237/5 +f 205/237/5 213/245/13 214/246/14 207/239/7 +f 207/239/7 214/246/14 215/247/15 209/241/120 +f 209/241/120 215/247/15 211/243/11 202/234/2 +f 211/243/11 216/248/16 217/249/108 212/244/12 +f 212/119/12 217/124/108 218/250/18 213/245/13 +f 213/245/13 218/250/18 219/251/19 214/246/14 +f 214/246/14 219/251/19 220/252/107 215/247/15 +f 215/247/15 220/252/107 216/248/16 211/243/11 +f 216/248/16 221/185/21 222/187/22 217/249/108 +f 217/124/108 222/88/22 223/178/23 218/250/18 +f 218/250/18 223/178/23 224/181/24 219/251/19 +f 219/251/19 224/181/24 225/183/25 220/252/107 +f 220/252/107 225/183/25 221/185/21 216/248/16 +f 221/253/21 226/254/26 227/255/106 222/256/22 +f 222/131/22 227/130/106 228/257/122 223/258/23 +f 223/258/23 228/257/122 229/259/29 224/260/24 +f 224/260/24 229/259/29 230/261/104 225/262/25 +f 225/262/25 230/261/104 226/254/26 221/253/21 +f 226/254/26 231/263/31 232/264/32 227/255/106 +f 227/130/106 232/139/32 233/265/33 228/257/122 +f 228/257/122 233/265/33 234/266/34 229/259/29 +f 229/259/29 234/266/34 235/267/123 230/261/104 +f 230/261/104 235/267/123 231/263/31 226/254/26 +f 231/263/31 236/268/36 237/269/37 232/264/32 +f 232/139/32 237/144/37 238/270/124 233/265/33 +f 233/265/33 238/270/124 239/271/125 234/266/34 +f 234/266/34 239/271/125 240/272/40 235/267/123 +f 235/267/123 240/272/40 236/268/36 231/263/31 +f 236/268/36 201/233/1 204/236/119 237/269/37 +f 237/144/37 204/111/119 206/238/6 238/270/124 +f 238/270/124 206/238/6 208/240/8 239/271/125 +f 239/271/125 208/240/8 210/242/121 240/272/40 +f 201/233/1 236/268/36 240/272/40 210/242/121 diff --git a/mods/basic_materials/nodes.lua b/mods/basic_materials/nodes.lua new file mode 100644 index 0000000..a40d1f5 --- /dev/null +++ b/mods/basic_materials/nodes.lua @@ -0,0 +1,62 @@ +local S = minetest.get_translator("basic_materials") +local sound_api = xcompat.sounds +local chains_sbox = {type = "fixed",fixed = { -0.1, -0.5, -0.1, 0.1, 0.5, 0.1 }} + +minetest.register_node("basic_materials:cement_block", { + description = S("Cement"), + tiles = {"basic_materials_cement_block.png"}, + is_ground_content = false, + groups = {cracky=2, dig_stone = 1, pickaxey=5}, + _mcl_hardness=1.6, + sounds = sound_api.node_sound_stone_defaults(), +}) + +minetest.register_node("basic_materials:concrete_block", { + description = S("Concrete Block"), + tiles = {"basic_materials_concrete_block.png",}, + is_ground_content = false, + groups = {cracky=1, concrete=1, dig_stone = 1, pickaxey=5}, + _mcl_hardness=1.6, + sounds = sound_api.node_sound_stone_defaults(), +}) + +minetest.register_node("basic_materials:chain_steel", { + description = S("Chain (steel, hanging)"), + drawtype = "mesh", + mesh = "basic_materials_chains.obj", + tiles = {"basic_materials_chain_steel.png"}, + walkable = false, + climbable = true, + sunlight_propagates = true, + paramtype = "light", + inventory_image = "basic_materials_chain_steel_inv.png", + is_ground_content = false, + groups = {cracky=3, dig_stone = 1, pickaxey=5}, + _mcl_hardness=1.6, + selection_box = chains_sbox, +}) + +minetest.register_node("basic_materials:chain_brass", { + description = S("Chain (brass, hanging)"), + drawtype = "mesh", + mesh = "basic_materials_chains.obj", + tiles = {"basic_materials_chain_brass.png"}, + walkable = false, + climbable = true, + sunlight_propagates = true, + paramtype = "light", + inventory_image = "basic_materials_chain_brass_inv.png", + is_ground_content = false, + groups = {cracky=3, dig_stone = 1, pickaxey=5}, + _mcl_hardness=1.6, + selection_box = chains_sbox, +}) + +minetest.register_node("basic_materials:brass_block", { + description = S("Brass Block"), + tiles = { "basic_materials_brass_block.png" }, + is_ground_content = false, + groups = {cracky=1, dig_stone = 1, pickaxey=5}, + _mcl_hardness=1.6, + sounds = sound_api.node_sound_metal_defaults() +}) diff --git a/mods/basic_materials/textures/basic_materials_aluminum_bar.png b/mods/basic_materials/textures/basic_materials_aluminum_bar.png new file mode 100644 index 0000000..8d3e11e Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_aluminum_bar.png differ diff --git a/mods/basic_materials/textures/basic_materials_aluminum_strip.png b/mods/basic_materials/textures/basic_materials_aluminum_strip.png new file mode 100644 index 0000000..8957022 Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_aluminum_strip.png differ diff --git a/mods/basic_materials/textures/basic_materials_aluminum_wire.png b/mods/basic_materials/textures/basic_materials_aluminum_wire.png new file mode 100644 index 0000000..f0b3dc6 Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_aluminum_wire.png differ diff --git a/mods/basic_materials/textures/basic_materials_brass_block.png b/mods/basic_materials/textures/basic_materials_brass_block.png new file mode 100644 index 0000000..c937800 Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_brass_block.png differ diff --git a/mods/basic_materials/textures/basic_materials_brass_ingot.png b/mods/basic_materials/textures/basic_materials_brass_ingot.png new file mode 100644 index 0000000..0bd030a Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_brass_ingot.png differ diff --git a/mods/basic_materials/textures/basic_materials_carbon_steel_bar.png b/mods/basic_materials/textures/basic_materials_carbon_steel_bar.png new file mode 100644 index 0000000..a8c3531 Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_carbon_steel_bar.png differ diff --git a/mods/basic_materials/textures/basic_materials_cement_block.png b/mods/basic_materials/textures/basic_materials_cement_block.png new file mode 100644 index 0000000..6d30f47 Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_cement_block.png differ diff --git a/mods/basic_materials/textures/basic_materials_chain_brass.png b/mods/basic_materials/textures/basic_materials_chain_brass.png new file mode 100644 index 0000000..e2fb20d Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_chain_brass.png differ diff --git a/mods/basic_materials/textures/basic_materials_chain_brass_inv.png b/mods/basic_materials/textures/basic_materials_chain_brass_inv.png new file mode 100644 index 0000000..8c2d554 Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_chain_brass_inv.png differ diff --git a/mods/basic_materials/textures/basic_materials_chain_steel.png b/mods/basic_materials/textures/basic_materials_chain_steel.png new file mode 100644 index 0000000..29af8db Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_chain_steel.png differ diff --git a/mods/basic_materials/textures/basic_materials_chain_steel_inv.png b/mods/basic_materials/textures/basic_materials_chain_steel_inv.png new file mode 100644 index 0000000..c552f7b Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_chain_steel_inv.png differ diff --git a/mods/basic_materials/textures/basic_materials_chainlink_brass.png b/mods/basic_materials/textures/basic_materials_chainlink_brass.png new file mode 100644 index 0000000..9a1ad87 Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_chainlink_brass.png differ diff --git a/mods/basic_materials/textures/basic_materials_chainlink_steel.png b/mods/basic_materials/textures/basic_materials_chainlink_steel.png new file mode 100644 index 0000000..d7132c3 Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_chainlink_steel.png differ diff --git a/mods/basic_materials/textures/basic_materials_concrete_block.png b/mods/basic_materials/textures/basic_materials_concrete_block.png new file mode 100644 index 0000000..5dd0d66 Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_concrete_block.png differ diff --git a/mods/basic_materials/textures/basic_materials_copper_strip.png b/mods/basic_materials/textures/basic_materials_copper_strip.png new file mode 100644 index 0000000..22e572a Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_copper_strip.png differ diff --git a/mods/basic_materials/textures/basic_materials_copper_wire.png b/mods/basic_materials/textures/basic_materials_copper_wire.png new file mode 100644 index 0000000..9df9f36 Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_copper_wire.png differ diff --git a/mods/basic_materials/textures/basic_materials_empty_spool.png b/mods/basic_materials/textures/basic_materials_empty_spool.png new file mode 100644 index 0000000..017a94f Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_empty_spool.png differ diff --git a/mods/basic_materials/textures/basic_materials_energy_crystal.png b/mods/basic_materials/textures/basic_materials_energy_crystal.png new file mode 100644 index 0000000..f1c28e8 Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_energy_crystal.png differ diff --git a/mods/basic_materials/textures/basic_materials_gear_steel.png b/mods/basic_materials/textures/basic_materials_gear_steel.png new file mode 100644 index 0000000..584f9a5 Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_gear_steel.png differ diff --git a/mods/basic_materials/textures/basic_materials_gold_strip.png b/mods/basic_materials/textures/basic_materials_gold_strip.png new file mode 100644 index 0000000..9fe97a2 Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_gold_strip.png differ diff --git a/mods/basic_materials/textures/basic_materials_gold_wire.png b/mods/basic_materials/textures/basic_materials_gold_wire.png new file mode 100644 index 0000000..781de7b Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_gold_wire.png differ diff --git a/mods/basic_materials/textures/basic_materials_heating_element.png b/mods/basic_materials/textures/basic_materials_heating_element.png new file mode 100644 index 0000000..42e00b7 Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_heating_element.png differ diff --git a/mods/basic_materials/textures/basic_materials_ic.png b/mods/basic_materials/textures/basic_materials_ic.png new file mode 100644 index 0000000..4c88894 Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_ic.png differ diff --git a/mods/basic_materials/textures/basic_materials_lead_strip.png b/mods/basic_materials/textures/basic_materials_lead_strip.png new file mode 100644 index 0000000..675933f Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_lead_strip.png differ diff --git a/mods/basic_materials/textures/basic_materials_motor.png b/mods/basic_materials/textures/basic_materials_motor.png new file mode 100644 index 0000000..f19ec0a Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_motor.png differ diff --git a/mods/basic_materials/textures/basic_materials_oil_extract.png b/mods/basic_materials/textures/basic_materials_oil_extract.png new file mode 100644 index 0000000..e34623d Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_oil_extract.png differ diff --git a/mods/basic_materials/textures/basic_materials_padlock.png b/mods/basic_materials/textures/basic_materials_padlock.png new file mode 100644 index 0000000..b05b7ef Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_padlock.png differ diff --git a/mods/basic_materials/textures/basic_materials_paraffin.png b/mods/basic_materials/textures/basic_materials_paraffin.png new file mode 100644 index 0000000..77d2bbd Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_paraffin.png differ diff --git a/mods/basic_materials/textures/basic_materials_plastic_sheet.png b/mods/basic_materials/textures/basic_materials_plastic_sheet.png new file mode 100644 index 0000000..034dcc2 Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_plastic_sheet.png differ diff --git a/mods/basic_materials/textures/basic_materials_plastic_strip.png b/mods/basic_materials/textures/basic_materials_plastic_strip.png new file mode 100644 index 0000000..1318dfc Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_plastic_strip.png differ diff --git a/mods/basic_materials/textures/basic_materials_silicon.png b/mods/basic_materials/textures/basic_materials_silicon.png new file mode 100644 index 0000000..847b366 Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_silicon.png differ diff --git a/mods/basic_materials/textures/basic_materials_silver_wire.png b/mods/basic_materials/textures/basic_materials_silver_wire.png new file mode 100644 index 0000000..a38a45e Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_silver_wire.png differ diff --git a/mods/basic_materials/textures/basic_materials_stainless_steel_bar.png b/mods/basic_materials/textures/basic_materials_stainless_steel_bar.png new file mode 100644 index 0000000..7f7425e Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_stainless_steel_bar.png differ diff --git a/mods/basic_materials/textures/basic_materials_stainless_steel_strip.png b/mods/basic_materials/textures/basic_materials_stainless_steel_strip.png new file mode 100644 index 0000000..3a33146 Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_stainless_steel_strip.png differ diff --git a/mods/basic_materials/textures/basic_materials_stainless_steel_wire.png b/mods/basic_materials/textures/basic_materials_stainless_steel_wire.png new file mode 100644 index 0000000..2429bae Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_stainless_steel_wire.png differ diff --git a/mods/basic_materials/textures/basic_materials_steel_bar.png b/mods/basic_materials/textures/basic_materials_steel_bar.png new file mode 100644 index 0000000..0673b6e Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_steel_bar.png differ diff --git a/mods/basic_materials/textures/basic_materials_steel_strip.png b/mods/basic_materials/textures/basic_materials_steel_strip.png new file mode 100644 index 0000000..6384dc8 Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_steel_strip.png differ diff --git a/mods/basic_materials/textures/basic_materials_steel_wire.png b/mods/basic_materials/textures/basic_materials_steel_wire.png new file mode 100644 index 0000000..0c96c8f Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_steel_wire.png differ diff --git a/mods/basic_materials/textures/basic_materials_terracotta_base.png b/mods/basic_materials/textures/basic_materials_terracotta_base.png new file mode 100644 index 0000000..9f04aad Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_terracotta_base.png differ diff --git a/mods/basic_materials/textures/basic_materials_wet_cement.png b/mods/basic_materials/textures/basic_materials_wet_cement.png new file mode 100644 index 0000000..6a7fbf1 Binary files /dev/null and b/mods/basic_materials/textures/basic_materials_wet_cement.png differ diff --git a/mods/controls/.github/workflows/luacheck.yml b/mods/controls/.github/workflows/luacheck.yml new file mode 100644 index 0000000..b501650 --- /dev/null +++ b/mods/controls/.github/workflows/luacheck.yml @@ -0,0 +1,10 @@ +name: luacheck +on: [push, pull_request] +jobs: + luacheck: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@master + - name: Luacheck + uses: lunarmodules/luacheck@master \ No newline at end of file diff --git a/mods/controls/.luacheckrc b/mods/controls/.luacheckrc new file mode 100644 index 0000000..a68b439 --- /dev/null +++ b/mods/controls/.luacheckrc @@ -0,0 +1,8 @@ + +globals = { + "controls", +} + +read_globals = { + "minetest", +} diff --git a/mods/controls/debug.lua b/mods/controls/debug.lua new file mode 100644 index 0000000..f9f91cd --- /dev/null +++ b/mods/controls/debug.lua @@ -0,0 +1,21 @@ +controls.register_on_press(function(player, key) + local name = player:get_player_name() + minetest.chat_send_player(name, name .. " pressed " .. key) +end) + +controls.register_on_hold(function(player, key, length) + local name = player:get_player_name() + minetest.chat_send_player(name, name .. " held " .. key .. " for " .. length .. " seconds") +end) + +controls.register_on_release(function(player, key, length) + local name = player:get_player_name() + minetest.chat_send_player(name, name .. " released " .. key .. " after " .. length .. " seconds") +end) + +minetest.register_on_joinplayer(function(player) + local name = player:get_player_name() + minetest.chat_send_player(name, #controls.registered_on_press .. " registered_on_press callbacks") + minetest.chat_send_player(name, #controls.registered_on_hold .. " registered_on_hold callbacks") + minetest.chat_send_player(name, #controls.registered_on_release .. " registered_on_release callbacks") +end) diff --git a/mods/controls/init.lua b/mods/controls/init.lua new file mode 100644 index 0000000..53903a8 --- /dev/null +++ b/mods/controls/init.lua @@ -0,0 +1,67 @@ +controls = { + registered_on_press = {}, + registered_on_hold = {}, + registered_on_release = {}, + players = {}, +} + +function controls.register_on_press(callback) + table.insert(controls.registered_on_press, callback) +end + +function controls.register_on_hold(callback) + table.insert(controls.registered_on_hold, callback) +end + +function controls.register_on_release(callback) + table.insert(controls.registered_on_release, callback) +end + +minetest.register_on_joinplayer(function(player) + local name = player:get_player_name() + controls.players[name] = {} + for key in pairs(player:get_player_control()) do + controls.players[name][key] = {false} + end +end) + +minetest.register_on_leaveplayer(function(player) + local name = player:get_player_name() + controls.players[name] = nil +end) + +local function update_player_controls(player, player_controls) + local time_now = minetest.get_us_time() + for key, pressed in pairs(player:get_player_control()) do + if player_controls[key] then + if pressed and not player_controls[key][1] then + for _, callback in pairs(controls.registered_on_press) do + callback(player, key) + end + player_controls[key] = {true, time_now} + elseif pressed and player_controls[key][1] then + for _, callback in pairs(controls.registered_on_hold) do + callback(player, key, (time_now - player_controls[key][2]) / 1e6) + end + elseif not pressed and player_controls[key][1] then + for _, callback in pairs(controls.registered_on_release) do + callback(player, key, (time_now - player_controls[key][2]) / 1e6) + end + player_controls[key] = {false} + end + end + end +end + +minetest.register_globalstep(function() + for _, player in pairs(minetest.get_connected_players()) do + local name = player:get_player_name() + if controls.players[name] then + update_player_controls(player, controls.players[name]) + end + end +end) + +if minetest.settings:get_bool("controls_enable_debug", false) then + dofile(minetest.get_modpath("controls") .. "/debug.lua") +end diff --git a/mods/controls/license b/mods/controls/license new file mode 100644 index 0000000..0f696e4 --- /dev/null +++ b/mods/controls/license @@ -0,0 +1,24 @@ +License of source code +---------------------- + +The MIT License (MIT) + +Copyright (c) 2023 wsor4035(aka wsor) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/mods/controls/mod.conf b/mods/controls/mod.conf new file mode 100644 index 0000000..2736ee1 --- /dev/null +++ b/mods/controls/mod.conf @@ -0,0 +1,3 @@ +name = controls +description = Utility library for control press/hold/release events +min_minetest_version = 5.0.0 diff --git a/mods/controls/readme.md b/mods/controls/readme.md new file mode 100644 index 0000000..6ef607e --- /dev/null +++ b/mods/controls/readme.md @@ -0,0 +1,35 @@ +# Controls [controls] + +[![luacheck](https://github.com/mt-mods/controls/workflows/luacheck/badge.svg)](https://github.com/mt-mods/controls/actions) +[![ContentDB](https://content.minetest.net/packages/mt-mods/controls/shields/downloads/)](https://content.minetest.net/packages/mt-mods/controls/) + +Utility library for control press/hold/release events. + +Rewritten and maintained version of [Arcelmi/minetest-controls](https://github.com/Arcelmi/minetest-controls). + + +## API + +Callbacks are supported for all keys in `player:get_player_control()`. + +```lua +controls.register_on_press(function(player, key) + -- Called when a key is pressed + -- player: player object + -- key: key pressed +end) + +controls.register_on_hold(function(player, key, length) + -- Called every globalstep while a key is held + -- player: player object + -- key: key pressed + -- length: length of time key has been held in seconds +end) + +controls.register_on_release(function(player, key, length) + -- Called when a key is released + -- player: player object + -- key: key pressed + -- length: length of time key was held in seconds +end) +``` diff --git a/mods/controls/settingtypes.txt b/mods/controls/settingtypes.txt new file mode 100644 index 0000000..3407555 --- /dev/null +++ b/mods/controls/settingtypes.txt @@ -0,0 +1,2 @@ +# Enable debug mod for player controls. Sends chat messages to the player when callbacks are called. +controls_enable_debug (Enable debug mode) bool false diff --git a/mods/ctf_guns/LICENSE b/mods/ctf_guns/LICENSE new file mode 100644 index 0000000..e72bfdd --- /dev/null +++ b/mods/ctf_guns/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. \ No newline at end of file diff --git a/mods/ctf_guns/README.md b/mods/ctf_guns/README.md new file mode 100644 index 0000000..25b85d7 --- /dev/null +++ b/mods/ctf_guns/README.md @@ -0,0 +1,20 @@ +# Nate's CTF guns + +This mod combines the best parts of the guns from [Capture the Flag](https://github.com/MT-CTF/capturetheflag) by rubenwardy and Lone_Wolf with the best parts of davidthecreator's [rangedweapons](https://forum.minetest.net/viewtopic.php?t=15173) to create a gun mod for Minetest that is usable on both PVP servers and survival worlds. + +Also includes the "darkness_nerf" mod from capture the flag that makes players and item entities more visible in the dark. + +## Licenses + +- CTF by rubenwardy and Lone_Wolf: LGPLv2.1+ +- Rangedweapons by davidthecreator: CC-BY-SA-4.0 + +## Dependencies + +1. default +2. [Basic Materials](https://content.minetest.net/packages/VanessaE/basic_materials/) +3. [Controls](https://content.minetest.net/packages/BuckarooBanzay/controls/) + +## Optional dependencies + +If the mod [mobs\_mc](https://forum.minetest.net/viewtopic.php?t=17751) is installed, the crafting recipe for ammo will make use of mobs_mc:slimeballs. This is done to give slimeballs a purpose. diff --git a/mods/ctf_guns/ctf_core/cooldowns.lua b/mods/ctf_guns/ctf_core/cooldowns.lua new file mode 100644 index 0000000..e4f8519 --- /dev/null +++ b/mods/ctf_guns/ctf_core/cooldowns.lua @@ -0,0 +1,22 @@ +function ctf_core.init_cooldowns() + return { + players = {}, + set = function(self, player, time) + local pname = PlayerName(player) + + if self.players[pname] then + self.players[pname]:cancel() + + if not time then + self.players[pname] = nil + return + end + end + + self.players[pname] = minetest.after(time, function() self.players[pname] = nil end) + end, + get = function(self, player) + return self.players[PlayerName(player)] + end + } +end diff --git a/mods/ctf_guns/ctf_core/helpers.lua b/mods/ctf_guns/ctf_core/helpers.lua new file mode 100644 index 0000000..26cb2aa --- /dev/null +++ b/mods/ctf_guns/ctf_core/helpers.lua @@ -0,0 +1,189 @@ +-- +--- PLAYERS +-- + +do + local get_player_by_name = minetest.get_player_by_name + function PlayerObj(player) + local type = type(player) + + if type == "string" then + return get_player_by_name(player) + elseif type == "userdata" and player:is_player() then + return player + end + end + + function PlayerName(player) + local type = type(player) + + if type == "string" then + return player + elseif type == "userdata" and player:is_player() then + return player:get_player_name() + end + end +end + +-- +--- FORMSPECS +-- +-- If one of the callbacks for a submitted form returns true, do not process any +-- additional forms that were submitted. +-- This is commented out because it would require a lot of testing to ensure that this +-- doesn't break any non-CTF mods. + +--[[ +do + local registered_on_formspec_input = {} + function ctf_core.register_on_formspec_input(formname, func) + table.insert(registered_on_formspec_input, {formname = formname, call = func}) + end + -- Called when a form is submitted (e.g. pressing a button) + minetest.register_on_player_receive_fields(function(player, formname, fields, ...) + -- Loop over registered forms + for _, func in ipairs(registered_on_formspec_input) do + -- If the submitted form matches this form... + if formname:match(func.formname) then + -- Call the current form with the submitted input, and quit if it returns + -- "true" (Probably, this would indicate an error) + if func.call(PlayerName(player), formname, fields, ...) then + return + end + end + end + end) +end +]]-- + +-- +--- STRINGS +-- + +do + local format = string.format + local gsub = string.gsub + local upper = string.upper + local lower = string.lower + local remove = table.remove + local sort = table.sort + + function HumanReadable(input) + if not input then return input end + + local out + local t = type(input) + + if t == "string" then + out = gsub(input, "(%a)([%w'-]*)", function(a,b) return format("%s%s", upper(a), lower(b)) end) + + out = gsub(out, "_", " ") + elseif t == "table" then -- Only accepts lists + input = table.copy(input) + sort(input) + + if #input >= 2 then + local last = remove(input) + + for _, i in ipairs(input) do + out = format("%s%s, ", out or "", HumanReadable(i)) + end + + out = format("%sand %s", out, HumanReadable(last)) + else + out = HumanReadable(input[1]) or "[ERROR]" + end + end + + return out + end +end + +-- +--- TABLES +-- + +---@param funclist table +function RunCallbacks(funclist, ...) + for _, func in ipairs(funclist) do + local temp = func(...) + + if temp then + return temp + end + end +end + +-- +--- VECTORS/POSITIONS +-- + +do + local vsort = vector.sort + function ctf_core.pos_inside(pos, pos1, pos2) + pos1, pos2 = vsort(pos1, pos2) + + return pos.x >= pos1.x and pos.x <= pos2.x + and pos.y >= pos1.y and pos.y <= pos2.y + and pos.z >= pos1.z and pos.z <= pos2.z + end + + if not math.round then + local m_floor = math.floor + + function math.round(x) + return m_floor(x + 0.5) + end + end +end +-- +--- MISC +-- + +function ctf_core.register_chatcommand_alias(name, alias, def) + minetest.register_chatcommand(name, def) + if alias then + minetest.register_chatcommand(alias, { + description = "An alias for /" .. name, + func = def.func, + }) + end +end + +function ctf_core.file_exists(path) + local file = io.open(path, "r") + if file then + file:close() + return true + end + + return false +end + +-- +---Debug helpers +-- + +function ctf_core.error(area, msg) + minetest.log("error", "[CTF | " .. area .. "] " .. msg) +end + +function ctf_core.log(area, msg) + if area and area ~= "" then + minetest.log("info", "[CTF | " .. area .. "] " .. msg) + else + minetest.log("info", "[CTF]" .. msg) + end +end + +function ctf_core.action(area, msg) + if area and area ~= "" then + minetest.log("action", "[CaptureTheFlag] (" .. area .. ") " .. msg) + else + minetest.log("action", "[CaptureTheFlag] " .. msg) + end +end + +function ctf_core.warning(area, msg) + minetest.log("warning", "[CTF | " .. area .. "] " .. msg) +end diff --git a/mods/ctf_guns/ctf_core/init.lua b/mods/ctf_guns/ctf_core/init.lua new file mode 100644 index 0000000..4fd416f --- /dev/null +++ b/mods/ctf_guns/ctf_core/init.lua @@ -0,0 +1,29 @@ +ctf_core = { + settings = { + -- server_mode = minetest.settings:get("ctf_server_mode") or "play", + server_mode = minetest.settings:get_bool("creative_mode", false) and "mapedit" or "play", + } +} + +---@param files table +-- Returns dofile() return values in order that files are given +-- +-- Example: local f1, f2 = ctf_core.include_files("file1", "file2") +function ctf_core.include_files(...) + local PATH = minetest.get_modpath(minetest.get_current_modname()) .. "/" + local returns = {} + + for _, file in pairs({...}) do + for _, value in pairs{dofile(PATH .. file)} do + table.insert(returns, value) + end + end + + return unpack(returns) +end + +ctf_core.include_files( + "helpers.lua", + "privileges.lua", + "cooldowns.lua" +) diff --git a/mods/ctf_guns/ctf_core/mod.conf b/mods/ctf_guns/ctf_core/mod.conf new file mode 100644 index 0000000..d86fed9 --- /dev/null +++ b/mods/ctf_guns/ctf_core/mod.conf @@ -0,0 +1 @@ +name = ctf_core diff --git a/mods/ctf_guns/ctf_core/privileges.lua b/mods/ctf_guns/ctf_core/privileges.lua new file mode 100644 index 0000000..573ce75 --- /dev/null +++ b/mods/ctf_guns/ctf_core/privileges.lua @@ -0,0 +1,5 @@ +minetest.register_privilege("ctf_admin", { + description = "Manage administrative ctf settings/commands.", + give_to_singleplayer = false, + give_to_admin = false, +}) diff --git a/mods/ctf_guns/ctf_ranged/custom_controls.lua b/mods/ctf_guns/ctf_ranged/custom_controls.lua new file mode 100644 index 0000000..2b0d71c --- /dev/null +++ b/mods/ctf_guns/ctf_ranged/custom_controls.lua @@ -0,0 +1,60 @@ +-- ctf_range/custom_controls.lua + +local player_scope_huds = {} +local player_nominal_zooms = {} + +local old_binoculars_update + +local function binoculars_override(player) + local new_zoom_fov = 0 + local w_item = player:get_wielded_item() + local scope_zoom = w_item:get_definition().ctf_guns_scope_zoom + + if scope_zoom == nil then + -- No gun equipped? check for binoculars + if old_binoculars_update ~= nil then + old_binoculars_update(player) + end + return + end + + -- Only set property if necessary to avoid player mesh reload + if player:get_properties().zoom_fov ~= scope_zoom then + player:set_properties({zoom_fov = scope_zoom}) + return + end + + +end + +minetest.register_on_mods_loaded(function() + if minetest.get_modpath("binoculars") then + old_binoculars_update = binoculars.update_player_property + binoculars.update_player_property = binoculars_override + end + + controls.register_on_press(function(player, control_name) + if control_name ~= "zoom" then + return + end + binoculars_override(player) + end) + controls.register_on_release(function(player, control_name, time) + if control_name ~= "zoom" then + return + end + binoculars_override(player) + end) + +end) + +minetest.register_on_joinplayer(function(player) + player_scope_huds[player:get_player_name()] = player:hud_add({ + hud_elem_type = "image", + alignment = { x=0.0, y=0.0 }, + position = {x = 0.5, y = 0.5}, + scale = { x=2, y=2 }, + text = "rangedweapons_empty_icon.png", + }) +end) + diff --git a/mods/ctf_guns/ctf_ranged/energy_gen.lua b/mods/ctf_guns/ctf_ranged/energy_gen.lua new file mode 100644 index 0000000..80bc33b --- /dev/null +++ b/mods/ctf_guns/ctf_ranged/energy_gen.lua @@ -0,0 +1,88 @@ + +local side = "rangedweapons_generator_side.png" + +minetest.register_node("ctf_ranged:energy_gen", { + short_description = "Energy Generator", + description = "Energy Generator\nPunch to collect Energy Charges", + tiles = { + "rangedweapons_generator_top.png", -- y+ + "rangedweapons_generator_bottom.png", -- y- + side, -- x+ + side, -- x- + side, -- z+ + side, -- z- + }, + is_ground_content = false, + groups = {cracky = 3, oddly_breakable_by_hand = 3}, + drop = "ctf_ranged:energy_gen", + on_construct = function (pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "Energy Generator") + meta:set_string("formspec", "") + local inv = meta:get_inventory() + inv:set_size("main", 1) + local timer = minetest.get_node_timer(pos) + timer:start(3.0) + end, + on_timer = function (pos, elapsed) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + + if inv:room_for_item("main", "ctf_ranged:echarge") then + inv:add_item("main", ItemStack("ctf_ranged:echarge 1")) + end + + local size = 0 + if inv:contains_item("main", "ctf_ranged:echarge") then + local s = inv:remove_item("main", "ctf_ranged:echarge 99") + if s then + size = s:get_count() + --minetest.log("action", "[ctf_ranged] "..s:get_name().." "..tostring(s:get_count())) + inv:add_item("main", ItemStack(s:get_name().." "..tostring(s:get_count()))) + end + end + + if size ~= 0 then + meta:set_string("infotext", "Energy Generator ("..tostring(size)..")") + else + meta:set_string("infotext", "Energy Generator") + end + + return true + end, + on_punch = function (pos, node, puncher, pointed_thing) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + + local size = 0 + + if inv:contains_item("main", "ctf_ranged:echarge") then + local s = inv:remove_item("main", "ctf_ranged:echarge 99") + if s then + size = s:get_count() + end + end + + if size ~= 0 then + meta:set_string("infotext", "Energy Generator ("..tostring(size)..")") + else + meta:set_string("infotext", "Energy Generator") + end + + if size ~= 0 then + local pinv = puncher:get_inventory() + pinv:add_item("main", ItemStack("ctf_ranged:echarge "..tostring(size))) + end + end +}) + +if ctf_ranged.settings.craft_energy_weapons == true then + minetest.register_craft({ + output = "ctf_ranged:energy_gen", + recipe = { + {"", "default:diamond", ""}, + {"default:diamond", "", "default:diamond"}, + {"ctf_ranged:gunparte", "default:diamond", "ctf_ranged:gunparte"} + } + }) +end diff --git a/mods/ctf_guns/ctf_ranged/init.lua b/mods/ctf_guns/ctf_ranged/init.lua new file mode 100644 index 0000000..117c3ae --- /dev/null +++ b/mods/ctf_guns/ctf_ranged/init.lua @@ -0,0 +1,12 @@ +-- ctf_ranged/init.lua + +local modpath = minetest.get_modpath("ctf_ranged") + +ctf_ranged = {} + +dofile(modpath.."/settings.lua") +dofile(modpath.."/wep_logic.lua") +dofile(modpath.."/wep_defns.lua") +dofile(modpath.."/wep_recipes.lua") +dofile(modpath.."/custom_controls.lua") +dofile(modpath.."/energy_gen.lua") diff --git a/mods/ctf_guns/ctf_ranged/mod.conf b/mods/ctf_guns/ctf_ranged/mod.conf new file mode 100644 index 0000000..906836c --- /dev/null +++ b/mods/ctf_guns/ctf_ranged/mod.conf @@ -0,0 +1,3 @@ +name = ctf_ranged +depends = ctf_core, rawf, controls, grenades +optional_depends=mobs_mc, mcl_core, mcl_copper diff --git a/mods/ctf_guns/ctf_ranged/readme.md b/mods/ctf_guns/ctf_ranged/readme.md new file mode 100644 index 0000000..e69de29 diff --git a/mods/ctf_guns/ctf_ranged/settings.lua b/mods/ctf_guns/ctf_ranged/settings.lua new file mode 100644 index 0000000..5b8d94d --- /dev/null +++ b/mods/ctf_guns/ctf_ranged/settings.lua @@ -0,0 +1,45 @@ +ctf_ranged.settings = {} +local settings = ctf_ranged.settings + +--[[ + Settings via `minetest.conf` + Includes if it doesn't exist then make it exist +]] + +-- Crafting +settings.craft_gunparts = minetest.settings:get_bool("ctf_guns.craft_gunparts") +if settings.craft_gunparts == nil then + settings.craft_gunparts = true + -- Allow it to be changed in 1 spot + minetest.settings:set_bool("ctf_guns.craft_gunparts", settings.craft_gunparts) +end + +settings.craft_ammo = minetest.settings:get_bool("ctf_guns.craft_ammo") +if settings.craft_ammo == nil then + settings.craft_ammo = true + minetest.settings:set_bool("ctf_guns.craft_ammo", settings.craft_ammo) +end + +settings.craft_tier1_weapons = minetest.settings:get_bool("ctf_guns.craft_tier1_weapons") +if settings.craft_tier1_weapons == nil then + settings.craft_tier1_weapons = true + minetest.settings:set_bool("ctf_guns.craft_tier1_weapons", settings.craft_tier1_weapons) +end + +settings.craft_tier2_weapons = minetest.settings:get_bool("ctf_guns.craft_tier2_weapons") +if settings.craft_tier2_weapons == nil then + settings.craft_tier2_weapons = true + minetest.settings:set_bool("ctf_guns.craft_tier2_weapons", settings.craft_tier2_weapons) +end + +settings.craft_tier3_weapons = minetest.settings:get_bool("ctf_guns.craft_tier3_weapons") +if settings.craft_tier3_weapons == nil then + settings.craft_tier3_weapons = true + minetest.settings:set_bool("ctf_guns.craft_tier3_weapons", settings.craft_tier3_weapons) +end + +settings.craft_energy_weapons = minetest.settings:get_bool("ctf_guns.craft_energy_weapons") +if settings.craft_energy_weapons == nil then + settings.craft_energy_weapons = true + minetest.settings:set_bool("ctf_guns.craft_energy_weapons", settings.craft_energy_weapons) +end diff --git a/mods/ctf_guns/ctf_ranged/settingtypes.txt b/mods/ctf_guns/ctf_ranged/settingtypes.txt new file mode 100644 index 0000000..9eac6cf --- /dev/null +++ b/mods/ctf_guns/ctf_ranged/settingtypes.txt @@ -0,0 +1,14 @@ + +[Crafting] + +ctf_guns.craft_gunparts (Craft Gunparts) bool true + +ctf_guns.craft_ammo (Craft Ammo) bool true + +ctf_guns.craft_tier1_weapons (Craft Tier 1 Weapons) bool true + +ctf_guns.craft_tier2_weapons (Craft Tier 2 Weapons) bool true + +ctf_guns.craft_tier3_weapons (Craft Tier 3 Weapons) bool true + +ctf_guns.craft_energy_weapons (Craft Energy Weapons) bool true diff --git a/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_ashotfir.ogg b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_ashotfir.ogg new file mode 100644 index 0000000..87fb293 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_ashotfir.ogg differ diff --git a/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_click.ogg b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_click.ogg new file mode 100644 index 0000000..a5d1243 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_click.ogg differ diff --git a/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_deagle.ogg b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_deagle.ogg new file mode 100644 index 0000000..2a312df Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_deagle.ogg differ diff --git a/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_dzap.ogg b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_dzap.ogg new file mode 100644 index 0000000..89fc526 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_dzap.ogg differ diff --git a/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_explode.ogg b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_explode.ogg new file mode 100644 index 0000000..736c383 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_explode.ogg differ diff --git a/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_m16fire.ogg b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_m16fire.ogg new file mode 100644 index 0000000..ec868c0 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_m16fire.ogg differ diff --git a/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_m60fire.ogg b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_m60fire.ogg new file mode 100644 index 0000000..f902b1d Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_m60fire.ogg differ diff --git a/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_mk23fire.ogg b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_mk23fire.ogg new file mode 100644 index 0000000..db3db4b Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_mk23fire.ogg differ diff --git a/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_mp5fire.ogg b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_mp5fire.ogg new file mode 100644 index 0000000..c42d9f0 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_mp5fire.ogg differ diff --git a/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_pdudegun.ogg b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_pdudegun.ogg new file mode 100644 index 0000000..6f2bade Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_pdudegun.ogg differ diff --git a/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_pistol.ogg b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_pistol.ogg new file mode 100644 index 0000000..0d3f464 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_pistol.ogg differ diff --git a/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_plasma.ogg b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_plasma.ogg new file mode 100644 index 0000000..8d6c83e Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_plasma.ogg differ diff --git a/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_reload.ogg b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_reload.ogg new file mode 100644 index 0000000..47f7245 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_reload.ogg differ diff --git a/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_rifle.ogg b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_rifle.ogg new file mode 100644 index 0000000..1ea68bf Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_rifle.ogg differ diff --git a/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_rocket_fire.ogg b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_rocket_fire.ogg new file mode 100644 index 0000000..57252f3 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_rocket_fire.ogg differ diff --git a/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_shotgun.ogg b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_shotgun.ogg new file mode 100644 index 0000000..1171b78 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_shotgun.ogg differ diff --git a/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_terrgun.wav b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_terrgun.wav new file mode 100644 index 0000000..0863606 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_terrgun.wav differ diff --git a/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_throw.ogg b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_throw.ogg new file mode 100644 index 0000000..9ce9176 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/sounds/ctf_ranged_throw.ogg differ diff --git a/mods/ctf_guns/ctf_ranged/sounds/license.txt b/mods/ctf_guns/ctf_ranged/sounds/license.txt new file mode 100644 index 0000000..a5f583a --- /dev/null +++ b/mods/ctf_guns/ctf_ranged/sounds/license.txt @@ -0,0 +1,21 @@ +Sounds were taken from the shooter mod. Relevant section from its license.txt: + +License Sounds: freesound.org + + flobert1_20070728.wav by Nonoo - Attribution 3.0 Unported (CC BY 3.0) + + shot.wav by Sergenious - Attribution 3.0 Unported (CC BY 3.0) + + GUNSHOT.WAV by erkanozan - CC0 1.0 Universal (CC0 1.0) + + winchester-rifle-cock-reload.wav by MentalSanityOff - CC0 1.0 Universal (CC0 1.0) + + trigger-with-hammer-fall.wav by Nanashi - CC0 1.0 Universal (CC0 1.0) + + woosh.wav by ReadeOnly - CC0 1.0 Universal (CC0 1.0) + + AGM-114 Hellfire Rocket Missile Launch.flac by qubodup - CC0 1.0 Universal (CC0 1.0) + + Sparkler.aif by Ned Bouhalassa - CC0 1.0 Universal (CC0 1.0) + + explosion10.wav by V-ktor - CC0 1.0 Universal (CC0 1.0) \ No newline at end of file diff --git a/mods/ctf_guns/ctf_ranged/textures/ctf_ranged_ammo.png b/mods/ctf_guns/ctf_ranged/textures/ctf_ranged_ammo.png new file mode 100644 index 0000000..daa348e Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/ctf_ranged_ammo.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/ctf_ranged_bullet.png b/mods/ctf_guns/ctf_ranged/textures/ctf_ranged_bullet.png new file mode 100644 index 0000000..ddcae5f Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/ctf_ranged_bullet.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/ctf_ranged_bullethole.png b/mods/ctf_guns/ctf_ranged/textures/ctf_ranged_bullethole.png new file mode 100644 index 0000000..4fb8b04 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/ctf_ranged_bullethole.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/ctf_ranged_eammo.png b/mods/ctf_guns/ctf_ranged/textures/ctf_ranged_eammo.png new file mode 100644 index 0000000..2e68ee9 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/ctf_ranged_eammo.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/ctf_ranged_ebullet.png b/mods/ctf_guns/ctf_ranged/textures/ctf_ranged_ebullet.png new file mode 100644 index 0000000..b2e301e Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/ctf_ranged_ebullet.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/ctf_ranged_ebullethole.png b/mods/ctf_guns/ctf_ranged/textures/ctf_ranged_ebullethole.png new file mode 100644 index 0000000..57fb12e Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/ctf_ranged_ebullethole.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/ctf_ranged_echarge.png b/mods/ctf_guns/ctf_ranged/textures/ctf_ranged_echarge.png new file mode 100644 index 0000000..65ce70f Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/ctf_ranged_echarge.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/ctf_ranged_milkor_apollo.png b/mods/ctf_guns/ctf_ranged/textures/ctf_ranged_milkor_apollo.png new file mode 100644 index 0000000..e151f49 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/ctf_ranged_milkor_apollo.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/ctf_ranged_mini14.png b/mods/ctf_guns/ctf_ranged/textures/ctf_ranged_mini14.png new file mode 100644 index 0000000..45a0822 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/ctf_ranged_mini14.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/license.txt b/mods/ctf_guns/ctf_ranged/textures/license.txt new file mode 100644 index 0000000..63c812b --- /dev/null +++ b/mods/ctf_guns/ctf_ranged/textures/license.txt @@ -0,0 +1,6 @@ +LoneWolfHT, CC-BY 4.0 + * ctf_ranged_bullethole.png + * ctf_ranged_bullet.png + +Stuart Jones - CC0 1.0 Universal (CC0 1.0) + * All the other textures in the folder \ No newline at end of file diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_10mm.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_10mm.png new file mode 100644 index 0000000..327827f Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_10mm.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_308winchester.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_308winchester.png new file mode 100644 index 0000000..6b3f0d0 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_308winchester.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_357.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_357.png new file mode 100644 index 0000000..3994395 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_357.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_408cheytac.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_408cheytac.png new file mode 100644 index 0000000..c331948 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_408cheytac.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_40mm.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_40mm.png new file mode 100644 index 0000000..3be4ff0 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_40mm.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_44.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_44.png new file mode 100644 index 0000000..c9acbc3 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_44.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_45acp.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_45acp.png new file mode 100644 index 0000000..d377215 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_45acp.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_50ae.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_50ae.png new file mode 100644 index 0000000..b586818 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_50ae.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_556mm.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_556mm.png new file mode 100644 index 0000000..c7c0773 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_556mm.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_762mm.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_762mm.png new file mode 100644 index 0000000..1e60138 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_762mm.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_9mm.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_9mm.png new file mode 100644 index 0000000..11204f4 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_9mm.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_aa12.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_aa12.png new file mode 100644 index 0000000..b2d8c2f Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_aa12.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_aa12_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_aa12_icon.png new file mode 100644 index 0000000..ba0c48e Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_aa12_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_aa12_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_aa12_rld.png new file mode 100644 index 0000000..e3d1ea7 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_aa12_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ak47.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ak47.png new file mode 100644 index 0000000..51da45e Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ak47.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ak47_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ak47_icon.png new file mode 100644 index 0000000..7f0b70c Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ak47_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ak47_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ak47_rld.png new file mode 100644 index 0000000..fc54533 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ak47_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_antigun_block.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_antigun_block.png new file mode 100644 index 0000000..9e87ea0 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_antigun_block.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_arifle_img.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_arifle_img.png new file mode 100644 index 0000000..bba65ba Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_arifle_img.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_assaultrifle_mag.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_assaultrifle_mag.png new file mode 100644 index 0000000..58236ae Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_assaultrifle_mag.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_awp.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_awp.png new file mode 100644 index 0000000..e439b92 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_awp.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_awp_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_awp_icon.png new file mode 100644 index 0000000..80c3272 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_awp_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_awp_noclip.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_awp_noclip.png new file mode 100644 index 0000000..5825b87 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_awp_noclip.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_awp_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_awp_rld.png new file mode 100644 index 0000000..7529171 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_awp_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_barrel_side.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_barrel_side.png new file mode 100644 index 0000000..205abd9 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_barrel_side.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_barrel_top.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_barrel_top.png new file mode 100644 index 0000000..3367945 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_barrel_top.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_benelli.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_benelli.png new file mode 100644 index 0000000..0200ef5 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_benelli.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_benelli_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_benelli_icon.png new file mode 100644 index 0000000..eb575cd Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_benelli_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_benelli_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_benelli_rld.png new file mode 100644 index 0000000..19db4df Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_benelli_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_beretta.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_beretta.png new file mode 100644 index 0000000..5c74455 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_beretta.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_beretta_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_beretta_icon.png new file mode 100644 index 0000000..b1309f4 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_beretta_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_beretta_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_beretta_rld.png new file mode 100644 index 0000000..a10d2f4 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_beretta_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_blood.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_blood.png new file mode 100644 index 0000000..af6acec Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_blood.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_blood_alt.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_blood_alt.png new file mode 100644 index 0000000..89c84b2 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_blood_alt.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_blue_ray.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_blue_ray.png new file mode 100644 index 0000000..96e1eb5 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_blue_ray.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_boltaction_img.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_boltaction_img.png new file mode 100644 index 0000000..ee655bb Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_boltaction_img.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_broken_glass.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_broken_glass.png new file mode 100644 index 0000000..2cc40f0 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_broken_glass.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_bronze_shuriken.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_bronze_shuriken.png new file mode 100644 index 0000000..7e46465 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_bronze_shuriken.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_buckball.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_buckball.png new file mode 100644 index 0000000..342f442 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_buckball.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_bullet_fly.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_bullet_fly.png new file mode 100644 index 0000000..3e31b6b Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_bullet_fly.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_bullethole.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_bullethole.png new file mode 100644 index 0000000..ea8ba84 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_bullethole.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_bulletshot.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_bulletshot.png new file mode 100644 index 0000000..dddfa81 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_bulletshot.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_crit.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_crit.png new file mode 100644 index 0000000..c2ee63f Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_crit.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_crithit.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_crithit.png new file mode 100644 index 0000000..6524d99 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_crithit.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_deagle.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_deagle.png new file mode 100644 index 0000000..50f1d6c Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_deagle.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_deagle_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_deagle_icon.png new file mode 100644 index 0000000..8a07591 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_deagle_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_deagle_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_deagle_rld.png new file mode 100644 index 0000000..df7931d Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_deagle_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_diamond_shuriken.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_diamond_shuriken.png new file mode 100644 index 0000000..f00bd6d Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_diamond_shuriken.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_drum_mag.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_drum_mag.png new file mode 100644 index 0000000..0aa64db Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_drum_mag.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_electroball.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_electroball.png new file mode 100644 index 0000000..02e1240 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_electroball.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_emergency_ammo_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_emergency_ammo_icon.png new file mode 100644 index 0000000..cb6c690 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_emergency_ammo_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_emergency_gun_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_emergency_gun_icon.png new file mode 100644 index 0000000..11d4760 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_emergency_gun_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_empty_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_empty_icon.png new file mode 100644 index 0000000..ae7ff3f Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_empty_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_empty_shell.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_empty_shell.png new file mode 100644 index 0000000..5751af1 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_empty_shell.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_energycharge.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_energycharge.png new file mode 100644 index 0000000..22ac37b Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_energycharge.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_fire_particle.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_fire_particle.png new file mode 100644 index 0000000..2a0ddd3 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_fire_particle.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_force_blast.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_force_blast.png new file mode 100644 index 0000000..4a48712 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_force_blast.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_force_bullet.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_force_bullet.png new file mode 100644 index 0000000..57f23f9 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_force_bullet.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_forcegun.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_forcegun.png new file mode 100644 index 0000000..93e827f Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_forcegun.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_g11.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_g11.png new file mode 100644 index 0000000..d5b3384 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_g11.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_g36.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_g36.png new file mode 100644 index 0000000..d7473c1 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_g36.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_g36_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_g36_icon.png new file mode 100644 index 0000000..46ea728 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_g36_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_g36_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_g36_rld.png new file mode 100644 index 0000000..c7af1f5 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_g36_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_generator_bottom.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_generator_bottom.png new file mode 100644 index 0000000..f85dbe8 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_generator_bottom.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_generator_side.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_generator_side.png new file mode 100644 index 0000000..97ab78b Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_generator_side.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_generator_top.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_generator_top.png new file mode 100644 index 0000000..61e53a1 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_generator_top.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_glass_shards.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_glass_shards.png new file mode 100644 index 0000000..8699426 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_glass_shards.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_glock17.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_glock17.png new file mode 100644 index 0000000..7f8d3a7 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_glock17.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_glock17_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_glock17_icon.png new file mode 100644 index 0000000..1e29029 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_glock17_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_glock17_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_glock17_rld.png new file mode 100644 index 0000000..84f386f Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_glock17_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_golden_deagle.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_golden_deagle.png new file mode 100644 index 0000000..bf517d6 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_golden_deagle.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_golden_deagle_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_golden_deagle_icon.png new file mode 100644 index 0000000..03a109e Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_golden_deagle_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_golden_deagle_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_golden_deagle_rld.png new file mode 100644 index 0000000..b68ca20 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_golden_deagle_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_golden_shuriken.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_golden_shuriken.png new file mode 100644 index 0000000..3e52e0a Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_golden_shuriken.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_green_ray.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_green_ray.png new file mode 100644 index 0000000..1093b76 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_green_ray.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_gun_power_core.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_gun_power_core.png new file mode 100644 index 0000000..67f3012 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_gun_power_core.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_gunpart1.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_gunpart1.png new file mode 100644 index 0000000..aa6d367 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_gunpart1.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_gunpart2.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_gunpart2.png new file mode 100644 index 0000000..7c6a9f4 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_gunpart2.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_gunpart3.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_gunpart3.png new file mode 100644 index 0000000..67b4479 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_gunpart3.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_gunsteel_ingot.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_gunsteel_ingot.png new file mode 100644 index 0000000..565df6f Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_gunsteel_ingot.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_hand_grenade.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_hand_grenade.png new file mode 100644 index 0000000..334d3c7 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_hand_grenade.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_hand_grenade_nopin.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_hand_grenade_nopin.png new file mode 100644 index 0000000..2c76632 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_hand_grenade_nopin.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_handgun_img.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_handgun_img.png new file mode 100644 index 0000000..24dcea1 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_handgun_img.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_handgun_mag_black.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_handgun_mag_black.png new file mode 100644 index 0000000..236cdee Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_handgun_mag_black.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_handgun_mag_white.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_handgun_mag_white.png new file mode 100644 index 0000000..7bd3425 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_handgun_mag_white.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_headhit.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_headhit.png new file mode 100644 index 0000000..705a9aa Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_headhit.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_headshot.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_headshot.png new file mode 100644 index 0000000..03384df Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_headshot.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_heavy_img.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_heavy_img.png new file mode 100644 index 0000000..610f22c Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_heavy_img.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_hit.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_hit.png new file mode 100644 index 0000000..97db97b Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_hit.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_invisible.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_invisible.png new file mode 100644 index 0000000..91aa779 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_invisible.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_jackhammer.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_jackhammer.png new file mode 100644 index 0000000..99a41e4 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_jackhammer.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_jackhammer_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_jackhammer_icon.png new file mode 100644 index 0000000..f5cb670 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_jackhammer_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_jackhammer_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_jackhammer_rld.png new file mode 100644 index 0000000..4712020 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_jackhammer_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_javelin.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_javelin.png new file mode 100644 index 0000000..5e8cd6d Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_javelin.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_kriss_sv.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_kriss_sv.png new file mode 100644 index 0000000..150cc9c Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_kriss_sv.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_kriss_sv_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_kriss_sv_icon.png new file mode 100644 index 0000000..5ee40c0 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_kriss_sv_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_kriss_sv_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_kriss_sv_rld.png new file mode 100644 index 0000000..62e6879 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_kriss_sv_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_laser_blaster.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_laser_blaster.png new file mode 100644 index 0000000..4efc420 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_laser_blaster.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_laser_rifle.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_laser_rifle.png new file mode 100644 index 0000000..237121a Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_laser_rifle.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_laser_shotgun.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_laser_shotgun.png new file mode 100644 index 0000000..0abdce5 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_laser_shotgun.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_leaf.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_leaf.png new file mode 100644 index 0000000..ac228fd Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_leaf.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_luger.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_luger.png new file mode 100644 index 0000000..bf53dcc Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_luger.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_luger_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_luger_icon.png new file mode 100644 index 0000000..2b4dccc Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_luger_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_luger_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_luger_rld.png new file mode 100644 index 0000000..ed932d1 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_luger_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m16.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m16.png new file mode 100644 index 0000000..07e8301 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m16.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m16_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m16_icon.png new file mode 100644 index 0000000..6fa3218 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m16_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m16_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m16_rld.png new file mode 100644 index 0000000..c8f70ea Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m16_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m1991.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m1991.png new file mode 100644 index 0000000..0644871 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m1991.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m1991_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m1991_icon.png new file mode 100644 index 0000000..382d943 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m1991_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m1991_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m1991_rld.png new file mode 100644 index 0000000..1ca14f7 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m1991_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m200.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m200.png new file mode 100644 index 0000000..f68fbbe Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m200.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m200_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m200_icon.png new file mode 100644 index 0000000..b122838 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m200_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m200_noclip.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m200_noclip.png new file mode 100644 index 0000000..eec6971 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m200_noclip.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m200_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m200_rld.png new file mode 100644 index 0000000..583f258 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m200_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m60.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m60.png new file mode 100644 index 0000000..d2a4c77 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m60.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m60_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m60_icon.png new file mode 100644 index 0000000..8acc084 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m60_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m60_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m60_rld.png new file mode 100644 index 0000000..b0aff91 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m60_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m79.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m79.png new file mode 100644 index 0000000..d7e5b4e Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m79.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m79_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m79_icon.png new file mode 100644 index 0000000..988c3f2 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m79_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m79_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m79_rld.png new file mode 100644 index 0000000..56ebae4 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_m79_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_machinepistol_img.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_machinepistol_img.png new file mode 100644 index 0000000..353df2d Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_machinepistol_img.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_machinepistol_mag.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_machinepistol_mag.png new file mode 100644 index 0000000..f473cda Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_machinepistol_mag.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_magazine_handgun.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_magazine_handgun.png new file mode 100644 index 0000000..a27f5ca Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_magazine_handgun.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_magazine_mp5.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_magazine_mp5.png new file mode 100644 index 0000000..e440b3e Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_magazine_mp5.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_magazine_smg.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_magazine_smg.png new file mode 100644 index 0000000..478baab Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_magazine_smg.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_makarov.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_makarov.png new file mode 100644 index 0000000..b085b4f Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_makarov.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_makarov_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_makarov_icon.png new file mode 100644 index 0000000..a9e5668 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_makarov_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_makarov_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_makarov_rld.png new file mode 100644 index 0000000..ada698c Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_makarov_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_mese_shuriken.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_mese_shuriken.png new file mode 100644 index 0000000..8126952 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_mese_shuriken.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_milkor.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_milkor.png new file mode 100644 index 0000000..16d70b9 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_milkor.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_milkor_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_milkor_icon.png new file mode 100644 index 0000000..99677f4 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_milkor_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_milkor_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_milkor_rld.png new file mode 100644 index 0000000..7a5292d Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_milkor_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_minigun.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_minigun.png new file mode 100644 index 0000000..fa2847b Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_minigun.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_minigun_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_minigun_icon.png new file mode 100644 index 0000000..3935f72 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_minigun_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_minigun_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_minigun_rld.png new file mode 100644 index 0000000..3881e9a Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_minigun_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_mp40.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_mp40.png new file mode 100644 index 0000000..7126e61 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_mp40.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_mp40_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_mp40_icon.png new file mode 100644 index 0000000..c7171c6 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_mp40_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_mp40_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_mp40_rld.png new file mode 100644 index 0000000..4e01ec0 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_mp40_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_mp5.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_mp5.png new file mode 100644 index 0000000..ca22dd1 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_mp5.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_mp5_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_mp5_icon.png new file mode 100644 index 0000000..247f868 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_mp5_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_mp5_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_mp5_rld.png new file mode 100644 index 0000000..e4c519e Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_mp5_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_pin.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_pin.png new file mode 100644 index 0000000..50cb95b Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_pin.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_plastic_sheet.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_plastic_sheet.png new file mode 100644 index 0000000..f25c8ef Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_plastic_sheet.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_power_particle.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_power_particle.png new file mode 100644 index 0000000..8309290 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_power_particle.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_python.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_python.png new file mode 100644 index 0000000..f58f0e9 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_python.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_python_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_python_icon.png new file mode 100644 index 0000000..e23c7d5 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_python_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_python_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_python_rld.png new file mode 100644 index 0000000..5305456 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_python_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ray_blue.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ray_blue.png new file mode 100644 index 0000000..f9771b4 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ray_blue.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ray_green.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ray_green.png new file mode 100644 index 0000000..91bf907 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ray_green.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ray_red.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ray_red.png new file mode 100644 index 0000000..89b41d6 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ray_red.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_red_ray.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_red_ray.png new file mode 100644 index 0000000..4deb76b Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_red_ray.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_remington.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_remington.png new file mode 100644 index 0000000..5c0a23f Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_remington.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_remington_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_remington_icon.png new file mode 100644 index 0000000..587576f Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_remington_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_remington_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_remington_rld.png new file mode 100644 index 0000000..d32e9f2 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_remington_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_revolver_img.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_revolver_img.png new file mode 100644 index 0000000..96ea77d Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_revolver_img.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rifle_img.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rifle_img.png new file mode 100644 index 0000000..ee655bb Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rifle_img.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rifle_mag.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rifle_mag.png new file mode 100644 index 0000000..60fc871 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rifle_mag.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rifleshot.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rifleshot.png new file mode 100644 index 0000000..e0033e4 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rifleshot.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rocket.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rocket.png new file mode 100644 index 0000000..5e7d01a Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rocket.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rocket_fly.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rocket_fly.png new file mode 100644 index 0000000..00e80db Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rocket_fly.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rocket_fly_alternate.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rocket_fly_alternate.png new file mode 100644 index 0000000..a267f7f Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rocket_fly_alternate.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rpg.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rpg.png new file mode 100644 index 0000000..bdec5a7 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rpg.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rpg_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rpg_icon.png new file mode 100644 index 0000000..f1df51c Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rpg_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rpg_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rpg_rld.png new file mode 100644 index 0000000..9d209d0 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rpg_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rpk.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rpk.png new file mode 100644 index 0000000..7f2c0c4 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rpk.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rpk_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rpk_icon.png new file mode 100644 index 0000000..9495ba2 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rpk_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rpk_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rpk_rld.png new file mode 100644 index 0000000..b9a80fd Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_rpk_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_scar.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_scar.png new file mode 100644 index 0000000..8e5c987 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_scar.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_scar_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_scar_icon.png new file mode 100644 index 0000000..47d40c4 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_scar_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_scar_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_scar_rld.png new file mode 100644 index 0000000..097b01c Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_scar_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_scopehud.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_scopehud.png new file mode 100644 index 0000000..aa523df Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_scopehud.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_shell.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_shell.png new file mode 100644 index 0000000..b6a6874 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_shell.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_shelldrop.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_shelldrop.png new file mode 100644 index 0000000..cd86136 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_shelldrop.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_shelldrop_grenade.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_shelldrop_grenade.png new file mode 100644 index 0000000..7892447 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_shelldrop_grenade.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_shelldrop_shotgun.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_shelldrop_shotgun.png new file mode 100644 index 0000000..cf829fd Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_shelldrop_shotgun.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_shelldrop_white.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_shelldrop_white.png new file mode 100644 index 0000000..57de44c Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_shelldrop_white.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_shotgun_img.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_shotgun_img.png new file mode 100644 index 0000000..bb2754c Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_shotgun_img.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_smg_img.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_smg_img.png new file mode 100644 index 0000000..edba557 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_smg_img.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_spark.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_spark.png new file mode 100644 index 0000000..f372cdc Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_spark.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_spas12.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_spas12.png new file mode 100644 index 0000000..9fdcfba Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_spas12.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_spas12_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_spas12_icon.png new file mode 100644 index 0000000..9543646 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_spas12_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_spas12_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_spas12_rld.png new file mode 100644 index 0000000..778b61f Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_spas12_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_squirtgun.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_squirtgun.png new file mode 100644 index 0000000..e00514c Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_squirtgun.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_squirtgun_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_squirtgun_rld.png new file mode 100644 index 0000000..1886440 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_squirtgun_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_sriffle_img.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_sriffle_img.png new file mode 100644 index 0000000..54fd2c6 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_sriffle_img.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_steel_shuriken.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_steel_shuriken.png new file mode 100644 index 0000000..abdda91 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_steel_shuriken.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_stone_shuriken.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_stone_shuriken.png new file mode 100644 index 0000000..6ddb3fa Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_stone_shuriken.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_svd.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_svd.png new file mode 100644 index 0000000..d21efb9 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_svd.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_svd_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_svd_icon.png new file mode 100644 index 0000000..2785999 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_svd_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_svd_noclip.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_svd_noclip.png new file mode 100644 index 0000000..a541e97 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_svd_noclip.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_svd_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_svd_rld.png new file mode 100644 index 0000000..28722bb Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_svd_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_taurus.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_taurus.png new file mode 100644 index 0000000..1f09a73 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_taurus.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_taurus_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_taurus_icon.png new file mode 100644 index 0000000..686dbc4 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_taurus_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_taurus_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_taurus_rld.png new file mode 100644 index 0000000..a53d8b5 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_taurus_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_tec9.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_tec9.png new file mode 100644 index 0000000..692f409 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_tec9.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_tec9_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_tec9_icon.png new file mode 100644 index 0000000..012d112 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_tec9_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_tec9_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_tec9_rld.png new file mode 100644 index 0000000..6cae31d Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_tec9_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_thompson.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_thompson.png new file mode 100644 index 0000000..afec2d4 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_thompson.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_thompson_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_thompson_icon.png new file mode 100644 index 0000000..61e942e Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_thompson_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_thompson_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_thompson_rld.png new file mode 100644 index 0000000..d0dff23 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_thompson_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_thrown_javelin.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_thrown_javelin.png new file mode 100644 index 0000000..08f397c Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_thrown_javelin.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_tmp.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_tmp.png new file mode 100644 index 0000000..e3b537e Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_tmp.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_tmp_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_tmp_icon.png new file mode 100644 index 0000000..72ecc72 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_tmp_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_tmp_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_tmp_rld.png new file mode 100644 index 0000000..ce36a46 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_tmp_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ultra_gunsteel_ingot.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ultra_gunsteel_ingot.png new file mode 100644 index 0000000..e0e4eab Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ultra_gunsteel_ingot.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ump.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ump.png new file mode 100644 index 0000000..b41ad00 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ump.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ump_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ump_icon.png new file mode 100644 index 0000000..abc89e2 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ump_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ump_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ump_rld.png new file mode 100644 index 0000000..ab5b73e Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_ump_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_uzi.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_uzi.png new file mode 100644 index 0000000..8a5ea5b Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_uzi.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_uzi_icon.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_uzi_icon.png new file mode 100644 index 0000000..1f76cb2 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_uzi_icon.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_uzi_rld.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_uzi_rld.png new file mode 100644 index 0000000..e7c1a6d Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_uzi_rld.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_wooden_shuriken.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_wooden_shuriken.png new file mode 100644 index 0000000..6577ba9 Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_wooden_shuriken.png differ diff --git a/mods/ctf_guns/ctf_ranged/textures/rangedweapons_yeetable_img.png b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_yeetable_img.png new file mode 100644 index 0000000..7239a3e Binary files /dev/null and b/mods/ctf_guns/ctf_ranged/textures/rangedweapons_yeetable_img.png differ diff --git a/mods/ctf_guns/ctf_ranged/wep_defns.lua b/mods/ctf_guns/ctf_ranged/wep_defns.lua new file mode 100644 index 0000000..83d9db8 --- /dev/null +++ b/mods/ctf_guns/ctf_ranged/wep_defns.lua @@ -0,0 +1,483 @@ +-- ctf_ranged/wep_defns.lua + + +--[[ + Tier 1: + - pistol: ctf_ranged:makarov + - DMR: ctf_ranged:mini14 + - Shotgun: ctf_ranged:remington870 + - SMG: ctf_ranged:thompson + - Rifle: ctf_ranged:ak47 + - HMG: ctf_ranged:rpk + Tier 2: + - pistol: ctf_ranged:glock17 + - DMR: ctf_ranged:svd + - Shotgun: ctf_ranged:benelli + - SMG: ctf_ranged:uzi + - Rifle: ctf_ranged:m16 + - HMG: ctf_ranged:m60 + Tier 3: + - pistol: ctf_ranged:deagle + - DMR: ctf_ranged:m200 + - Shotgun: ctf_ranged:jackhammer + - SMG: ctf_ranged:mp5 + - Rifle: ctf_ranged:scar + - HMG: ctf_ranged:minigun + Energy weapons: + - E: ctf_ranged:energy_pistol + - E: ctf_ranged:energy_rifle + - E: ctf_ranged:energy_shotgun + +]]-- + + +-------------------------- +-- Tier 1 +-------------------------- + +ctf_ranged.simple_register_gun("ctf_ranged:makarov", { + type = "pistol", + description = "Makarov", + texture = "rangedweapons_makarov.png", + fire_sound = "ctf_ranged_mp5fire", + rounds = 8, + range = 50, + damage = 3, + automatic = false, + fire_interval = 0.6, + liquid_travel_dist = 2 +}) + +ctf_ranged.simple_register_gun("ctf_ranged:mini14", { + type = "rifle", + description = "Ruger Mini-14", + texture = "ctf_ranged_mini14.png", + fire_sound = "ctf_ranged_m16fire", + rounds = 20, + range = 150, + damage = 4, + fire_interval = 0.8, + liquid_travel_dist = 4, +}) + +ctf_ranged.simple_register_gun("ctf_ranged:remington870", { + type = "shotgun", + description = "Remington 870", + texture = "rangedweapons_remington.png", + fire_sound = "ctf_ranged_shotgun", + bullet = { + amount = 28, + spread = 3.5, + }, + rounds = 7, + range = 24, + damage = 1, + fire_interval = 2, +}) + +ctf_ranged.simple_register_gun("ctf_ranged:thompson", { + type = "smg", + description = "Thompson", + texture = "rangedweapons_thompson.png", + fire_sound = "ctf_ranged_mp5fire", + bullet = { + spread = 2, + }, + automatic = true, + rounds = 20, + range = 75, + damage = 1, + fire_interval = 0.1, + liquid_travel_dist = 2, +}) + +ctf_ranged.simple_register_gun("ctf_ranged:ak47", { + type = "smg", + description = "AK-47", + texture = "rangedweapons_ak47.png", + fire_sound = "ctf_ranged_pdudegun", + bullet = { + spread = 1.5, + }, + automatic = true, + rounds = 30, + range = 75, + damage = 2, + fire_interval = 0.15, + liquid_travel_dist = 2, +}) + +ctf_ranged.simple_register_gun("ctf_ranged:rpk", { + type = "smg", + description = "RPK", + texture = "rangedweapons_rpk.png", + fire_sound = "ctf_ranged_m60fire", + bullet = { + spread = 1.5, + }, + automatic = true, + rounds = 100, + range = 150, + damage = 2, + fire_interval = 0.15, + liquid_travel_dist = 2, +}) + +-------------------------- +-- Tier 2 +-------------------------- + +ctf_ranged.simple_register_gun("ctf_ranged:glock17", { + type = "pistol", + description = "Glock 17", + texture = "rangedweapons_glock17.png", + fire_sound = "ctf_ranged_mp5fire", + rounds = 17, + range = 75, + damage = 3, + automatic = false, + fire_interval = 0.35, + liquid_travel_dist = 2 +}) + +ctf_ranged.simple_register_gun("ctf_ranged:svd", { + type = "rifle", + description = "SVD Dragunov", + texture = "rangedweapons_svd.png", + fire_sound = "ctf_ranged_m16fire", + rounds = 10, + scope_zoom=10, + range = 150, + damage = 5, + fire_interval = 0.75, + liquid_travel_dist = 4, +}) + + +ctf_ranged.simple_register_gun("ctf_ranged:benelli", { + type = "shotgun", + description = "Benelli M4", + texture = "rangedweapons_benelli.png", + fire_sound = "ctf_ranged_shotgun", + bullet = { + amount = 20, + spread = 2.5, + }, + rounds = 8, + range = 24, + damage = 2, + fire_interval = 2, +}) + +ctf_ranged.simple_register_gun("ctf_ranged:uzi", { + type = "smg", + description = "Uzi", + texture = "rangedweapons_uzi.png", + fire_sound = "ctf_ranged_mp5fire", + bullet = { + spread = 2, + }, + automatic = true, + rounds = 30, + range = 75, + damage = 2, + fire_interval = 0.08, + liquid_travel_dist = 2, +}) + +ctf_ranged.simple_register_gun("ctf_ranged:m16", { + type = "smg", + description = "M-16", + texture = "rangedweapons_m16.png", + fire_sound = "ctf_ranged_pdudegun", + bullet = { + spread = 1.3, + }, + automatic = true, + rounds = 30, + range = 100, + damage = 2, + fire_interval = 0.15, + liquid_travel_dist = 2, +}) + +ctf_ranged.simple_register_gun("ctf_ranged:m60", { + type = "smg", + description = "M60", + texture = "rangedweapons_m60.png", + fire_sound = "ctf_ranged_m60fire", + bullet = { + spread = 1.3, + }, + automatic = true, + rounds = 150, + range = 150, + damage = 2, + fire_interval = 0.15, + liquid_travel_dist = 2, +}) + +-------------------------- +-- Tier 3 +-------------------------- + +ctf_ranged.simple_register_gun("ctf_ranged:deagle", { + type = "pistol", + description = "IMI Desert Eagle", + texture = "rangedweapons_deagle.png", + fire_sound = "ctf_ranged_deagle", + rounds = 8, + range = 75, + damage = 5, + automatic = false, + fire_interval = 0.5, + liquid_travel_dist = 2 +}) + +ctf_ranged.simple_register_gun("ctf_ranged:m200", { + type = "rifle", + description = "CheyTac Intervention", + texture = "rangedweapons_m200.png", + fire_sound = "ctf_ranged_m16fire", + rounds = 5, + scope_zoom=10, + range = 200, + damage = 15, + fire_interval = 2.0, + liquid_travel_dist = 4, +}) + +ctf_ranged.simple_register_gun("ctf_ranged:jackhammer", { + type = "shotgun", + description = "Pancor Jackhammer", + texture = "rangedweapons_jackhammer.png", + fire_sound = "ctf_ranged_shotgun", + bullet = { + amount = 20, + spread = 2.5, + }, + automatic = true, + rounds = 10, + range = 24, + damage = 2, + fire_interval = 0.5, +}) + +ctf_ranged.simple_register_gun("ctf_ranged:mp5", { + type = "smg", + description = "HK MP5", + texture = "rangedweapons_mp5.png", + fire_sound = "ctf_ranged_mp5fire", + bullet = { + spread = 2, + }, + automatic = true, + rounds = 30, + range = 100, + damage = 3, + fire_interval = 0.08, + liquid_travel_dist = 25, +}) + +ctf_ranged.simple_register_gun("ctf_ranged:scar", { + type = "smg", + description = "FN SCAR-H", + texture = "rangedweapons_scar.png", + fire_sound = "ctf_ranged_pdudegun", + bullet = { + spread = 1.0, + }, + automatic = true, + rounds = 20, + range = 150, + damage = 6, + fire_interval = 0.2, + liquid_travel_dist = 2, +}) + +ctf_ranged.simple_register_gun("ctf_ranged:minigun", { + type = "smg", + description = "", + texture = "rangedweapons_minigun.png", + fire_sound = "ctf_ranged_m60fire", + bullet = { + spread = 2.25, + }, + automatic = true, + rounds = 200, + range = 150, + damage = 4, + fire_interval = 0.08, + liquid_travel_dist = 2, +}) + + + +-------------------------- +-- Other guns +-------------------------- + +ctf_ranged.simple_register_gun("ctf_ranged:python", { + type = "pistol", + description = "Colt Python", + texture = "rangedweapons_python.png", + fire_sound = "ctf_ranged_mk23fire", + bullet = { + spread = 1.5, + }, + automatic = false, + rounds = 6, + range = 100, + damage = 5, + fire_interval = 0.8, + liquid_travel_dist = 2, +}) + +ctf_ranged.simple_register_gun("ctf_ranged:g11", { + type = "smg", + description = "HK G11", + texture = "rangedweapons_g11.png", + fire_sound = "ctf_ranged_mk23fire", + bullet = { + spread = 1.25, + amount = 3 + }, + scope_zoom=10, + automatic = false, + rounds = 16, + range = 150, + damage = 5, + fire_interval = 0.5, + liquid_travel_dist = 2, +}) + +ctf_ranged.simple_register_gun("ctf_ranged:deagle_gold", { + type = "pistol", + description = "IMI Desert Eagle", + texture = "rangedweapons_golden_deagle.png", + fire_sound = "ctf_ranged_deagle", + rounds = 8, + range = 75, + damage = 5, + automatic = false, + fire_interval = 0.5, + liquid_travel_dist = 2 +}) + + + + +function launch_grenade(user) + grenades.throw_grenade("grenades:frag", 30, user) +end + +ctf_ranged.simple_register_gun("ctf_ranged:m79", { + type = "pistol", + description = "M79", + texture = "rangedweapons_m79.png", + fire_sound = "ctf_ranged_ashotfir", + ammo="ctf_ranged:40mm", + rounds = 2, + range = 50, + damage = 3, + automatic = false, + fire_interval = 1.5, -- Might need to decrease this to compete with Milkor or contrib milkor + liquid_travel_dist = 2, + on_fire_callback=launch_grenade +}) + +-- Applies #12 PR +ctf_ranged.simple_register_gun("ctf_ranged:milkor", { + type = "pistol", + description = "Milkor", + texture = "rangedweapons_milkor.png", + fire_sound = "ctf_ranged_ashotfir", + ammo="ctf_ranged:40mm", + rounds = 6, + range = 50, + damage = 3, + automatic = true, + fire_interval = 0.65, -- Slightly slower firerate so it's a bit more balanced + liquid_travel_dist = 3, + on_fire_callback=launch_grenade +}) + +-- A gun from your little helper (why not have custom content by a dev/contributor) +ctf_ranged.simple_register_gun("ctf_ranged:milkor_apollo", { + type = "pistol", + -- Since you use Description I can add newlines \o/ + -- Since " (Loaded)" is added to the end lets put that on a newline + description = "Contrib Milkor\nContributed By: Apollo\nMay 2022\n", + texture = "ctf_ranged_milkor_apollo.png", -- Edited Milkor texture (look at the heat or fire, one or the other) + fire_sound = "ctf_ranged_ashotfir", + ammo="ctf_ranged:40mm 2", -- Since you look via inventory:contains_item() I can make it eat ammo! \o/ (Balance restored) + rounds = 4, -- Slightly less ammo in mag than Milkor + range = 55, -- Just a tad bit more range (+5) + damage = 4, -- Slightly more damage (but since grenades are really the main thing might be worthless) + automatic = true, -- Must be auto, I live auto, non-auto == death to easy + fire_interval = 0.2, -- Insane firerate + liquid_travel_dist = 4, + on_fire_callback=function (user) + -- Fires grenades with a little bit more velocity + grenades.throw_grenade("grenades:frag", 50, user) + end +}) + + +-------------------------- +-- Energy weapons +-------------------------- + +ctf_ranged.simple_register_gun("ctf_ranged:energy_pistol", { + type = "pistol", + description = "Laser Blaster", + texture = "rangedweapons_laser_blaster.png", + fire_sound = "ctf_ranged_dzap", + rounds = 20, + range = 85, + damage = 4, + automatic = false, + fire_interval = 0.35, + liquid_travel_dist = 2, + bullet_image = "ctf_ranged_ebullet", + bullethole_image = "ctf_ranged_ebullethole", + ammo = "ctf_ranged:eammo" +}) + +ctf_ranged.simple_register_gun("ctf_ranged:energy_rifle", { + type = "smg", + description = "Laser Rifle", + texture = "rangedweapons_laser_rifle.png", + fire_sound = "ctf_ranged_dzap", + bullet = { + spread = 1.0, + }, + automatic = true, + rounds = 30, + range = 75, + damage = 7, + fire_interval = 0.25, + liquid_travel_dist = 2, + bullet_image = "ctf_ranged_ebullet", + bullethole_image = "ctf_ranged_ebullethole", + ammo = "ctf_ranged:eammo" +}) + +ctf_ranged.simple_register_gun("ctf_ranged:energy_shotgun", { + type = "shotgun", + description = "Laser Shotgun", + texture = "rangedweapons_laser_shotgun.png", + fire_sound = "ctf_ranged_plasma", + bullet = { + amount = 10, + spread = 3.0, + }, + rounds = 10, + range = 25, + damage = 2, + fire_interval = 0.65, + automatic = false, + bullet_image = "ctf_ranged_ebullet", + bullethole_image = "ctf_ranged_ebullethole", + ammo = "ctf_ranged:eammo" +}) diff --git a/mods/ctf_guns/ctf_ranged/wep_logic.lua b/mods/ctf_guns/ctf_ranged/wep_logic.lua new file mode 100644 index 0000000..bb2bb93 --- /dev/null +++ b/mods/ctf_guns/ctf_ranged/wep_logic.lua @@ -0,0 +1,232 @@ + +local shoot_cooldown = ctf_core.init_cooldowns() + + +minetest.register_craftitem("ctf_ranged:eammo", { + description = "Energy Ammo", + inventory_image = "ctf_ranged_eammo.png", +}) +minetest.register_craftitem("ctf_ranged:echarge", { + description = "Energy Charge", + inventory_image = "ctf_ranged_echarge.png", +}) + +local function process_ray(ray, user, look_dir, def) + local hitpoint = ray:hit_object_or_node({ + node = function(ndef) + return (ndef.walkable == true and ndef.pointable == true) or ndef.groups.liquid + end, + object = function(obj) + -- Instead of only doing damage to players, do damage to any object that can be punched. + return obj.punch ~= nil and obj ~= user + end + }) + + if hitpoint then + if hitpoint.type == "node" then + local nodedef = minetest.registered_nodes[minetest.get_node(hitpoint.under).name] + + if nodedef.groups.snappy or (nodedef.groups.oddly_breakable_by_hand or 0) >= 3 then + if not minetest.is_protected(hitpoint.under, user:get_player_name()) then + minetest.dig_node(hitpoint.under) + end + else + if nodedef.walkable and nodedef.pointable then + local bullethole = def.bullethole_image or "ctf_ranged_bullethole" + minetest.add_particle({ + pos = vector.subtract(hitpoint.intersection_point, vector.multiply(look_dir, 0.04)), + velocity = vector.new(), + acceleration = {x=0, y=0, z=0}, + expirationtime = def.bullethole_lifetime or 3, + size = 1, + collisiondetection = false, + texture = bullethole..".png", + }) + elseif nodedef.groups.liquid then + minetest.add_particlespawner({ + amount = 10, + time = 0.1, + minpos = hitpoint.intersection_point, + maxpos = hitpoint.intersection_point, + minvel = {x=look_dir.x * 3, y=4, z=-look_dir.z * 3}, + maxvel = {x=look_dir.x * 4, y=6, z= look_dir.z * 4}, + minacc = {x=0, y=-10, z=0}, + maxacc = {x=0, y=-13, z=0}, + minexptime = 1, + maxexptime = 1, + minsize = 0, + maxsize = 0, + collisiondetection = false, + glow = 3, + node = {name = nodedef.name}, + }) + + if def.liquid_travel_dist then + -- Disabled due to a stack overflow when shooting quick sand + --[[ + process_ray(rawf.bulletcast( + def.bullet, hitpoint.intersection_point, + vector.add(hitpoint.intersection_point, vector.multiply(look_dir, def.liquid_travel_dist)), true, false + ), user, look_dir, def) + --]] + end + end + end + elseif hitpoint.type == "object" then + hitpoint.ref:punch(user, 1, { + full_punch_interval = 1, + damage_groups = {ranged = 1, [def.type] = 1, fleshy = def.damage} + }, look_dir) + end + end +end + +-- Can be overridden for custom behaviour +function ctf_ranged.can_use_gun(player, name) + return true +end + +local function cartridge_particles(player) + local up = {x=0, y=1, z=0} + local eye_offset = {x=0, y=1.625, z=0} + local p_vel = player:get_velocity() + local p = player:get_pos() + if p_vel == nil or p == nil then + return + end + local shell_v = {x=-1,y=0, z=0} + local lookdir = player:get_look_dir() + local right = vector.normalize(vector.cross(lookdir, up)) * -1 + --local front = eye_offset + p + lookdir + minetest.add_particle({ + pos = p + vector.new({x=0,y=1.3,z=0}) + (lookdir*0.2) + (right*0.4), + velocity = right*5, + --velocity = vector.new({x=0,y=0,z=0}), + acceleration = vector.new({x=0, y=-2, z=0}), + --acceleration = vector.new({x=0,y=0,z=0}), + expirationtime = 0.4, + size = 5, + collisiondetection = false, + vertical = true, + texture = "rangedweapons_shelldrop.png", + glow = 15, + }) +end + +function ctf_ranged.simple_register_gun(name, def) + minetest.register_tool(rawf.also_register_loaded_tool(name, { + description = def.description, + ctf_guns_scope_zoom = def.scope_zoom or nil, + inventory_image = def.texture.."^[colorize:#F44:42", + ammo = def.ammo or "ctf_ranged:ammo", + bullet_image = def.bullet_image, + bullethole_image = def.bullethole_image, + rounds = def.rounds, + _g_category = def.type, + groups = {ranged = 1, [def.type] = 1, tier = def.tier or 1, not_in_creative_inventory = nil}, + on_use = function(itemstack, user) + if not ctf_ranged.can_use_gun(user, name) then + minetest.sound_play("ctf_ranged_click", {pos = user:get_pos()}, true) + return + end + + local result = rawf.load_weapon(itemstack, user:get_inventory()) + + if result:get_name() == itemstack:get_name() then + minetest.sound_play("ctf_ranged_click", {pos = user:get_pos()}, true) + else + minetest.sound_play("ctf_ranged_reload", {pos = user:get_pos()}, true) + end + + return result + end, + }, + function(loaded_def) + loaded_def.description = def.description.." (Loaded)" + loaded_def.inventory_image = def.texture + loaded_def.inventory_overlay = def.texture_overlay + loaded_def.wield_image = def.wield_texture or def.texture + loaded_def.groups.not_in_creative_inventory = 1 + loaded_def.bullet_image = def.bullet_image + loaded_def.bullethole_image = def.bullethole_image + loaded_def.on_use = function(itemstack, user) + if not ctf_ranged.can_use_gun(user, name) then + minetest.sound_play("ctf_ranged_click", {pos = user:get_pos()}, true) + return + end + + if shoot_cooldown:get(user) then + return + end + -- Maybe it is not a good idea to network so many particles. + -- Could be worth benchmarking the performance effects. + --cartridge_particles(user) + if def.automatic then + if not rawf.enable_automatic(def.fire_interval, itemstack, user) then + return + end + else + shoot_cooldown:set(user, def.fire_interval) + end + + if def.on_fire_callback then + def.on_fire_callback(user, def) + minetest.sound_play(def.fire_sound, {pos = user:get_pos()}, true) + if def.rounds > 0 then + return rawf.unload_weapon(itemstack) + end + return + end + + local spawnpos, look_dir = rawf.get_bullet_start_data(user) + local endpos = vector.add(spawnpos, vector.multiply(look_dir, def.range)) + local rays + + local bullet_img = def.bullet_image or "ctf_ranged_bullet" + + if type(def.bullet) == "table" then + def.bullet.texture = bullet_img..".png" + else + def.bullet = {texture = bullet_img..".png"} + end + + if not def.bullet.spread then + rays = {rawf.bulletcast( + def.bullet, + spawnpos, endpos, true, true + )} + else + rays = rawf.spread_bulletcast(def.bullet, spawnpos, endpos, true, true) + end + + minetest.sound_play(def.fire_sound, {pos = user:get_pos()}, true) + + for _, ray in pairs(rays) do + process_ray(ray, user, look_dir, def) + end + + if def.rounds > 0 then + return rawf.unload_weapon(itemstack) + end + end + if def.rightclick_func then + loaded_def.on_place = function(itemstack, user, pointed, ...) + local pointed_def = false + local node + + if pointed and pointed.under then + node = minetest.get_node(pointed.under) + pointed_def = minetest.registered_nodes[node.name] + end + + if pointed_def and pointed_def.on_rightclick then + return minetest.item_place(itemstack, user, pointed) + else + return def.rightclick_func(itemstack, user, pointed, ...) + end + end + + loaded_def.on_secondary_use = def.rightclick_func + end + end)) +end diff --git a/mods/ctf_guns/ctf_ranged/wep_recipes.lua b/mods/ctf_guns/ctf_ranged/wep_recipes.lua new file mode 100644 index 0000000..9dcccda --- /dev/null +++ b/mods/ctf_guns/ctf_ranged/wep_recipes.lua @@ -0,0 +1,273 @@ +-- ctf_ranged/wep_recipes.lua + +--[[ + basic_materials:gear_steel + + Steel gear + copper ingot = tier 1 pistol + Steel gear + silver ingot = tier 1 rifle + Steel gear + steel ingot = tier 1 SMG + Steel gear + gold ingot = tier 1 shotgun + Steel gear + brass ingot = tier 1 DMR + Steel gear + mese frag = tier 1 HMG + + [Tier 1 Part] + [resource block] = Tier 2 part + + [Tier 2 part] + [Crystal, Gemstones gem, nether ingot] = Tier 3 Part + +]]-- + +local gear_steel = "basic_materials:gear_steel" +local steel_ingot = "default:steel_ingot" +local steelblock = "default:steelblock" +local gold_ingot = "default:gold_ingot" +local goldblock = "default:goldblock" +local diamondblock = "default:diamondblock" +local brass_ingot = "basic_materials:brass_ingot" +local mese_crystal = "default:mese_crystal" +local gravel = "default:gravel" +local gunpowder = "tnt:gunpowder" +local diamond = "default:diamond" +local tin_ingot = "default:tin_ingot" +local bronze_ingot = "default:bronze_ingot" +local copper = "default:copper_ingot" +local silver = "moreores:silver_ingot" + +if minetest.get_modpath("mcl_core") ~= nil then + steel_ingot = "mcl_core:iron_ingot" + steelblock = "mcl_core:ironblock" + gold_ingot = "mcl_core:gold_ingot" + goldblock = "mcl_core:goldblock" + diamondblock = "mcl_core:diamondblock" + brass_ingot = gold_ingot -- Use a gold ingot instead (Warning, don't use this in multiple recipes which also could take gold) + mese_crystal = "mcl_core:diamond" -- Use a diamond instead (Warning, don't use this in multiple recipes which could also take diamond) + diamond = "mcl_core:diamond" + gear_steel = "xpanes:bar_flat" -- Use a iron bar instead + gravel = "mcl_core:gravel" + gunpowder = "mcl_mobitems:gunpowder" + tin_ingot = steelblock + bronze_ingot = goldblock + -- If mcl_copper is installed it could be MCL5 or MCL2 + mcl_copper mod + if minetest.get_modpath("mcl_copper") ~= nil then + copper = "mcl_copper:copper_ingot" + else + copper = gear_steel + end + silver = "mcl_mobitems:magma_cream" -- Use Magma Cream instead +end + +minetest.register_craftitem("ctf_ranged:40mm", { + description = "40mm Grenade", + inventory_image = "rangedweapons_40mm.png", +}) + +minetest.register_craftitem("ctf_ranged:ammo", { + description = "Ammo", + inventory_image = "ctf_ranged_ammo.png", +}) + +minetest.register_craftitem("ctf_ranged:gunpart1", { + description = "Tier 1 gun part", + inventory_image = "rangedweapons_gunpart1.png" +}) +minetest.register_craftitem("ctf_ranged:gunpart2", { + description = "Tier 2 gun part", + inventory_image = "rangedweapons_gunpart2.png" +}) +minetest.register_craftitem("ctf_ranged:gunpart3", { + description = "Tier 3 gun part", + inventory_image = "rangedweapons_gunpart3.png" +}) +minetest.register_craftitem("ctf_ranged:gunparte", { + description = "Energy gun part", + inventory_image = "rangedweapons_gun_power_core.png" +}) + +------------------------------- +-- Basics +------------------------------- + +if ctf_ranged.settings.craft_ammo == true then + if minetest.get_modpath("mcl_mobitems") ~= nil then + minetest.register_craft({ + output = "ctf_ranged:ammo", + type = "shapeless", + recipe = { + brass_ingot, + "mcl_mobitems:slimeball" + } + }) + minetest.register_craft({ + output = "ctf_ranged:40mm", + type = "shapeless", + recipe = { + brass_ingot, + "mcl_mobitems:ghast_tear" + } + }) + else + if(minetest.get_modpath("mobs_mc")) ~= nil then + minetest.register_craft({ + output = "ctf_ranged:ammo", + type = "shapeless", + recipe = { + brass_ingot, + "mobs_mc:slimeball" -- Could use mcl_mobitems:slimeball + } + }) + minetest.register_craft({ + output = "ctf_ranged:40mm", + type = "shapeless", + recipe = { + brass_ingot, + "mobs_mc:ghast_tear" -- Could use mcl_mobitems:ghast_tear + } + }) + else + minetest.register_craft({ + output = "ctf_ranged:ammo", + type = "shapeless", + recipe = { + brass_ingot, + gravel + } + }) + minetest.register_craft({ + output = "ctf_ranged:40mm", + type = "shapeless", + recipe = { + brass_ingot, + gunpowder + } + }) + end + end + if ctf_ranged.settings.craft_energy_weapons == true then + minetest.register_craft({ + output = "ctf_ranged:eammo", + type = "shapeless", + recipe = { + "ctf_ranged:echarge", + "ctf_ranged:echarge", + "ctf_ranged:echarge", + "ctf_ranged:echarge" + } + }) + end +end + +if ctf_ranged.settings.craft_gunparts == true then + minetest.register_craft({ + output = "ctf_ranged:gunpart1", + type = "shapeless", + recipe = { + gear_steel, + steelblock + } + }) + minetest.register_craft({ + output = "ctf_ranged:gunpart2", + recipe = { + {"", "", ""}, + {goldblock, "ctf_ranged:gunpart1", goldblock}, + {"", "", ""}, + } + }) + minetest.register_craft({ + output = "ctf_ranged:gunpart3", + recipe = { + {"", "", ""}, + {diamondblock, "ctf_ranged:gunpart2", diamondblock}, + {"", "", ""}, + } + }) + if ctf_ranged.settings.craft_energy_weapons == true then + minetest.register_craft({ + output = "ctf_ranged:gunparte", + type = "shapeless", + recipe = { + diamondblock, + diamondblock, + gear_steel + } + }) + end +end + +------------------------------- +-- Guns +------------------------------- + + +--------------------------------- Tier 1 +if ctf_ranged.settings.craft_tier1_weapons == true then + minetest.register_craft({output = "ctf_ranged:makarov", type = "shapeless", + recipe = {"ctf_ranged:gunpart1",steel_ingot}}) + + minetest.register_craft({output = "ctf_ranged:mini14", type = "shapeless", + recipe = {"ctf_ranged:gunpart1",gold_ingot}}) + + minetest.register_craft({output = "ctf_ranged:remington870", type = "shapeless", + recipe = {"ctf_ranged:gunpart1",tin_ingot}}) + + minetest.register_craft({output = "ctf_ranged:thompson", type = "shapeless", + recipe = {"ctf_ranged:gunpart1",silver}}) + + minetest.register_craft({output = "ctf_ranged:ak47", type = "shapeless", + recipe = {"ctf_ranged:gunpart1",copper}}) + + minetest.register_craft({output = "ctf_ranged:rpk", type = "shapeless", + recipe = {"ctf_ranged:gunpart1",bronze_ingot}}) +end + +--------------------------------- Tier 2 + +if ctf_ranged.settings.craft_tier2_weapons == true then + minetest.register_craft({output = "ctf_ranged:glock17", type = "shapeless", + recipe = {"ctf_ranged:gunpart2",steel_ingot}}) + + minetest.register_craft({output = "ctf_ranged:svd", type = "shapeless", + recipe = {"ctf_ranged:gunpart2",gold_ingot}}) + + minetest.register_craft({output = "ctf_ranged:benelli", type = "shapeless", + recipe = {"ctf_ranged:gunpart2",tin_ingot}}) + + minetest.register_craft({output = "ctf_ranged:uzi", type = "shapeless", + recipe = {"ctf_ranged:gunpart2",silver}}) + + minetest.register_craft({output = "ctf_ranged:m16", type = "shapeless", + recipe = {"ctf_ranged:gunpart2",copper}}) + + minetest.register_craft({output = "ctf_ranged:m60", type = "shapeless", + recipe = {"ctf_ranged:gunpart2",bronze_ingot}}) +end + +--------------------------------- Tier 3 + +if ctf_ranged.settings.craft_tier3_weapons == true then + minetest.register_craft({output = "ctf_ranged:deagle", type = "shapeless", + recipe = {"ctf_ranged:gunpart3",steel_ingot}}) + + minetest.register_craft({output = "ctf_ranged:m200", type = "shapeless", + recipe = {"ctf_ranged:gunpart3",gold_ingot}}) + + minetest.register_craft({output = "ctf_ranged:jackhammer", type = "shapeless", + recipe = {"ctf_ranged:gunpart3",tin_ingot}}) + + minetest.register_craft({output = "ctf_ranged:mp5", type = "shapeless", + recipe = {"ctf_ranged:gunpart3",silver}}) + + minetest.register_craft({output = "ctf_ranged:scar", type = "shapeless", + recipe = {"ctf_ranged:gunpart3",copper}}) + + minetest.register_craft({output = "ctf_ranged:minigun", type = "shapeless", + recipe = {"ctf_ranged:gunpart3",bronze_ingot}}) +end + +if ctf_ranged.settings.craft_energy_weapons == true then + minetest.register_craft({output = "ctf_ranged:energy_rifle", type = "shapeless", + recipe = {"ctf_ranged:gunparte", "ctf_ranged:gunpart3", diamond}}) + minetest.register_craft({output = "ctf_ranged:energy_shotgun", type = "shapeless", + recipe = {"ctf_ranged:gunparte", "ctf_ranged:gunpart2", diamond}}) + minetest.register_craft({output = "ctf_ranged:energy_pistol", type = "shapeless", + recipe = {"ctf_ranged:gunparte", "ctf_ranged:gunpart1", diamond}}) +end diff --git a/mods/ctf_guns/darkness_nerf/init.lua b/mods/ctf_guns/darkness_nerf/init.lua new file mode 100644 index 0000000..c320e0a --- /dev/null +++ b/mods/ctf_guns/darkness_nerf/init.lua @@ -0,0 +1,27 @@ + +-- Makes players glow +minetest.register_on_joinplayer(function(player) + player:set_properties({glow = 3}) +end) + +local MIN_GLOW = 8 + +-- Makes dropped items glow +minetest.register_on_mods_loaded(function() + local itemdef = minetest.registered_entities["__builtin:item"] + local old_set_item = itemdef.set_item + + itemdef.set_item = function(self, itemstring) + old_set_item(self, itemstring) + local iname = itemstring or self.itemstring + iname = ItemStack(iname):get_name() + + if not minetest.registered_items[iname] or (minetest.registered_items[iname].light_source or 0) < MIN_GLOW then + self.object:set_properties({glow = MIN_GLOW}) + else + self.object:set_properties({glow = minetest.registered_items[iname].light_source}) + end + end + + minetest.register_entity(":__builtin:item", itemdef) +end) diff --git a/mods/ctf_guns/darkness_nerf/mod.conf b/mods/ctf_guns/darkness_nerf/mod.conf new file mode 100644 index 0000000..12f9a7d --- /dev/null +++ b/mods/ctf_guns/darkness_nerf/mod.conf @@ -0,0 +1,2 @@ +name = darkness_nerf +depends = default diff --git a/mods/ctf_guns/grenades/api.md b/mods/ctf_guns/grenades/api.md new file mode 100644 index 0000000..4b07034 --- /dev/null +++ b/mods/ctf_guns/grenades/api.md @@ -0,0 +1,36 @@ +# Grenades API + +Please suggest new features here: https://forum.minetest.net/viewtopic.php?f=9&t=21466 + +## API + +```lua +grenades.register_grenade("name", { -- Name of the grenade (Like 'smoke' or 'flashbang') + description = "", -- A short description of the grenade. + image = "", -- The name of the grenade's texture + collide_with_objects = false, -- (Default: false) Controls whether the grenade collides with objects. Grenade will never collide with thrower regardless of this setting + throw_cooldown = 0, -- How often player can throw grenades, in seconds + on_explode = function(def, pos, name) + -- This function is called when the grenade 'explodes' + -- grenade object definition + -- the place the grenade 'exploded' at + -- the name of the player that threw the grenade + end, + on_collide = function(def, obj, name, moveresult) + -- This function is called when the grenade collides with a surface + -- grenade object definition + -- the grenade object + -- the name of the player that threw the grenade + -- return true to cause grenade explosion + -- return "stop" to stop the grenade from moving + end, + clock = 3, -- Optional, controls how long until grenade detonates. Default is 3 + particle = { -- Adds particles in the grenade's trail + image = "grenades_smoke.png", -- The particle's image + life = 1, -- How long (seconds) it takes for the particle to disappear + size = 4, -- Size of the particle + glow = 0, -- Brightens the texture in darkness + interval = 5, -- How long it takes before a particle can be added + } +}) +``` diff --git a/mods/ctf_guns/grenades/grenades.lua b/mods/ctf_guns/grenades/grenades.lua new file mode 100644 index 0000000..c4874c1 --- /dev/null +++ b/mods/ctf_guns/grenades/grenades.lua @@ -0,0 +1,203 @@ +local function remove_flora(pos, radius) + local pos1 = vector.subtract(pos, radius) + local pos2 = vector.add(pos, radius) + + for _, p in ipairs(minetest.find_nodes_in_area(pos1, pos2, "group:flora")) do + if vector.distance(pos, p) <= radius then + minetest.remove_node(p) + end + end +end + +local function check_hit(pos1, pos2, obj) + local ray = minetest.raycast(pos1, pos2, true, false) + local hit = ray:next() + + while hit and hit.type == "node" and vector.distance(pos1, hit.under) <= 1.6 do + hit = ray:next() + end + + if hit and hit.type == "object" and hit.ref == obj then + return true + end +end + +local fragdef = { + description = "Frag grenade (Kills anyone near blast)", + image = "grenades_frag.png", + explode_radius = 10, + explode_damage = 26, + on_collide = function(def, obj) + return true + end, + on_explode = function(def, pos, name) + if not name or not pos then return end + + local player = minetest.get_player_by_name(name) + if not player then return end + + + local radius = def.explode_radius + + minetest.add_particlespawner({ + amount = 20, + time = 0.5, + minpos = vector.subtract(pos, radius), + maxpos = vector.add(pos, radius), + minvel = {x = 0, y = 5, z = 0}, + maxvel = {x = 0, y = 7, z = 0}, + minacc = {x = 0, y = 1, z = 0}, + maxacc = {x = 0, y = 1, z = 0}, + minexptime = 0.3, + maxexptime = 0.6, + minsize = 7, + maxsize = 10, + collisiondetection = true, + collision_removal = false, + vertical = false, + texture = "grenades_smoke.png", + }) + + minetest.add_particle({ + pos = pos, + velocity = {x=0, y=0, z=0}, + acceleration = {x=0, y=0, z=0}, + expirationtime = 0.3, + size = 15, + collisiondetection = false, + collision_removal = false, + object_collision = false, + vertical = false, + texture = "grenades_boom.png", + glow = 10 + }) + + minetest.sound_play("grenades_explode", { + pos = pos, + gain = 1.0, + max_hear_distance = 64, + }) + + remove_flora(pos, radius/2) + + for _, v in pairs(minetest.get_objects_inside_radius(pos, radius)) do + if v.punch ~= nil and v:get_hp() > 0 then + local footpos = vector.offset(v:get_pos(), 0, 0.1, 0) + local e_height = 0 + + if v:get_properties().eye_height ~= nil then + e_height = v:get_properties().eye_height + else + e_height = 1 + end + + local headpos = vector.offset(v:get_pos(), 0, e_height, 0) + local footdist = vector.distance(pos, footpos) + local headdist = vector.distance(pos, headpos) + local target_head = false + + if footdist >= headdist then + target_head = true + end + + local hit_pos1 = check_hit(pos, target_head and headpos or footpos, v) + + -- Check the closest distance, but if that fails try targeting the farther one + if hit_pos1 or check_hit(pos, target_head and footpos or headpos, v) then + v:punch(player, 1, { + punch_interval = 1, + damage_groups = { + grenade = 1, + fleshy = def.explode_damage - ( (radius/3) * (target_head and headdist or footdist) ) + } + }, nil) + end + end + end + end, +} + +grenades.register_grenade("grenades:frag", fragdef) + +local fragdef_sticky = table.copy(fragdef) +fragdef_sticky.description = "Sticky Frag grenade (Sticks to surfaces)" +fragdef_sticky.image = "grenades_frag_sticky.png" +fragdef_sticky.on_collide = function() return false end +grenades.register_grenade("grenades:frag_sticky", fragdef_sticky) + +-- Smoke Grenade + +local sounds = {} +local SMOKE_GRENADE_TIME = 30 +grenades.register_grenade("grenades:smoke", { + description = "Smoke grenade (Generates smoke around blast site)", + image = "grenades_smoke_grenade.png", + on_collide = function() + return true + end, + on_explode = function(def, pos, pname) + local player = minetest.get_player_by_name(pname) + if not player or not pos then return end + + local pteam = ctf_teams.get(pname) + + if pteam then + local fpos = ctf_map.current_map.teams[pteam].flag_pos + + if not fpos then return end + + if vector.distance(pos, fpos) <= 15 then + minetest.chat_send_player(pname, "You can't explode smoke grenades so close to your flag!") + player:get_inventory():add_item("main", "grenades:smoke") + return + end + end + + minetest.sound_play("grenades_glasslike_break", { + pos = pos, + gain = 1.0, + max_hear_distance = 32, + }) + + local hiss = minetest.sound_play("grenades_hiss", { + pos = pos, + gain = 1.0, + loop = true, + max_hear_distance = 32, + }) + sounds[hiss] = true + + minetest.after(SMOKE_GRENADE_TIME, function() + sounds[hiss] = nil + minetest.sound_stop(hiss) + end) + + for i = 0, 5, 1 do + minetest.add_particlespawner({ + amount = 40, + time = SMOKE_GRENADE_TIME + 3, + minpos = vector.subtract(pos, 2), + maxpos = vector.add(pos, 2), + minvel = {x = 0, y = 2, z = 0}, + maxvel = {x = 0, y = 3, z = 0}, + minacc = {x = 1, y = 0.2, z = 1}, + maxacc = {x = 1, y = 0.2, z = 1}, + minexptime = 1, + maxexptime = 1, + minsize = 125, + maxsize = 140, + collisiondetection = false, + collision_removal = false, + vertical = false, + texture = "grenades_smoke.png", + }) + end + end, + particle = { + image = "grenades_smoke.png", + life = 1, + size = 4, + glow = 0, + interval = 0.3, + } +}) diff --git a/mods/ctf_guns/grenades/init.lua b/mods/ctf_guns/grenades/init.lua new file mode 100644 index 0000000..b521b3b --- /dev/null +++ b/mods/ctf_guns/grenades/init.lua @@ -0,0 +1,179 @@ +grenades = { + grenade_deaccel = 8 +} + +local cooldown = ctf_core.init_cooldowns() + +function grenades.throw_grenade(name, startspeed, player) + local dir = player:get_look_dir() + local pos = player:get_pos() + local obj = minetest.add_entity(vector.new(pos.x, pos.y + player:get_properties().eye_height, pos.z), name) + if not obj then + return + end + + obj:set_velocity(vector.add(vector.multiply(dir, startspeed), player:get_velocity())) + obj:set_acceleration({x = 0, y = -9.8, z = 0}) + + obj:get_luaentity().thrower_name = player:get_player_name() + + return obj:get_luaentity() +end + +function grenades.register_grenade(name, def) + if not def.clock then + def.clock = 4 + end + + local grenade_entity = { + initial_properties = { + physical = true, + collide_with_objects = def.collide_with_objects or false, + visual = "sprite", + visual_size = {x = 0.5, y = 0.5, z = 0.5}, + textures = {def.image}, + collisionbox = {-0.2, -0.2, -0.2, 0.2, 0.15, 0.2}, + pointable = false, + static_save = false, + }, + sliding = 1, + particle = 0, + timer = 0, + on_step = function(self, dtime, moveresult) + local obj = self.object + local vel = obj:get_velocity() + local pos = obj:get_pos() + local norm_vel -- Normalized velocity + + self.timer = self.timer + dtime + + if not self.last_vel then + self.last_vel = vel + end + + -- Check for a collision on the x/y/z axis + + if moveresult.collides and moveresult.collisions then + if self.thrower_name and moveresult.collisions[1] and (moveresult.collisions[1].type ~= "object" or + moveresult.collisions[1].object ~= minetest.get_player_by_name(self.thrower_name)) then + if def.on_collide then + local c_result = def:on_collide(obj, self.thrower_name, moveresult) + + if c_result == true then + if self.thrower_name then + minetest.log("action", "[Grenades] A grenade thrown by " .. self.thrower_name .. + " explodes at " .. minetest.pos_to_string(vector.round(pos))) + def:on_explode(pos, self.thrower_name) + end + obj:remove() + elseif c_result == "stop" then + vel = vector.new() + self.last_vel = vector.new() + obj:set_velocity(vector.new()) + obj:set_acceleration(vector.new(0, 0, 0)) + end + else + if moveresult.collisions[1] and moveresult.collisions[1].axis then + local axis = moveresult.collisions[1].axis + + vel[axis] = self.last_vel[axis] * -0.3 + end + end + + obj:set_velocity(vel) + end + end + + self.last_vel = vel + + norm_vel = vector.normalize(vel) + + if not vector.equals(vel, vector.new()) then + obj:set_acceleration({ + x = -norm_vel.x * grenades.grenade_deaccel * (moveresult.touching_ground and 2 or 1), + y = -9.8, + z = -norm_vel.z * grenades.grenade_deaccel * (moveresult.touching_ground and 2 or 1), + }) + end + + if moveresult.touching_ground then -- Is the grenade sliding? + -- If grenade is barely moving, make sure it stays that way + if vector.distance(vector.new(), vel) <= 2 and not vector.equals(vel, vector.new()) then + obj:set_velocity(vector.new()) + obj:set_acceleration(vector.new(0, -9.8, 0)) + end + end + + -- Grenade Particles + + if def.particle and self.particle >= def.particle.interval then + self.particle = 0 + + minetest.add_particle({ + pos = obj:get_pos(), + velocity = vector.divide(vel, 2), + acceleration = vector.divide(obj:get_acceleration() or vector.new(1, 1, 1), -5), + expirationtime = def.particle.life, + size = def.particle.size, + collisiondetection = false, + collision_removal = false, + vertical = false, + texture = def.particle.image, + glow = def.particle.glow + }) + elseif def.particle and self.particle < def.particle.interval then + self.particle = self.particle + dtime + end + + -- Explode when clock is up + + if self.timer > def.clock or not self.thrower_name then + if self.thrower_name then + minetest.log("action", "[Grenades] A grenade thrown by " .. self.thrower_name .. + " explodes at " .. minetest.pos_to_string(vector.round(pos))) + def:on_explode(pos, self.thrower_name) + end + + obj:remove() + end + end + } + + minetest.register_entity(name, grenade_entity) + + local newdef = {grenade = def} + + newdef.description = def.description + newdef.stack_max = def.stack_max or 1 + newdef.range = 0 + newdef.inventory_image = def.image + local on_use = function(itemstack, user, pointed_thing) + if pointed_thing.type ~= "node" then + grenades.throw_grenade(name, 17, user) + + if not minetest.settings:get_bool("creative_mode") then + itemstack:take_item(1) + end + end + + return itemstack + end + + if def.throw_cooldown then + newdef.on_use = function(itemstack, user, ...) + if cooldown:get(user) then + return + else + cooldown:set(user, def.throw_cooldown) + end + + return on_use(itemstack, user, ...) + end + else + newdef.on_use = on_use + end + + minetest.register_craftitem(name, newdef) +end + +dofile(minetest.get_modpath("grenades") .. "/grenades.lua") diff --git a/mods/ctf_guns/grenades/license b/mods/ctf_guns/grenades/license new file mode 100644 index 0000000..abd8a96 --- /dev/null +++ b/mods/ctf_guns/grenades/license @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018-2019 LoneWolfHT + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/mods/ctf_guns/grenades/mod.conf b/mods/ctf_guns/grenades/mod.conf new file mode 100644 index 0000000..92101a5 --- /dev/null +++ b/mods/ctf_guns/grenades/mod.conf @@ -0,0 +1,2 @@ +name = grenades +depends = ctf_core diff --git a/mods/ctf_guns/grenades/readme.md b/mods/ctf_guns/grenades/readme.md new file mode 100644 index 0000000..473f425 --- /dev/null +++ b/mods/ctf_guns/grenades/readme.md @@ -0,0 +1,6 @@ +# grenades +Adds an API that allows for easily making grenades + +See grenades_basic for the grenades this mod used to have + +License of code: **MIT** diff --git a/mods/ctf_guns/grenades/sounds/grenades_explode.ogg b/mods/ctf_guns/grenades/sounds/grenades_explode.ogg new file mode 100644 index 0000000..e00a16c Binary files /dev/null and b/mods/ctf_guns/grenades/sounds/grenades_explode.ogg differ diff --git a/mods/ctf_guns/grenades/sounds/grenades_glasslike_break.ogg b/mods/ctf_guns/grenades/sounds/grenades_glasslike_break.ogg new file mode 100644 index 0000000..d2138db Binary files /dev/null and b/mods/ctf_guns/grenades/sounds/grenades_glasslike_break.ogg differ diff --git a/mods/ctf_guns/grenades/sounds/grenades_hiss.ogg b/mods/ctf_guns/grenades/sounds/grenades_hiss.ogg new file mode 100644 index 0000000..b9ed86c Binary files /dev/null and b/mods/ctf_guns/grenades/sounds/grenades_hiss.ogg differ diff --git a/mods/ctf_guns/grenades/sounds/license.txt b/mods/ctf_guns/grenades/sounds/license.txt new file mode 100644 index 0000000..2d59177 --- /dev/null +++ b/mods/ctf_guns/grenades/sounds/license.txt @@ -0,0 +1,133 @@ +Creative Commons Attribution 4.0 International Public License +for grenades_glasslike_break.ogg and grenades_hiss.ogg + +Copyright (c) 2019 LoneWolfHT + +By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. + +Section 1 – Definitions. + + Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. + Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. + Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. + Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. + Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. + Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. + Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. + Licensor means the individual(s) or entity(ies) granting rights under this Public License. + Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. + Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. + You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. + +Section 2 – Scope. + + License grant. + Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: + reproduce and Share the Licensed Material, in whole or in part; and + produce, reproduce, and Share Adapted Material. + Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. + Term. The term of this Public License is specified in Section 6(a). + Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. + Downstream recipients. + Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. + No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. + No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). + + Other rights. + Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. + Patent and trademark rights are not licensed under this Public License. + To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. + +Section 3 – License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the following conditions. + + Attribution. + + If You Share the Licensed Material (including in modified form), You must: + retain the following if it is supplied by the Licensor with the Licensed Material: + identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); + a copyright notice; + a notice that refers to this Public License; + a notice that refers to the disclaimer of warranties; + a URI or hyperlink to the Licensed Material to the extent reasonably practicable; + indicate if You modified the Licensed Material and retain an indication of any previous modifications; and + indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. + You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. + If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. + If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License. + +Section 4 – Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: + + for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; + if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and + You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. + +Section 5 – Disclaimer of Warranties and Limitation of Liability. + + Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You. + To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You. + + The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. + +Section 6 – Term and Termination. + + This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. + + Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: + automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or + upon express reinstatement by the Licensor. + For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. + For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. + Sections 1, 5, 6, 7, and 8 survive termination of this Public License. + +Section 7 – Other Terms and Conditions. + + The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. + Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. + +Section 8 – Interpretation. + + For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. + To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. + No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. + Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. + +===================== +===================== +===================== + +CC0 1.0 Universal (CC0 1.0) Public Domain Dedication +for grenades_explode.ogg +TumeniNodes +steveygos93 +theneedle.tv +frankelmedico + +No Copyright + +The person who associated a work with this deed has dedicated the work to the public domain +by waiving all of his or her rights to the work worldwide under copyright law, including all +related and neighboring rights, to the extent allowed by law. + +You can copy, modify, distribute and perform the work, even for commercial purposes, all +without asking permission. See Other Information below. + +In no way are the patent or trademark rights of any person affected by CC0, nor are the +rights that other persons may have in the work or in how the work is used, such as publicity +or privacy rights. + +Unless expressly stated otherwise, the person who associated a work with this deed makes no +warranties about the work, and disclaims liability for all uses of the work, to the fullest +extent permitted by applicable law. + +When using or citing the work, you should not imply endorsement by the author or the affirmer. + +This license is acceptable for Free Cultural Works. +For more Information: +https://creativecommons.org/publicdomain/zero/1.0/ + diff --git a/mods/ctf_guns/grenades/textures/grenades_boom.png b/mods/ctf_guns/grenades/textures/grenades_boom.png new file mode 100644 index 0000000..6e75432 Binary files /dev/null and b/mods/ctf_guns/grenades/textures/grenades_boom.png differ diff --git a/mods/ctf_guns/grenades/textures/grenades_flashbang.png b/mods/ctf_guns/grenades/textures/grenades_flashbang.png new file mode 100644 index 0000000..bff04dd Binary files /dev/null and b/mods/ctf_guns/grenades/textures/grenades_flashbang.png differ diff --git a/mods/ctf_guns/grenades/textures/grenades_frag.png b/mods/ctf_guns/grenades/textures/grenades_frag.png new file mode 100644 index 0000000..939ab5e Binary files /dev/null and b/mods/ctf_guns/grenades/textures/grenades_frag.png differ diff --git a/mods/ctf_guns/grenades/textures/grenades_frag_sticky.png b/mods/ctf_guns/grenades/textures/grenades_frag_sticky.png new file mode 100644 index 0000000..c68ab99 Binary files /dev/null and b/mods/ctf_guns/grenades/textures/grenades_frag_sticky.png differ diff --git a/mods/ctf_guns/grenades/textures/grenades_smoke.png b/mods/ctf_guns/grenades/textures/grenades_smoke.png new file mode 100644 index 0000000..254be1d Binary files /dev/null and b/mods/ctf_guns/grenades/textures/grenades_smoke.png differ diff --git a/mods/ctf_guns/grenades/textures/grenades_smoke_grenade.png b/mods/ctf_guns/grenades/textures/grenades_smoke_grenade.png new file mode 100644 index 0000000..8067e82 Binary files /dev/null and b/mods/ctf_guns/grenades/textures/grenades_smoke_grenade.png differ diff --git a/mods/ctf_guns/grenades/textures/license b/mods/ctf_guns/grenades/textures/license new file mode 100644 index 0000000..dee3c81 --- /dev/null +++ b/mods/ctf_guns/grenades/textures/license @@ -0,0 +1,97 @@ +Creative Commons Attribution 4.0 International Public License + +Copyright (c) 2019 LoneWolfHT + +By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. + +Section 1 – Definitions. + + Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. + Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. + Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. + Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. + Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. + Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. + Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. + Licensor means the individual(s) or entity(ies) granting rights under this Public License. + Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. + Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. + You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. + +Section 2 – Scope. + + License grant. + Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: + reproduce and Share the Licensed Material, in whole or in part; and + produce, reproduce, and Share Adapted Material. + Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. + Term. The term of this Public License is specified in Section 6(a). + Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. + Downstream recipients. + Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. + No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. + No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). + + Other rights. + Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. + Patent and trademark rights are not licensed under this Public License. + To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. + +Section 3 – License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the following conditions. + + Attribution. + + If You Share the Licensed Material (including in modified form), You must: + retain the following if it is supplied by the Licensor with the Licensed Material: + identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); + a copyright notice; + a notice that refers to this Public License; + a notice that refers to the disclaimer of warranties; + a URI or hyperlink to the Licensed Material to the extent reasonably practicable; + indicate if You modified the Licensed Material and retain an indication of any previous modifications; and + indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. + You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. + If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. + If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License. + +Section 4 – Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: + + for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; + if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and + You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. + +Section 5 – Disclaimer of Warranties and Limitation of Liability. + + Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You. + To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You. + + The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. + +Section 6 – Term and Termination. + + This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. + + Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: + automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or + upon express reinstatement by the Licensor. + For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. + For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. + Sections 1, 5, 6, 7, and 8 survive termination of this Public License. + +Section 7 – Other Terms and Conditions. + + The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. + Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. + +Section 8 – Interpretation. + + For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. + To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. + No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. + Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. diff --git a/mods/ctf_guns/modpack.txt b/mods/ctf_guns/modpack.txt new file mode 100644 index 0000000..5494d75 --- /dev/null +++ b/mods/ctf_guns/modpack.txt @@ -0,0 +1 @@ +The presence of this file indicates that the current folder is a modpack. diff --git a/mods/ctf_guns/rawf/.gitignore b/mods/ctf_guns/rawf/.gitignore new file mode 100644 index 0000000..6fd0a37 --- /dev/null +++ b/mods/ctf_guns/rawf/.gitignore @@ -0,0 +1,41 @@ +# Compiled Lua sources +luac.out + +# luarocks build files +*.src.rock +*.zip +*.tar.gz + +# Object files +*.o +*.os +*.ko +*.obj +*.elf + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo +*.def +*.exp + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + diff --git a/mods/ctf_guns/rawf/.luacheckrc b/mods/ctf_guns/rawf/.luacheckrc new file mode 100644 index 0000000..062cd08 --- /dev/null +++ b/mods/ctf_guns/rawf/.luacheckrc @@ -0,0 +1,47 @@ +read_globals = { + "DIR_DELIM", "INIT", + + "minetest", "core", + "dump", "dump2", + + "api", + + "Raycast", + "Settings", + "PseudoRandom", + "PerlinNoise", + "VoxelManip", + "SecureRandom", + "VoxelArea", + "PerlinNoiseMap", + "PcgRandom", + "ItemStack", + "AreaStore", + + "vector", + + table = { + fields = { + "copy", + "indexof", + "insert_all", + "key_value_swap", + "shuffle", + } + }, + + string = { + fields = { + "split", + "trim", + } + }, + + math = { + fields = { + "hypot", + "sign", + "factorial" + } + }, +} diff --git a/mods/ctf_guns/rawf/API.md b/mods/ctf_guns/rawf/API.md new file mode 100644 index 0000000..78bedb6 --- /dev/null +++ b/mods/ctf_guns/rawf/API.md @@ -0,0 +1,23 @@ +## Custom item definition values + +```lua +{ + -- Name of the loaded version of the ranged weapon + -- Used by: load_weapon() + -- Set by: also_register_loaded_tool() + loaded_name = , + + -- Name of the unloaded version of the ranged weapon + -- Used by: unload_weapon() + -- Set by: also_register_loaded_tool() + unloaded_name = , + + -- Amount of bullets the ranged weapon can shoot. + -- Used by: unload_weapon() + rounds = , + + -- Ammo that can be used by the ranged weapon + -- Used by: load_weapon() + ammo = +} +``` diff --git a/mods/ctf_guns/rawf/LICENSE b/mods/ctf_guns/rawf/LICENSE new file mode 100644 index 0000000..b121b5d --- /dev/null +++ b/mods/ctf_guns/rawf/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 LoneWolfHT + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/mods/ctf_guns/rawf/README.md b/mods/ctf_guns/rawf/README.md new file mode 100644 index 0000000..9a4a4b6 --- /dev/null +++ b/mods/ctf_guns/rawf/README.md @@ -0,0 +1,2 @@ +# RaWF +A ranged weapon framework for Minetest diff --git a/mods/ctf_guns/rawf/ammo.lua b/mods/ctf_guns/rawf/ammo.lua new file mode 100644 index 0000000..90edd22 --- /dev/null +++ b/mods/ctf_guns/rawf/ammo.lua @@ -0,0 +1,67 @@ +local MODNAME = minetest.get_current_modname() +local api = rawget(_G, MODNAME) + +function api.also_register_loaded_tool(name, def, user_loaded_def) + local loaded_def = table.copy(def) + + if user_loaded_def then + user_loaded_def(loaded_def) + end + + loaded_def.unloaded_name = name + def.loaded_name = name.."_loaded" + + minetest.register_tool(def.loaded_name, loaded_def) + + return name, def +end + +function api.unload_weapon(weapon, amount) + local iname = weapon:get_name() + local rounds = assert( + minetest.registered_tools[iname].rounds, + "Must define 'rounds' property for ranged weapon "..dump(iname) + ) + + local new_wear = (65535 / (rounds)) * (amount or 1) + + -- Applies #15 PR + new_wear = weapon:get_wear() + new_wear + 1 + + if new_wear >= 65535 then + return ItemStack(weapon:get_definition().unloaded_name) + end + + weapon:set_wear(new_wear) + + return weapon +end + +function api.load_weapon(weapon, inv, lists) + local idef = weapon:get_definition() + + assert(idef.loaded_name, "Item "..idef.name.." doesn't have 'loaded_name' set!") + assert(idef.ammo, "Item "..idef.name.." doesn't have 'ammo' set!") + + if type(idef.ammo) ~= "table" then + idef.ammo = {idef.ammo} + end + + if not lists then + lists = {"main"} + elseif type(lists) ~= "table" then + lists = {lists} + end + + for _, item in pairs(idef.ammo) do + for _, list in pairs(lists) do + if inv:contains_item(list, item) then + inv:remove_item(list, item) + + return ItemStack(idef.loaded_name) + end + end + end + + return weapon +end diff --git a/mods/ctf_guns/rawf/bullet.lua b/mods/ctf_guns/rawf/bullet.lua new file mode 100644 index 0000000..2f0dd61 --- /dev/null +++ b/mods/ctf_guns/rawf/bullet.lua @@ -0,0 +1,87 @@ +local MODNAME = minetest.get_current_modname() +local api = rawget(_G, MODNAME) + +function api.get_bullet_start_data(player) + local look_dir = player:get_look_dir() + local spawnpos = vector.offset(player:get_pos(), 0, player:get_properties().eye_height, 0) + spawnpos = vector.add(spawnpos, player:get_eye_offset()) + spawnpos = vector.add(spawnpos, vector.multiply(look_dir, 0.4)) + + return spawnpos, look_dir +end + +function api.bulletcast(bullet, pos1, pos2, objects, liquids) + minetest.add_particle({ + pos = pos1, + velocity = vector.multiply(vector.direction(pos1, pos2), bullet.particle_speed or 400), + acceleration = {x=0, y=0, z=0}, + expirationtime = 0.1, + size = 1, + collisiondetection = true, + collision_removal = true, + object_collision = objects, + texture = bullet.texture or bullet, + glow = bullet.glow or 0 + }) + + local raycast = minetest.raycast(pos1, pos2, objects, liquids) + local bulletcast = { + raycast = raycast, + hit_object_or_node = function(self, options) + if not options then + options = {} + end + + for hitpoint in self.raycast do + if hitpoint.type == "node" then + if not options.node or options.node(minetest.registered_nodes[minetest.get_node(hitpoint.under).name]) then + return hitpoint + end + elseif hitpoint.type == "object" then + if not options.object or options.object(hitpoint.ref) then + return hitpoint + end + end + end + end, + } + + setmetatable(bulletcast, { + __index = function(table, key) + local not_raycast_func = rawget(table, key) + + if not_raycast_func then + return not_raycast_func + else + return function(self, ...) + local sraycast = rawget(self, "raycast") + + return sraycast[key](sraycast, ...) + end + end + end, + __call = function(table, ...) + return rawget(table, "raycast")(...) + end + }) + + return bulletcast +end + +function api.spread_bulletcast(bullet, pos1, pos2, objects, liquids) + local rays = {} + + for i=1, bullet.amount or 1, 1 do + rays[i] = api.bulletcast( + bullet, + pos1, vector.offset(pos2, + math.random(-bullet.spread, bullet.spread), + math.random(-bullet.spread, bullet.spread), + math.random(-bullet.spread, bullet.spread) + ), + objects, liquids + ) + end + + return rays +end diff --git a/mods/ctf_guns/rawf/init.lua b/mods/ctf_guns/rawf/init.lua new file mode 100644 index 0000000..3867b85 --- /dev/null +++ b/mods/ctf_guns/rawf/init.lua @@ -0,0 +1,42 @@ +local api = {} +local MODNAME = minetest.get_current_modname() +rawset(_G, MODNAME, api) + +local files = { + "bullet.lua", + "ammo.lua" +} + +for _, file in ipairs(files) do + dofile(minetest.get_modpath(MODNAME).."/"..file) +end + +local checking = {} +-- Returns false if the automatic timer is currently running, returns true otherwise +function api.enable_automatic(fire_interval, itemstack, user) + local pname = user:get_player_name() + + if checking[pname] then return false end + + checking[pname] = minetest.after(fire_interval, function() + checking[pname] = nil + + if user and user:get_player_control().LMB then + local wielded = user:get_wielded_item() + + if wielded:get_name() == itemstack:get_name() then + user:set_wielded_item(itemstack:get_definition().on_use(wielded, user, {type = "nothing"}) or wielded) + end + end + end) + + return true +end + +minetest.register_on_leaveplayer(function(player) + local pname = player:get_player_name() + + if checking[pname] then + checking[pname]:cancel() + end +end) diff --git a/mods/ctf_guns/rawf/mod.conf b/mods/ctf_guns/rawf/mod.conf new file mode 100644 index 0000000..fa5b8f3 --- /dev/null +++ b/mods/ctf_guns/rawf/mod.conf @@ -0,0 +1,2 @@ +name = rawf + diff --git a/mods/default/README.txt b/mods/default/README.txt new file mode 100644 index 0000000..e8b78a7 --- /dev/null +++ b/mods/default/README.txt @@ -0,0 +1,407 @@ +Minetest Game mod: default +========================== +See license.txt for license information. + +Authors of source code +---------------------- +Originally by celeron55, Perttu Ahola (LGPLv2.1+) +Various Minetest Game developers and contributors (LGPLv2.1+) + +The torch code was derived by sofar from the 'torches' mod by +BlockMen (LGPLv2.1+) + +Authors of media (textures, sounds, models and schematics) +---------------------------------------------------------- +Everything not listed in here: +celeron55, Perttu Ahola (CC BY-SA 3.0) + + +Textures +-------- +Cisoun's texture pack (CC BY-SA 3.0): + default_jungletree.png + default_lava.png + default_leaves.png + default_sapling.png + default_bush_sapling.png + default_stone.png + default_tree.png + default_tree_top.png + default_water.png + +RealBadAngel's animated water (CC BY-SA 3.0): + default_water_source_animated.png + default_water_flowing_animated.png + +VanessaE (CC BY-SA 3.0): + default_torch_animated.png + default_torch_on_ceiling_animated.png + default_torch_on_floor_animated.png + default_torch_on_floor.png + default_desert_sand.png + default_desert_stone.png + default_sand.png + default_mese_crystal.png + default_mese_crystal_fragment.png + +Calinou (CC BY-SA 3.0): + default_brick.png + default_papyrus.png + default_mineral_copper.png + +PilzAdam (CC BY-SA 3.0): + default_jungleleaves.png + default_junglesapling.png + default_obsidian_glass.png + default_obsidian_shard.png + default_mineral_gold.png + +jojoa1997 (CC BY-SA 3.0): + default_obsidian.png + +InfinityProject (CC BY-SA 3.0): + default_mineral_diamond.png + +Splizard (CC BY-SA 3.0): + default_pine_sapling.png + default_pine_needles.png + +Zeg9 (CC BY-SA 3.0): + default_coal_block.png + +paramat (CC BY-SA 3.0): + wieldhand.png -- Copied from character.png by Jordach (CC BY-SA 3.0) + default_pinetree.png + default_pinetree_top.png + default_pinewood.png + default_acacia_leaves.png + default_acacia_leaves_simple.png + default_acacia_sapling.png + default_acacia_bush_sapling.png + default_pine_bush_sapling.png + default_acacia_tree.png + default_acacia_tree_top.png + default_acacia_wood.png + default_acacia_bush_stem.png + default_bush_stem.png + default_pine_bush_stem.png + default_junglewood.png + default_jungletree_top.png + default_sandstone_brick.png + default_obsidian_brick.png + default_stone_brick.png + default_desert_stone_brick.png + default_sandstone_block.png + default_obsidian_block.png + default_stone_block.png + default_desert_stone_block.png + default_river_water.png + default_river_water_source_animated.png + default_river_water_flowing_animated.png + default_dry_grass.png + default_dry_grass_side.png + default_dry_grass_*.png + default_grass_side.png -- Derived from a texture by TumeniNodes (CC-BY-SA 3.0) + default_mese_block.png + default_silver_sand.png + default_mese_post_light_side.png + default_mese_post_light_side_dark.png + default_mese_post_light_top.png + default_silver_sandstone.png -- Derived from a texture by GreenXenith (CC-BY-SA 3.0) + default_silver_sandstone_brick.png -- Derived from a texture by GreenXenith (CC-BY-SA 3.0) + default_silver_sandstone_block.png -- Derived from a texture by GreenXenith (CC-BY-SA 3.0) + default_bookshelf_slot.png -- Derived from a texture by Gambit (CC-BY-SA 3.0) + default_marram_grass_*.png -- Derived from textures by TumeniNodes (CC-BY-SA 3.0) + default_emergent_jungle_sapling.png + default_permafrost.png -- Derived from a texture by Neuromancer (CC BY-SA 3.0) + default_stones.png -- Derived from a texture by sofar (CC0 1.0) + default_stones_side.png -- Derived from a texture by sofar (CC0 1.0) + default_moss.png + default_moss_side.png + default_fence_rail_acacia_wood + default_fence_rail_aspen_wood -- Derived from a texture by sofar (CC BY-SA 3.0) + default_fence_rail_junglewood + default_fence_rail_pine_wood + default_fence_rail_wood -- Derived from a texture by BlockMen (CC BY-SA 3.0) + gui_hotbar.png + gui_hotbar_selected.png + +TumeniNodes (CC BY-SA 3.0): + default_desert_cobble.png -- Derived from a texture by brunob.santos (CC BY-SA 3.0) + default_coniferous_litter.png + default_coniferous_litter_side.png + default_grass.png + default_dry_dirt.png + +BlockMen (CC BY-SA 3.0): + default_aspen_leaves.png -- Derived from Sofar's texture + default_wood.png + default_clay_brick.png + default_iron_ingot.png + default_gold_ingot.png + default_tool_steelsword.png + default_diamond.png + default_tool_*.png + default_lava_source_animated.png + default_lava_flowing_animated.png + default_stick.png + default_chest_front.png + default_chest_lock.png + default_chest_side.png + default_chest_top.png + default_mineral_mese.png + default_meselamp.png + gui_formbg.png + gui_furnace_arrow_bg.png + gui_furnace_arrow_fg.png + gui_hb_bg.png + +sofar (CC BY-SA 3.0): + default_aspen_sapling + default_aspen_tree + default_aspen_tree_top, derived from default_pine_tree_top (by paramat) + default_aspen_wood, derived from default_pine_wood (by paramat) + default_chest_inside + +sofar (CC0 1.0): + default_gravel.png -- Derived from Gambit's PixelBOX texture pack light gravel + +Neuromancer (CC BY-SA 3.0): + default_cobble.png, based on texture by Brane praefect + default_mossycobble.png, based on texture by Brane praefect + default_furnace_*.png + +Gambit (CC BY-SA 3.0): + default_bronze_ingot.png + default_copper_ingot.png + default_copper_lump.png + default_iron_lump.png + default_gold_lump.png + default_clay_lump.png + default_coal_lump.png + default_grass_*.png + default_paper.png + default_diamond_block.png + default_ladder_steel.png + default_sign_wall_wood.png + default_flint.png + default_snow.png + default_snow_side.png + default_snowball.png + default_book.png + +asl97 (CC BY-SA 3.0): + default_ice.png + +Pithydon (CC BY-SA 3.0) + default_coral_brown.png + default_coral_orange.png + default_coral_skeleton.png + +Ferk (CC0 1.0): + default_item_smoke.png + +npx (CC BY-SA 3.0): + default_rainforest_litter.png + default_rainforest_litter_side.png + +kaeza (CC-BY-SA 3.0): + default_desert_sandstone.png + default_desert_sandstone_brick.png + default_desert_sandstone_block.png + +kilbith (CC BY-SA 3.0): + default_steel_block.png + default_copper_block.png + default_bronze_block.png + default_gold_block.png + default_tin_block.png + default_mineral_tin.png + default_tin_ingot.png + default_tin_lump.png + +tobyplowy (CC BY-SA 3.0): + default_kelp.png + +CloudyProton (CC BY-SA 3.0): + default_book_written.png, based on default_book.png by Gambit + +Mossmanikin (CC BY-SA 3.0): + default_fern_*.png + +random-geek (CC BY-SA 3.0): + default_blueberries.png + default_blueberry_overlay.png + default_blueberry_bush_leaves.png, derived from default_bush_leaves (by paramat) + default_blueberry_bush_sapling.png + default_dirt.png -- Derived from a texture by Neuromancer (CC BY-SA 3.0) + +Krock (CC0 1.0): + default_glass.png + default_glass_detail.png + +Topywo (CC BY-SA 3.0) + default_coral_cyan.png + default_coral_green.png + default_coral_pink.png + +Extex101 (CC BY-SA 3.0) + default_large_cactus_seedling.png + default_dry_shrub.png -- Derived from the original texture by celeron55 + +An0n3m0us (CC BY-SA 3.0): + heart.png -- Derived from a texture by KevDoy (CC BY-SA 3.0) + bubble.png -- Derived from a texture by BlockMen (CC BY-SA 3.0) + + +Sounds +------ +Glass breaking sounds (CC BY 3.0): + 1: http://www.freesound.org/people/cmusounddesign/sounds/71947/ + 2: http://www.freesound.org/people/Tomlija/sounds/97669/ + 3: http://www.freesound.org/people/lsprice/sounds/88808/ + +Mito551 (sounds) (CC BY-SA 3.0): + default_dig_crumbly.*.ogg + default_dig_dig_immediate.ogg + default_dig_oddly_breakable_by_hand.ogg + default_dug_node.*.ogg + default_grass_footstep.1.ogg + default_grass_footstep.2.ogg + default_grass_footstep.3.ogg + default_gravel_footstep.*.ogg + default_place_node.*.ogg + default_place_node_hard.*.ogg + default_glass_footstep.ogg + default_wood_footstep.1.ogg + default_wood_footstep.2.ogg + default_dirt_footstep.1.ogg + default_dirt_footstep.2.ogg + default_glass_footstep.ogg + +Metal sounds: + default_dig_metal.ogg - yadronoff - CC-BY-3.0 + - https://www.freesound.org/people/yadronoff/sounds/320397/ + default_dug_metal.*.ogg - Iwan Gabovitch - qubodup - CC0 + - http://opengameart.org/users/qubodup + default_metal_footstep.*.ogg - (CC0 1.0) - CC0 1.0 + - https://freesound.org/people/mypantsfelldown/sounds/398937/ + default_place_node_metal.*.ogg - Ogrebane - CC0 + - http://opengameart.org/content/wood-and-metal-sound-effects-volume-2 + +Tool breaking sounds added by sofar: CC-BY-3.0 + default_tool_breaks.* - http://www.freesound.org/people/HerbertBoland/sounds/33206/ + +AGFX (CC BY 3.0): +https://www.freesound.org/people/AGFX/packs/1253/ + default_water_footstep.1.ogg + default_water_footstep.2.ogg + default_water_footstep.3.ogg + +blukotek (CC0 1.0): +https://www.freesound.org/people/blukotek/sounds/251660/ + default_dig_snappy.ogg + +Chests sounds added by sofar, derived of several files mixed together: + default_chest_open.ogg + default_chest_close.ogg + - http://www.freesound.org/people/Sevin7/sounds/269722/ CC0 + - http://www.freesound.org/people/Percy%20Duke/sounds/23448/ CC-BY-3.0 + - http://www.freesound.org/people/kingsamas/sounds/135576/ CC-BY-3.0 + - http://www.freesound.org/people/bulbastre/sounds/126887/ CC-BY-3.0 + - http://www.freesound.org/people/Yoyodaman234/sounds/183541/ CC0 + +Ryding (CC0 1.0): +http://freesound.org/people/Ryding/sounds/94337/ + default_snow_footstep.*.ogg + +Ferk (CC0 1.0): + default_item_smoke.ogg, based on a sound by http://opengameart.org/users/bart + +sonictechtonic (CC BY 3.0): +https://www.freesound.org/people/sonictechtonic/sounds/241872/ + player_damage.ogg + +Sheyvan (CC0 1.0): +https://freesound.org/people/Sheyvan/sounds/476113/ + default_dig_choppy.*.ogg + +lolamadeus (CC0 1.0): +https://freesound.org/people/lolamadeus/sounds/179341/ + default_gravel_dig.*.ogg + default_gravel_dug.*.ogg + +Benboncan (CC BY 3.0): +https://freesound.org/people/Benboncan/sounds/71823/ + default_dig_cracky.*.ogg + +Erdie (CC BY 3.0): +https://freesound.org/people/Erdie/sounds/41579/ + default_hard_footstep.*.ogg + +worthahep88 (CC0 1.0): +https://freesound.org/people/worthahep88/sounds/319224/ + default_sand_footstep.*.ogg + +dheming (CC BY 3.0): +https://freesound.org/people/dheming/sounds/268023/ + default_ice_dig.*.ogg + +InspectorJ (CC BY 3.0): +https://freesound.org/people/InspectorJ/sounds/416967/ + default_ice_footstep.*.ogg + +Angel_Perez_Grandi (CC BY 3.0): +https://freesound.org/people/Angel_Perez_Grandi/sounds/49190/ + default_ice_dug.ogg + +iankath (CC0 1.0) +https://freesound.org/people/iankath/sounds/173991/ + default_furnace_active.ogg + + +Models +------ +sofar (CC BY-SA 3.0): + chest_open.obj + torch_ceiling.obj + torch_floor.obj + torch_wall.obj + + +Schematics +---------- +paramat (CC BY-SA 3.0): + acacia_bush.mts + acacia_tree.mts + acacia_tree_from_sapling.mts + apple_tree.mts + apple_tree_from_sapling.mts + aspen_tree.mts + aspen_tree_from_sapling.mts + bush.mts + emergent_jungle_tree.mts + emergent_jungle_tree_from_sapling.mts + jungle_tree.mts + jungle_tree_from_sapling.mts + large_cactus.mts + papyrus.mts + pine_tree.mts + pine_tree_from_sapling.mts + snowy_pine_tree_from_sapling.mts + small_pine_tree.mts + small_pine_tree_from_sapling.mts + snowy_small_pine_tree_from_sapling.mts + +Shara RedCat (CC BY-SA 3.0): + acacia_log.mts + apple_log.mts + aspen_log.mts + jungle_log.mts + pine_log.mts + +TumeniNodes (CC BY-SA 3.0): + pine_bush.mts + +random-geek (CC BY-SA 3.0): + blueberry_bush.mts diff --git a/mods/default/aliases.lua b/mods/default/aliases.lua new file mode 100644 index 0000000..6db3fc8 --- /dev/null +++ b/mods/default/aliases.lua @@ -0,0 +1,77 @@ +-- mods/default/aliases.lua + +-- Aliases to support loading worlds using nodes following the old naming convention +-- These can also be helpful when using chat commands, for example /giveme +minetest.register_alias("stone", "default:stone") +minetest.register_alias("stone_with_coal", "default:stone_with_coal") +minetest.register_alias("stone_with_iron", "default:stone_with_iron") +minetest.register_alias("dirt_with_grass", "default:dirt_with_grass") +minetest.register_alias("dirt_with_grass_footsteps", "default:dirt_with_grass_footsteps") +minetest.register_alias("dirt", "default:dirt") +minetest.register_alias("sand", "default:sand") +minetest.register_alias("gravel", "default:gravel") +minetest.register_alias("sandstone", "default:sandstone") +minetest.register_alias("clay", "default:clay") +minetest.register_alias("brick", "default:brick") +minetest.register_alias("tree", "default:tree") +minetest.register_alias("jungletree", "default:jungletree") +minetest.register_alias("junglegrass", "default:junglegrass") +minetest.register_alias("leaves", "default:leaves") +minetest.register_alias("cactus", "default:cactus") +minetest.register_alias("papyrus", "default:papyrus") +minetest.register_alias("bookshelf", "default:bookshelf") +minetest.register_alias("glass", "default:glass") +minetest.register_alias("wooden_fence", "default:fence_wood") +minetest.register_alias("rail", "carts:rail") +minetest.register_alias("ladder", "default:ladder_wood") +minetest.register_alias("wood", "default:wood") +minetest.register_alias("mese", "default:mese") +minetest.register_alias("cloud", "default:cloud") +minetest.register_alias("water_flowing", "default:water_flowing") +minetest.register_alias("water_source", "default:water_source") +minetest.register_alias("lava_flowing", "default:lava_flowing") +minetest.register_alias("lava_source", "default:lava_source") +minetest.register_alias("torch", "default:torch") +minetest.register_alias("sign_wall", "default:sign_wall_wood") +minetest.register_alias("furnace", "default:furnace") +minetest.register_alias("chest", "default:chest") +minetest.register_alias("locked_chest", "default:chest_locked") +minetest.register_alias("cobble", "default:cobble") +minetest.register_alias("mossycobble", "default:mossycobble") +minetest.register_alias("steelblock", "default:steelblock") +minetest.register_alias("sapling", "default:sapling") +minetest.register_alias("apple", "default:apple") + +minetest.register_alias("WPick", "default:pick_wood") +minetest.register_alias("STPick", "default:pick_stone") +minetest.register_alias("SteelPick", "default:pick_steel") +minetest.register_alias("MesePick", "default:pick_mese") +minetest.register_alias("WShovel", "default:shovel_wood") +minetest.register_alias("STShovel", "default:shovel_stone") +minetest.register_alias("SteelShovel", "default:shovel_steel") +minetest.register_alias("WAxe", "default:axe_wood") +minetest.register_alias("STAxe", "default:axe_stone") +minetest.register_alias("SteelAxe", "default:axe_steel") +minetest.register_alias("WSword", "default:sword_wood") +minetest.register_alias("STSword", "default:sword_stone") +minetest.register_alias("SteelSword", "default:sword_steel") + +minetest.register_alias("Stick", "default:stick") +minetest.register_alias("paper", "default:paper") +minetest.register_alias("book", "default:book") +minetest.register_alias("lump_of_coal", "default:coal_lump") +minetest.register_alias("lump_of_iron", "default:iron_lump") +minetest.register_alias("lump_of_clay", "default:clay_lump") +minetest.register_alias("steel_ingot", "default:steel_ingot") +minetest.register_alias("clay_brick", "default:clay_brick") +minetest.register_alias("snow", "default:snow") + +-- 'mese_block' was used for a while for the block form of mese +minetest.register_alias("default:mese_block", "default:mese") + +-- Aliases for corrected pine node names +minetest.register_alias("default:pinetree", "default:pine_tree") +minetest.register_alias("default:pinewood", "default:pine_wood") + +minetest.register_alias("default:ladder", "default:ladder_wood") +minetest.register_alias("default:sign_wall", "default:sign_wall_wood") diff --git a/mods/default/chat.lua b/mods/default/chat.lua new file mode 100644 index 0000000..996973a --- /dev/null +++ b/mods/default/chat.lua @@ -0,0 +1,28 @@ +-- mods/default/chat.lua + +local function match_old(privs) + local ok = false + for k, v in pairs(privs) do + if k == "give" and v then + ok = true + elseif v then + return false + end + end + return ok +end + +-- Change /pulverize and /clearinv to not require give, like it used to be +-- before Luanti 5.15 +for _, cmd in ipairs({"pulverize", "clearinv"}) do + local def = core.registered_chatcommands[cmd] + if def then + if match_old(def.privs) then + core.override_chatcommand(cmd, { + privs = {interact=true}, + }) + else + minetest.log("info", "Privileges of command /" .. cmd .. " look modified, not overriding them.") + end + end +end diff --git a/mods/default/chests.lua b/mods/default/chests.lua new file mode 100644 index 0000000..1d9b150 --- /dev/null +++ b/mods/default/chests.lua @@ -0,0 +1,380 @@ +default.chest = {} + +-- support for MT game translation. +local S = default.get_translator + +function default.chest.get_chest_formspec(pos) + local spos = pos.x .. "," .. pos.y .. "," .. pos.z + local formspec = + "size[8,9]" .. + "list[nodemeta:" .. spos .. ";main;0,0.3;8,4;]" .. + "list[current_player;main;0,4.85;8,1;]" .. + "list[current_player;main;0,6.08;8,3;8]" .. + "listring[nodemeta:" .. spos .. ";main]" .. + "listring[current_player;main]" .. + default.get_hotbar_bg(0,4.85) + return formspec +end + +function default.chest.chest_lid_obstructed(pos) + local above = {x = pos.x, y = pos.y + 1, z = pos.z} + local def = minetest.registered_nodes[minetest.get_node(above).name] + -- allow ladders, signs, wallmounted things and torches to not obstruct + if def and + (def.drawtype == "airlike" or + def.drawtype == "signlike" or + def.drawtype == "torchlike" or + (def.drawtype == "nodebox" and def.paramtype2 == "wallmounted")) then + return false + end + return true +end + +function default.chest.chest_lid_close(pn) + local chest_open_info = default.chest.open_chests[pn] + local pos = chest_open_info.pos + local sound = chest_open_info.sound + local swap = chest_open_info.swap + + default.chest.open_chests[pn] = nil + for k, v in pairs(default.chest.open_chests) do + if vector.equals(v.pos, pos) then + -- another player is also looking at the chest + return true + end + end + + local node = minetest.get_node(pos) + minetest.after(0.2, function() + local current_node = minetest.get_node(pos) + if current_node.name ~= swap .. "_open" then + -- the chest has already been replaced, don't try to replace what's there. + return + end + minetest.swap_node(pos, {name = swap, param2 = node.param2}) + minetest.sound_play(sound, {gain = 0.3, pos = pos, + max_hear_distance = 10}, true) + end) +end + +default.chest.open_chests = {} + +minetest.register_on_player_receive_fields(function(player, formname, fields) + local pn = player:get_player_name() + + if formname ~= "default:chest" then + if default.chest.open_chests[pn] then + default.chest.chest_lid_close(pn) + end + + return + end + + if not (fields.quit and default.chest.open_chests[pn]) then + return + end + + default.chest.chest_lid_close(pn) + + return true +end) + +minetest.register_on_leaveplayer(function(player) + local pn = player:get_player_name() + if default.chest.open_chests[pn] then + default.chest.chest_lid_close(pn) + end +end) + +function default.chest.register_chest(prefixed_name, d) + local name = prefixed_name:sub(1,1) == ':' and prefixed_name:sub(2,-1) or prefixed_name + local def = table.copy(d) + def.drawtype = "mesh" + def.visual = "mesh" + def.paramtype = "light" + def.paramtype2 = "facedir" + def.legacy_facedir_simple = true + def.is_ground_content = false + + if def.protected then + def.on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", S("Locked Chest")) + meta:set_string("owner", "") + local inv = meta:get_inventory() + inv:set_size("main", 8*4) + end + def.after_place_node = function(pos, placer) + local meta = minetest.get_meta(pos) + meta:set_string("owner", placer:get_player_name() or "") + meta:set_string("infotext", S("Locked Chest (owned by @1)", meta:get_string("owner"))) + end + def.can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") and + default.can_interact_with_node(player, pos) + end + def.allow_metadata_inventory_move = function(pos, from_list, from_index, + to_list, to_index, count, player) + if not default.can_interact_with_node(player, pos) then + return 0 + end + return count + end + def.allow_metadata_inventory_put = function(pos, listname, index, stack, player) + if not default.can_interact_with_node(player, pos) then + return 0 + end + return stack:get_count() + end + def.allow_metadata_inventory_take = function(pos, listname, index, stack, player) + if not default.can_interact_with_node(player, pos) then + return 0 + end + return stack:get_count() + end + def.on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + if not default.can_interact_with_node(clicker, pos) then + return itemstack + end + + local cn = clicker:get_player_name() + + if default.chest.open_chests[cn] then + default.chest.chest_lid_close(cn) + end + + minetest.sound_play(def.sound_open, {gain = 0.3, + pos = pos, max_hear_distance = 10}, true) + if not default.chest.chest_lid_obstructed(pos) then + minetest.swap_node(pos, + { name = name .. "_open", + param2 = node.param2 }) + end + minetest.after(0.2, minetest.show_formspec, cn, + "default:chest", default.chest.get_chest_formspec(pos)) + default.chest.open_chests[cn] = { pos = pos, + sound = def.sound_close, swap = name } + end + def.on_blast = function() end + def.on_key_use = function(pos, player) + local secret = minetest.get_meta(pos):get_string("key_lock_secret") + local itemstack = player:get_wielded_item() + local key_meta = itemstack:get_meta() + + if itemstack:get_meta():get_string("") == "" then + return + end + + if key_meta:get_string("secret") == "" then + key_meta:set_string("secret", minetest.parse_json(itemstack:get_meta():get_string("")).secret) + itemstack:set_metadata("") + end + + if secret ~= key_meta:get_string("secret") then + return + end + + minetest.show_formspec( + player:get_player_name(), + "default:chest_locked", + default.chest.get_chest_formspec(pos) + ) + end + def.on_skeleton_key_use = function(pos, player, newsecret) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + local pn = player:get_player_name() + + -- verify placer is owner of lockable chest + if owner ~= pn then + minetest.record_protection_violation(pos, pn) + minetest.chat_send_player(pn, S("You do not own this chest.")) + return nil + end + + local secret = meta:get_string("key_lock_secret") + if secret == "" then + secret = newsecret + meta:set_string("key_lock_secret", secret) + end + + return secret, S("a locked chest"), owner + end + else + def.on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", S("Chest")) + local inv = meta:get_inventory() + inv:set_size("main", 8*4) + end + def.can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end + def.on_rightclick = function(pos, node, clicker) + local cn = clicker:get_player_name() + + if default.chest.open_chests[cn] then + default.chest.chest_lid_close(cn) + end + + minetest.sound_play(def.sound_open, {gain = 0.3, pos = pos, + max_hear_distance = 10}, true) + if not default.chest.chest_lid_obstructed(pos) then + minetest.swap_node(pos, { + name = name .. "_open", + param2 = node.param2 }) + end + minetest.after(0.2, minetest.show_formspec, + cn, + "default:chest", default.chest.get_chest_formspec(pos)) + default.chest.open_chests[cn] = { pos = pos, + sound = def.sound_close, swap = name } + end + def.on_blast = function(pos) + local drops = {} + default.get_inventory_drops(pos, "main", drops) + drops[#drops+1] = name + minetest.remove_node(pos) + return drops + end + end + + default.set_inventory_action_loggers(def, "chest") + + local def_opened = table.copy(def) + local def_closed = table.copy(def) + + def_opened.mesh = "chest_open.obj" + for i = 1, #def_opened.tiles do + if type(def_opened.tiles[i]) == "string" then + def_opened.tiles[i] = {name = def_opened.tiles[i], backface_culling = true} + elseif def_opened.tiles[i].backface_culling == nil then + def_opened.tiles[i].backface_culling = true + end + end + def_opened.drop = name + def_opened.groups.not_in_creative_inventory = 1 + def_opened.selection_box = { + type = "fixed", + fixed = { -1/2, -1/2, -1/2, 1/2, 3/16, 1/2 }, + } + def_opened.can_dig = function() + return false + end + def_opened.on_blast = function() end + + def_closed.mesh = nil + def_closed.drawtype = nil + def_closed.tiles[6] = def.tiles[5] -- swap textures around for "normal" + def_closed.tiles[5] = def.tiles[3] -- drawtype to make them match the mesh + def_closed.tiles[3] = def.tiles[3].."^[transformFX" + + minetest.register_node(prefixed_name, def_closed) + minetest.register_node(prefixed_name .. "_open", def_opened) + + -- convert old chests to this new variant + if name == "default:chest" or name == "default:chest_locked" then + minetest.register_lbm({ + label = "update chests to opening chests", + name = "default:upgrade_" .. name:sub(9,-1) .. "_v2", + nodenames = {name}, + action = function(pos, node) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "") + local inv = meta:get_inventory() + local list = inv:get_list("default:chest") + if list then + inv:set_size("main", 8*4) + inv:set_list("main", list) + inv:set_list("default:chest", nil) + end + end + }) + end + + -- close opened chests on load + local modname, chestname = prefixed_name:match("^(:?.-):(.*)$") + minetest.register_lbm({ + label = "close opened chests on load", + name = modname .. ":close_" .. chestname .. "_open", + nodenames = {prefixed_name .. "_open"}, + run_at_every_load = true, + action = function(pos, node) + node.name = prefixed_name + minetest.swap_node(pos, node) + end + }) +end + +default.chest.register_chest("default:chest", { + description = S("Chest"), + tiles = { + "default_chest_top.png", + "default_chest_top.png", + "default_chest_side.png", + "default_chest_side.png", + "default_chest_front.png", + "default_chest_inside.png" + }, + sounds = default.node_sound_wood_defaults(), + sound_open = "default_chest_open", + sound_close = "default_chest_close", + groups = {choppy = 2, oddly_breakable_by_hand = 2}, +}) + +default.chest.register_chest("default:chest_locked", { + description = S("Locked Chest"), + tiles = { + "default_chest_top.png", + "default_chest_top.png", + "default_chest_side.png", + "default_chest_side.png", + "default_chest_lock.png", + "default_chest_inside.png" + }, + sounds = default.node_sound_wood_defaults(), + sound_open = "default_chest_open", + sound_close = "default_chest_close", + groups = {choppy = 2, oddly_breakable_by_hand = 2}, + protected = true, +}) + +minetest.register_craft({ + output = "default:chest", + recipe = { + {"group:wood", "group:wood", "group:wood"}, + {"group:wood", "", "group:wood"}, + {"group:wood", "group:wood", "group:wood"}, + } +}) + +minetest.register_craft({ + output = "default:chest_locked", + recipe = { + {"group:wood", "group:wood", "group:wood"}, + {"group:wood", "default:steel_ingot", "group:wood"}, + {"group:wood", "group:wood", "group:wood"}, + } +}) + +minetest.register_craft( { + type = "shapeless", + output = "default:chest_locked", + recipe = {"default:chest", "default:steel_ingot"}, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:chest", + burntime = 30, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:chest_locked", + burntime = 30, +}) diff --git a/mods/default/crafting.lua b/mods/default/crafting.lua new file mode 100644 index 0000000..ecbe9d1 --- /dev/null +++ b/mods/default/crafting.lua @@ -0,0 +1,737 @@ +-- mods/default/crafting.lua + +minetest.register_craft({ + output = "default:wood 4", + recipe = { + {"default:tree"}, + } +}) + +minetest.register_craft({ + output = "default:junglewood 4", + recipe = { + {"default:jungletree"}, + } +}) + +minetest.register_craft({ + output = "default:pine_wood 4", + recipe = { + {"default:pine_tree"}, + } +}) + +minetest.register_craft({ + output = "default:acacia_wood 4", + recipe = { + {"default:acacia_tree"}, + } +}) + +minetest.register_craft({ + output = "default:aspen_wood 4", + recipe = { + {"default:aspen_tree"}, + } +}) + +minetest.register_craft({ + output = "default:wood", + recipe = { + {"default:bush_stem"}, + } +}) + +minetest.register_craft({ + output = "default:acacia_wood", + recipe = { + {"default:acacia_bush_stem"}, + } +}) + +minetest.register_craft({ + output = "default:pine_wood", + recipe = { + {"default:pine_bush_stem"}, + } +}) + +minetest.register_craft({ + output = "default:sign_wall_steel 3", + recipe = { + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"", "group:stick", ""}, + } +}) + +minetest.register_craft({ + output = "default:sign_wall_wood 3", + recipe = { + {"group:wood", "group:wood", "group:wood"}, + {"group:wood", "group:wood", "group:wood"}, + {"", "group:stick", ""}, + } +}) + +minetest.register_craft({ + output = "default:coalblock", + recipe = { + {"default:coal_lump", "default:coal_lump", "default:coal_lump"}, + {"default:coal_lump", "default:coal_lump", "default:coal_lump"}, + {"default:coal_lump", "default:coal_lump", "default:coal_lump"}, + } +}) + +minetest.register_craft({ + output = "default:steelblock", + recipe = { + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + } +}) + +minetest.register_craft({ + output = "default:copperblock", + recipe = { + {"default:copper_ingot", "default:copper_ingot", "default:copper_ingot"}, + {"default:copper_ingot", "default:copper_ingot", "default:copper_ingot"}, + {"default:copper_ingot", "default:copper_ingot", "default:copper_ingot"}, + } +}) + +minetest.register_craft({ + output = "default:tinblock", + recipe = { + {"default:tin_ingot", "default:tin_ingot", "default:tin_ingot"}, + {"default:tin_ingot", "default:tin_ingot", "default:tin_ingot"}, + {"default:tin_ingot", "default:tin_ingot", "default:tin_ingot"}, + } +}) + +minetest.register_craft({ + output = "default:bronzeblock", + recipe = { + {"default:bronze_ingot", "default:bronze_ingot", "default:bronze_ingot"}, + {"default:bronze_ingot", "default:bronze_ingot", "default:bronze_ingot"}, + {"default:bronze_ingot", "default:bronze_ingot", "default:bronze_ingot"}, + } +}) + +minetest.register_craft({ + output = "default:bronze_ingot 9", + recipe = { + {"default:bronzeblock"}, + } +}) + +minetest.register_craft({ + output = "default:goldblock", + recipe = { + {"default:gold_ingot", "default:gold_ingot", "default:gold_ingot"}, + {"default:gold_ingot", "default:gold_ingot", "default:gold_ingot"}, + {"default:gold_ingot", "default:gold_ingot", "default:gold_ingot"}, + } +}) + +minetest.register_craft({ + output = "default:diamondblock", + recipe = { + {"default:diamond", "default:diamond", "default:diamond"}, + {"default:diamond", "default:diamond", "default:diamond"}, + {"default:diamond", "default:diamond", "default:diamond"}, + } +}) + +minetest.register_craft({ + output = "default:sandstone", + recipe = { + {"default:sand", "default:sand"}, + {"default:sand", "default:sand"}, + } +}) + +minetest.register_craft({ + output = "default:sand 4", + recipe = { + {"default:sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:sandstonebrick 4", + recipe = { + {"default:sandstone", "default:sandstone"}, + {"default:sandstone", "default:sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:sandstone_block 9", + recipe = { + {"default:sandstone", "default:sandstone", "default:sandstone"}, + {"default:sandstone", "default:sandstone", "default:sandstone"}, + {"default:sandstone", "default:sandstone", "default:sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:desert_sandstone", + recipe = { + {"default:desert_sand", "default:desert_sand"}, + {"default:desert_sand", "default:desert_sand"}, + } +}) + +minetest.register_craft({ + output = "default:desert_sand 4", + recipe = { + {"default:desert_sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:desert_sandstone_brick 4", + recipe = { + {"default:desert_sandstone", "default:desert_sandstone"}, + {"default:desert_sandstone", "default:desert_sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:desert_sandstone_block 9", + recipe = { + {"default:desert_sandstone", "default:desert_sandstone", "default:desert_sandstone"}, + {"default:desert_sandstone", "default:desert_sandstone", "default:desert_sandstone"}, + {"default:desert_sandstone", "default:desert_sandstone", "default:desert_sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:silver_sandstone", + recipe = { + {"default:silver_sand", "default:silver_sand"}, + {"default:silver_sand", "default:silver_sand"}, + } +}) + +minetest.register_craft({ + output = "default:silver_sand 4", + recipe = { + {"default:silver_sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:silver_sandstone_brick 4", + recipe = { + {"default:silver_sandstone", "default:silver_sandstone"}, + {"default:silver_sandstone", "default:silver_sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:silver_sandstone_block 9", + recipe = { + {"default:silver_sandstone", "default:silver_sandstone", "default:silver_sandstone"}, + {"default:silver_sandstone", "default:silver_sandstone", "default:silver_sandstone"}, + {"default:silver_sandstone", "default:silver_sandstone", "default:silver_sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:clay", + recipe = { + {"default:clay_lump", "default:clay_lump"}, + {"default:clay_lump", "default:clay_lump"}, + } +}) + +minetest.register_craft({ + output = "default:brick", + recipe = { + {"default:clay_brick", "default:clay_brick"}, + {"default:clay_brick", "default:clay_brick"}, + } +}) + +minetest.register_craft({ + output = "default:bookshelf", + recipe = { + {"group:wood", "group:wood", "group:wood"}, + {"default:book", "default:book", "default:book"}, + {"group:wood", "group:wood", "group:wood"}, + } +}) + +minetest.register_craft({ + output = "default:ladder_wood 5", + recipe = { + {"group:stick", "", "group:stick"}, + {"group:stick", "group:stick", "group:stick"}, + {"group:stick", "", "group:stick"}, + } +}) + +minetest.register_craft({ + output = "default:ladder_steel 15", + recipe = { + {"default:steel_ingot", "", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "", "default:steel_ingot"}, + } +}) + +minetest.register_craft({ + output = "default:mese", + recipe = { + {"default:mese_crystal", "default:mese_crystal", "default:mese_crystal"}, + {"default:mese_crystal", "default:mese_crystal", "default:mese_crystal"}, + {"default:mese_crystal", "default:mese_crystal", "default:mese_crystal"}, + } +}) + +minetest.register_craft({ + output = "default:meselamp", + recipe = { + {"default:glass"}, + {"default:mese_crystal"}, + } +}) + +minetest.register_craft({ + output = "default:obsidian", + recipe = { + {"default:obsidian_shard", "default:obsidian_shard", "default:obsidian_shard"}, + {"default:obsidian_shard", "default:obsidian_shard", "default:obsidian_shard"}, + {"default:obsidian_shard", "default:obsidian_shard", "default:obsidian_shard"}, + } +}) + +minetest.register_craft({ + output = "default:obsidianbrick 4", + recipe = { + {"default:obsidian", "default:obsidian"}, + {"default:obsidian", "default:obsidian"} + } +}) + +minetest.register_craft({ + output = "default:obsidian_block 9", + recipe = { + {"default:obsidian", "default:obsidian", "default:obsidian"}, + {"default:obsidian", "default:obsidian", "default:obsidian"}, + {"default:obsidian", "default:obsidian", "default:obsidian"}, + } +}) + +minetest.register_craft({ + output = "default:stonebrick 4", + recipe = { + {"default:stone", "default:stone"}, + {"default:stone", "default:stone"}, + } +}) + +minetest.register_craft({ + output = "default:stone_block 9", + recipe = { + {"default:stone", "default:stone", "default:stone"}, + {"default:stone", "default:stone", "default:stone"}, + {"default:stone", "default:stone", "default:stone"}, + } +}) + +minetest.register_craft({ + output = "default:desert_stonebrick 4", + recipe = { + {"default:desert_stone", "default:desert_stone"}, + {"default:desert_stone", "default:desert_stone"}, + } +}) + +minetest.register_craft({ + output = "default:desert_stone_block 9", + recipe = { + {"default:desert_stone", "default:desert_stone", "default:desert_stone"}, + {"default:desert_stone", "default:desert_stone", "default:desert_stone"}, + {"default:desert_stone", "default:desert_stone", "default:desert_stone"}, + } +}) + +minetest.register_craft({ + output = "default:snowblock", + recipe = { + {"default:snow", "default:snow", "default:snow"}, + {"default:snow", "default:snow", "default:snow"}, + {"default:snow", "default:snow", "default:snow"}, + } +}) + +minetest.register_craft({ + output = "default:snow 9", + recipe = { + {"default:snowblock"}, + } +}) + +minetest.register_craft({ + output = "default:emergent_jungle_sapling", + recipe = { + {"default:junglesapling", "default:junglesapling", "default:junglesapling"}, + {"default:junglesapling", "default:junglesapling", "default:junglesapling"}, + {"default:junglesapling", "default:junglesapling", "default:junglesapling"}, + } +}) + +minetest.register_craft({ + output = "default:large_cactus_seedling", + recipe = { + {"", "default:cactus", ""}, + {"default:cactus", "default:cactus", "default:cactus"}, + {"", "default:cactus", ""}, + } +}) + + +-- +-- Crafting (tool repair) +-- + +minetest.register_craft({ + type = "toolrepair", + additional_wear = -0.02, +}) + + +-- +-- Cooking recipes +-- + +minetest.register_craft({ + type = "cooking", + output = "default:glass", + recipe = "group:sand", +}) + +minetest.register_craft({ + type = "cooking", + output = "default:obsidian_glass", + recipe = "default:obsidian_shard", +}) + +minetest.register_craft({ + type = "cooking", + output = "default:stone", + recipe = "default:cobble", +}) + +minetest.register_craft({ + type = "cooking", + output = "default:stone", + recipe = "default:mossycobble", +}) + +minetest.register_craft({ + type = "cooking", + output = "default:desert_stone", + recipe = "default:desert_cobble", +}) + + +-- +-- Fuels +-- + +-- Support use of group:tree, includes default:tree which has the same burn time +minetest.register_craft({ + type = "fuel", + recipe = "group:tree", + burntime = 30, +}) + +-- Burn time for all woods are in order of wood density, +-- which is also the order of wood colour darkness: +-- aspen, pine, apple, acacia, jungle + +minetest.register_craft({ + type = "fuel", + recipe = "default:aspen_tree", + burntime = 22, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:pine_tree", + burntime = 26, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:acacia_tree", + burntime = 34, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:jungletree", + burntime = 38, +}) + + +-- Support use of group:wood, includes default:wood which has the same burn time +minetest.register_craft({ + type = "fuel", + recipe = "group:wood", + burntime = 7, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:aspen_wood", + burntime = 5, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:pine_wood", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:acacia_wood", + burntime = 8, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:junglewood", + burntime = 9, +}) + + +-- Support use of group:sapling, includes default:sapling which has the same burn time +minetest.register_craft({ + type = "fuel", + recipe = "group:sapling", + burntime = 5, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:bush_sapling", + burntime = 3, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:acacia_bush_sapling", + burntime = 4, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:pine_bush_sapling", + burntime = 2, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:aspen_sapling", + burntime = 4, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:pine_sapling", + burntime = 5, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:acacia_sapling", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:junglesapling", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:emergent_jungle_sapling", + burntime = 7, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_aspen_wood", + burntime = 5, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_pine_wood", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_wood", + burntime = 7, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_acacia_wood", + burntime = 8, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_junglewood", + burntime = 9, +}) + + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_rail_aspen_wood", + burntime = 3, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_rail_pine_wood", + burntime = 4, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_rail_wood", + burntime = 5, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_rail_acacia_wood", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_rail_junglewood", + burntime = 7, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:bush_stem", + burntime = 7, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:acacia_bush_stem", + burntime = 8, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:pine_bush_stem", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:junglegrass", + burntime = 3, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "group:leaves", + burntime = 4, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:cactus", + burntime = 15, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:large_cactus_seedling", + burntime = 5, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:papyrus", + burntime = 3, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:bookshelf", + burntime = 30, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:ladder_wood", + burntime = 7, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:lava_source", + burntime = 60, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:sign_wall_wood", + burntime = 10, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:coalblock", + burntime = 370, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:grass_1", + burntime = 2, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:dry_grass_1", + burntime = 2, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fern_1", + burntime = 2, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:marram_grass_1", + burntime = 2, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:dry_shrub", + burntime = 2, +}) diff --git a/mods/default/craftitems.lua b/mods/default/craftitems.lua new file mode 100644 index 0000000..4cc5f8d --- /dev/null +++ b/mods/default/craftitems.lua @@ -0,0 +1,543 @@ +-- mods/default/craftitems.lua + +-- support for MT game translation. +local S = default.get_translator + +local esc = minetest.formspec_escape +local formspec_size = "size[8,8]" + +local function formspec_core(tab) + if tab == nil then tab = 1 else tab = tostring(tab) end + return "tabheader[0,0;book_header;" .. + esc(S("Write")) .. "," .. + esc(S("Read")) .. ";" .. + tab .. ";false;false]" +end + +local function formspec_write(title, text) + return "field[0.5,1;7.5,0;title;" .. esc(S("Title:")) .. ";" .. + esc(title) .. "]" .. + "textarea[0.5,1.5;7.5,7;text;" .. esc(S("Contents:")) .. ";" .. + esc(text) .. "]" .. + "button_exit[2.5,7.5;3,1;save;" .. esc(S("Save")) .. "]" +end + +local function formspec_read(owner, title, string, text, page, page_max) + return "label[0.5,0.5;" .. esc(S("by @1", owner)) .. "]" .. + "tablecolumns[color;text]" .. + "tableoptions[background=#00000000;highlight=#00000000;border=false]" .. + "table[0.4,0;7,0.5;title;#FFFF00," .. esc(title) .. "]" .. + "textarea[0.5,1.5;7.5,7;;" .. + esc(string ~= "" and string or text) .. ";]" .. + "button[2.4,7.6;0.8,0.8;book_prev;<]" .. + "label[3.2,7.7;" .. esc(S("Page @1 of @2", page, page_max)) .. "]" .. + "button[4.9,7.6;0.8,0.8;book_next;>]" +end + +local function formspec_string(lpp, page, lines, string) + for i = ((lpp * page) - lpp) + 1, lpp * page do + if not lines[i] then break end + string = string .. lines[i] .. "\n" + end + return string +end + +local book_writers = {} + +minetest.register_on_leaveplayer(function(player) + book_writers[player:get_player_name()] = nil +end) + +local tab_number +local lpp = 14 -- Lines per book's page +local function book_on_use(itemstack, user) + local player_name = user:get_player_name() + local meta = itemstack:get_meta() + local title, text, owner = "", "", player_name + local page, page_max, lines, string = 1, 1, {}, "" + + -- Backwards compatibility + local old_data = minetest.deserialize(itemstack:get_meta():get_string("")) + if old_data then + meta:from_table({ fields = old_data }) + end + + local data = meta:to_table().fields + + if data.owner then + title = data.title or "" + text = data.text or "" + owner = data.owner + + for str in (text .. "\n"):gmatch("([^\n]*)[\n]") do + lines[#lines+1] = str + end + + if data.page then + page = data.page + page_max = data.page_max + string = formspec_string(lpp, page, lines, string) + end + end + + local formspec + if title == "" and text == "" then + formspec = formspec_write(title, text) + elseif owner == player_name then + local tab = tab_number or 1 + if tab == 2 then + formspec = formspec_core(tab) .. + formspec_read(owner, title, string, text, page, page_max) + else + formspec = formspec_core(tab) .. formspec_write(title, text) + end + else + formspec = formspec_read(owner, title, string, text, page, page_max) + end + + minetest.show_formspec(player_name, "default:book", formspec_size .. formspec) + -- Store the wield index in case the user accidentally switches before the formspec is shown + book_writers[player_name] = {wield_index = user:get_wield_index()} + return itemstack +end + +local max_text_size = 10000 +local max_title_size = 80 +local short_title_size = 35 +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname ~= "default:book" then + return + end + local player_name = player:get_player_name() + local inv = player:get_inventory() + if not book_writers[player_name] then + return + end + local wield_index = book_writers[player_name].wield_index + local wield_list = player:get_wield_list() + local stack = inv:get_stack(wield_list, wield_index) + local written = stack:get_name() == "default:book_written" + if stack:get_name() ~= "default:book" and not written then + -- No book in the wield slot, abort & inform the player + minetest.chat_send_player(player_name, S("The book you were writing to mysteriously disappeared.")) + return + end + local data = stack:get_meta():to_table().fields + + local title = data.title or "" + local text = data.text or "" + + if fields.book_header ~= nil and data.owner == player_name then + local contents + local tab = tonumber(fields.book_header) + if tab == 1 then + contents = formspec_core(tab) .. + formspec_write(title, text) + elseif tab == 2 then + local lines, string = {}, "" + for str in (text .. "\n"):gmatch("([^\n]*)[\n]") do + lines[#lines+1] = str + end + string = formspec_string(lpp, data.page, lines, string) + contents = formspec_read(player_name, title, string, + text, data.page, data.page_max) + else + return -- malicious data + end + tab_number = tab + local formspec = formspec_size .. formspec_core(tab) .. contents + minetest.show_formspec(player_name, "default:book", formspec) + return + end + + if fields.quit then + book_writers[player_name] = nil + end + + if fields.save and fields.title and fields.text then + local new_stack + if not written then + local count = stack:get_count() + if count == 1 then + stack:set_name("default:book_written") + else + stack:set_count(count - 1) + new_stack = ItemStack("default:book_written") + end + end + + if data.owner ~= player_name and title ~= "" and text ~= "" then + return + end + + if not data then data = {} end + data.title = fields.title:sub(1, max_title_size) + data.owner = player:get_player_name() + local short_title = data.title + -- Don't bother triming the title if the trailing dots would make it longer + if #short_title > short_title_size + 3 then + short_title = short_title:sub(1, short_title_size) .. "..." + end + data.description = S("\"@1\" by @2", short_title, data.owner) + data.text = fields.text:sub(1, max_text_size) + data.text = data.text:gsub("\r\n", "\n"):gsub("\r", "\n") + data.text = data.text:gsub("[%z\1-\8\11-\31\127]", "") -- strip naughty control characters (keeps \t and \n) + data.page = 1 + data.page_max = math.ceil((#data.text:gsub("[^\n]", "") + 1) / lpp) + + if new_stack then + new_stack:get_meta():from_table({ fields = data }) + if inv:room_for_item("main", new_stack) then + inv:add_item("main", new_stack) + else + minetest.add_item(player:get_pos(), new_stack) + end + else + stack:get_meta():from_table({ fields = data }) + end + + elseif fields.book_next or fields.book_prev then + if not data.page then + return + end + + data.page = tonumber(data.page) + data.page_max = tonumber(data.page_max) + + if fields.book_next then + data.page = data.page + 1 + if data.page > data.page_max then + data.page = 1 + end + else + data.page = data.page - 1 + if data.page == 0 then + data.page = data.page_max + end + end + + stack:get_meta():from_table({fields = data}) + stack = book_on_use(stack, player) + end + + -- Update stack + inv:set_stack(wield_list, wield_index, stack) +end) + + +-- +-- Craftitem registry +-- + +minetest.register_craftitem("default:blueberries", { + description = S("Blueberries"), + inventory_image = "default_blueberries.png", + groups = {food_blueberries = 1, food_berry = 1}, + on_use = minetest.item_eat(2), +}) + +minetest.register_craftitem("default:book", { + description = S("Book"), + inventory_image = "default_book.png", + groups = {book = 1, flammable = 3}, + on_use = book_on_use, +}) + +minetest.register_craftitem("default:book_written", { + description = S("Book with Text"), + inventory_image = "default_book_written.png", + groups = {book = 1, not_in_creative_inventory = 1, flammable = 3}, + stack_max = 1, + on_use = book_on_use, +}) + +minetest.register_craftitem("default:bronze_ingot", { + description = S("Bronze Ingot"), + inventory_image = "default_bronze_ingot.png" +}) + +minetest.register_craftitem("default:clay_brick", { + description = S("Clay Brick"), + inventory_image = "default_clay_brick.png", +}) + +minetest.register_craftitem("default:clay_lump", { + description = S("Clay Lump"), + inventory_image = "default_clay_lump.png", +}) + +minetest.register_craftitem("default:coal_lump", { + description = S("Coal Lump"), + inventory_image = "default_coal_lump.png", + groups = {coal = 1, flammable = 1} +}) + +minetest.register_craftitem("default:copper_ingot", { + description = S("Copper Ingot"), + inventory_image = "default_copper_ingot.png" +}) + +minetest.register_craftitem("default:copper_lump", { + description = S("Copper Lump"), + inventory_image = "default_copper_lump.png" +}) + +minetest.register_craftitem("default:diamond", { + description = S("Diamond"), + inventory_image = "default_diamond.png", +}) + +minetest.register_craftitem("default:flint", { + description = S("Flint"), + inventory_image = "default_flint.png" +}) + +minetest.register_craftitem("default:gold_ingot", { + description = S("Gold Ingot"), + inventory_image = "default_gold_ingot.png" +}) + +minetest.register_craftitem("default:gold_lump", { + description = S("Gold Lump"), + inventory_image = "default_gold_lump.png" +}) + +minetest.register_craftitem("default:iron_lump", { + description = S("Iron Lump"), + inventory_image = "default_iron_lump.png" +}) + +minetest.register_craftitem("default:mese_crystal", { + description = S("Mese Crystal"), + inventory_image = "default_mese_crystal.png", +}) + +minetest.register_craftitem("default:mese_crystal_fragment", { + description = S("Mese Crystal Fragment"), + inventory_image = "default_mese_crystal_fragment.png", +}) + +minetest.register_craftitem("default:obsidian_shard", { + description = S("Obsidian Shard"), + inventory_image = "default_obsidian_shard.png", +}) + +minetest.register_craftitem("default:paper", { + description = S("Paper"), + inventory_image = "default_paper.png", + groups = {flammable = 3}, +}) + +minetest.register_craftitem("default:steel_ingot", { + description = S("Steel Ingot"), + inventory_image = "default_steel_ingot.png" +}) + +minetest.register_craftitem("default:stick", { + description = S("Stick"), + inventory_image = "default_stick.png", + groups = {stick = 1, flammable = 2}, +}) + +minetest.register_craftitem("default:tin_ingot", { + description = S("Tin Ingot"), + inventory_image = "default_tin_ingot.png" +}) + +minetest.register_craftitem("default:tin_lump", { + description = S("Tin Lump"), + inventory_image = "default_tin_lump.png" +}) + +-- +-- Crafting recipes +-- + +minetest.register_craft({ + output = "default:book", + recipe = { + {"default:paper"}, + {"default:paper"}, + {"default:paper"}, + } +}) + +default.register_craft_metadata_copy("default:book", "default:book_written") + +minetest.register_craft({ + output = "default:bronze_ingot 9", + recipe = { + {"default:copper_ingot", "default:copper_ingot", "default:copper_ingot"}, + {"default:copper_ingot", "default:tin_ingot", "default:copper_ingot"}, + {"default:copper_ingot", "default:copper_ingot", "default:copper_ingot"}, + } +}) + +minetest.register_craft({ + output = "default:clay_brick 4", + recipe = { + {"default:brick"}, + } +}) + +minetest.register_craft({ + output = "default:clay_lump 4", + recipe = { + {"default:clay"}, + } +}) + +minetest.register_craft({ + output = "default:coal_lump 9", + recipe = { + {"default:coalblock"}, + } +}) + +minetest.register_craft({ + output = "default:copper_ingot 9", + recipe = { + {"default:copperblock"}, + } +}) + +minetest.register_craft({ + output = "default:diamond 9", + recipe = { + {"default:diamondblock"}, + } +}) + +minetest.register_craft({ + output = "default:gold_ingot 9", + recipe = { + {"default:goldblock"}, + } +}) + +minetest.register_craft({ + output = "default:mese_crystal", + recipe = { + {"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"}, + {"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"}, + {"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"}, + } +}) + +minetest.register_craft({ + output = "default:mese_crystal 9", + recipe = { + {"default:mese"}, + } +}) + +minetest.register_craft({ + output = "default:mese_crystal_fragment 9", + recipe = { + {"default:mese_crystal"}, + } +}) + +minetest.register_craft({ + output = "default:obsidian_shard 9", + recipe = { + {"default:obsidian"} + } +}) + +minetest.register_craft({ + output = "default:paper", + recipe = { + {"default:papyrus", "default:papyrus", "default:papyrus"}, + } +}) + +minetest.register_craft({ + output = "default:steel_ingot 9", + recipe = { + {"default:steelblock"}, + } +}) + +minetest.register_craft({ + output = "default:stick 4", + recipe = { + {"group:wood"}, + } +}) + +minetest.register_craft({ + output = "default:tin_ingot 9", + recipe = { + {"default:tinblock"}, + } +}) + +-- +-- Cooking recipes +-- + +minetest.register_craft({ + type = "cooking", + output = "default:clay_brick", + recipe = "default:clay_lump", +}) + +minetest.register_craft({ + type = "cooking", + output = "default:copper_ingot", + recipe = "default:copper_lump", +}) + +minetest.register_craft({ + type = "cooking", + output = "default:gold_ingot", + recipe = "default:gold_lump", +}) + + +minetest.register_craft({ + type = "cooking", + output = "default:steel_ingot", + recipe = "default:iron_lump", +}) + +minetest.register_craft({ + type = "cooking", + output = "default:tin_ingot", + recipe = "default:tin_lump", +}) + +-- +-- Fuels +-- + +minetest.register_craft({ + type = "fuel", + recipe = "default:book", + burntime = 3, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:book_written", + burntime = 3, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:coal_lump", + burntime = 40, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:paper", + burntime = 1, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "group:stick", + burntime = 1, +}) diff --git a/mods/default/functions.lua b/mods/default/functions.lua new file mode 100644 index 0000000..9d164b4 --- /dev/null +++ b/mods/default/functions.lua @@ -0,0 +1,837 @@ +-- +-- Sounds +-- + +function default.node_sound_defaults(tbl) + tbl = tbl or {} + tbl.footstep = tbl.footstep or + {name = "", gain = 1.0} + tbl.dug = tbl.dug or + {name = "default_dug_node", gain = 0.25} + tbl.place = tbl.place or + {name = "default_place_node_hard", gain = 1.0} + return tbl +end + +function default.node_sound_stone_defaults(tbl) + tbl = tbl or {} + tbl.footstep = tbl.footstep or + {name = "default_hard_footstep", gain = 0.2} + tbl.dug = tbl.dug or + {name = "default_hard_footstep", gain = 1.0} + default.node_sound_defaults(tbl) + return tbl +end + +function default.node_sound_dirt_defaults(tbl) + tbl = tbl or {} + tbl.footstep = tbl.footstep or + {name = "default_dirt_footstep", gain = 0.25} + tbl.dig = tbl.dig or + {name = "default_dig_crumbly", gain = 0.4} + tbl.dug = tbl.dug or + {name = "default_dirt_footstep", gain = 1.0} + tbl.place = tbl.place or + {name = "default_place_node", gain = 1.0} + default.node_sound_defaults(tbl) + return tbl +end + +function default.node_sound_sand_defaults(tbl) + tbl = tbl or {} + tbl.footstep = tbl.footstep or + {name = "default_sand_footstep", gain = 0.05} + tbl.dug = tbl.dug or + {name = "default_sand_footstep", gain = 0.15} + tbl.place = tbl.place or + {name = "default_place_node", gain = 1.0} + default.node_sound_defaults(tbl) + return tbl +end + +function default.node_sound_gravel_defaults(tbl) + tbl = tbl or {} + tbl.footstep = tbl.footstep or + {name = "default_gravel_footstep", gain = 0.25} + tbl.dig = tbl.dig or + {name = "default_gravel_dig", gain = 0.35} + tbl.dug = tbl.dug or + {name = "default_gravel_dug", gain = 1.0} + tbl.place = tbl.place or + {name = "default_place_node", gain = 1.0} + default.node_sound_defaults(tbl) + return tbl +end + +function default.node_sound_wood_defaults(tbl) + tbl = tbl or {} + tbl.footstep = tbl.footstep or + {name = "default_wood_footstep", gain = 0.15} + tbl.dig = tbl.dig or + {name = "default_dig_choppy", gain = 0.4} + tbl.dug = tbl.dug or + {name = "default_wood_footstep", gain = 1.0} + default.node_sound_defaults(tbl) + return tbl +end + +function default.node_sound_leaves_defaults(tbl) + tbl = tbl or {} + tbl.footstep = tbl.footstep or + {name = "default_grass_footstep", gain = 0.45} + tbl.dug = tbl.dug or + {name = "default_grass_footstep", gain = 0.7} + tbl.place = tbl.place or + {name = "default_place_node", gain = 1.0} + default.node_sound_defaults(tbl) + return tbl +end + +function default.node_sound_glass_defaults(tbl) + tbl = tbl or {} + tbl.footstep = tbl.footstep or + {name = "default_glass_footstep", gain = 0.3} + tbl.dig = tbl.dig or + {name = "default_glass_footstep", gain = 0.5} + tbl.dug = tbl.dug or + {name = "default_break_glass", gain = 1.0} + default.node_sound_defaults(tbl) + return tbl +end + +function default.node_sound_ice_defaults(tbl) + tbl = tbl or {} + tbl.footstep = tbl.footstep or + {name = "default_ice_footstep", gain = 0.15} + tbl.dig = tbl.dig or + {name = "default_ice_dig", gain = 0.5} + tbl.dug = tbl.dug or + {name = "default_ice_dug", gain = 0.5} + default.node_sound_defaults(tbl) + return tbl +end + +function default.node_sound_metal_defaults(tbl) + tbl = tbl or {} + tbl.footstep = tbl.footstep or + {name = "default_metal_footstep", gain = 0.2} + tbl.dig = tbl.dig or + {name = "default_dig_metal", gain = 0.5} + tbl.dug = tbl.dug or + {name = "default_dug_metal", gain = 0.5} + tbl.place = tbl.place or + {name = "default_place_node_metal", gain = 0.5} + default.node_sound_defaults(tbl) + return tbl +end + +function default.node_sound_water_defaults(tbl) + tbl = tbl or {} + tbl.footstep = tbl.footstep or + {name = "default_water_footstep", gain = 0.2} + default.node_sound_defaults(tbl) + return tbl +end + +function default.node_sound_snow_defaults(tbl) + tbl = tbl or {} + tbl.footstep = tbl.footstep or + {name = "default_snow_footstep", gain = 0.2} + tbl.dig = tbl.dig or + {name = "default_snow_footstep", gain = 0.3} + tbl.dug = tbl.dug or + {name = "default_snow_footstep", gain = 0.3} + tbl.place = tbl.place or + {name = "default_place_node", gain = 1.0} + default.node_sound_defaults(tbl) + return tbl +end + + +-- +-- Lavacooling +-- + +default.cool_lava = function(pos, node) + if node.name == "default:lava_source" then + minetest.set_node(pos, {name = "default:obsidian"}) + else -- Lava flowing + minetest.set_node(pos, {name = "default:stone"}) + end + minetest.sound_play("default_cool_lava", + {pos = pos, max_hear_distance = 16, gain = 0.2}, true) +end + +if minetest.settings:get_bool("enable_lavacooling") ~= false then + minetest.register_abm({ + label = "Lava cooling", + nodenames = {"default:lava_source", "default:lava_flowing"}, + neighbors = {"group:cools_lava", "group:water"}, + interval = 2, + chance = 2, + catch_up = false, + action = function(...) + default.cool_lava(...) + end, + }) +end + + +-- +-- Optimized helper to put all items in an inventory into a drops list +-- + +function default.get_inventory_drops(pos, inventory, drops) + local inv = minetest.get_meta(pos):get_inventory() + local n = #drops + for i = 1, inv:get_size(inventory) do + local stack = inv:get_stack(inventory, i) + if stack:get_count() > 0 then + drops[n+1] = stack:to_table() + n = n + 1 + end + end +end + + +-- +-- Papyrus and cactus growing +-- + +-- Wrapping the functions in ABM action is necessary to make overriding them possible + +function default.grow_cactus(pos, node) + if node.param2 >= 4 then + return + end + pos.y = pos.y - 1 + if minetest.get_item_group(minetest.get_node(pos).name, "sand") == 0 then + return + end + pos.y = pos.y + 1 + local height = 0 + while node.name == "default:cactus" and height < 4 do + height = height + 1 + pos.y = pos.y + 1 + node = minetest.get_node(pos) + end + if height == 4 or node.name ~= "air" then + return + end + if minetest.get_node_light(pos) < 13 then + return + end + minetest.set_node(pos, {name = "default:cactus"}) + return true +end + +function default.grow_papyrus(pos, node) + pos.y = pos.y - 1 + local name = minetest.get_node(pos).name + if name ~= "default:dirt" and + name ~= "default:dirt_with_grass" and + name ~= "default:dirt_with_dry_grass" and + name ~= "default:dirt_with_rainforest_litter" and + name ~= "default:dry_dirt" and + name ~= "default:dry_dirt_with_dry_grass" then + return + end + if not minetest.find_node_near(pos, 3, {"group:water"}) then + return + end + pos.y = pos.y + 1 + local height = 0 + while node.name == "default:papyrus" and height < 4 do + height = height + 1 + pos.y = pos.y + 1 + node = minetest.get_node(pos) + end + if height == 4 or node.name ~= "air" then + return + end + if minetest.get_node_light(pos) < 13 then + return + end + minetest.set_node(pos, {name = "default:papyrus"}) + return true +end + +minetest.register_abm({ + label = "Grow cactus", + nodenames = {"default:cactus"}, + neighbors = {"group:sand"}, + interval = 12, + chance = 83, + action = function(...) + default.grow_cactus(...) + end +}) + +minetest.register_abm({ + label = "Grow papyrus", + nodenames = {"default:papyrus"}, + -- Grows on the dirt and surface dirt nodes of the biomes papyrus appears in, + -- including the old savanna nodes. + -- 'default:dirt_with_grass' is here only because it was allowed before. + neighbors = { + "default:dirt", + "default:dirt_with_grass", + "default:dirt_with_dry_grass", + "default:dirt_with_rainforest_litter", + "default:dry_dirt", + "default:dry_dirt_with_dry_grass", + }, + interval = 14, + chance = 71, + action = function(...) + default.grow_papyrus(...) + end +}) + + +-- +-- Dig upwards +-- + +local in_dig_up = false + +function default.dig_up(pos, node, digger, max_height) + if in_dig_up then return end -- Do not recurse + if digger == nil then return end + max_height = max_height or 100 + + in_dig_up = true + for y = 1, max_height do + local up_pos = vector.offset(pos, 0, y, 0) + local up_node = minetest.get_node(up_pos) + if up_node.name ~= node.name then + break + end + if not minetest.node_dig(up_pos, up_node, digger) then + break + end + end + in_dig_up = false +end + +-- errors are hard to handle, instead we rely on resetting this value the next step +minetest.register_globalstep(function() + in_dig_up = false +end) + + +-- +-- Fence registration helper +-- +local fence_collision_extra = minetest.settings:get_bool("enable_fence_tall") and 3/8 or 0 + +function default.register_fence(name, def) + local fence_texture = "default_fence_overlay.png^" .. def.texture .. + "^default_fence_overlay.png^[makealpha:255,126,126" + -- Allow almost everything to be overridden + local default_fields = { + paramtype = "light", + drawtype = "nodebox", + node_box = { + type = "connected", + fixed = {-1/8, -1/2, -1/8, 1/8, 1/2, 1/8}, + -- connect_top = + -- connect_bottom = + connect_front = {{-1/16, 3/16, -1/2, 1/16, 5/16, -1/8 }, + {-1/16, -5/16, -1/2, 1/16, -3/16, -1/8 }}, + connect_left = {{-1/2, 3/16, -1/16, -1/8, 5/16, 1/16}, + {-1/2, -5/16, -1/16, -1/8, -3/16, 1/16}}, + connect_back = {{-1/16, 3/16, 1/8, 1/16, 5/16, 1/2 }, + {-1/16, -5/16, 1/8, 1/16, -3/16, 1/2 }}, + connect_right = {{ 1/8, 3/16, -1/16, 1/2, 5/16, 1/16}, + { 1/8, -5/16, -1/16, 1/2, -3/16, 1/16}} + }, + collision_box = { + type = "connected", + fixed = {-1/8, -1/2, -1/8, 1/8, 1/2 + fence_collision_extra, 1/8}, + -- connect_top = + -- connect_bottom = + connect_front = {-1/8, -1/2, -1/2, 1/8, 1/2 + fence_collision_extra, -1/8}, + connect_left = {-1/2, -1/2, -1/8, -1/8, 1/2 + fence_collision_extra, 1/8}, + connect_back = {-1/8, -1/2, 1/8, 1/8, 1/2 + fence_collision_extra, 1/2}, + connect_right = { 1/8, -1/2, -1/8, 1/2, 1/2 + fence_collision_extra, 1/8} + }, + connects_to = {"group:fence", "group:wood", "group:tree", "group:wall"}, + inventory_image = fence_texture, + wield_image = fence_texture, + tiles = {def.texture}, + sunlight_propagates = true, + is_ground_content = false, + groups = {}, + } + for k, v in pairs(default_fields) do + if def[k] == nil then + def[k] = v + end + end + + -- Always add to the fence group, even if no group provided + def.groups.fence = 1 + + local material = def.material + def.texture = nil + def.material = nil + + minetest.register_node(name, def) + + -- Register crafting recipe, trim away starting colon if any + if not material then return end + name = string.gsub(name, "^:", "") + minetest.register_craft({ + output = name .. " 4", + recipe = { + { material, 'group:stick', material }, + { material, 'group:stick', material }, + } + }) +end + + +-- +-- Fence rail registration helper +-- + +function default.register_fence_rail(name, def) + local fence_rail_texture = "default_fence_rail_overlay.png^" .. def.texture .. + "^default_fence_rail_overlay.png^[makealpha:255,126,126" + -- Allow almost everything to be overridden + local default_fields = { + paramtype = "light", + drawtype = "nodebox", + node_box = { + type = "connected", + fixed = {{-1/16, 3/16, -1/16, 1/16, 5/16, 1/16}, + {-1/16, -3/16, -1/16, 1/16, -5/16, 1/16}}, + -- connect_top = + -- connect_bottom = + connect_front = {{-1/16, 3/16, -1/2, 1/16, 5/16, -1/16}, + {-1/16, -5/16, -1/2, 1/16, -3/16, -1/16}}, + connect_left = {{-1/2, 3/16, -1/16, -1/16, 5/16, 1/16}, + {-1/2, -5/16, -1/16, -1/16, -3/16, 1/16}}, + connect_back = {{-1/16, 3/16, 1/16, 1/16, 5/16, 1/2 }, + {-1/16, -5/16, 1/16, 1/16, -3/16, 1/2 }}, + connect_right = {{ 1/16, 3/16, -1/16, 1/2, 5/16, 1/16}, + { 1/16, -5/16, -1/16, 1/2, -3/16, 1/16}} + }, + collision_box = { + type = "connected", + fixed = {-1/8, -1/2, -1/8, 1/8, 1/2 + fence_collision_extra, 1/8}, + -- connect_top = + -- connect_bottom = + connect_front = {-1/8, -1/2, -1/2, 1/8, 1/2 + fence_collision_extra, -1/8}, + connect_left = {-1/2, -1/2, -1/8, -1/8, 1/2 + fence_collision_extra, 1/8}, + connect_back = {-1/8, -1/2, 1/8, 1/8, 1/2 + fence_collision_extra, 1/2}, + connect_right = { 1/8, -1/2, -1/8, 1/2, 1/2 + fence_collision_extra, 1/8} + }, + connects_to = {"group:fence", "group:wall"}, + inventory_image = fence_rail_texture, + wield_image = fence_rail_texture, + tiles = {def.texture}, + sunlight_propagates = true, + is_ground_content = false, + groups = {}, + } + for k, v in pairs(default_fields) do + if def[k] == nil then + def[k] = v + end + end + + -- Always add to the fence group, even if no group provided + def.groups.fence = 1 + + local material = def.material + def.texture = nil + def.material = nil + + minetest.register_node(name, def) + + -- Register crafting recipe, trim away starting colon if any + if not material then return end + name = string.gsub(name, "^:", "") + minetest.register_craft({ + output = name .. " 16", + recipe = { + { material, material }, + { "", ""}, + { material, material }, + } + }) +end + +-- +-- Mese post registration helper +-- + +function default.register_mesepost(name, def) + local post_texture = def.texture .. "^default_mese_post_light_side.png^[makealpha:0,0,0" + local post_texture_dark = def.texture .. "^default_mese_post_light_side_dark.png^[makealpha:0,0,0" + -- Allow almost everything to be overridden + local default_fields = { + wield_image = post_texture, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-2 / 16, -8 / 16, -2 / 16, 2 / 16, 8 / 16, 2 / 16}, + }, + }, + paramtype = "light", + tiles = {def.texture, def.texture, post_texture_dark, post_texture_dark, post_texture, post_texture}, + use_texture_alpha = "opaque", + light_source = default.LIGHT_MAX, + sunlight_propagates = true, + is_ground_content = false, + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + } + for k, v in pairs(default_fields) do + if def[k] == nil then + def[k] = v + end + end + + local material = def.material + def.texture = nil + def.material = nil + + minetest.register_node(name, def) + + -- Register crafting recipe, trim away starting colon if any + if not material then return end + name = string.gsub(name, "^:", "") + minetest.register_craft({ + output = name .. " 4", + recipe = { + {'', 'default:glass', ''}, + {'default:mese_crystal', 'default:mese_crystal', 'default:mese_crystal'}, + {'', material, ''}, + } + }) +end + +-- +-- Leafdecay +-- + +-- Prevent decay of placed leaves + +default.after_place_leaves = function(pos, placer, itemstack, pointed_thing) + if placer and placer:is_player() then + local node = minetest.get_node(pos) + node.param2 = 1 + minetest.set_node(pos, node) + end +end + +-- Leafdecay +local function leafdecay_after_destruct(pos, oldnode, def) + for _, v in pairs(minetest.find_nodes_in_area(vector.subtract(pos, def.radius), + vector.add(pos, def.radius), def.leaves)) do + local node = minetest.get_node(v) + local timer = minetest.get_node_timer(v) + if node.param2 ~= 1 and not timer:is_started() then + timer:start(math.random(20, 120) / 10) + end + end +end + +local movement_gravity = tonumber( + minetest.settings:get("movement_gravity")) or 9.81 + +local function leafdecay_on_timer(pos, def) + if minetest.find_node_near(pos, def.radius, def.trunks) then + return false + end + + local node = minetest.get_node(pos) + local drops = minetest.get_node_drops(node.name) + for _, item in ipairs(drops) do + local is_leaf + for _, v in pairs(def.leaves) do + if v == item then + is_leaf = true + end + end + if minetest.get_item_group(item, "leafdecay_drop") ~= 0 or + not is_leaf then + minetest.add_item({ + x = pos.x - 0.5 + math.random(), + y = pos.y - 0.5 + math.random(), + z = pos.z - 0.5 + math.random(), + }, item) + end + end + + minetest.remove_node(pos) + minetest.check_for_falling(pos) + + -- spawn a few particles for the removed node + minetest.add_particlespawner({ + amount = 8, + time = 0.001, + minpos = vector.subtract(pos, {x=0.5, y=0.5, z=0.5}), + maxpos = vector.add(pos, {x=0.5, y=0.5, z=0.5}), + minvel = vector.new(-0.5, -1, -0.5), + maxvel = vector.new(0.5, 0, 0.5), + minacc = vector.new(0, -movement_gravity, 0), + maxacc = vector.new(0, -movement_gravity, 0), + minsize = 0, + maxsize = 0, + node = node, + }) +end + +function default.register_leafdecay(def) + assert(def.leaves) + assert(def.trunks) + assert(def.radius) + for _, v in pairs(def.trunks) do + minetest.override_item(v, { + after_destruct = function(pos, oldnode) + leafdecay_after_destruct(pos, oldnode, def) + end, + }) + end + for _, v in pairs(def.leaves) do + minetest.override_item(v, { + on_timer = function(pos) + leafdecay_on_timer(pos, def) + end, + }) + end +end + + +-- +-- Convert default:dirt to something that fits the environment +-- + +minetest.register_abm({ + label = "Grass spread", + nodenames = {"default:dirt"}, + neighbors = { + "air", + "group:grass", + "group:dry_grass", + "default:snow", + }, + interval = 6, + chance = 50, + catch_up = false, + action = function(pos, node) + -- Check for darkness: night, shadow or under a light-blocking node + -- Returns if ignore above + local above = {x = pos.x, y = pos.y + 1, z = pos.z} + if (minetest.get_node_light(above) or 0) < 13 then + return + end + + -- Look for spreading dirt-type neighbours + local p2 = minetest.find_node_near(pos, 1, "group:spreading_dirt_type") + if p2 then + local n3 = minetest.get_node(p2) + minetest.set_node(pos, {name = n3.name}) + return + end + + -- Else, any seeding nodes on top? + local name = minetest.get_node(above).name + -- Snow check is cheapest, so comes first + if name == "default:snow" then + minetest.set_node(pos, {name = "default:dirt_with_snow"}) + -- The group grass is also present in dry grass, so check dry grass first + elseif minetest.get_item_group(name, "dry_grass") ~= 0 then + minetest.set_node(pos, {name = "default:dirt_with_dry_grass"}) + elseif minetest.get_item_group(name, "grass") ~= 0 then + minetest.set_node(pos, {name = "default:dirt_with_grass"}) + end + end +}) + + +-- +-- Grass and dry grass removed in darkness +-- + +minetest.register_abm({ + label = "Grass covered", + nodenames = {"group:spreading_dirt_type", "default:dry_dirt_with_dry_grass"}, + interval = 8, + chance = 50, + catch_up = false, + action = function(pos, node) + local above = {x = pos.x, y = pos.y + 1, z = pos.z} + local name = minetest.get_node(above).name + local nodedef = minetest.registered_nodes[name] + if name ~= "ignore" and nodedef and not ((nodedef.sunlight_propagates or + nodedef.paramtype == "light") and + nodedef.liquidtype == "none") then + if node.name == "default:dry_dirt_with_dry_grass" then + minetest.set_node(pos, {name = "default:dry_dirt"}) + else + minetest.set_node(pos, {name = "default:dirt"}) + end + end + end +}) + + +-- +-- Moss growth on cobble near water +-- + +local moss_correspondences = { + ["default:cobble"] = "default:mossycobble", + ["stairs:slab_cobble"] = "stairs:slab_mossycobble", + ["stairs:stair_cobble"] = "stairs:stair_mossycobble", + ["stairs:stair_inner_cobble"] = "stairs:stair_inner_mossycobble", + ["stairs:stair_outer_cobble"] = "stairs:stair_outer_mossycobble", + ["walls:cobble"] = "walls:mossycobble", +} +minetest.register_abm({ + label = "Moss growth", + nodenames = {"default:cobble", "stairs:slab_cobble", "stairs:stair_cobble", + "stairs:stair_inner_cobble", "stairs:stair_outer_cobble", + "walls:cobble"}, + neighbors = {"group:water"}, + interval = 16, + chance = 200, + catch_up = false, + action = function(pos, node) + node.name = moss_correspondences[node.name] + if node.name then + minetest.set_node(pos, node) + end + end +}) + +-- +-- Register a craft to copy the metadata of items +-- + +function default.register_craft_metadata_copy(ingredient, result) + minetest.register_craft({ + type = "shapeless", + output = result, + recipe = {ingredient, result} + }) + + minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) + if itemstack:get_name() ~= result then + return + end + + local original + local index + for i = 1, #old_craft_grid do + if old_craft_grid[i]:get_name() == result then + original = old_craft_grid[i] + index = i + end + end + if not original then + return + end + local copymeta = original:get_meta():to_table() + itemstack:get_meta():from_table(copymeta) + -- put the book with metadata back in the craft grid + craft_inv:set_stack("craft", index, original) + end) +end + +-- +-- Log API / helpers +-- + +local log_non_player_actions = minetest.settings:get_bool("log_non_player_actions", false) + +local is_pos = function(v) + return type(v) == "table" and + type(v.x) == "number" and type(v.y) == "number" and type(v.z) == "number" +end + +function default.log_player_action(player, ...) + local msg = player:get_player_name() + if player.is_fake_player or not player:is_player() then + if not log_non_player_actions then + return + end + msg = msg .. "(" .. (type(player.is_fake_player) == "string" + and player.is_fake_player or "*") .. ")" + end + for _, v in ipairs({...}) do + -- translate pos + local part = is_pos(v) and minetest.pos_to_string(v) or v + -- no leading spaces before punctuation marks + msg = msg .. (string.match(part, "^[;,.]") and "" or " ") .. part + end + minetest.log("action", msg) +end + +local nop = function() end +function default.set_inventory_action_loggers(def, name) + local on_move = def.on_metadata_inventory_move or nop + def.on_metadata_inventory_move = function(pos, from_list, from_index, + to_list, to_index, count, player) + default.log_player_action(player, "moves stuff in", name, "at", pos) + return on_move(pos, from_list, from_index, to_list, to_index, count, player) + end + local on_put = def.on_metadata_inventory_put or nop + def.on_metadata_inventory_put = function(pos, listname, index, stack, player) + default.log_player_action(player, "moves", stack:get_name(), stack:get_count(), "to", name, "at", pos) + return on_put(pos, listname, index, stack, player) + end + local on_take = def.on_metadata_inventory_take or nop + def.on_metadata_inventory_take = function(pos, listname, index, stack, player) + default.log_player_action(player, "takes", stack:get_name(), stack:get_count(), "from", name, "at", pos) + return on_take(pos, listname, index, stack, player) + end +end + +-- +-- NOTICE: This method is not an official part of the API yet. +-- This method may change in future. +-- + +function default.can_interact_with_node(player, pos) + if player and player:is_player() then + if minetest.check_player_privs(player, "protection_bypass") then + return true + end + else + return false + end + + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + + if not owner or owner == "" or owner == player:get_player_name() then + return true + end + + -- Is player wielding the right key? + local item = player:get_wielded_item() + if minetest.get_item_group(item:get_name(), "key") == 1 then + local key_meta = item:get_meta() + + if key_meta:get_string("secret") == "" then + local key_oldmeta = item:get_meta():get_string("") + if key_oldmeta == "" or not minetest.parse_json(key_oldmeta) then + return false + end + + key_meta:set_string("secret", minetest.parse_json(key_oldmeta).secret) + item:set_metadata("") + end + + return meta:get_string("key_lock_secret") == key_meta:get_string("secret") + end + + return false +end diff --git a/mods/default/furnace.lua b/mods/default/furnace.lua new file mode 100644 index 0000000..be60223 --- /dev/null +++ b/mods/default/furnace.lua @@ -0,0 +1,458 @@ +-- default/furnace.lua + +-- support for MT game translation. +local S = default.get_translator + +-- List of sound handles for active furnace +local furnace_fire_sounds = {} + +-- +-- Formspecs +-- + +function default.get_furnace_active_formspec(fuel_percent, item_percent) + return "size[8,8.5]".. + "list[context;src;2.75,0.5;1,1;]".. + "list[context;fuel;2.75,2.5;1,1;]".. + "image[2.75,1.5;1,1;default_furnace_fire_bg.png^[lowpart:".. + (fuel_percent)..":default_furnace_fire_fg.png]".. + "image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[lowpart:".. + (item_percent)..":gui_furnace_arrow_fg.png^[transformR270]".. + "list[context;dst;4.75,0.96;2,2;]".. + "list[current_player;main;0,4.25;8,1;]".. + "list[current_player;main;0,5.5;8,3;8]".. + "listring[context;dst]".. + "listring[current_player;main]".. + "listring[context;src]".. + "listring[current_player;main]".. + "listring[context;fuel]".. + "listring[current_player;main]".. + default.get_hotbar_bg(0, 4.25) +end + +function default.get_furnace_inactive_formspec() + return "size[8,8.5]".. + "list[context;src;2.75,0.5;1,1;]".. + "list[context;fuel;2.75,2.5;1,1;]".. + "image[2.75,1.5;1,1;default_furnace_fire_bg.png]".. + "image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[transformR270]".. + "list[context;dst;4.75,0.96;2,2;]".. + "list[current_player;main;0,4.25;8,1;]".. + "list[current_player;main;0,5.5;8,3;8]".. + "listring[context;dst]".. + "listring[current_player;main]".. + "listring[context;src]".. + "listring[current_player;main]".. + "listring[context;fuel]".. + "listring[current_player;main]".. + default.get_hotbar_bg(0, 4.25) +end + +-- +-- Node callback functions that are the same for active and inactive furnace +-- + +local function can_dig(pos, player) + local meta = core.get_meta(pos) + local inv = meta:get_inventory() + return inv:is_empty("fuel") and inv:is_empty("dst") and inv:is_empty("src") +end + +local function allow_metadata_inventory_put(pos, listname, index, stack, player) + if core.is_protected(pos, player:get_player_name()) then + return 0 + end + local meta = core.get_meta(pos) + local inv = meta:get_inventory() + if listname == "fuel" then + if core.get_craft_result({method="fuel", width=1, items={stack}}).time ~= 0 then + if inv:is_empty("src") then + meta:set_string("infotext", S("Furnace is empty")) + end + return stack:get_count() + else + return 0 + end + elseif listname == "src" then + return stack:get_count() + elseif listname == "dst" then + return 0 + end +end + +local function allow_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player) + local meta = core.get_meta(pos) + local inv = meta:get_inventory() + local stack = inv:get_stack(from_list, from_index) + return allow_metadata_inventory_put(pos, to_list, to_index, stack, player) +end + +local function allow_metadata_inventory_take(pos, listname, index, stack, player) + if core.is_protected(pos, player:get_player_name()) then + return 0 + end + return stack:get_count() +end + +local function stop_furnace_sound(pos, fadeout_step) + local hash = core.hash_node_position(pos) + local sound_ids = furnace_fire_sounds[hash] + if sound_ids then + for _, sound_id in ipairs(sound_ids) do + core.sound_fade(sound_id, -1, 0) + end + furnace_fire_sounds[hash] = nil + end +end + +local function swap_node(pos, name) + local node = core.get_node(pos) + if node.name == name then + return + end + node.name = name + core.swap_node(pos, node) +end + +local function add_item_or_drop(inv, pos, item) + local leftover = inv:add_item("dst", item) + if not leftover:is_empty() then + local above = vector.offset(pos, 0, 1, 0) + local drop_pos = core.find_node_near(pos, 1, {"air"}) or above + core.item_drop(leftover, nil, drop_pos) + end +end + +local function furnace_node_timer(pos, elapsed) + -- + -- Initialize metadata + -- + local meta = core.get_meta(pos) + local fuel_time = meta:get_float("fuel_time") or 0 + local src_time = meta:get_float("src_time") or 0 + local fuel_totaltime = meta:get_float("fuel_totaltime") or 0 + + local inv = meta:get_inventory() + local srclist, fuellist + local dst_full = false + + local timer_elapsed = meta:get_int("timer_elapsed") or 0 + meta:set_int("timer_elapsed", timer_elapsed + 1) + + local cookable, cooked + local fuel + local update = true + local items_smelt = 0 + while elapsed > 0 and update do + update = false + + srclist = inv:get_list("src") + fuellist = inv:get_list("fuel") + + -- + -- Cooking + -- + + -- Check if we have cookable content + local aftercooked + cooked, aftercooked = core.get_craft_result({method = "cooking", width = 1, items = srclist}) + cookable = cooked.time ~= 0 + + local el = math.min(elapsed, fuel_totaltime - fuel_time) + if cookable then -- fuel lasts long enough, adjust el to cooking duration + el = math.min(el, cooked.time - src_time) + end + + -- Check if we have enough fuel to burn + if fuel_time < fuel_totaltime then + -- The furnace is currently active and has enough fuel + fuel_time = fuel_time + el + -- If there is a cookable item then check if it is ready yet + if cookable then + src_time = src_time + el + if src_time >= cooked.time then + -- Place result in dst list if possible + if inv:room_for_item("dst", cooked.item) then + inv:add_item("dst", cooked.item) + + -- stop any final replacement from clogging "src" + local can_cook = core.get_craft_result({ + method = "cooking", width = 1, + items = {aftercooked.items[1]:to_string()}}) + can_cook = can_cook.time ~= 0 or not can_cook.item:is_empty() + + if aftercooked.items[1]:is_empty() or can_cook then + -- cook the final "src" item in the next cycle + inv:set_stack("src", 1, aftercooked.items[1]) + else + -- the final "src" item was replaced and is not cookable + inv:set_stack("src", 1, "") + add_item_or_drop(inv, pos, aftercooked.items[1]) + end + + src_time = src_time - cooked.time + update = true + -- add replacement item to dst so they arent lost + if cooked.replacements[1] then + add_item_or_drop(inv, pos, cooked.replacements[1]) + end + else + dst_full = true + end + items_smelt = items_smelt + 1 + else + -- Item could not be cooked: probably missing fuel + update = true + end + end + else + -- Furnace ran out of fuel + if cookable then + -- We need to get new fuel + local afterfuel + fuel, afterfuel = core.get_craft_result({method = "fuel", width = 1, items = fuellist}) + + if fuel.time == 0 then + -- No valid fuel in fuel list + fuel_totaltime = 0 + src_time = 0 + else + -- prevent blocking of fuel inventory (for automatization mods) + local is_fuel = core.get_craft_result({method = "fuel", width = 1, items = {afterfuel.items[1]:to_string()}}) + if is_fuel.time == 0 then + table.insert(fuel.replacements, afterfuel.items[1]) + inv:set_stack("fuel", 1, "") + else + -- Take fuel from fuel list + inv:set_stack("fuel", 1, afterfuel.items[1]) + end + -- Put replacements in dst list or drop them on the furnace. + local replacements = fuel.replacements + if replacements[1] then + add_item_or_drop(inv, pos, replacements[1]) + end + update = true + fuel_totaltime = fuel.time + (fuel_totaltime - fuel_time) + end + else + -- We don't need to get new fuel since there is no cookable item + fuel_totaltime = 0 + src_time = 0 + end + fuel_time = 0 + end + + elapsed = elapsed - el + end + + if items_smelt > 0 then + -- Play cooling sound + core.sound_play("default_cool_lava", + { pos = pos, max_hear_distance = 16, gain = 0.07 * math.min(items_smelt, 7) }, true) + end + if fuel and fuel_totaltime > fuel.time then + fuel_totaltime = fuel.time + end + if srclist and srclist[1]:is_empty() then + src_time = 0 + end + + -- + -- Update formspec, infotext and node + -- + local formspec + local item_state + local item_percent = 0 + if cookable then + item_percent = math.floor(src_time / cooked.time * 100) + if dst_full then + item_state = S("100% (output full)") + else + item_state = S("@1%", item_percent) + end + else + if srclist and not srclist[1]:is_empty() then + item_state = S("Not cookable") + else + item_state = S("Empty") + end + end + + local fuel_state = S("Empty") + local active = false + local result = false + + if fuel_totaltime ~= 0 then + active = true + local fuel_percent = 100 - math.floor(fuel_time / fuel_totaltime * 100) + fuel_state = S("@1%", fuel_percent) + formspec = default.get_furnace_active_formspec(fuel_percent, item_percent) + swap_node(pos, "default:furnace_active") + -- make sure timer restarts automatically + result = true + + -- Play sound every 5 seconds while the furnace is active + if timer_elapsed == 0 or (timer_elapsed + 1) % 5 == 0 then + local sound_id = core.sound_play("default_furnace_active", + {pos = pos, max_hear_distance = 16, gain = 0.25}) + local hash = core.hash_node_position(pos) + furnace_fire_sounds[hash] = furnace_fire_sounds[hash] or {} + table.insert(furnace_fire_sounds[hash], sound_id) + -- Only remember the 3 last sound handles + if #furnace_fire_sounds[hash] > 3 then + table.remove(furnace_fire_sounds[hash], 1) + end + -- Remove the sound ID automatically from table after 11 seconds + core.after(11, function() + if not furnace_fire_sounds[hash] then + return + end + for f=#furnace_fire_sounds[hash], 1, -1 do + if furnace_fire_sounds[hash][f] == sound_id then + table.remove(furnace_fire_sounds[hash], f) + end + end + if #furnace_fire_sounds[hash] == 0 then + furnace_fire_sounds[hash] = nil + end + end) + end + else + if fuellist and not fuellist[1]:is_empty() then + fuel_state = S("@1%", 0) + end + formspec = default.get_furnace_inactive_formspec() + swap_node(pos, "default:furnace") + -- stop timer on the inactive furnace + core.get_node_timer(pos):stop() + meta:set_int("timer_elapsed", 0) + + stop_furnace_sound(pos) + end + + + local infotext + if active then + infotext = S("Furnace active") + else + infotext = S("Furnace inactive") + end + infotext = infotext .. "\n" .. S("(Item: @1; Fuel: @2)", item_state, fuel_state) + + -- + -- Set meta values + -- + meta:set_float("fuel_totaltime", fuel_totaltime) + meta:set_float("fuel_time", fuel_time) + meta:set_float("src_time", src_time) + meta:set_string("formspec", formspec) + meta:set_string("infotext", infotext) + + return result +end + +-- +-- Node definitions +-- + +local function apply_logger(def) + default.set_inventory_action_loggers(def, "furnace") + return def +end + +core.register_node("default:furnace", apply_logger({ + description = S("Furnace"), + tiles = { + "default_furnace_top.png", "default_furnace_bottom.png", + "default_furnace_side.png", "default_furnace_side.png", + "default_furnace_side.png", "default_furnace_front.png" + }, + paramtype2 = "facedir", + groups = {cracky=2}, + legacy_facedir_simple = true, + is_ground_content = false, + sounds = default.node_sound_stone_defaults(), + + can_dig = can_dig, + + on_timer = furnace_node_timer, + + on_construct = function(pos) + local meta = core.get_meta(pos) + local inv = meta:get_inventory() + inv:set_size('src', 1) + inv:set_size('fuel', 1) + inv:set_size('dst', 4) + furnace_node_timer(pos, 0) + end, + + on_metadata_inventory_move = function(pos) + core.get_node_timer(pos):start(1.0) + end, + on_metadata_inventory_put = function(pos) + -- start timer function, it will sort out whether furnace can burn or not. + core.get_node_timer(pos):start(1.0) + end, + on_metadata_inventory_take = function(pos) + -- check whether the furnace is empty or not. + core.get_node_timer(pos):start(1.0) + end, + on_blast = function(pos) + local drops = {} + default.get_inventory_drops(pos, "src", drops) + default.get_inventory_drops(pos, "fuel", drops) + default.get_inventory_drops(pos, "dst", drops) + drops[#drops+1] = "default:furnace" + core.remove_node(pos) + return drops + end, + + allow_metadata_inventory_put = allow_metadata_inventory_put, + allow_metadata_inventory_move = allow_metadata_inventory_move, + allow_metadata_inventory_take = allow_metadata_inventory_take, +})) + +core.register_node("default:furnace_active", apply_logger({ + description = S("Furnace"), + tiles = { + "default_furnace_top.png", "default_furnace_bottom.png", + "default_furnace_side.png", "default_furnace_side.png", + "default_furnace_side.png", + { + name = "default_furnace_front_active.png", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1.5 + }, + } + }, + paramtype2 = "facedir", + light_source = 8, + drop = "default:furnace", + groups = {cracky=2, not_in_creative_inventory=1}, + legacy_facedir_simple = true, + is_ground_content = false, + sounds = default.node_sound_stone_defaults(), + on_timer = furnace_node_timer, + on_destruct = function(pos) + stop_furnace_sound(pos) + end, + + can_dig = can_dig, + + allow_metadata_inventory_put = allow_metadata_inventory_put, + allow_metadata_inventory_move = allow_metadata_inventory_move, + allow_metadata_inventory_take = allow_metadata_inventory_take, +})) + +core.register_craft({ + output = "default:furnace", + recipe = { + {"group:stone", "group:stone", "group:stone"}, + {"group:stone", "", "group:stone"}, + {"group:stone", "group:stone", "group:stone"}, + } +}) diff --git a/mods/default/init.lua b/mods/default/init.lua new file mode 100644 index 0000000..e7c1509 --- /dev/null +++ b/mods/default/init.lua @@ -0,0 +1,96 @@ +-- Minetest Game mod: default +-- See README.txt for licensing and other information. + +-- The API documentation in here was moved into game_api.txt + +-- Load support for MT game translation. +local S = minetest.get_translator("default") + +-- Definitions made by this mod that other mods can use too +default = {} + +default.LIGHT_MAX = 14 +default.get_translator = S + +-- Check for engine features required by MTG +-- This provides clear error behaviour when MTG is newer than the installed engine +-- and avoids obscure, hard to debug runtime errors. +-- This section should be updated before release and older checks can be dropped +-- when newer ones are introduced. +if ItemStack("").add_wear_by_uses == nil then + error("\nThis version of Minetest Game is incompatible with your engine version ".. + "(which is too old). You should download a version of Minetest Game that ".. + "matches the installed engine version.\n") +end + +-- GUI related stuff +minetest.register_on_joinplayer(function(player) + -- Set formspec prepend + local formspec = [[ + bgcolor[#080808BB;true] + listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF] ]] + local name = player:get_player_name() + local info = minetest.get_player_information(name) + if info.formspec_version > 1 then + formspec = formspec .. "background9[5,5;1,1;gui_formbg.png;true;10]" + else + formspec = formspec .. "background[5,5;1,1;gui_formbg.png;true]" + end + player:set_formspec_prepend(formspec) + + -- Set hotbar textures + player:hud_set_hotbar_image("gui_hotbar.png") + player:hud_set_hotbar_selected_image("gui_hotbar_selected.png") +end) + +function default.get_hotbar_bg(x,y) + local out = "" + for i=0,7,1 do + out = out .."image["..x+i..","..y..";1,1;gui_hb_bg.png]" + end + return out +end + +default.gui_survival_form = "size[8,8.5]".. + "list[current_player;main;0,4.25;8,1;]".. + "list[current_player;main;0,5.5;8,3;8]".. + "list[current_player;craft;1.75,0.5;3,3;]".. + "list[current_player;craftpreview;5.75,1.5;1,1;]".. + "image[4.75,1.5;1,1;gui_furnace_arrow_bg.png^[transformR270]".. + "listring[current_player;main]".. + "listring[current_player;craft]".. + default.get_hotbar_bg(0,4.25) + +-- Load files +local default_path = minetest.get_modpath("default") + +dofile(default_path.."/functions.lua") +dofile(default_path.."/trees.lua") +dofile(default_path.."/nodes.lua") +dofile(default_path.."/chests.lua") +dofile(default_path.."/furnace.lua") +dofile(default_path.."/torch.lua") +dofile(default_path.."/tools.lua") +dofile(default_path.."/item_entity.lua") +dofile(default_path.."/craftitems.lua") +dofile(default_path.."/crafting.lua") +dofile(default_path.."/mapgen.lua") +dofile(default_path.."/chat.lua") +dofile(default_path.."/aliases.lua") +dofile(default_path.."/legacy.lua") + +-- Smoke test that is run via ./util/test/run.sh +if minetest.settings:get_bool("minetest_game_smoke_test") then + minetest.after(0, function() + minetest.emerge_area(vector.new(0, 0, 0), vector.new(32, 32, 32)) + local pos = vector.new(9, 9, 9) + local function check() + if minetest.get_node(pos).name ~= "ignore" then + minetest.request_shutdown() + return + end + minetest.after(0, check) + end + check() + end) +end diff --git a/mods/default/item_entity.lua b/mods/default/item_entity.lua new file mode 100644 index 0000000..824f0f0 --- /dev/null +++ b/mods/default/item_entity.lua @@ -0,0 +1,96 @@ +-- mods/default/item_entity.lua + +local builtin_item = minetest.registered_entities["__builtin:item"] + +-- strictly speaking none of this is part of the API, so do some checks +-- and if it looks wrong skip the modifications +if not builtin_item or type(builtin_item.set_item) ~= "function" or type(builtin_item.on_step) ~= "function" then + minetest.log("warning", "Builtin item entity does not look as expected, skipping overrides.") + return +end + +local smoke_particles = { + amount = 3, + time = 0.1, + minpos = vector.new(-0.1, -0.1, -0.1), + maxpos = vector.new(0.1, 0.1, 0.1), + minvel = vector.new(0, 2.5, 0), + maxvel = vector.new(0, 2.5, 0), + minacc = vector.new(-0.15, -0.02, -0.15), + maxacc = vector.new(0.15, -0.01, 0.15), + minexptime = 4, + maxexptime = 6, + minsize = 5, + maxsize = 5, + collisiondetection = true, + texture = { + name = "default_item_smoke.png" + } +} +if minetest.features.particle_blend_clip then + smoke_particles.texture.blend = "clip" +end + +local item = { + set_item = function(self, itemstring, ...) + builtin_item.set_item(self, itemstring, ...) + + local stack = ItemStack(itemstring) + local itemdef = minetest.registered_items[stack:get_name()] + if itemdef and itemdef.groups.flammable ~= 0 then + self.flammable = itemdef.groups.flammable + end + end, + + burn_up = function(self) + -- disappear in a smoke puff + local p = self.object:get_pos() + self.object:remove() + minetest.sound_play("default_item_smoke", { + pos = p, + gain = 1.0, + max_hear_distance = 8, + }, true) + local ps = table.copy(smoke_particles) + ps.minpos = vector.add(ps.minpos, p) + ps.maxpos = vector.add(ps.maxpos, p) + minetest.add_particlespawner(ps) + end, + + on_step = function(self, dtime, ...) + builtin_item.on_step(self, dtime, ...) + + if self.flammable then + -- flammable, check for igniters every 10 s + self.ignite_timer = (self.ignite_timer or 0) + dtime + if self.ignite_timer > 10 then + self.ignite_timer = 0 + + local pos = self.object:get_pos() + if pos == nil then + return -- object already deleted + end + local node = minetest.get_node_or_nil(pos) + if not node then + return + end + + -- Immediately burn up flammable items in lava + if minetest.get_item_group(node.name, "lava") > 0 then + self:burn_up() + else + -- otherwise there'll be a chance based on its igniter value + local burn_chance = self.flammable + * minetest.get_item_group(node.name, "igniter") + if burn_chance > 0 and math.random(0, burn_chance) ~= 0 then + self:burn_up() + end + end + end + end + end, +} + +-- set defined item as new __builtin:item, with the old one as fallback table +setmetatable(item, { __index = builtin_item }) +minetest.register_entity(":__builtin:item", item) diff --git a/mods/default/legacy.lua b/mods/default/legacy.lua new file mode 100644 index 0000000..a2d812d --- /dev/null +++ b/mods/default/legacy.lua @@ -0,0 +1,49 @@ +-- mods/default/legacy.lua + +-- Horrible stuff to support old code registering falling nodes +-- Don't use this and never do what this does, it's completely wrong! +-- (More specifically, the client and the C++ code doesn't get the group) +function default.register_falling_node(nodename, texture) + minetest.log("error", debug.traceback()) + minetest.log('error', "WARNING: default.register_falling_node is deprecated") + if minetest.registered_nodes[nodename] then + minetest.registered_nodes[nodename].groups.falling_node = 1 + end +end + +function default.spawn_falling_node(p, nodename) + spawn_falling_node(p, nodename) +end + +-- Liquids +WATER_ALPHA = minetest.registered_nodes["default:water_source"].alpha +WATER_VISC = minetest.registered_nodes["default:water_source"].liquid_viscosity +LAVA_VISC = minetest.registered_nodes["default:lava_source"].liquid_viscosity +LIGHT_MAX = default.LIGHT_MAX + +-- Formspecs +default.gui_suvival_form = default.gui_survival_form +default.gui_bg = "" +default.gui_bg_img = "" +default.gui_slots = "" + +-- Players +if minetest.get_modpath("player_api") then + default.registered_player_models = player_api.registered_models + default.player_register_model = player_api.register_model + default.player_attached = player_api.player_attached + default.player_get_animation = player_api.get_animation + default.player_set_model = player_api.set_model + default.player_set_textures = player_api.set_textures + default.player_set_animation = player_api.set_animation +end + +-- Chests +default.register_chest = default.chest.register_chest + +-- Check for a volume intersecting protection +function default.intersects_protection(minp, maxp, player_name, interval) + minetest.log("warning", "default.intersects_protection() is " .. + "deprecated, use minetest.is_area_protected() instead.") + return minetest.is_area_protected(minp, maxp, player_name, interval) +end diff --git a/mods/default/license.txt b/mods/default/license.txt new file mode 100644 index 0000000..625f0f8 --- /dev/null +++ b/mods/default/license.txt @@ -0,0 +1,158 @@ +License of source code +---------------------- + +GNU Lesser General Public License, version 2.1 +Copyright (C) 2011-2018 celeron55, Perttu Ahola +Copyright (C) 2011-2018 Various Minetest Game developers and contributors + +This program is free software; you can redistribute it and/or modify it under the terms +of the GNU Lesser General Public License as published by the Free Software Foundation; +either version 2.1 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 Lesser General Public License for more details: +https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + + +Licenses of media (textures, models and sounds) +----------------------------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2010-2023: + + celeron55, Perttu Ahola + Cisoun + G4JC + VanessaE + RealBadAngel + Calinou + MirceaKitsune + Jordach + PilzAdam + jojoa1997 + InfinityProject + Splizard + Zeg9 + paramat + BlockMen + sofar + Neuromancer + Gambit + asl97 + KevDoy + Mito551 + GreenXenith + kaeza + kilbith + tobyplowy + CloudyProton + TumeniNodes + Mossmanikin + random-geek + Extex101 + An0n3m0us + Lopano + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ + +----------------------- + +Attribution 3.0 Unported (CC BY 3.0) + +Copyright (C) 2009 cmusounddesign +Copyright (C) 2010 Tomlija +Copyright (C) 2010 lsprice +Copyright (C) 2014 sonictechtonic +Copyright (C) 2015 yadronoff +Copyright (C) 2007 HerbertBoland +Copyright (C) 2006 AGFX + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by/3.0/ + +----------------------- + +CC0 1.0 Universal (CC0 1.0) Public Domain Dedication + +Iwan Gabovitch +Ottomaani138 +Ogrebane +blukotek +Sevin7 +Yoyodaman234 +Ryding + +No Copyright + +The person who associated a work with this deed has dedicated the work to the +public domain by waiving all of his or her rights to the work worldwide under +copyright law, including all related and neighboring rights, to the extent +allowed by law. + +You can copy, modify, distribute and perform the work, even for commercial +purposes, all without asking permission. See Other Information below. + +Other Information: + +In no way are the patent or trademark rights of any person affected by CC0, nor +are the rights that other persons may have in the work or in how the work is +used, such as publicity or privacy rights. + +Unless expressly stated otherwise, the person who associated a work with this +deed makes no warranties about the work, and disclaims liability for all uses +of the work, to the fullest extent permitted by applicable law. + +When using or citing the work, you should not imply endorsement by the author +or the affirmer. + +For more details: +https://creativecommons.org/publicdomain/zero/1.0/ diff --git a/mods/default/locale/default.bg.tr b/mods/default/locale/default.bg.tr new file mode 100644 index 0000000..0d1a28e --- /dev/null +++ b/mods/default/locale/default.bg.tr @@ -0,0 +1,215 @@ +# textdomain: default +Locked Chest=Заключен сандък +Locked Chest (owned by @1)=Заключен сандък (собственост на @1) +You do not own this chest.=Не притежавате този сандък. +a locked chest=заключен сандък +Chest=Сандък +Write=Четене +Read=Писане +Title:=Заглавие: +Contents:=Съдържание: +Save=Запазване +by @1=от @1 +Page @1 of @2=Страница @1 от @2 +The book you were writing to mysteriously disappeared.=Книгата, в която пишехте мистериозно изчезна. +"@1" by @2=„@1“ от @2 +Blueberries=Боровинки +Book=Книга +Book with Text=Книга с текстове +Bronze Ingot=Бронзово кюлче +Clay Brick=Калена тухла +Clay Lump=Купчина глина +Coal Lump=Купчина въглища +Copper Ingot=Медно кюлче +Copper Lump=Купчина мед +Diamond=Диамант +Flint=Кремък +Gold Ingot=Златно кюлче +Gold Lump=Купчина злато +Iron Lump=Желязно кюлче +Mese Crystal=Кристал месе +Mese Crystal Fragment=Парче от кристал месе +Obsidian Shard=Късче обсидиан +Paper=Хартия +Steel Ingot=Стоманено кюлче +Stick=Пръчка +Tin Ingot=Калаено кюлче +Tin Lump=Купчина калай +Furnace is empty=Фурната е празна +100% (output full)=100% (изходът е пълен) +@1%=@1% +Not cookable=Това не се готви +Empty=Празно +Furnace active=Фурната работи +Furnace inactive=Фурната не работи +(Item: @1; Fuel: @2)=(Предмет: @1; гориво: @2) +Furnace=Фурна +Stone=Камък +Cobblestone=Паваж +Stone Brick=Каменна тухла +Stone Block=Каменно блокче +Mossy Cobblestone=Паваж покрит с мъх +Desert Stone=Пустинен камък +Desert Cobblestone=Пустинен паваж +Desert Stone Brick=Тухла от пустинен камък +Desert Stone Block=Блокче от пустинен камък +Sandstone=Пясъчник +Sandstone Brick=Тухла от пясъчник +Sandstone Block=Блокче от пясъчник +Desert Sandstone=Пустинен пясъчник +Desert Sandstone Brick=Тухла от пустинен пясъчник +Desert Sandstone Block=Блокче от пустинен пясъчник +Silver Sandstone=Сребърен пясъчник +Silver Sandstone Brick=Тухла от сребърен пясъчник +Silver Sandstone Block=Блокче от сребърен пясъчник +Obsidian=Обсидиан +Obsidian Brick=Тухла от обсидиан +Obsidian Block=Блокче от обсидиан +Dirt=Почва +Dirt with Grass=Почва с трева +Dirt with Grass and Footsteps=Почва с трева и стъпки +Dirt with Savanna Grass=Почва с трева от саваната +Dirt with Snow=Почва със сняг +Dirt with Rainforest Litter=Почва с растителна маса от тропическа гора +Dirt with Coniferous Litter=Почва с растителна маса от иглолистна гора +Savanna Dirt=Почва от саваната +Savanna Dirt with Savanna Grass=Почва от саваната с трева от саваната +Permafrost=Вечно замръзнала почва +Permafrost with Stones=Вечно замръзнала почва с камъни +Permafrost with Moss=Вечно замръзнала почва с мъх +Sand=Пясък +Desert Sand=Пустинен пясък +Silver Sand=Сребърен пясък +Gravel=Чакъл +Clay=Глина +Snow=Сняг +Snow Block=Блокче сняг +Ice=Лед +Cave Ice=Блокче лед +Apple Tree=Ябълково дърво +Apple Wood Planks=Дъски от ябълково дърво +Apple Tree Sapling=Фиданка от ябълково дърво +Apple Tree Leaves=Листа на ябълково дърво +Apple=Ябълка +Apple Marker=Маркер на ябълка +Jungle Tree=Джунглово дърво +Jungle Wood Planks=Дъски от джунглово дърво +Jungle Tree Leaves=Листа на джунглово дърво +Jungle Tree Sapling=Фиданка от джунглово дърво +Emergent Jungle Tree Sapling=Покълнала фиданка от джунглово дърво +Pine Tree=Борово дърво +Pine Wood Planks=Дъски от борово дърво +Pine Needles=Борови иглички +Pine Tree Sapling=Фиданка от борово дърво +Acacia Tree=Акациево дърво +Acacia Wood Planks=Дъски от акациево дърво +Acacia Tree Leaves=Листа на акациево дърво +Acacia Tree Sapling=Фиданка от акациево дърво +Aspen Tree=Трепетликово дърво +Aspen Wood Planks=Дъски от трепетликово дърво +Aspen Tree Leaves=Листа на трепетликово дърво +Aspen Tree Sapling=Фиданка от трепетликово дърво +Coal Ore=Въглищна руда +Coal Block=Блокче въглища +Iron Ore=Желязна руда +Steel Block=Стеманено блокче +Copper Ore=Медна руда +Copper Block=Медно блокче +Tin Ore=Калаена руда +Tin Block=Калаено блокче +Bronze Block=Бронзово блокче +Mese Ore=Руда за месе +Mese Block=Блокче от месе +Gold Ore=Златна руда +Gold Block=Златно блокче +Diamond Ore=Диамантена руда +Diamond Block=Диамантено блокче +Cactus=Кактус +Large Cactus Seedling=Семена на голям кактус +Papyrus=Папирус +Dry Shrub=Сух храст +Jungle Grass=Трева от джунглата +Grass=Трева +Savanna Grass=Трева от саваната +Fern=Папрат +Marram Grass=Пясъчна трева +Bush Stem=Ствол на храст +Bush Leaves=Листа на храст +Bush Sapling=Фиданка на храст +Blueberry Bush Leaves with Berries=Листа на боровинков храст с боровинки +Blueberry Bush Leaves=Листа на боровинков храст +Blueberry Bush Sapling=Фиданка на боровинков храст +Acacia Bush Stem=Ствол на акациев храст +Acacia Bush Leaves=Листа на акациев храст +Acacia Bush Sapling=Фиданка на акациев храст +Pine Bush Stem=Ствол на боров храст +Pine Bush Needles=Бодлички на боров храст +Pine Bush Sapling=Фиданка на борох храст +Kelp=Водорасли +Green Coral=Зелен корал +Pink Coral=Розов корал +Cyan Coral=Син корал +Brown Coral=Кафяв корал +Orange Coral=Оранжев корал +Coral Skeleton=Скелет на корал +Water Source=Източник на вода +Flowing Water=Течаща вода +River Water Source=Източник на речна вода +Flowing River Water=Течаща речна вода +Lava Source=Източник на лава +Flowing Lava=Течаща лава +Empty Bookshelf=Празна библиотека +Bookshelf (@1 written, @2 empty books)=Библиотека (@1 написани, @2 празни книги) +Bookshelf=Библиотека +Text too long=Текстът е двърде дълъг +"@1"=„@1“ +Wooden Sign=Дървен знак +Steel Sign=Стоманен знак +Wooden Ladder=Дървена стълба +Steel Ladder=Стоманена стълба +Apple Wood Fence=Ограда от ябълково дърво +Acacia Wood Fence=Ограда от акациево дърво +Jungle Wood Fence=Ограда от джунглово дърво +Pine Wood Fence=Ограда от борово дърво +Aspen Wood Fence=Ограда от трепетликово дърво +Apple Wood Fence Rail=Парапет от ябълково дърво +Acacia Wood Fence Rail=Парапет от акациево дърво +Jungle Wood Fence Rail=Парапет от джунглово дърво +Pine Wood Fence Rail=Парапет от борово дърво +Aspen Wood Fence Rail=Парапет от трепетликово дърво +Glass=Стъкло +Obsidian Glass=Обсидианово стъкло +Brick Block=Блокче от тухли +Mese Lamp=Лампа от кристал месе +Apple Wood Mese Post Light=Поставка за лампа с месе от ябълково дърво +Acacia Wood Mese Post Light=Поставка за лампа с месе от акациево дърво +Jungle Wood Mese Post Light=Поставка за лампа с месе от джунглово дърво +Pine Wood Mese Post Light=Поставка за лампа с месе от борово дърво +Aspen Wood Mese Post Light=Поставка за лампа с месе от трепетликово дърво +Cloud=Облак +Wooden Pickaxe=Дървена кирка +Stone Pickaxe=Каменна кирка +Bronze Pickaxe=Бронзова кирка +Steel Pickaxe=Стоманена кирка +Mese Pickaxe=Кирка от кристала месе +Diamond Pickaxe=Диамантена кирка +Wooden Shovel=Дървена лопата +Stone Shovel=Каменна лопата +Bronze Shovel=Бронзова лопата +Steel Shovel=Стоманена лопата +Mese Shovel=Лопата от кристала месе +Diamond Shovel=Диамантена лопата +Wooden Axe=Дървена брадва +Stone Axe=Каменна брадва +Bronze Axe=Бронзова брадва +Steel Axe=Стоманена брадва +Mese Axe=Брадва от кристала месе +Diamond Axe=Диамантена брадва +Wooden Sword=Дървен меч +Stone Sword=Каменен меч +Bronze Sword=Бронзов меч +Steel Sword=Стоманен меч +Mese Sword=Меч от кристала месе +Diamond Sword=Диамантен меч +Torch=Факел +@1 will intersect protection on growth.=@1 ще наруши защитата при израстване. diff --git a/mods/default/locale/default.da.tr b/mods/default/locale/default.da.tr new file mode 100644 index 0000000..c76f065 --- /dev/null +++ b/mods/default/locale/default.da.tr @@ -0,0 +1,215 @@ +# textdomain: default +Locked Chest=Låst kiste +Locked Chest (owned by @1)=Låst kiste (ejet af @1) +You do not own this chest.=Du ejer ikke denne kiste. +a locked chest=en låst kiste +Chest=Kiste +Write=Skriv +Read=Læs +Title:=Titel: +Contents:=Indhold: +Save=Gem +by @1=af @1 +Page @1 of @2=Side @1 af @2 +The book you were writing to mysteriously disappeared.=Bogen som du skrev på er på mystisk vis forsvundet. +"@1" by @2="@1" af @2 +Blueberries=Blåbær +Book=Bog +Book with Text=Bog med tekst +Bronze Ingot=Bronzebarre +Clay Brick=Lermursten +Clay Lump=Lerklump +Coal Lump=Kulklump +Copper Ingot=Kobberbarre +Copper Lump=Kobberklump +Diamond=Diamand +Flint=Flint +Gold Ingot=Guldbarre +Gold Lump=Guldklump +Iron Lump=Jernklump +Mese Crystal=Mesekrystal +Mese Crystal Fragment=Mesekrystalfragment +Obsidian Shard=Obsidianskår +Paper=Papir +Steel Ingot=Stålbarre +Stick=Pind +Tin Ingot=Tinbarre +Tin Lump=Tinklump +Furnace is empty=Ovnen er tom +100% (output full)=100% (output er fuld) +@1%=@1% +Not cookable=Ikke kogbar +Empty=Tom +Furnace active=Ovn aktiv +Furnace inactive=Ovn inaktiv +(Item: @1; Fuel: @2)=(Ting: @1; Brændstof: @2) +Furnace=Ovn +Stone=Sten +Cobblestone=Granitsten +Stone Brick=Stenmursten +Stone Block=Stenblok +Mossy Cobblestone=Mosbeklædt granitsten +Desert Stone=Ørkensten +Desert Cobblestone=Ørkengranitsten +Desert Stone Brick=Ørkenmursten +Desert Stone Block=Ørkenstenblok +Sandstone=Sandsten +Sandstone Brick=Sandstensmursten +Sandstone Block=Sandstensblok +Desert Sandstone=Ørkensandsten +Desert Sandstone Brick=Ørkensandstensmursten +Desert Sandstone Block=Ørkensandstensblok +Silver Sandstone=Sølvsandsten +Silver Sandstone Brick=Sølvsandstenmursten +Silver Sandstone Block=Sølvsandstenblok +Obsidian=Obsidian +Obsidian Brick=Obsidianmursten +Obsidian Block=Obsidianblok +Dirt=Jord +Dirt with Grass=Jord med græs +Dirt with Grass and Footsteps=Jord med græs og fodtrin +Dirt with Savanna Grass=Jord med savannegræs +Dirt with Snow=Jord med sne +Dirt with Rainforest Litter=Jord med regnskovstæppe +Dirt with Coniferous Litter=Jord med nåletræstæppe +Savanna Dirt=Savannejord +Savanna Dirt with Savanna Grass=Savannejord med savannegræs +Permafrost=Permafrost +Permafrost with Stones=Permafrost med sten +Permafrost with Moss=Permafrost med mos +Sand=Sand +Desert Sand=Ørkensand +Silver Sand=Sølvsand +Gravel=Grus +Clay=Ler +Snow=Sne +Snow Block=Sneblok +Ice=Is +Cave Ice=Huleis +Apple Tree=Æbletræ +Apple Wood Planks=Æbletræsplanker +Apple Tree Sapling=Æbletræsspire +Apple Tree Leaves=Æbletræsblade +Apple=Æble +Apple Marker=Æblemarkør +Jungle Tree=Jungletræ +Jungle Wood Planks=Jungletræsplanke +Jungle Tree Leaves=Jungletræsblade +Jungle Tree Sapling=Jungletræsspire +Emergent Jungle Tree Sapling=Fremvoksende jungletræsspire +Pine Tree=Fyrretræ +Pine Wood Planks=Fyrretræsplanker +Pine Needles=Fyrretræsnåle +Pine Tree Sapling=Fyrretræsspire +Acacia Tree=Arkasietræ +Acacia Wood Planks=Arkasietræsplanker +Acacia Tree Leaves=Arkasietræsblade +Acacia Tree Sapling=Arkasietræsspire +Aspen Tree=Aspetræ +Aspen Wood Planks=Aspetræsplanker +Aspen Tree Leaves=Aspetræsblade +Aspen Tree Sapling=Aspetræsspire +Coal Ore=Kulmalm +Coal Block=Kulblok +Iron Ore=Jernmalm +Steel Block=Stålblok +Copper Ore=Kobbermalm +Copper Block=Kobberblok +Tin Ore=Tinmalm +Tin Block=Tinblok +Bronze Block=Bronzeblok +Mese Ore=Mesemalm +Mese Block=Meseblok +Gold Ore=Guldmalm +Gold Block=Guldblok +Diamond Ore=Diamandmalm +Diamond Block=Diamandblok +Cactus=Kaktus +Large Cactus Seedling=Stor kaktusspire +Papyrus=Papyrus +Dry Shrub=Tør busk +Jungle Grass=Junglegræs +Grass=Græs +Savanna Grass=Savannegræs +Fern=Bregne +Marram Grass=Marramgræs +Bush Stem=Buskstamme +Bush Leaves=Buskblade +Bush Sapling=Buskspire +Blueberry Bush Leaves with Berries=Blåbærbuskblade med bær +Blueberry Bush Leaves=Blåbærbuskblade +Blueberry Bush Sapling=Blåbærbuskspire +Acacia Bush Stem=Akaciebuskstamme +Acacia Bush Leaves=Akaciebuskblade +Acacia Bush Sapling=Akaciebuskspire +Pine Bush Stem=Fyrretræsbuskstamme +Pine Bush Needles=Fyrretræsbusknåle +Pine Bush Sapling=Fyrretræsbuskspire +Kelp=Tang +Green Coral=Grøn koral +Pink Coral=Lyserød koral +Cyan Coral=Cyan koral +Brown Coral=Brun koral +Orange Coral=Orange koral +Coral Skeleton=Koralskelet +Water Source=Vandkilde +Flowing Water=Strømmende vand +River Water Source=Flodvandkilde +Flowing River Water=Strømmende flodvand +Lava Source=Lavakilde +Flowing Lava=Flydende lava +Empty Bookshelf=Tom boghylde +Bookshelf (@1 written, @2 empty books)=Boghylde (@1 skrevne, @2 tomme bøger) +Bookshelf=Boghylde +Text too long=Tekst for lang +"@1"="@1" +Wooden Sign=Trætegn +Steel Sign=Ståltegn +Wooden Ladder=Træstige +Steel Ladder=Stålstige +Apple Wood Fence=Æbletræshegn +Acacia Wood Fence=Akacietræshegn +Jungle Wood Fence=Jungletræhegn +Pine Wood Fence=Fyrretræshegn +Aspen Wood Fence=Aspetræhegn +Apple Wood Fence Rail=Æbletræhegnsskinne +Acacia Wood Fence Rail=Akacietræshegnsskinne +Jungle Wood Fence Rail=Jungletræshegnsskinne +Pine Wood Fence Rail=Fyrretræshegnsskinne +Aspen Wood Fence Rail=Aspetræshegnsskinne +Glass=Glas +Obsidian Glass=Obsidianglas +Brick Block=Murstensblok +Mese Lamp=Meselampe +Apple Wood Mese Post Light=Æbletræsmesepostlys +Acacia Wood Mese Post Light=Arkacietræsmesepostlys +Jungle Wood Mese Post Light=Jungletræsmesepostlys +Pine Wood Mese Post Light=Fyrretræsmesepostlys +Aspen Wood Mese Post Light=Aspetræsmesepostlys +Cloud=Sky +Wooden Pickaxe=Træskovhakke +Stone Pickaxe=Stenskovhakke +Bronze Pickaxe=Bronzeskovhakke +Steel Pickaxe=Stålskovhakke +Mese Pickaxe=Meseskovhakke +Diamond Pickaxe=Diamandskovhakke +Wooden Shovel=Træskovl +Stone Shovel=Stenskovl +Bronze Shovel=Bronzeskovl +Steel Shovel=Stålskovl +Mese Shovel=Meseskovl +Diamond Shovel=Diamandskovl +Wooden Axe=Træøkse +Stone Axe=Stenøkse +Bronze Axe=Bronzeøkse +Steel Axe=Ståløkse +Mese Axe=Meseøkse +Diamond Axe=Diamandøkse +Wooden Sword=Træsværd +Stone Sword=Stensværd +Bronze Sword=Bronzesværd +Steel Sword=Stålsværd +Mese Sword=Mesesværd +Diamond Sword=Diamandsværd +Torch=Fakkel +@1 will intersect protection on growth.=Ved vækst vil @1 overlappe beskyttelse. diff --git a/mods/default/locale/default.de.tr b/mods/default/locale/default.de.tr new file mode 100644 index 0000000..cb0ec1e --- /dev/null +++ b/mods/default/locale/default.de.tr @@ -0,0 +1,220 @@ +# textdomain: default +Locked Chest=Abgeschlossene Truhe +Locked Chest (owned by @1)=Abgeschlossene Truhe (Eigentum von @1) +You do not own this chest.=Ihnen gehört diese Truhe nicht. +a locked chest=eine abgeschlossene Truhe +Chest=Truhe +Write=Schreiben +Read=Lesen +Title:=Titel: +Contents:=Inhalt: +Save=Speichern +by @1=von @1 +Page @1 of @2=Seite @1 von @2 +The book you were writing to mysteriously disappeared.=Das Buch, an dem Sie geschrieben haben, ist auf mysteriöse Weise verschwunden. +"@1" by @2=„@1“ von @2 +Blueberries=Blaubeeren +Book=Buch +Book with Text=Buch mit Text +Bronze Ingot=Bronzebarren +Clay Brick=Tonziegel +Clay Lump=Tonklumpen +Coal Lump=Kohleklumpen +Copper Ingot=Kupferbarren +Copper Lump=Kupferklumpen +Diamond=Diamant +Flint=Feuerstein +Gold Ingot=Goldbarren +Gold Lump=Goldklumpen +Iron Lump=Eisenklumpen +Mese Crystal=Mesekristall +Mese Crystal Fragment=Mesekristallfragment +Obsidian Shard=Obsidianscherbe +Paper=Papier +Steel Ingot=Stahlbarren +Stick=Stock +Tin Ingot=Zinnbarren +Tin Lump=Zinnklumpen +Furnace is empty=Ofen ist leer +100% (output full)=100% (Ausgabe voll) +@1%=@1% +Not cookable=Nicht kochbar +Empty=Leer +Furnace active=Ofen aktiv +Furnace inactive=Ofen inaktiv +(Item: @1; Fuel: @2)=(Gegenstand: @1; Brennstoff: @2) +Furnace=Ofen +Stone=Stein +Cobblestone=Kopfsteinpflaster +Stone Brick=Steinziegel +Stone Block=Steinblock +Mossy Cobblestone=Moosiges Kopfsteinpflaster +Desert Stone=Wüstenstein +Desert Cobblestone=Wüstenkopfsteinpflaster +Desert Stone Brick=Wüstensteinziegel +Desert Stone Block=Wüstensteinblock +Sandstone=Sandstein +Sandstone Brick=Sandsteinziegel +Sandstone Block=Sandsteinblock +Desert Sandstone=Wüstensandstein +Desert Sandstone Brick=Wüstensandsteinziegel +Desert Sandstone Block=Wüstensandsteinblock +Silver Sandstone=Silbersandstein +Silver Sandstone Brick=Silbersandsteinziegel +Silver Sandstone Block=Silbersandsteinblock +Obsidian=Obsidian +Obsidian Brick=Obsidianziegel +Obsidian Block=Obsidianblock +Dirt=Erde +Dirt with Grass=Erde mit Gras +Dirt with Grass and Footsteps=Erde mit Gras und Fußstapfen +Dirt with Savanna Grass=Erde mit Savannengras +Dirt with Snow=Erde mit Schnee +Dirt with Rainforest Litter=Erde mit Regenwaldboden +Dirt with Coniferous Litter=Erde mit Nadelwaldboden +Savanna Dirt=Savannenerde +Savanna Dirt with Savanna Grass=Savannenerde mit Savannengras +Permafrost=Permafrost +Permafrost with Stones=Permafrost mit Steinen +Permafrost with Moss=Permafrost mit Moos +Sand=Sand +Desert Sand=Wüstensand +Silver Sand=Silbersand +Gravel=Kies +Clay=Ton +Snow=Schnee +Snow Block=Schneeblock +Ice=Eis +Cave Ice=Höhleneis +Apple Tree=Apfelbaum +Apple Wood Planks=Apfelbaumplanken +Apple Tree Sapling=Apfelbaumsetzling +Apple Tree Leaves=Apfelbaumblätter +Apple=Apfel +Apple Marker=Apfelmarkierung +Jungle Tree=Dschungelbaum +Jungle Wood Planks=Dschungelholzplanken +Jungle Tree Leaves=Dschungelbaumblätter +Jungle Tree Sapling=Dschungelbaumsetzling +Emergent Jungle Tree Sapling=Hervorstehender Dschungelbaumsetzling +Pine Tree=Kiefernbaum +Pine Wood Planks=Kiefernholzplanken +Pine Needles=Kiefernnadeln +Pine Tree Sapling=Kiefernbaumsetzling +Acacia Tree=Akazienbaum +Acacia Wood Planks=Akazienholzplanken +Acacia Tree Leaves=Akazienbaumblätter +Acacia Tree Sapling=Akazienbaumsetzling +Aspen Tree=Espenbaum +Aspen Wood Planks=Espenholzplanken +Aspen Tree Leaves=Espenbaumblätter +Aspen Tree Sapling=Espenbaumsetzling +Coal Ore=Kohleerz +Coal Block=Kohleblock +Iron Ore=Eisenerz +Steel Block=Stahlblock +Copper Ore=Kupfererz +Copper Block=Kupferblock +Tin Ore=Zinnerz +Tin Block=Zinnblock +Bronze Block=Bronzeblock +Mese Ore=Meseerz +Mese Block=Meseblock +Gold Ore=Golderz +Gold Block=Goldblock +Diamond Ore=Diamanterz +Diamond Block=Diamantblock +Cactus=Kaktus +Large Cactus Seedling=Großer Kaktussämling +Papyrus=Papyrus +Dry Shrub=Trockener Busch +Jungle Grass=Dschungelgras +Grass=Gras +Savanna Grass=Savannengras +Fern=Farn +Marram Grass=Dünengras +Bush Stem=Buschstamm +Bush Leaves=Buschblätter +Bush Sapling=Buschsetzling +Blueberry Bush Leaves with Berries=Blaubeerbuschblätter mit Beeren +Blueberry Bush Leaves=Blaubeerbuschblätter +Blueberry Bush Sapling=Blaubeerbuschsetzling +Acacia Bush Stem=Akazienbuschstamm +Acacia Bush Leaves=Akazienbuschblätter +Acacia Bush Sapling=Akazienbuschsetzling +Pine Bush Stem=Kiefernbuschstamm +Pine Bush Needles=Kiefernbuschnadeln +Pine Bush Sapling=Kiefernbuschsetzling +Kelp=Seetang +Green Coral=Grüne Koralle +Pink Coral=Rosa Koralle +Cyan Coral=Türkise Koralle +Brown Coral=Braune Koralle +Orange Coral=Orange Koralle +Coral Skeleton=Korallenskelett +Water Source=Wasserquelle +Flowing Water=Fließendes Wasser +River Water Source=Flusswasserquelle +Flowing River Water=Fließendes Flusswasser +Lava Source=Lavaquelle +Flowing Lava=Fließende Lava +Empty Bookshelf=Leeres Bücherregal +Bookshelf (@1 written, @2 empty books)=Bücherregal (@1 beschriebene, @2 leere Bücher) +Bookshelf=Bücherregal +Text too long=Text zu lang +"@1"=„@1“ +Wooden Sign=Holzschild +Steel Sign=Stahlschild +Wooden Ladder=Holzleiter +Steel Ladder=Stahlleiter +Apple Wood Fence=Apfelholzzaun +Acacia Wood Fence=Akazienholzzaun +Jungle Wood Fence=Dschungelholzzaun +Pine Wood Fence=Kiefernholzzaun +Aspen Wood Fence=Espenholzzaun +Apple Wood Fence Rail=Apfelholzzaungeländer +Acacia Wood Fence Rail=Akazienholzzaungeländer +Jungle Wood Fence Rail=Dschungelholzzaungeländer +Pine Wood Fence Rail=Kiefernholzzaungeländer +Aspen Wood Fence Rail=Espenholzzaungeländer +Glass=Glas +Obsidian Glass=Obsidianglas +Brick Block=Ziegelblock +Mese Lamp=Meselampe +Apple Wood Mese Post Light=Apfelholzmesestandlampe +Acacia Wood Mese Post Light=Akazienholzmesestandlampe +Jungle Wood Mese Post Light=Dschungelholzmesestandlampe +Pine Wood Mese Post Light=Kiefernholzmesestandlampe +Aspen Wood Mese Post Light=Espenholzmesestandlampe +Cloud=Wolke +Wooden Pickaxe=Holzspitzhacke +Stone Pickaxe=Steinspitzhacke +Bronze Pickaxe=Bronzespitzhacke +Steel Pickaxe=Stahlspitzhacke +Mese Pickaxe=Mesespitzhacke +Diamond Pickaxe=Diamantspitzhacke +Wooden Shovel=Holzschaufel +Stone Shovel=Steinschaufel +Bronze Shovel=Bronzeschaufel +Steel Shovel=Stahlschaufel +Mese Shovel=Meseschaufel +Diamond Shovel=Diamantschaufel +Wooden Axe=Holzaxt +Stone Axe=Steinaxt +Bronze Axe=Bronzeaxt +Steel Axe=Stahlaxt +Mese Axe=Meseaxt +Diamond Axe=Diamantaxt +Wooden Sword=Holzschwert +Stone Sword=Steinschwert +Bronze Sword=Bronzeschwert +Steel Sword=Stahlschwert +Mese Sword=Meseschwert +Diamond Sword=Diamantschwert +Torch=Fackel +@1 will intersect protection on growth.=@1 wird bei Wachstum mit geschützter Zone überlappen. + + +##### not used anymore ##### + +Mese Post Light=Mesestandlampe diff --git a/mods/default/locale/default.eo.tr b/mods/default/locale/default.eo.tr new file mode 100644 index 0000000..8454c6d --- /dev/null +++ b/mods/default/locale/default.eo.tr @@ -0,0 +1,220 @@ +# textdomain: default +Locked Chest=Ŝlosita kesto +Locked Chest (owned by @1)=Ŝlosita kesto (de @1) +You do not own this chest.=Vi ne posedas ĉi tiun keston. +a locked chest=ŝlosita kesto +Chest=Kesto +Write=Skribi +Read=Legi +Title:=Titolo: +Contents:=Enhavo: +Save=Konservi +by @1=per @1 +Page @1 of @2=Paĝo @1 el @2 +The book you were writing to mysteriously disappeared.=La libro, kiun vi skribis, mistere malaperis. +"@1" by @2="@1" per @2 +Blueberries=Mirteloj +Book=Libro +Book with Text=Libro kun teksto +Bronze Ingot=Bronza ingoto +Clay Brick=Argila briko +Clay Lump=Argila bulo +Coal Lump=Karba bulo +Copper Ingot=Kupra ingoto +Copper Lump=Kupra bulo +Diamond=Diamanto +Flint=Siliko +Gold Ingot=Ora ingoto +Gold Lump=Ora bulo +Iron Lump=Fera bulo +Mese Crystal=Mesea kristalo +Mese Crystal Fragment=Mesea kristala ero +Obsidian Shard=Obsidiana peceto +Paper=Papero +Steel Ingot=Ŝtala ingoto +Stick=Bastono +Tin Ingot=Stana ingoto +Tin Lump=Stana bulo +Furnace is empty=Forno estas malplena +100% (output full)=100% (plena eligo) +@1%=@1% +Not cookable=Nekuirebla +Empty=Malplena +Furnace active=Forno laboras +Furnace inactive=Forno ne laboras +(Item: @1; Fuel: @2)=(Objekto: @1; Brulaĵo: @2) +Furnace=Forno +Stone=Ŝtono +Cobblestone=Pavimŝtono +Stone Brick=Ŝtona briko +Stone Block=Ŝtona bloko +Mossy Cobblestone=Muska pavimŝtono +Desert Stone=Dezerta ŝtono +Desert Cobblestone=Dezerta pavimŝtono +Desert Stone Brick=Dezerta ŝtona briko +Desert Stone Block=Dezerta ŝtona bloko +Sandstone=Sablaŝtono +Sandstone Brick=Sablaŝtono briko +Sandstone Block=Sablaŝtono bloko +Desert Sandstone=Dezerta sablaŝtono +Desert Sandstone Brick=Dezerta sablaŝtono briko +Desert Sandstone Block=Dezerta sablaŝtono bloko +Silver Sandstone=Arĝenta sablaŝtono +Silver Sandstone Brick=Arĝenta sablaŝtono briko +Silver Sandstone Block=Arĝenta sablaŝtono bloko +Obsidian=Obsidiano +Obsidian Brick=Obsidiana briko +Obsidian Block=Obsidiana bloko +Dirt=Tero +Dirt with Grass=Tero kun herbo +Dirt with Grass and Footsteps=Tero kun herbo kaj piedpaŝoj +Dirt with Savanna Grass=Tero kun savana herbo +Dirt with Snow=Tero kun neĝo +Dirt with Rainforest Litter=Tero kun pluvarbara folioj +Dirt with Coniferous Litter=Tero kun koniferaj folioj +Savanna Dirt=Savana tero +Savanna Dirt with Savanna Grass=Savana tero kun savana herbo +Permafrost=Ĉiamfrosto +Permafrost with Stones=Ĉiamfrosto kun ŝtonoj +Permafrost with Moss=Ĉiamfrosto kun musko +Sand=Sablo +Desert Sand=Dezerta sablo +Silver Sand=Arĝenta sablo +Gravel=Gruzo +Clay=Argilo +Snow=Neĝo +Snow Block=Neĝa bloko +Ice=Glacio +Cave Ice=Kaverna glacio +Apple Tree=Pomarbo +Apple Wood Planks=Pomarbaj lignaj tabuloj +Apple Tree Sapling=Pomarba arbido +Apple Tree Leaves=Pomarbaj folioj +Apple=Pomo +Apple Marker=Poma marko +Jungle Tree=Ĝangala arbo +Jungle Wood Planks=Ĝangalaj lignaj tabuloj +Jungle Tree Leaves=Ĝangalaj arbaj folioj +Jungle Tree Sapling=Ĝangala arba arbido +Emergent Jungle Tree Sapling=Nova ĝangala arba arbido +Pine Tree=Pino +Pine Wood Planks=Pinaj lignaj tabuloj +Pine Needles=Pinpingloj +Pine Tree Sapling=Pina arbido +Acacia Tree=Akacio +Acacia Wood Planks=Akaciaj lignaj tabuloj +Acacia Tree Leaves=Akaciaj folioj +Acacia Tree Sapling=Akacia arbido +Aspen Tree=Tremolo +Aspen Wood Planks=Tremolaj lignaj tabuloj +Aspen Tree Leaves=Tremolaj folioj +Aspen Tree Sapling=Tremola arbido +Coal Ore=Karba minaĵo +Coal Block=Karba bloko +Iron Ore=Fera minaĵo +Steel Block=Ŝtala bloko +Copper Ore=Kupra minaĵo +Copper Block=Kupra bloko +Tin Ore=Stana minaĵo +Tin Block=Stana bloko +Bronze Block=Bronza bloko +Mese Ore=Mesea minaĵo +Mese Block=Mesea bloko +Gold Ore=Ora minaĵo +Gold Block=Ora bloko +Diamond Ore=Diamanta minaĵo +Diamond Block=Diamanta bloko +Cactus=Kakto +Large Cactus Seedling=Granda kakta kreskaĵo +Papyrus=Papiruso +Dry Shrub=Seka arbetaĵo +Jungle Grass=Ĝangala herbo +Grass=Herbo +Savanna Grass=Savana herbo +Fern=Filiko +Marram Grass=Amofilo +Bush Stem=Arbateĵa tubo +Bush Leaves=Arbateĵaj folioj +Bush Sapling=Arbateĵa arbido +Blueberry Bush Leaves with Berries=Mirtelaj arbateĵaj folioj kaj beroj +Blueberry Bush Leaves=Mirtelaj arbateĵaj folioj +Blueberry Bush Sapling=Mirtela arbateĵa arbido +Acacia Bush Stem=Akacia arbateĵa tubo +Acacia Bush Leaves=Akaciaj arbateĵaj folioj +Acacia Bush Sapling=Akacia arbateĵa arbido +Pine Bush Stem=Pina arbateĵa tubo +Pine Bush Needles=Pinaj arbateĵaj pingloj +Pine Bush Sapling=Pina arbateĵa arbido +Kelp=Fuko +Green Coral=Verda koralo +Pink Coral=Rozkolora koralo +Cyan Coral=Bluverda koralo +Brown Coral=Bruna koralo +Orange Coral=Oranĝkolora koralo +Coral Skeleton=Korala framo +Water Source=Akva fonto +Flowing Water=Flua akvo +River Water Source=Rivera akva fonto +Flowing River Water=Flua rivera akvo +Lava Source=Lafa fonto +Flowing Lava=Flua lafa +Empty Bookshelf=Malplena librobreto +Bookshelf (@1 written, @2 empty books)=Librobreto (@1 skriba(j), @2 malplena(j) libro(j)) +Bookshelf=Librobreto +Text too long=Tro longa teksto +"@1"= +Wooden Sign=Ligna signo +Steel Sign=Ŝtala signo +Wooden Ladder=Ligna ŝtupetaro +Steel Ladder=Ŝtala ŝtupetaro +Apple Wood Fence=Poma ligna barilo +Acacia Wood Fence=Akacia ligna barilo +Jungle Wood Fence=Ĝangala ligna barilo +Pine Wood Fence=Pina ligna barilo +Aspen Wood Fence=Tremola ligna barilo +Apple Wood Fence Rail=Poma ligna barila relo +Acacia Wood Fence Rail=Akacia ligna barila relo +Jungle Wood Fence Rail=Ĝangala ligna barila relo +Pine Wood Fence Rail=Pina ligna barila relo +Aspen Wood Fence Rail=Tremola ligna barila relo +Glass=Vitro +Obsidian Glass=Obsidiana vitro +Brick Block=Brika bloko +Mese Lamp=Mesea lampo +Apple Wood Mese Post Light=Poma ligna mesea fosta lampo +Acacia Wood Mese Post Light=Akacia ligna mesea fosta lampo +Jungle Wood Mese Post Light=Ĝangala ligna mesea fosta lampo +Pine Wood Mese Post Light=Pina ligna mesea fosta lampo +Aspen Wood Mese Post Light=Tremola ligna mesea fosta lampo +Cloud=Nubo +Wooden Pickaxe=Ligna pioĉo +Stone Pickaxe=Ŝtona pioĉo +Bronze Pickaxe=Bronza pioĉo +Steel Pickaxe=Ŝtala pioĉo +Mese Pickaxe=Mesea pioĉo +Diamond Pickaxe=Diamanta pioĉo +Wooden Shovel=Ligna fosilo +Stone Shovel=Ŝtona fosilo +Bronze Shovel=Bronza fosilo +Steel Shovel=Ŝtala fosilo +Mese Shovel=Mesea fosilo +Diamond Shovel=Diamanta fosilo +Wooden Axe=Ligna hakilo +Stone Axe=Ŝtona hakilo +Bronze Axe=Bronza hakilo +Steel Axe=Ŝtala hakilo +Mese Axe=Mesea hakilo +Diamond Axe=Diamanta hakilo +Wooden Sword=Ligna glavo +Stone Sword=Ŝtona glavo +Bronze Sword=Bronza glavo +Steel Sword=Ŝtala glavo +Mese Sword=Mesea glavo +Diamond Sword=Diamanta glavo +Torch=Torĉo +@1 will intersect protection on growth.=@1 sekcos protekton dum kresko. + + +##### not used anymore ##### + +Mese Post Light=Mesea fosta lampo diff --git a/mods/default/locale/default.es.tr b/mods/default/locale/default.es.tr new file mode 100644 index 0000000..d08c2d2 --- /dev/null +++ b/mods/default/locale/default.es.tr @@ -0,0 +1,224 @@ +# textdomain: default +Locked Chest=Cofre cerrado +Locked Chest (owned by @1)=Cofre cerrado (propiedad de @1) +You do not own this chest.=Este cofre no te pertenece. +a locked chest=un cofre cerrado +Chest=Cofre +Write= +Read= +Title:=Título: +Contents:=Contenidos: +Save=Guardar +by @1=por @1 +Page @1 of @2=Página @1 de @2 +The book you were writing to mysteriously disappeared.= +"@1" by @2="@1" por @2 +Blueberries=Arándanos +Book=Libro +Book with Text=Libro escrito +Bronze Ingot=Lingote de bronce +Clay Brick=Ladrillo de arcilla +Clay Lump=Bola de arcilla +Coal Lump=Carbón +Copper Ingot=Lingote de cobre +Copper Lump=Pepita de cobre +Diamond=Diamante +Flint=Pedernal +Gold Ingot=Lingote de oro +Gold Lump=Pepita de oro +Iron Lump=Pepita de hierro +Mese Crystal=Cristal de mese +Mese Crystal Fragment=Fragmento de cristal de mese +Obsidian Shard=Esquirla de obsidiana +Paper=Papel +Steel Ingot=Lingote de acero +Stick=Palo +Tin Ingot=Lingote de estaño +Tin Lump=Pepita de estaño +Furnace is empty=El horno está vacío +100% (output full)=100% (salida completa) +@1%=@1% +Not cookable=No se puede cocinar +Empty=Vacío +Furnace active=Horno activado +Furnace inactive=Horno desactivado +(Item: @1; Fuel: @2)=(Objeto: @1; Combustible: @2) +Furnace=Horno +Stone=Piedra +Cobblestone=Adoquín +Stone Brick=Ladrillo de piedra +Stone Block=Bloque de piedra +Mossy Cobblestone=Adoquín musgoso +Desert Stone=Piedra desértica +Desert Cobblestone=Adoquín desértico +Desert Stone Brick=Ladrillo de piedra desértica +Desert Stone Block=Bloque de piedra desértica +Sandstone=Piedra arenisca +Sandstone Brick=Ladrillo de arenisca +Sandstone Block=Bloque de arenisca +Desert Sandstone=Piedra arenisca desértica +Desert Sandstone Brick=Ladrillo de arenisca desértica +Desert Sandstone Block=Bloque de arenisca deśertica +Silver Sandstone=Piedra arenisca plateada +Silver Sandstone Brick=Ladrillo de arenisca plateada +Silver Sandstone Block=Bloque de arenisca plateada +Obsidian=Obsidiana +Obsidian Brick=Ladrillo de obsidiana +Obsidian Block=Bloque de obsidiana +Dirt=Tierra +Dirt with Grass=Tierra con pasto +Dirt with Grass and Footsteps=Tierra con pasto y pisadas +Dirt with Savanna Grass=Tierra con hierba de sabana +Dirt with Snow=Tierra con nieve +Dirt with Rainforest Litter=Tierra con hojarasca de selva tropical +Dirt with Coniferous Litter=Tierra con hojarasca de coníferas +Savanna Dirt=Tierra de sabana +Savanna Dirt with Savanna Grass=Tierra de sabana con hierba de sabana +Permafrost=Permafrost +Permafrost with Stones=Permafrost pedregoso +Permafrost with Moss=Permafrost musgoso +Sand=Arena +Desert Sand=Arena desértica +Silver Sand=Arena plateada +Gravel=Grava +Clay=Arcilla +Snow=Nieve +Snow Block=Bloque de nieve +Ice=Hielo +Cave Ice=Hielo de cueva +Apple Tree=Madera de manzano +Apple Wood Planks=Tablas de manzano +Apple Tree Sapling=Retoño de manzano +Apple Tree Leaves=Hojas de manzano +Apple=Manzana +Apple Marker=Marcador de manzano +Jungle Tree=Madera de árbol tropical +Jungle Wood Planks=Tablas de madera tropical +Jungle Tree Leaves=Hojas de árbol tropical +Jungle Tree Sapling=Retoño de árbol tropical +Emergent Jungle Tree Sapling=Retoño de árbol tropical +Pine Tree=Madera de pino +Pine Wood Planks=Tablas de pino +Pine Needles=Agujas de pino +Pine Tree Sapling=Retoño de pino +Acacia Tree=Madera de acacia +Acacia Wood Planks=Tablas de acacia +Acacia Tree Leaves=Hojas de acacia +Acacia Tree Sapling=Retoño de acacia +Aspen Tree=Madera de álamo +Aspen Wood Planks=Tablas de álamo +Aspen Tree Leaves=Hojas de álamo +Aspen Tree Sapling=Retoño de álamo +Coal Ore=Mineral de carbón +Coal Block=Bloque de carbón +Iron Ore=Mineral de hierro +Steel Block=Bloque de acero +Copper Ore=Mineral de cobre +Copper Block=Bloque de cobre +Tin Ore=Mineral de estaño +Tin Block=Bloque de estaño +Bronze Block=Bloque de bronce +Mese Ore=Mineral de mese +Mese Block=Bloque de mese +Gold Ore=Mineral de oro +Gold Block=Bloque de oro +Diamond Ore=Mineral de diamante +Diamond Block=Bloque de diamante +Cactus=Cáctus +Large Cactus Seedling=Vástago grande de cactus +Papyrus=Papiro +Dry Shrub=Arbusto seco +Jungle Grass=Pasto de jungla +Grass=Pasto +Savanna Grass=Hierba de sabana +Fern=Helecho +Marram Grass=Carrizo +Bush Stem=Tallo de arbusto +Bush Leaves=Hojas de arbusto +Bush Sapling=Retoño de arbusto +Blueberry Bush Leaves with Berries=Hojas de arbusto de arándano con bayas +Blueberry Bush Leaves=Hojas de arbusto de arándano +Blueberry Bush Sapling=Retoño de arbusto de arándano +Acacia Bush Stem=Tallo de arbusto de acacia +Acacia Bush Leaves=Hojas de arbusto de acacia +Acacia Bush Sapling=Retoño de arbusto de acacia +Pine Bush Stem=Tallo de arbusto de pino +Pine Bush Needles=Agujas de arbusto de pino +Pine Bush Sapling=Retoño de arbusto de pino +Kelp=Alga marina +Green Coral=Coral verde +Pink Coral=Coral rosa +Cyan Coral=Coral cián +Brown Coral=Coral café +Orange Coral=Coral naranja +Coral Skeleton=Esqueleto de coral +Water Source=Fuente de agua +Flowing Water=Fluído de agua +River Water Source=Fuente de agua de río +Flowing River Water=Fluído de agua de río +Lava Source=Fuente de lava +Flowing Lava=Fluído de lava +Empty Bookshelf=Librería vacía +Bookshelf (@1 written, @2 empty books)=Librería(@1 escritos, @2 libros en blanco) +Bookshelf=Librería +Text too long=Texto demasiado largo +"@1"="@1" +Wooden Sign=Cartel de madera +Steel Sign=Cartel de acero +Wooden Ladder=Escalera de madera +Steel Ladder=Escalera de acero +Apple Wood Fence=Cerca de manzano +Acacia Wood Fence=Cerca de acacia +Jungle Wood Fence=Cerca de madera tropical +Pine Wood Fence=Cerca de pino +Aspen Wood Fence=Cerca de álamo +Apple Wood Fence Rail=Listones de manzano para cerca +Acacia Wood Fence Rail=Listones de acacia para cerca +Jungle Wood Fence Rail=Listones de madera tropical para cerca +Pine Wood Fence Rail=Listones de pino para cerca +Aspen Wood Fence Rail=Listones de álamo para cerca +Glass=Vidrio +Obsidian Glass=Vidrio de obsidiana +Brick Block=Bloque de ladrillo +Mese Lamp=Lámpara de mese +Apple Wood Mese Post Light=Poste de luz de madera de manzano +Acacia Wood Mese Post Light=Poste de luz de madera de acacia +Jungle Wood Mese Post Light=Poste de luz de madera de jungla +Pine Wood Mese Post Light=Poste de luz de madera de pino +Aspen Wood Mese Post Light=Poste de luz de madera de álamo +Cloud=Nube +Wooden Pickaxe=Pico de madera +Stone Pickaxe=Pico de piedra +Bronze Pickaxe=Pico de bronce +Steel Pickaxe=Pico de acero +Mese Pickaxe=Pico de mese +Diamond Pickaxe=Pico de diamante +Wooden Shovel=Pala de madera +Stone Shovel=Pala de piedra +Bronze Shovel=Pala de bronce +Steel Shovel=Pala de acero +Mese Shovel=Pala de mese +Diamond Shovel=Pala de diamante +Wooden Axe=Hacha de madera +Stone Axe=Hacha de piedra +Bronze Axe=Hacha de bronce +Steel Axe=Hacha de acero +Mese Axe=Hacha de mese +Diamond Axe=Hacha de diamante +Wooden Sword=Espada de madera +Stone Sword=Espada de piedra +Bronze Sword=Espada de bronce +Steel Sword=Espada de acero +Mese Sword=Espada de mese +Diamond Sword=Espada de diamante +Torch=Antorcha +@1 will intersect protection on growth.=@1 intersectará con protección cuando crezca. + + +##### not used anymore ##### + +Dirt with Dry Grass=Tierra con pasto seco +Dry Dirt=Tierra Seca +Dry Dirt with Dry Grass=Tierra seca con pasto seco +Dry Grass=Pasto seco +Mese Post Light=Poste de luz de mese diff --git a/mods/default/locale/default.eu.tr b/mods/default/locale/default.eu.tr new file mode 100644 index 0000000..e15b722 --- /dev/null +++ b/mods/default/locale/default.eu.tr @@ -0,0 +1,224 @@ +# textdomain: default +Locked Chest=Itxitako kutxa +Locked Chest (owned by @1)=Itxitako kutxa (jabea: @1) +You do not own this chest.=Kutxa hau ez da zurea. +a locked chest=kutxa itxi bat +Chest=Kutxa +Write=Idatzi +Read=Irakurri +Title:=Izenburua: +Contents:=Edukiak: +Save=Gorde +by @1=@1 bidez +Page @1 of @2=@2 orritik @1a +The book you were writing to mysteriously disappeared.=Idazten ari zinen liburua modu misteriotsuan desagertu da. +"@1" by @2="@1" @2 bidez +Blueberries=Ahabiak +Book=Liburua +Book with Text=Liburu idatzia +Bronze Ingot=Brontzezko lingotea +Clay Brick=Buztinezko Adreilua +Clay Lump=Buztin zatia +Coal Lump=Ikatz zatia +Copper Ingot=Kobrezko lingotea +Copper Lump=Kobrezko zatia +Diamond=Diamantea +Flint=Suharria +Gold Ingot=Urrezko lingotea +Gold Lump=Urrezko zatia +Iron Lump=Burdinazko zatia +Mese Crystal=Mese kristala +Mese Crystal Fragment=Mese kristalaren zatia +Obsidian Shard=Obsidiana-eskirla +Paper=Papera +Steel Ingot=Altzairuzko lingotea +Stick=Makila +Tin Ingot=Eztainuzko lingotea +Tin Lump=Eztainuzko zatia +Furnace is empty=Labea hutsik dago +100% (output full)=% 100 (irteera osoa) +@1%=%@1 +Not cookable=Ezin da kozinatu +Empty=Hutsa +Furnace active=Labea aktibatuta +Furnace inactive=Labea desaktibatuta +(Item: @1; Fuel: @2)=(Objektua: @1; Erregaia: @2) +Furnace=Labea +Stone=Harria +Cobblestone=Galtzada-harria +Stone Brick=Harrizko Adreilua +Stone Block=Harrizko Blokea +Mossy Cobblestone=Goroldiodun Galtzada-harria +Desert Stone=Basamortuko harria +Desert Cobblestone=Basamortuko galtzada-harria +Desert Stone Brick=Basamortuko harrizko Adreilua +Desert Stone Block=Basamortuko harrizko Blokea +Sandstone=Hareharria +Sandstone Brick=Hareharrizko Adreilua +Sandstone Block=Hareharrizko Blokea +Desert Sandstone=Basamortuko Hareharria +Desert Sandstone Brick=Basamortuko hareharrizko Adreilua +Desert Sandstone Block=Basamortuko hareharrizko Blokea +Silver Sandstone=Zilar-koloreko Hareharria +Silver Sandstone Brick=Zilar koloreko hareharrizko Adreilua +Silver Sandstone Block=Zilar koloreko hareharrizko Blokea +Obsidian=Obsidiana +Obsidian Brick=Obsidianazko Adreilua +Obsidian Block=Obsidiana-Blokea +Dirt=Lurra +Dirt with Grass=Lurra belarrarekin +Dirt with Grass and Footsteps=Lurra belar eta oinatzekin +Dirt with Savanna Grass=Lurra sabana-belarrarekin +Dirt with Snow=Lurra elurrarekin +Dirt with Rainforest Litter=Lurra oihan tropikaleko orbelarekin +Dirt with Coniferous Litter=Lurra koniferoen orbelarekin +Savanna Dirt=Sabana-lurra +Savanna Dirt with Savanna Grass=Sabana-lurra sabana-belarrarekin +Permafrost=Permafrost +Permafrost with Stones=Permafrost harritsua +Permafrost with Moss=Goroldioa duen Permafrosta +Sand=Harea +Desert Sand=Basamortuko harea +Silver Sand=Zilar koloreko harea +Gravel=Legarra +Clay=Buztina +Snow=Elurra +Snow Block=Elur-Blokea +Ice=Izotza +Cave Ice=Haitzuloko Izotza +Apple Tree=Sagarrondo-zura +Apple Wood Planks=Sagarrondo-oholak +Apple Tree Sapling=Sagarrondo-kimua +Apple Tree Leaves=Sagarrondo-hostoak +Apple=Sagarra +Apple Marker=Sagarrondo-markatzailea +Jungle Tree=Zuhaitz tropikaleko egurra +Jungle Wood Planks=Egur tropikaleko oholak +Jungle Tree Leaves=Zuhaitz tropikaleko hostoak +Jungle Tree Sapling=Zuhaitz tropikalaren kimua +Emergent Jungle Tree Sapling=Zuhaitz tropikalaren kimua +Pine Tree=Pinu-zura +Pine Wood Planks=Pinu taulak +Pine Needles=Pinu-orratzak +Pine Tree Sapling=Pinu-kimua +Acacia Tree=Akaziako zura +Acacia Wood Planks=Akazia-taulak +Acacia Tree Leaves=Akazia-hostoak +Acacia Tree Sapling=Akaziazko kimua +Aspen Tree=Makalaren zura +Aspen Wood Planks=Makalaren taulak +Aspen Tree Leaves=Makal-hostoak +Aspen Tree Sapling=Makalaren kimua +Coal Ore=Ikatz-minerala +Coal Block=Ikatz-Blokea +Iron Ore=Burdin minerala +Steel Block=Altzairuzko Blokea +Copper Ore=Kobre-minerala +Copper Block=Kobrezko Blokea +Tin Ore=Eztainuzko minerala +Tin Block=Eztainu-Blokea +Bronze Block=Brontzezko Blokea +Mese Ore=Mineral-minerala +Mese Block=Hileko Blokea +Gold Ore=Urrezko minerala +Gold Block=Urrezko Blokea +Diamond Ore=Diamantezko minerala +Diamond Block=Diamante-Blokea +Cactus=Kaktusa +Large Cactus Seedling=Kaktusen zurtoin handia +Papyrus=Papiroa +Dry Shrub=Zuhaixka lehorra +Jungle Grass=Oihan-belarra +Grass=Belarra +Savanna Grass=Sabana-belarra +Fern=Iratzea +Marram Grass=Lezka +Bush Stem=Zuhaixka-zurtoina +Bush Leaves=Zuhaixka-hostoak +Bush Sapling=Zuhaixka-kimua +Blueberry Bush Leaves with Berries=Ahabizko zuhaixka-hostoak baiekin +Blueberry Bush Leaves=Ahabi-zuhaixkaren hostoak +Blueberry Bush Sapling=Ahabi-zuhaixkaren kimua +Acacia Bush Stem=Akaziako zuhaixka-zurtoina +Acacia Bush Leaves=Akaziazko zuhaixka-hostoak +Acacia Bush Sapling=Akaziazko zuhaixka-kimua +Pine Bush Stem=Pinu-zuhaixkaren zurtoina +Pine Bush Needles=Pinu-zuhaixken orratzak +Pine Bush Sapling=Pinu-zuhaixkaren kimua +Kelp=Itsas alga +Green Coral=Koral berdea +Pink Coral=Koral arrosa +Cyan Coral=Koral ziana +Brown Coral=Kafe-korala +Orange Coral=Koral laranja +Coral Skeleton=Koralezko eskeletoa +Water Source=Ur-iturria +Flowing Water=Ur-fluidoa +River Water Source=Ibaiko ur-iturria +Flowing River Water=Ibai-uraren fluidoa +Lava Source=Laba-iturria +Flowing Lava=Laba-fluidoa +Empty Bookshelf=Liburu-denda hutsik +Bookshelf (@1 written, @2 empty books)=Apalategia(@1 idatziak, @2 liburu zurian) +Bookshelf=Liburutegia +Text too long=Testu luzeegia +"@1"="@1" +Wooden Sign=Egurrezko kartela +Steel Sign=Altzairuzko kartela +Wooden Ladder=Egurrezko eskailera +Steel Ladder=Altzairuzko eskailera +Apple Wood Fence=Sagarrondotik gertu +Acacia Wood Fence=Akaziatik gertu +Jungle Wood Fence=Zur tropikaleko hesia +Pine Wood Fence=Pinutik gertu +Aspen Wood Fence=Alamotik gertu +Apple Wood Fence Rail=Sagarrondo-listoiak hurbilerako +Acacia Wood Fence Rail=Akazia-listoiak hurbilerako +Jungle Wood Fence Rail=Zur tropikaleko listoiak hurbilerako +Pine Wood Fence Rail=Hurbileko pinu-listoiak +Aspen Wood Fence Rail=Alamo-listoiak hurbilerako +Glass=Beira +Obsidian Glass=Obsidianazko beira +Brick Block=Adreiluzko Blokea +Mese Lamp=Su-lanpara +Apple Wood Mese Post Light=Sagarrondo-egurrezko argi-zutoina +Acacia Wood Mese Post Light=Akaziaren egurrezko argi-zutoina +Jungle Wood Mese Post Light=Oihan-egurrezko argi-zutoina +Pine Wood Mese Post Light=Pinu-egurrezko argi-zutoina +Aspen Wood Mese Post Light=Makalaren egurrezko argi-zutoina +Cloud=Hodeia +Wooden Pickaxe=Egurrezko Pikotxa +Stone Pickaxe=Harrizko Pikotxa +Bronze Pickaxe=Brontzezko Pikotxa +Steel Pickaxe=Altzairuzko Pikotxa +Mese Pickaxe=Mese Pikotxa +Diamond Pickaxe=Diamantezko Pikotxa +Wooden Shovel=Egurrezko pala +Stone Shovel=Harrizko pala +Bronze Shovel=Brontzezko pala +Steel Shovel=Altzairuzko pala +Mese Shovel=Mese pala +Diamond Shovel=Diamantezko pala +Wooden Axe=Egurrezko aizkora +Stone Axe=Harrizko aizkora +Bronze Axe=Brontzezko aizkora +Steel Axe=Altzairuzko aizkora +Mese Axe=Mese aizkora +Diamond Axe=Diamantezko aizkora +Wooden Sword=Egurrezko ezpata +Stone Sword=Harrizko ezpata +Bronze Sword=Brontzezko ezpata +Steel Sword=Altzairuzko ezpata +Mese Sword=Hileko ezpata +Diamond Sword=Diamantezko ezpata +Torch=Lastargia +@1 will intersect protection on growth.=@1 hazkundearen babesa gurutzatuko du. + + +##### not used anymore ##### + +Dirt with Dry Grass=Lurra belar lehorrarekin +Dry Dirt=Lur lehorra +Dry Dirt with Dry Grass=Lur lehorra belar lehorrarekin +Dry Grass=Belar lehorra +Mese Post Light=Mese Argi-zutoia diff --git a/mods/default/locale/default.fr.tr b/mods/default/locale/default.fr.tr new file mode 100644 index 0000000..8f694fb --- /dev/null +++ b/mods/default/locale/default.fr.tr @@ -0,0 +1,224 @@ +# textdomain: default +Locked Chest=Coffre verrouillé +Locked Chest (owned by @1)=Coffre verrouillé (possédé par @1) +You do not own this chest.=Ce coffre ne vous appartient pas. +a locked chest=un coffre verrouillé +Chest=Coffre +Write=Écrire +Read=Lire +Title:=Titre : +Contents:=Contenu : +Save=Sauvegarder +by @1=de @1 +Page @1 of @2=Page @1 sur @2 +The book you were writing to mysteriously disappeared.= +"@1" by @2=« @1 » de @2 +Blueberries=Myrtille +Book=Livre +Book with Text=Livre avec du texte +Bronze Ingot=Lingot de bronze +Clay Brick=Brique d'argile +Clay Lump=Morceau d'argile +Coal Lump=Morceau de charbon +Copper Ingot=Lingot de cuivre +Copper Lump=Morceau de cuivre +Diamond=Diamant +Flint=Silex +Gold Ingot=Lingot d'or +Gold Lump=Morceau d'or +Iron Lump=Morceau de fer +Mese Crystal=Cristal de Mese +Mese Crystal Fragment=Fragment de cristal de Mese +Obsidian Shard=Tesson d'obsidienne +Paper=Papier +Steel Ingot=Lingot d'acier +Stick=Baton +Tin Ingot=Lingot d'étain +Tin Lump=Morceau d'étain +Furnace is empty=Le four est vide +100% (output full)=100% (Sortie pleine) +@1%=@1% +Not cookable=Ne se cuit pas +Empty=Vide +Furnace active=Four actif +Furnace inactive=Four inactif +(Item: @1; Fuel: @2)=(Article: @1; Carburant: @2) +Furnace=Four +Stone=Pierre +Cobblestone=Pavé +Stone Brick=Brique de pierre +Stone Block=Bloc de pierre +Mossy Cobblestone=Pavé moussu +Desert Stone=Pierre du désert +Desert Cobblestone=Pavé de pierre du désert +Desert Stone Brick=Brique de pierre du désert +Desert Stone Block=Bloc de pierre du désert +Sandstone=Grès +Sandstone Brick=Brique de grès +Sandstone Block=Bloc de grès +Desert Sandstone=Grès du désert +Desert Sandstone Brick=Brique de grès du désert +Desert Sandstone Block=Bloc de grès du désert +Silver Sandstone=Grès argenté +Silver Sandstone Brick=Brique de grès argenté +Silver Sandstone Block=Bloc de grès argenté +Obsidian=Obsidienne +Obsidian Brick=Brique d'obsidienne +Obsidian Block=Bloc d'obsidienne +Dirt=Terre +Dirt with Grass=Terre avec de l'herbe +Dirt with Grass and Footsteps=Terre avec de l'herbe et des traces de pas +Dirt with Savanna Grass=Terre avec de l'herbe de savane +Dirt with Snow=Terre avec de la neige +Dirt with Rainforest Litter=Terre avec sol de forêt humide +Dirt with Coniferous Litter=Terre avec sol de forêt de conifère +Savanna Dirt=Terre de la savane +Savanna Dirt with Savanna Grass=Terre de la savane avec son herbe +Permafrost=Pergélisol +Permafrost with Stones=Pergélisol avec de la pierre +Permafrost with Moss=Pergélisol avec de la mousse +Sand=Sable +Desert Sand=Sable du désert +Silver Sand=Sable argenté +Gravel=Gravier +Clay=Argile +Snow=Neige +Snow Block=Bloc de neige +Ice=Glace +Cave Ice=Glace de grotte +Apple Tree=Pommier +Apple Wood Planks=Planche de pommier +Apple Tree Sapling=Pousse de pommier +Apple Tree Leaves=Feuilles de pommier +Apple=Pomme +Apple Marker=Marqueur de pomme +Jungle Tree=Arbre de la jungle +Jungle Wood Planks=Planche d'arbre de la jungle +Jungle Tree Leaves=Feuilles d'arbre de la jungle +Jungle Tree Sapling=Pousse d'arbre de la jungle +Emergent Jungle Tree Sapling=Pousse d'arbre de la jungle émergent +Pine Tree=Pin +Pine Wood Planks=Planche de pin +Pine Needles=Aiguilles de pin +Pine Tree Sapling=Pousse de pin +Acacia Tree=Acacia +Acacia Wood Planks=Planche d'acacia +Acacia Tree Leaves=Feuilles d'acacia +Acacia Tree Sapling=Pousse d'acacia +Aspen Tree=Tremble +Aspen Wood Planks=Planche de tremble +Aspen Tree Leaves=Feuilles de tremble +Aspen Tree Sapling=Pousse de tremble +Coal Ore=Minerai de charbon +Coal Block=Bloc de charbon +Iron Ore=Minerai de fer +Steel Block=Bloc d'acier +Copper Ore=Minerai de cuivre +Copper Block=Bloc de cuivre +Tin Ore=Minerai d'étain +Tin Block=Bloc d'étain +Bronze Block=Bloc de bronze +Mese Ore=Minerai de Mese +Mese Block=Bloc de Mese +Gold Ore=Minerai d'or +Gold Block=Bloc d'or +Diamond Ore=Minerai de diamant +Diamond Block=Bloc de diamant +Cactus=Cactus +Large Cactus Seedling=Grand plan de cactus +Papyrus=Papyrus +Dry Shrub=Arbuste sec +Jungle Grass=Herbe de la jungle +Grass=Herbe +Savanna Grass=Herbe de la savane +Fern=Fougère +Marram Grass=Ammophile +Bush Stem=Tige de buisson +Bush Leaves=Feuilles de buisson +Bush Sapling=Pousse de buisson +Blueberry Bush Leaves with Berries=Buisson de myrtille avec des myrtilles +Blueberry Bush Leaves=Feuilles de buisson à myrtilles +Blueberry Bush Sapling=Pousse de buisson à myrtilles +Acacia Bush Stem=Tige de buisson d'acacia +Acacia Bush Leaves=Feuilles de buisson d'acacia +Acacia Bush Sapling=Pousses de buisson d'acacia +Pine Bush Stem=Tige de buisson de pin +Pine Bush Needles=Aiguilles de buisson de pin +Pine Bush Sapling=Pousse de buisson de pin +Kelp=Varech +Green Coral=Corail vert +Pink Coral=Corail rose +Cyan Coral=Corail cyan +Brown Coral=Corail marron +Orange Coral=Corail orange +Coral Skeleton=Squelette de corail +Water Source=Source d'eau +Flowing Water=Écoulement d'eau +River Water Source=Source d'eau de rivière +Flowing River Water=Écoulement d'eau de rivière +Lava Source=Source de lave +Flowing Lava=Écoulement de lave +Empty Bookshelf=Bibliothèque vide +Bookshelf (@1 written, @2 empty books)=Bibliothèque (@1 écrits, @2 livres vides) +Bookshelf=Bibliothèque +Text too long=Texte trop longue +"@1"=« @1 » +Wooden Sign=Panneau en bois +Steel Sign=Panneau en acier +Wooden Ladder=Échelle en bois +Steel Ladder=Échelle en acier +Apple Wood Fence=Barrière de bois de pommier +Acacia Wood Fence=Barrière de bois d'acacia +Jungle Wood Fence=Barrière de bois de la jungle +Pine Wood Fence=Barrière de bois de pin +Aspen Wood Fence=Barrière de bois de tremble +Apple Wood Fence Rail=Clôture de bois de pommier +Acacia Wood Fence Rail=Clôture de bois d'acacia +Jungle Wood Fence Rail=Clôture de bois de la jungle +Pine Wood Fence Rail=Clôture de bois de pin +Aspen Wood Fence Rail=Clôture de bois de tremble +Glass=Verre +Obsidian Glass=Verre d'obsidienne +Brick Block=Bloc de brique +Mese Lamp=Lampe de Mese +Apple Wood Mese Post Light=Réverbère de Mese en bois de pommier +Acacia Wood Mese Post Light=Réverbère de Mese en bois d'acacia +Jungle Wood Mese Post Light=Réverbère de Mese en bois de la jungle +Pine Wood Mese Post Light=Réverbère de Mese en bois de pin +Aspen Wood Mese Post Light=Réverbère de Mese en bois de tremble +Cloud=Nuage +Wooden Pickaxe=Pioche en bois +Stone Pickaxe=Pioche en pierre +Bronze Pickaxe=Pioche en bronze +Steel Pickaxe=Pioche en acier +Mese Pickaxe=Pioche de Mese +Diamond Pickaxe=Pioche en diamant +Wooden Shovel=Pelle en bois +Stone Shovel=Pelle en pierre +Bronze Shovel=Pelle en bronze +Steel Shovel=Pelle en acier +Mese Shovel=Pelle en Mese +Diamond Shovel=Pelle en diamant +Wooden Axe=Hache en bois +Stone Axe=Hache en pierre +Bronze Axe=Hache en bronze +Steel Axe=Hache en acier +Mese Axe=Hache en Mese +Diamond Axe=Hache en diamant +Wooden Sword=Epée en bois +Stone Sword=Épée en pierre +Bronze Sword=Épée en bronze +Steel Sword=Épée en acier +Mese Sword=Épée en Mese +Diamond Sword=Épée en diamant +Torch=Torche +@1 will intersect protection on growth.=@1 chevauchera la zone protégée avec la croissance. + + +##### not used anymore ##### + +Dirt with Dry Grass=Terre avec de l'herbe sèche +Dry Dirt=Terre sèche +Dry Dirt with Dry Grass=Terre sèche avec de l'herbe sèche +Dry Grass=Herbe sèche +Mese Post Light=Réverbère de Mese diff --git a/mods/default/locale/default.hu.tr b/mods/default/locale/default.hu.tr new file mode 100644 index 0000000..7861ad9 --- /dev/null +++ b/mods/default/locale/default.hu.tr @@ -0,0 +1,215 @@ +# textdomain: default +Locked Chest=Lezárt láda +Locked Chest (owned by @1)=Lezárt láda (@1 tulajdona) +You do not own this chest.=Nem a tiéd ez a láda. +a locked chest=egy lezárt láda +Chest=Láda +Write=Ír +Read=Olvas +Title:=Cím: +Contents:=Tartalom: +Save=Mentés +by @1=@1 által +Page @1 of @2=@1/@2 oldal +The book you were writing to mysteriously disappeared.=A könyv, amibe írtál, rejtélyes módon eltűnt. +"@1" by @2="@1" @2 által +Blueberries=Áfonya +Book=Könyv +Book with Text=Könyv szöveggel +Bronze Ingot=Bronz öntvény +Clay Brick=Agyag tégla +Clay Lump=Agyag rög +Coal Lump=Széndarab +Copper Ingot=Réz öntvény +Copper Lump=Réz rög +Diamond=Gyémánt +Flint=Kovakő +Gold Ingot=Arany öntvény +Gold Lump=Arany rög +Iron Lump=Vas rög +Mese Crystal=Mese kristály +Mese Crystal Fragment=Mese kristály töredék +Obsidian Shard=Obszidián szilánk +Paper=Papír +Steel Ingot=Acél öntvény +Stick=Bot +Tin Ingot=Ón öntvény +Tin Lump=Ón rög +Furnace is empty=A kemence üres +100% (output full)=100% (kimenet megtelt) +@1%= +Not cookable=Nem süthető +Empty=Üres +Furnace active=Kemence aktív +Furnace inactive=Kemence inaktív +(Item: @1; Fuel: @2)=(Tárgy: @1; Tüzelő: @2) +Furnace=Kemence +Stone=Kő +Cobblestone=Kőtörmelék +Stone Brick=Kőtégla +Stone Block=Kőtömb +Mossy Cobblestone=Mohás kőtörmelék +Desert Stone=Sivatagi kő +Desert Cobblestone=Sivatagi kőtörmelék +Desert Stone Brick=Sivatagi kőtégla +Desert Stone Block=Sivatagi kőtömb +Sandstone=Homokkő +Sandstone Brick=Homokkő tégla +Sandstone Block=Homokkő tömb +Desert Sandstone=Sivatagi homokkő +Desert Sandstone Brick=Sivatagi homokkő tégla +Desert Sandstone Block=Sivatagi homokkő tömb +Silver Sandstone=Ezüst homokkő +Silver Sandstone Brick=Ezüst homokkő tégla +Silver Sandstone Block=Ezüst homokkő tömb +Obsidian=Obszidián +Obsidian Brick=Obszidián tégla +Obsidian Block=Obszidián tömb +Dirt=Föld +Dirt with Grass=Füves föld +Dirt with Grass and Footsteps=Füves föld és lábnyomok +Dirt with Savanna Grass=Szavannafüves föld +Dirt with Snow=Havas föld +Dirt with Rainforest Litter=Föld esőerdő avarral +Dirt with Coniferous Litter=Föld fenyves avarral +Savanna Dirt=Szavanna föld +Savanna Dirt with Savanna Grass=Szavannafüves szavanna föld +Permafrost=Fagyott talaj +Permafrost with Stones=Köves fagyott talaj +Permafrost with Moss=Mohás fagyott talaj +Sand=Homok +Desert Sand=Sivatagi homok +Silver Sand=Ezüsthomok +Gravel=Sóder +Clay=Agyag +Snow=Hó +Snow Block=Hótömb +Ice=Jég +Cave Ice=Barlangi jég +Apple Tree=Almafa +Apple Wood Planks=Almafa deszkák +Apple Tree Sapling=Almafa csemete +Apple Tree Leaves=Almafa levelek +Apple=Alma +Apple Marker=Alma jelölő +Jungle Tree=Dzsungelfa +Jungle Wood Planks=Dzsungelfa deszkák +Jungle Tree Leaves=Dzsungelfa levelek +Jungle Tree Sapling=Dzsungelfa csemete +Emergent Jungle Tree Sapling=Kiemelkedő dzsungelfa csemete +Pine Tree=Fenyőfa +Pine Wood Planks=Fenyőfa deszkák +Pine Needles=Fenyő tűlevelek +Pine Tree Sapling=Fenyőfa csemete +Acacia Tree=Akáciafa +Acacia Wood Planks=Akáciafa deszkák +Acacia Tree Leaves=Akáciafa levelek +Acacia Tree Sapling=Akáciafa csemete +Aspen Tree=Nyárfa +Aspen Wood Planks=Nyárfa deszkák +Aspen Tree Leaves=Nyárfa levelek +Aspen Tree Sapling=Nyárfa csemete +Coal Ore=Szén érc +Coal Block=Szén tömb +Iron Ore=Vasérc +Steel Block=Acél tömb +Copper Ore=Rézérc +Copper Block=Réz tömb +Tin Ore=Ónérc +Tin Block=Ón tömb +Bronze Block=Bronz tömb +Mese Ore=Mese érc +Mese Block=Mese tömb +Gold Ore=Arany érc +Gold Block=Arany tömb +Diamond Ore=Gyémánt érc +Diamond Block=Gyémánt tömb +Cactus=Kaktusz +Large Cactus Seedling=Nagy kaktusz csemete +Papyrus=Papirusz +Dry Shrub=Száraz cserje +Jungle Grass=Dzsungel fű +Grass=Fű +Savanna Grass=Szavanna fű +Fern=Páfrány +Marram Grass=Buckafű +Bush Stem=Bokor szár +Bush Leaves=Bokor levelek +Bush Sapling=Bokor csemete +Blueberry Bush Leaves with Berries=Áfonya bokor bogyókkal +Blueberry Bush Leaves=Áfonya bokor levelek +Blueberry Bush Sapling=Áfonya bokor csemete +Acacia Bush Stem=Akácia bokor szár +Acacia Bush Leaves=Akácia bokor levelek +Acacia Bush Sapling=Akácia bokor csemete +Pine Bush Stem=Fenyő bokor szár +Pine Bush Needles=Fenyő bokor tűlevelek +Pine Bush Sapling=Fenyő bokor csemete +Kelp=Hínár +Green Coral=Zöld korall +Pink Coral=Rózsaszín korall +Cyan Coral=Cián korall +Brown Coral=Barna korall +Orange Coral=Narancssárga korall +Coral Skeleton=Korall csontváz +Water Source=Víz forrás +Flowing Water=Áramló víz +River Water Source=Folyóvíz forrás +Flowing River Water=Áramló folyóvíz +Lava Source=Láva forrás +Flowing Lava=Áramló láva +Empty Bookshelf=Üres könyvespolc +Bookshelf (@1 written, @2 empty books)=Könyvespolc (@1 írott, @2 üres könyv) +Bookshelf=Könyvespolc +Text too long=Túl hosszú szöveg +"@1"= +Wooden Sign=Fa tábla +Steel Sign=Acél tábla +Wooden Ladder=Fa létra +Steel Ladder=Acél létra +Apple Wood Fence=Almafa kerítés +Acacia Wood Fence=Akáciafa kerítés +Jungle Wood Fence=Dzsungelfa kerítés +Pine Wood Fence=Fenyőfa kerítés +Aspen Wood Fence=Nyárfa kerítés +Apple Wood Fence Rail=Almafa kerítés korlát +Acacia Wood Fence Rail=Akáciafa kerítés korlát +Jungle Wood Fence Rail=Dzsungelfa kerítés korlát +Pine Wood Fence Rail=Fenyőfa kerítés korlát +Aspen Wood Fence Rail=Nyárfa kerítés korlát +Glass=Üveg +Obsidian Glass=Obszidiánüveg +Brick Block=Tégla tömb +Mese Lamp=Mese lámpa +Apple Wood Mese Post Light=Almafa mese lámpaoszlop +Acacia Wood Mese Post Light=Akáciafa mese lámpaoszlop +Jungle Wood Mese Post Light=Dzsungelfa mese lámpaoszlop +Pine Wood Mese Post Light=Fenyőfa mese lámpaoszlop +Aspen Wood Mese Post Light=Nyárfa mese lámpaoszlop +Cloud=Felhő +Wooden Pickaxe=Fa csákány +Stone Pickaxe=Kő csákány +Bronze Pickaxe=Bronz csákány +Steel Pickaxe=Acél csákány +Mese Pickaxe=Mese csákány +Diamond Pickaxe=Gyémánt csákány +Wooden Shovel=Fa ásó +Stone Shovel=Kő ásó +Bronze Shovel=Bronz ásó +Steel Shovel=Acél ásó +Mese Shovel=Mese ásó +Diamond Shovel=Gyémánt ásó +Wooden Axe=Fa fejsze +Stone Axe=Kő fejsze +Bronze Axe=Bronz fejsze +Steel Axe=Acél fejsze +Mese Axe=Mese fejsze +Diamond Axe=Gyémánt fejsze +Wooden Sword=Fa kard +Stone Sword=Kő kard +Bronze Sword=Bronz kard +Steel Sword=Acél kard +Mese Sword=Mese kard +Diamond Sword=Gyémánt kard +Torch=Fáklya +@1 will intersect protection on growth.=@1 keresztezi a növekedési védelmet. diff --git a/mods/default/locale/default.id.tr b/mods/default/locale/default.id.tr new file mode 100644 index 0000000..c60b5b0 --- /dev/null +++ b/mods/default/locale/default.id.tr @@ -0,0 +1,220 @@ +# textdomain: default +Locked Chest=Peti Terkunci +Locked Chest (owned by @1)=Peti Terkunci (milik @1) +You do not own this chest.=Anda bukan pemilik peti ini. +a locked chest=peti terkunci +Chest=Peti +Write=Tulis +Read=Baca +Title:=Judul: +Contents:=Isi: +Save=Simpan +by @1=oleh @1 +Page @1 of @2=Halaman @1 dari @2 +The book you were writing to mysteriously disappeared.=Buku yang Anda tulis menghilang secara misterius. +"@1" by @2="@1" oleh @2 +Blueberries=Bluberi +Book=Buku +Book with Text=Buku Tertulis +Bronze Ingot=Perunggu Batangan +Clay Brick=Bata +Clay Lump=Bongkahan Tanah Liat +Coal Lump=Bongkahan Batu Bara +Copper Ingot=Tembaga Batangan +Copper Lump=Bongkahan Tembaga +Diamond=Berlian +Flint=Batu Api +Gold Ingot=Emas Batangan +Gold Lump=Bongkahan Emas +Iron Lump=Bongkahan Besi +Mese Crystal=Kristal Mese +Mese Crystal Fragment=Pecahan Kristal Mese +Obsidian Shard=Pecahan Obsidian +Paper=Kertas +Steel Ingot=Baja Batangan +Stick=Tongkat +Tin Ingot=Timah Batangan +Tin Lump=Bongkahan Timah +Furnace is empty=Tungku kosong +100% (output full)=100% (keluaran penuh) +@1%=@1% +Not cookable=Tidak bisa dimasak +Empty=Kosong +Furnace active=Tungku nyala +Furnace inactive=Tungku mati +(Item: @1; Fuel: @2)=(Barang: @1; Bahan Bakar: @2) +Furnace=Tungku +Stone=Batu +Cobblestone=Bongkahan Batu +Stone Brick=Tembok Batu +Stone Block=Balok Batu +Mossy Cobblestone=Bongkahan Batu Berlumut +Desert Stone=Batu Gurun +Desert Cobblestone=Bongkahan Batu Gurun +Desert Stone Brick=Tembok Batu Gurun +Desert Stone Block=Balok Batu Gurun +Sandstone=Batu Pasir +Sandstone Brick=Tembok Batu Pasir +Sandstone Block=Balok Batu Pasir +Desert Sandstone=Batu Pasir Gurun +Desert Sandstone Brick=Tembok Batu Pasir Gurun +Desert Sandstone Block=Balok Batu Pasir Gurun +Silver Sandstone=Batu Pasir Perak +Silver Sandstone Brick=Tembok Batu Pasir Perak +Silver Sandstone Block=Balok Batu Pasir Perak +Obsidian=Obsidian +Obsidian Brick=Tembok Obsidian +Obsidian Block=Balok Obsidian +Dirt=Tanah +Dirt with Grass=Tanah Berumput +Dirt with Grass and Footsteps=Tanah Berumput dengan Jejak Kaki +Dirt with Savanna Grass=Tanah Berumput Sabana +Dirt with Snow=Tanah Bersalju +Dirt with Rainforest Litter=Tanah Berserasah Hutan Hujan +Dirt with Coniferous Litter=Tanah Berserasah Hutan Konifer +Savanna Dirt=Tanah Sabana +Savanna Dirt with Savanna Grass=Tanah Sabana Berumput Sabana +Permafrost=Ibun Abadi +Permafrost with Stones=Ibun Abadi Berbatu +Permafrost with Moss=Ibun Abadi Berlumut +Sand=Pasir +Desert Sand=Pasir Gurun +Silver Sand=Pasir Perak +Gravel=Kerikil +Clay=Tanah Liat +Snow=Salju +Snow Block=Balok Salju +Ice=Es +Cave Ice=Es Gua +Apple Tree=Pohon Apel +Apple Wood Planks=Papan Kayu Pohon Apel +Apple Tree Sapling=Anak Pohon Apel +Apple Tree Leaves=Daun Pohon Apel +Apple=Apel +Apple Marker=Penanda Apel +Jungle Tree=Pohon Hutan Rimba +Jungle Wood Planks=Papan Kayu Pohon Rimba +Jungle Tree Leaves=Daun Pohon Rimba +Jungle Tree Sapling=Anak Pohon Rimba +Emergent Jungle Tree Sapling=Anak Pohon Rimba Bertumbuh +Pine Tree=Pohon Pinus +Pine Wood Planks=Papan Kayu Pinus +Pine Needles=Daun Pinus +Pine Tree Sapling=Anak Pohon Pinus +Acacia Tree=Pohon Akasia +Acacia Wood Planks=Papan Kayu Akasia +Acacia Tree Leaves=Daun Akasia +Acacia Tree Sapling=Anak Pohon Akasia +Aspen Tree=Pohon Aspen +Aspen Wood Planks=Papan Kayu Aspen +Aspen Tree Leaves=Daun Aspen +Aspen Tree Sapling=Anak Pohon Aspen +Coal Ore=Bijih Batu Bara +Coal Block=Balok Batu Bara +Iron Ore=Bijih Besi +Steel Block=Balok Baja +Copper Ore=Bijih Tembaga +Copper Block=Balok Tembaga +Tin Ore=Bijih Timah +Tin Block=Balok Timah +Bronze Block=Balok Perunggu +Mese Ore=Bijih Mese +Mese Block=Balok Mese +Gold Ore=Bijih Emas +Gold Block=Balok Emas +Diamond Ore=Bijih Berlian +Diamond Block=Balok Berlian +Cactus=Kaktus +Large Cactus Seedling=Bibit Kaktus Besar +Papyrus=Papirus +Dry Shrub=Semak Kering +Jungle Grass=Rumput Rimba +Grass=Rumput +Savanna Grass=Rumput Sabana +Fern=Pakis +Marram Grass=Rumput Pantai +Bush Stem=Batang Semak +Bush Leaves=Daun Semak +Bush Sapling=Anak Semak +Blueberry Bush Leaves with Berries=Daun Semak Bluberi Berbuah +Blueberry Bush Leaves=Daun Semak Bluberi +Blueberry Bush Sapling=Anak Semak Bluberi +Acacia Bush Stem=Batang Semak Akasia +Acacia Bush Leaves=Daun Semak Akasia +Acacia Bush Sapling=Bibit Semak Akasia +Pine Bush Stem=Batang Semak Pinus +Pine Bush Needles=Daun Semak Pinus +Pine Bush Sapling=Bibit Semak Pinus +Kelp=Kelp +Green Coral=Koral Hijau +Pink Coral=Koral Merah Muda +Cyan Coral=Koral Sian +Brown Coral=Koral Cokelat +Orange Coral=Koral Oranye +Coral Skeleton=Kerangka Koral +Water Source=Mata Air +Flowing Water=Aliran Air +River Water Source=Mata Air Sungai +Flowing River Water=Aliran Air Sungai +Lava Source=Sumber Lava +Flowing Lava=Aliran Lava +Empty Bookshelf=Rak Buku Kosong +Bookshelf (@1 written, @2 empty books)=Rak Buku (@1 buku tertulis, @2 buku kosong) +Bookshelf=Rak Buku +Text too long=Teks terlalu panjang +"@1"="@1" +Wooden Sign=Penanda Kayu +Steel Sign=Penanda Baja +Wooden Ladder=Tangga Kayu +Steel Ladder=Tangga Baja +Apple Wood Fence=Pagar Kayu Apel +Acacia Wood Fence=Pagar Akasia +Jungle Wood Fence=Pagar Kayu Rimba +Pine Wood Fence=Pagar Pinus +Aspen Wood Fence=Pagar Aspen +Apple Wood Fence Rail=Rel Pagar Kayu Apel +Acacia Wood Fence Rail=Rel Pagar Akasia +Jungle Wood Fence Rail=Rel Pagar Kayu Rimba +Pine Wood Fence Rail=Rel Pagar Pinus +Aspen Wood Fence Rail=Rel Pagar Aspen +Glass=Kaca +Obsidian Glass=Kaca Obsidian +Brick Block=Balok Bata +Mese Lamp=Lampu Mese +Apple Wood Mese Post Light=Lampu Taman Mese Kayu Apel +Acacia Wood Mese Post Light=Lampu Taman Mese Kayu Akasia +Jungle Wood Mese Post Light=Lampu Taman Mese Kayu Rimba +Pine Wood Mese Post Light=Lampu Taman Mese Kayu Pinus +Aspen Wood Mese Post Light=Lampu Taman Mese Kayu Aspen +Cloud=Awan +Wooden Pickaxe=Belencong Kayu +Stone Pickaxe=Belencong Batu +Bronze Pickaxe=Belencong Perunggu +Steel Pickaxe=Belencong Baja +Mese Pickaxe=Belencong Mese +Diamond Pickaxe=Belencong Berlian +Wooden Shovel=Sekop Kayu +Stone Shovel=Sekop Batu +Bronze Shovel=Sekop Perunggu +Steel Shovel=Sekop Baja +Mese Shovel=Sekop Mese +Diamond Shovel=Sekop Berlian +Wooden Axe=Kapak Kayu +Stone Axe=Kapak Batu +Bronze Axe=Kapak Perunggu +Steel Axe=Kapak Baja +Mese Axe=Kapak Mese +Diamond Axe=Kapak Berlian +Wooden Sword=Pedang Kayu +Stone Sword=Pedang Batu +Bronze Sword=Pedang Perunggu +Steel Sword=Pedang Baja +Mese Sword=Pedang Mese +Diamond Sword=Pedang Berlian +Torch=Obor +@1 will intersect protection on growth.=@1 akan memotong perlindungan ketika tumbuh. + + +##### not used anymore ##### + +Mese Post Light=Lampu Taman Mese diff --git a/mods/default/locale/default.it.tr b/mods/default/locale/default.it.tr new file mode 100644 index 0000000..3940665 --- /dev/null +++ b/mods/default/locale/default.it.tr @@ -0,0 +1,224 @@ +# textdomain: default +Locked Chest=Baule chiuso a chiave +Locked Chest (owned by @1)=Baule chiuso a chiave (di proprietà di @1) +You do not own this chest.=Questo baule non ti appartiene. +a locked chest=un baule chiuso a chiave +Chest=Baule +Write= +Read= +Title:= +Contents:= +Save= +by @1= +Page @1 of @2= +The book you were writing to mysteriously disappeared.= +"@1" by @2="@1" di @2 +Blueberries=Mirtilli +Book=Libro +Book with Text=Libro con testo +Bronze Ingot=Lingotto di bronzo +Clay Brick=Mattone d'argilla +Clay Lump=Grumo d'argilla +Coal Lump=Grumo di carbone +Copper Ingot=Lingotto di rame +Copper Lump=Grumo di rame +Diamond=Diamante +Flint=Selce +Gold Ingot=Lingotto d'oro +Gold Lump=Grumo d'oro +Iron Lump=Grumo di ferro +Mese Crystal=Cristallo di mese +Mese Crystal Fragment=Frammento di cristallo di mese +Obsidian Shard=Scheggia d'ossidiana +Paper=Carta +Steel Ingot=Lingotto d'acciaio +Stick=Bastone +Tin Ingot=Lingotto di stagno +Tin Lump=Grumo di stagno +Furnace is empty=La fornace è vuota +100% (output full)=100% (uscita piena) +@1%=@1% +Not cookable=Non cucinabile +Empty=Vuota +Furnace active=Fornace attiva +Furnace inactive=Fornace inattiva +(Item: @1; Fuel: @2)=(Oggetto: @1; Combustibile: @2) +Furnace=Fornace +Stone=Pietra +Cobblestone=Ciottoli +Stone Brick=Mattone di pietra +Stone Block=Blocco di pietra +Mossy Cobblestone=Ciottoli muschiosi +Desert Stone=Pietra del deserto +Desert Cobblestone=Ciottoli del deserto +Desert Stone Brick=Mattone di pietra del deserto +Desert Stone Block=Blocco di pietra del deserto +Sandstone=Arenaria +Sandstone Brick=Mattone d'arenaria +Sandstone Block=Blocco d'arenaria +Desert Sandstone=Arenaria del deserto +Desert Sandstone Brick=Mattone d'arenaria del deserto +Desert Sandstone Block=Blocco d'arenaria del deserto +Silver Sandstone=Arenaria argentata +Silver Sandstone Brick=Mattone d'arenaria argentata +Silver Sandstone Block=Blocco d'arenaria argentata +Obsidian=Ossidiana +Obsidian Brick=Mattone d'ossidiana +Obsidian Block=Blocco d'ossidiana +Dirt=Terra +Dirt with Grass=Terra con erba +Dirt with Grass and Footsteps=Terra con erba e impronte +Dirt with Savanna Grass= +Dirt with Snow=Terra con neve +Dirt with Rainforest Litter=Terra con detriti della foresta pluviale +Dirt with Coniferous Litter=Terra con detriti di conifera +Savanna Dirt= +Savanna Dirt with Savanna Grass= +Permafrost=Permafrost +Permafrost with Stones=Permafrost con pietra +Permafrost with Moss=Permafrost con muschio +Sand=Sabbia +Desert Sand=Sabbia del deserto +Silver Sand=Sabbia argentata +Gravel=Ghiaia +Clay=Argilla +Snow=Neve +Snow Block=Blocco di neve +Ice=Ghiaccio +Cave Ice=Ghiaccio di caverna +Apple Tree=Melo +Apple Wood Planks=Assi di melo +Apple Tree Sapling=Alberello di melo +Apple Tree Leaves=Foglie di melo +Apple=Mela +Apple Marker=Marcatore mela +Jungle Tree=Albero della giungla +Jungle Wood Planks=Assi di legno della giungla +Jungle Tree Leaves=Foglie di albero della giungla +Jungle Tree Sapling=Alberello della giungla +Emergent Jungle Tree Sapling=Alberello della giungla emergente +Pine Tree=Pino +Pine Wood Planks=Assi di legno di pino +Pine Needles=Aghi di pino +Pine Tree Sapling=Alberello di pino +Acacia Tree=Acacia +Acacia Wood Planks=Assi di legno d'acacia +Acacia Tree Leaves=Foglie d'acacia +Acacia Tree Sapling=Alberello d'acacia +Aspen Tree=Pioppo +Aspen Wood Planks=Assi di legno di pioppo +Aspen Tree Leaves=Foglie di pioppo +Aspen Tree Sapling=Alberello di pioppo +Coal Ore=Minerale di carbone +Coal Block=Blocco di carbone +Iron Ore=Minerale di ferro +Steel Block=Blocco d'acciaio +Copper Ore=Minerale di rame +Copper Block=Blocco di rame +Tin Ore=Minerale di stagno +Tin Block=Blocco di stagno +Bronze Block=Blocco di bronzo +Mese Ore=Minerale di mese +Mese Block=Blocco di mese +Gold Ore=Minerale d'oro +Gold Block=Blocco d'oro +Diamond Ore=Minerale di diamante +Diamond Block=Blocco di diamante +Cactus=Cactus +Large Cactus Seedling=Piantina di cactus grande +Papyrus=Papiro +Dry Shrub=Arbusto secco +Jungle Grass=Erba della giungla +Grass=Erba +Savanna Grass= +Fern=Felce +Marram Grass=Ammofila arenaria +Bush Stem=Fusto di cespuglio +Bush Leaves=Foglie di cespuglio +Bush Sapling=Alberello di cespuglio +Blueberry Bush Leaves with Berries=Foglie di cespuglio di mirtilli con bacche +Blueberry Bush Leaves=Foglie di cespuglio di mirtilli +Blueberry Bush Sapling=Alberello di cespuglio di mirtilli +Acacia Bush Stem=Fusto di cespuglio d'acacia +Acacia Bush Leaves=Foglie di cespuglio d'acacia +Acacia Bush Sapling=Alberello di cespuglio d'acacia +Pine Bush Stem=Fusto di cespuglio di pino +Pine Bush Needles=Aghi di cespuglio di pino +Pine Bush Sapling=Alberello di cespuglio di pino +Kelp=Alga +Green Coral=Corallo verde +Pink Coral=Corallo rosa +Cyan Coral=Corallo ciano +Brown Coral=Corallo marrone +Orange Coral=Corallo arancione +Coral Skeleton=Scheletro di corallo +Water Source=Fonte d'acqua +Flowing Water=Acqua corrente +River Water Source=Fonte d'acqua di fiume +Flowing River Water=Acqua corrente di fiume +Lava Source=Fonte di lava +Flowing Lava=Lava corrente +Empty Bookshelf=Libreria vuota +Bookshelf (@1 written, @2 empty books)=Libreria (@1 scritti, @2 vuoti) +Bookshelf=Libreria +Text too long=Testo troppo lungo +"@1"= +Wooden Sign=Cartello di legno +Steel Sign=Cartello d'acciaio +Wooden Ladder=Scala a pioli di legno +Steel Ladder=Scala a pioli d'acciaio +Apple Wood Fence=Recinzione di legno di melo +Acacia Wood Fence=Recinzione di legno d'acacia +Jungle Wood Fence=Recinzione di legno della giungla +Pine Wood Fence=Recinzione di legno di pino +Aspen Wood Fence=Recinzione di legno di pioppo +Apple Wood Fence Rail=Ringhiera della recinzione di legno di melo +Acacia Wood Fence Rail=Ringhiera della recinzione di legno d'acacia +Jungle Wood Fence Rail=Ringhiera della recinzione di legno della giungla +Pine Wood Fence Rail=Ringhiera della recinzione di legno di pino +Aspen Wood Fence Rail=Ringhiera della recinzione di legno di pioppo +Glass=Vetro +Obsidian Glass=Vetro d'ossidiana +Brick Block=Blocco di mattone +Mese Lamp=Lampada di mese +Apple Wood Mese Post Light= +Acacia Wood Mese Post Light= +Jungle Wood Mese Post Light= +Pine Wood Mese Post Light= +Aspen Wood Mese Post Light= +Cloud=Nuvola +Wooden Pickaxe=Piccone di legno +Stone Pickaxe=Piccone di pietra +Bronze Pickaxe=Piccone di bronzo +Steel Pickaxe=Piccone d'acciaio +Mese Pickaxe=Piccone di mese +Diamond Pickaxe=Piccone di diamante +Wooden Shovel=Pala di legno +Stone Shovel=Pala di pietra +Bronze Shovel=Pala di bronzo +Steel Shovel=Pala d'acciaio +Mese Shovel=Pala di mese +Diamond Shovel=Pala di diamante +Wooden Axe=Ascia di legno +Stone Axe=Ascia di pietra +Bronze Axe=Ascia di bronzo +Steel Axe=Ascia d'acciaio +Mese Axe=Ascia di mese +Diamond Axe=Ascia di diamante +Wooden Sword=Spada di legno +Stone Sword=Spada di pietra +Bronze Sword=Spada di bronzo +Steel Sword=Spada d'acciaio +Mese Sword=Spada di mese +Diamond Sword=Spada di diamante +Torch=Torcia +@1 will intersect protection on growth.=@1 crescendo attraverserà la protezione. + + +##### not used anymore ##### + +Dirt with Dry Grass=Terra con erba secca +Dry Dirt=Terra asciutta +Dry Dirt with Dry Grass=Terra asciutta con erba secca +Dry Grass=Erba secca +Mese Post Light=Lampioncino di mese diff --git a/mods/default/locale/default.ja.tr b/mods/default/locale/default.ja.tr new file mode 100644 index 0000000..cf30e45 --- /dev/null +++ b/mods/default/locale/default.ja.tr @@ -0,0 +1,215 @@ +# textdomain: default +Locked Chest=鍵のかかったチェスト +Locked Chest (owned by @1)=鍵のかかったチェスト(@1所有) +You do not own this chest.=あなたはこのチェストの所有者ではありません。 +a locked chest=ロックされたチェスト +Chest=チェスト +Write=書き込む +Read=読む +Title:=題名 +Contents:=内容 +Save=保存 +by @1=@1著 +Page @1 of @2=@1 / @2 ページ +The book you were writing to mysteriously disappeared.=あなたが書いていた本が、不思議なことに消えました。 +"@1" by @2=@2著「@1」 +Blueberries=ブルーベリー +Book=本 +Book with Text=記入済みの本 +Bronze Ingot=青銅インゴット +Clay Brick=粘土レンガ +Clay Lump=粘土玉 +Coal Lump=石炭 +Copper Ingot=銅インゴット +Copper Lump=銅の粗鉱 +Diamond=ダイヤモンド +Flint=火打ち石 +Gold Ingot=金インゴット +Gold Lump=金の粗鉱 +Iron Lump=鉄の粗鉱 +Mese Crystal=メセクリスタル +Mese Crystal Fragment=メセクリスタルの破片 +Obsidian Shard=黒曜石の欠片 +Paper=紙 +Steel Ingot=鉄インゴット +Stick=棒 +Tin Ingot=スズインゴット +Tin Lump=スズの粗鉱 +Furnace is empty=かまどは空です +100% (output full)=100%(フル出力) +@1%=@1% +Not cookable=調理できません +Empty=空 +Furnace active=かまどは燃えてます +Furnace inactive=かまどは消えています +(Item: @1; Fuel: @2)=(アイテム: @1; 燃料: @2) +Furnace=かまど +Stone=石 +Cobblestone=丸石 +Stone Brick=石レンガ +Stone Block=石ブロック +Mossy Cobblestone=苔むした丸石 +Desert Stone=砂漠の石 +Desert Cobblestone=砂漠の丸石 +Desert Stone Brick=砂漠の石レンガ +Desert Stone Block=砂漠の石ブロック +Sandstone=砂岩 +Sandstone Brick=砂岩レンガ +Sandstone Block=砂岩ブロック +Desert Sandstone=砂漠の砂岩 +Desert Sandstone Brick=砂漠の砂岩レンガ +Desert Sandstone Block=砂漠の砂岩ブロック +Silver Sandstone=銀色の砂岩 +Silver Sandstone Brick=銀色の砂岩レンガ +Silver Sandstone Block=銀色の砂岩ブロック +Obsidian=黒曜石 +Obsidian Brick=黒曜石レンガ +Obsidian Block=黒曜石ブロック +Dirt=土 +Dirt with Grass=草に覆われた土 +Dirt with Grass and Footsteps=足跡と草に覆われた土 +Dirt with Savanna Grass=サバンナの草に覆われた土 +Dirt with Snow=雪に覆われた土 +Dirt with Rainforest Litter=熱帯雨林の落葉に覆われた土 +Dirt with Coniferous Litter=針葉樹の落葉に覆われた土 +Savanna Dirt=サバンナの土 +Savanna Dirt with Savanna Grass=サバンナの草に覆われたサバンナの土 +Permafrost=永久凍土 +Permafrost with Stones=石に覆われた永久凍土 +Permafrost with Moss=苔に覆われた永久凍土 +Sand=砂 +Desert Sand=砂漠の砂 +Silver Sand=銀色の砂 +Gravel=砂利 +Clay=粘土 +Snow=雪 +Snow Block=雪ブロック +Ice=氷 +Cave Ice=洞窟の氷 +Apple Tree=リンゴの原木 +Apple Wood Planks=リンゴの木の板材 +Apple Tree Sapling=リンゴの木の苗木 +Apple Tree Leaves=リンゴの木の葉 +Apple=リンゴ +Apple Marker=リンゴのマーカー +Jungle Tree=ジャングルの原木 +Jungle Wood Planks=ジャングルの木の板材 +Jungle Tree Leaves=ジャングルの木の葉 +Jungle Tree Sapling=ジャングルの木の苗木 +Emergent Jungle Tree Sapling=ジャングルの超高木の苗木 +Pine Tree=マツの原木 +Pine Wood Planks=マツの木の板材 +Pine Needles=マツの木の葉 +Pine Tree Sapling=マツの木の苗木 +Acacia Tree=アカシアの原木 +Acacia Wood Planks=アカシアの木の板材 +Acacia Tree Leaves=アカシアの木の葉 +Acacia Tree Sapling=アカシアの木の苗木 +Aspen Tree=ポプラの原木 +Aspen Wood Planks=ポプラの木の板材 +Aspen Tree Leaves=ポプラの木の葉 +Aspen Tree Sapling=ポプラの木の苗木 +Coal Ore=石炭鉱石 +Coal Block=石炭ブロック +Iron Ore=鉄鉱石 +Steel Block=鉄ブロック +Copper Ore=銅鉱石 +Copper Block=銅ブロック +Tin Ore=スズ鉱石 +Tin Block=スズブロック +Bronze Block=青銅ブロック +Mese Ore=メセ鉱石 +Mese Block=メセブロック +Gold Ore=金鉱石 +Gold Block=金ブロック +Diamond Ore=ダイヤモンド鉱石 +Diamond Block=ダイヤモンドブロック +Cactus=サボテン +Large Cactus Seedling=大きなサボテンの苗 +Papyrus=パピルス +Dry Shrub=枯れた低木 +Jungle Grass=ジャングルの草 +Grass=草 +Savanna Grass=サバンナの草 +Fern=シダ +Marram Grass=マラムの草 +Bush Stem=低木の幹 +Bush Leaves=低木の葉 +Bush Sapling=低木の苗木 +Blueberry Bush Leaves with Berries=ブルーベリーの実った低木 +Blueberry Bush Leaves=ブルーベリーの低木の葉 +Blueberry Bush Sapling=ブルーベリーの低木の苗木 +Acacia Bush Stem=アカシアの低木の幹 +Acacia Bush Leaves=アカシアの低木の葉 +Acacia Bush Sapling=アカシアの低木の苗木 +Pine Bush Stem=マツの低木の幹 +Pine Bush Needles=マツの低木の葉 +Pine Bush Sapling=マツの低木の苗木 +Kelp=コンブ +Green Coral=緑色のサンゴ +Pink Coral=桃色のサンゴ +Cyan Coral=青緑色のサンゴ +Brown Coral=茶色のサンゴ +Orange Coral=橙色のサンゴ +Coral Skeleton=サンゴのしがい +Water Source=水源 +Flowing Water=流れる水 +River Water Source=河川水源 +Flowing River Water=流れる河川水 +Lava Source=溶岩 +Flowing Lava=流れる溶岩 +Empty Bookshelf=空の本棚 +Bookshelf (@1 written, @2 empty books)=本棚(記述済み @1 冊, 未記述 @2 冊) +Bookshelf=本棚 +Text too long=テキストが長すぎます +"@1"=「@1」 +Wooden Sign=木製の看板 +Steel Sign=鉄の看板 +Wooden Ladder=木製のはしご +Steel Ladder=鉄のはしご +Apple Wood Fence=リンゴ材のフェンス +Acacia Wood Fence=アカシア材のフェンス +Jungle Wood Fence=ジャングル材のフェンス +Pine Wood Fence=マツ材のフェンス +Aspen Wood Fence=ポプラ材のフェンス +Apple Wood Fence Rail=リンゴ材のフェンスレール +Acacia Wood Fence Rail=アカシア材のフェンスレール +Jungle Wood Fence Rail=ジャングル材のフェンスレール +Pine Wood Fence Rail=マツ材のフェンスレール +Aspen Wood Fence Rail=ポプラ材のフェンスレール +Glass=ガラス +Obsidian Glass=黒曜石ガラス +Brick Block=レンガブロック +Mese Lamp=メセのランプ +Apple Wood Mese Post Light=リンゴ材のメセ灯柱 +Acacia Wood Mese Post Light=アカシア材のメセ灯柱 +Jungle Wood Mese Post Light=ジャングル材のメセ灯柱 +Pine Wood Mese Post Light=マツ材のメセ灯柱 +Aspen Wood Mese Post Light=ポプラ材のメセ灯柱 +Cloud=雲 +Wooden Pickaxe=木製のツルハシ +Stone Pickaxe=石のツルハシ +Bronze Pickaxe=青銅のツルハシ +Steel Pickaxe=鉄のツルハシ +Mese Pickaxe=メセのツルハシ +Diamond Pickaxe=ダイヤモンドのツルハシ +Wooden Shovel=木製のシャベル +Stone Shovel=石のシャベル +Bronze Shovel=青銅のシャベル +Steel Shovel=鉄のシャベル +Mese Shovel=メセのシャベル +Diamond Shovel=ダイヤモンドのシャベル +Wooden Axe=木製の斧 +Stone Axe=石の斧 +Bronze Axe=青銅の斧 +Steel Axe=鉄の斧 +Mese Axe=メセの斧 +Diamond Axe=ダイヤモンドの斧 +Wooden Sword=木製の剣 +Stone Sword=石の剣 +Bronze Sword=青銅の剣 +Steel Sword=鉄の剣 +Mese Sword=メセの剣 +Diamond Sword=ダイヤモンドの剣 +Torch=松明 +@1 will intersect protection on growth.=@1は成長するとき保護と交差します。 diff --git a/mods/default/locale/default.jbo.tr b/mods/default/locale/default.jbo.tr new file mode 100644 index 0000000..5ae9722 --- /dev/null +++ b/mods/default/locale/default.jbo.tr @@ -0,0 +1,215 @@ +# textdomain: default +Locked Chest=lo selstela gairvau +Locked Chest (owned by @1)=.i ti selstela gairvau po la'o zo'i.@1.zo'i +You do not own this chest.=.i do na ponse lo ti gairvau +a locked chest=lo selstela gairvau +Chest=lo gairvau +Write=ciska +Read=tcidu +Title:=cmene +Contents:=se cukta +Save=rejgau +by @1=la'o zo'i.@1.zo'i te cukta +Page @1 of @2=meirmoi fe li @1 li @2 +The book you were writing to mysteriously disappeared.=lo cukta poi do ciska ke'a cu cizra canci +"@1" by @2=lo cukta be la'o gy.@1.gy. bei la'o zo'i.@2.zo'i +Blueberries=lo blajba +Book=lo cukta +Book with Text=lo cukta joi selci'a +Bronze Ingot=lo ransu manfybli +Clay Brick=lo kitybli +Clay Lump=lo kliti bakfu +Coal Lump=lo kolme bakfu +Copper Ingot=lo tunka manfybli +Copper Lump=lo tunka bakfu +Diamond=lo tabjme +Flint=lo fagyro'i +Gold Ingot=lo solji manfybli +Gold Lump=lo solji bakfu +Iron Lump=lo tirse bakfu +Mese Crystal=lo za'e krilrmese +Mese Crystal Fragment=lo za'e krilrmese spisa +Obsidian Shard=lo je'erma'ablaci spisa +Paper=lo pelji +Steel Ingot=lo gasta manfybli +Stick=lo grana +Tin Ingot=lo tinci manfybli +Tin Lump=lo tinci bakfu +Furnace is empty=.i lo toknu cu kunti +100% (output full)=100 ce'i to lo se zbasu cu culno toi +@1%=@1 ce'i +Not cookable=na kakne le ka se jukpa +Empty=ti kunti +Furnace active=.i lo toknu cu tolcando +Furnace inactive=.i lo toknu cu cando +(Item: @1; Fuel: @2)=to jukpa @1 @2 +Furnace=lo toknu +Stone=lo rokci +Cobblestone=lo lolro'iboi +Stone Brick=lo morna rokci +Stone Block=lo rokci bliku +Mossy Cobblestone=lo clika lolro'iboi +Desert Stone=lo cantu'a rokci +Desert Cobblestone=lo cantu'a lolro'iboi +Desert Stone Brick=lo morna ke cantu'a rokci +Desert Stone Block=lo cantu'a rokci bliku +Sandstone=lo canro'i +Sandstone Brick=lo morna canro'i +Sandstone Block=lo canro'i bliku +Desert Sandstone=lo cantu'a canro'i +Desert Sandstone Brick=lo morna ke cantu'a canro'i +Desert Sandstone Block=lo cantu'a canro'i bliku +Silver Sandstone=lo rijyska canro'i +Silver Sandstone Brick=lo morna ke rijyska canro'i +Silver Sandstone Block=lo rijyska canro'i bliku +Obsidian=lo je'erma'ablaci +Obsidian Brick=lo morna je'erma'ablaci +Obsidian Block=lo je'erma'ablaci bliku +Dirt=lo dertu +Dirt with Grass=lo dertu joi srasu +Dirt with Grass and Footsteps=lo dertu joi srasu jebo stapa bo prina +Dirt with Savanna Grass=lo dertu joi sudytu'a bo srasu +Dirt with Snow=lo dertu joi snime +Dirt with Rainforest Litter=lo dertu joi glatimdemricfoi bo festi +Dirt with Coniferous Litter=lo dertu joi ckunu bo festi +Savanna Dirt=lo sudytu'a dertu +Savanna Dirt with Savanna Grass=lo sudysu'a bo dertu joi sudytu'a bo srasu +Permafrost=lo vi'orbisloi +Permafrost with Stones=lo vi'orbisloi joi rokci +Permafrost with Moss=lo vi'orbisloi joi clika +Sand=lo canre +Desert Sand=lo cantu'a canre +Silver Sand=lo rijyska canre +Gravel=lo cmaro'i +Clay=lo kliti +Snow=lo snime +Snow Block=lo snime bliku +Ice=lo bisli +Cave Ice=lo kevzda bisli +Apple Tree=lo plisytricu ricystani +Apple Wood Planks=lo plisymudri tanbo +Apple Tree Sapling=lo plisytricu ciftricu +Apple Tree Leaves=lo plisytricu pezli +Apple=lo plise +Apple Marker=lo plise barna +Jungle Tree=lo glatimdemricfoi ricystani +Jungle Wood Planks=lo glatimdemricfoi mudri tanbo +Jungle Tree Leaves=lo glatimdemricfoi pezli +Jungle Tree Sapling=lo glatimdemricfoi ciftricu +Emergent Jungle Tree Sapling=lo barda ke glatimdemricfoi ciftricu +Pine Tree=lo ckunu ricystani +Pine Wood Planks=lo ku'urmudri tanbo +Pine Needles=lo ckunu jezpezli +Pine Tree Sapling=lo ckunu ciftricu +Acacia Tree=lo atkaci,ia ricystani +Acacia Wood Planks=lo atkaci,ia mudri tanbo +Acacia Tree Leaves=lo atkaci,ia pezli +Acacia Tree Sapling=lo atkaci,ia ciftricu +Aspen Tree=lo ricrpopulu ricystani +Aspen Wood Planks=lo mudrpopulu tanbo +Aspen Tree Leaves=lo ricrpopulu pezli +Aspen Tree Sapling=lo ricrpopulu ciftricu +Coal Ore=lo kolme kunra +Coal Block=lo kolme bliku +Iron Ore=lo tirse kunra +Steel Block=lo gasta bliku +Copper Ore=lo tunka kunra +Copper Block=lo tunka bliku +Tin Ore=lo tinci kunra +Tin Block=lo tinci bliku +Bronze Block=lo ransu bliku +Mese Ore=lo za'e kunrmese +Mese Block=lo za'e blikrmese +Gold Ore=lo solji kunra +Gold Block=lo solji bliku +Diamond Ore=lo tabjme kunra +Diamond Block=lo tabjme bliku +Cactus=lo jesyspa +Large Cactus Seedling=lo barda ke jesyspa tsiju +Papyrus=lo misryplespa +Dry Shrub=lo sudga dzitricu +Jungle Grass=lo glatimdemricfoi srasu +Grass=lo srasu +Savanna Grass=lo sudytu'a srasu +Fern=lo filcina +Marram Grass=lo xaskoi srasu +Bush Stem=lo dzitricu stani +Bush Leaves=lo dzitricu pezli +Bush Sapling=lo dzitricu ciftricu +Blueberry Bush Leaves with Berries=lo ke blajba dzitricu pezli ke'e joi jbari +Blueberry Bush Leaves=lo blajba dzitricu pezli +Blueberry Bush Sapling=lo blajba dzitrcu ciftricu +Acacia Bush Stem=lo atkaci,ia dzitricu stani +Acacia Bush Leaves=lo atkaci,ia dzitricu pezli +Acacia Bush Sapling=lo atkaci,ia dzitricu ciftricu +Pine Bush Stem=lo ckunu dzitricu stani +Pine Bush Needles=lo ckunu dzitricu jezpezli +Pine Bush Sapling=lo ckunu dzitricu ciftricu +Kelp=lo vraike +Green Coral=lo crino pevypanje +Pink Coral=lo xunblabi pevypanje +Cyan Coral=lo cicna pevypanje +Brown Coral=lo bunre pevypanje +Orange Coral=lo narju pevypanje +Coral Skeleton=lo pevypanje greku +Water Source=lo djacu velflecu +Flowing Water=lo flecu djacu +River Water Source=lo rirxe djacu velflecu +Flowing River Water=lo flecu ke rirxe djacu +Lava Source=lo likro'i velflecu +Flowing Lava=lo flecu likro'i +Empty Bookshelf=.i ti kunti ckukajna +Bookshelf (@1 written, @2 empty books)=.i ti ckukajna to @1 cukta joi selci'a .ije @2 kunti cukta toi +Bookshelf=lo ckukajna +Text too long=.i lo lerpoi cu dukse lo ka clani +"@1"=zoi sy.@1.sy. +Wooden Sign=lo mudri sinxa +Steel Sign=lo gasta sinxa +Wooden Ladder=lo mudri rajyserti +Steel Ladder=lo gasta rajyserti +Apple Wood Fence=lo plisymudri garbi'u +Acacia Wood Fence=lo atkaci,ia mudri garbi'u +Jungle Wood Fence=lo glatimdemricfoi mudri garbi'u +Pine Wood Fence=lo ku'urmudri garbi'u +Aspen Wood Fence=lo mudrpopulu garbi'u +Apple Wood Fence Rail=lo plisymudri garbi'u garna +Acacia Wood Fence Rail=lo atkaci,ia mudri garbi'u garna +Jungle Wood Fence Rail=lo glatimdemricfoi mudri garbi'u garna +Pine Wood Fence Rail=lo ku'urmudri garbi'u garna +Aspen Wood Fence Rail=lo mudrpopulu garbi'u garna +Glass=lo blaci +Obsidian Glass=lo je'erma'ablaci blaci +Brick Block=lo kitybli bliku +Mese Lamp=lo za'e gusrmese +Apple Wood Mese Post Light=lo plisymudri ke kamju za'e gusrmese +Acacia Wood Mese Post Light=lo atkaci,ia mudri ke kamju za'e gusrmese +Jungle Wood Mese Post Light=lo glatimdemricfoi mudri ke kamju za'e gusrmese +Pine Wood Mese Post Light=lo ku'urmudri ke kamju za'e gusrmese +Aspen Wood Mese Post Light=lo mudrpopulu ke kamju za'e gusrmese +Cloud=lo dilnu +Wooden Pickaxe=lo mudri velkakpymru +Stone Pickaxe=lo rokci velkakpymru +Bronze Pickaxe=lo ransu velkakpymru +Steel Pickaxe=lo gasta velkakpymru +Mese Pickaxe=lo za'e kunrmese velkakpymru +Diamond Pickaxe=lo tabjme velkakpymru +Wooden Shovel=lo mudri canpa +Stone Shovel=lo rokci canpa +Bronze Shovel=lo ransu canpa +Steel Shovel=lo gasta canpa +Mese Shovel=lo za'e kunrmese canpa +Diamond Shovel=lo tabjme canpa +Wooden Axe=lo mudri ka'amru +Stone Axe=lo rokci ka'amru +Bronze Axe=lo ransu ka'amru +Steel Axe=lo gasta ka'amru +Mese Axe=lo za'e kunrmese ka'amru +Diamond Axe=lo tabjme ka'amru +Wooden Sword=lo mudri cladakyxa'i +Stone Sword=lo rokci cladakyxa'i +Bronze Sword=lo ransu cladakyxa'i +Steel Sword=lo gasta cladakyxa'i +Mese Sword=lo za'e kunrmese cladakyxa'i +Diamond Sword=lo tabjme cladakyxa'i +Torch=lo fagytergu'i +@1 will intersect protection on growth.=.i @1 cu ba kruca lo bandu ca lo nu banro diff --git a/mods/default/locale/default.lv.tr b/mods/default/locale/default.lv.tr new file mode 100644 index 0000000..b0a1de0 --- /dev/null +++ b/mods/default/locale/default.lv.tr @@ -0,0 +1,215 @@ +# textdomain: default +Locked Chest=Aizslēgta lāde +Locked Chest (owned by @1)=Aizslēgta lāde (Saimnieks: @1) +You do not own this chest.=Jums nepieder šī lāde. +a locked chest=aizslēgta lāde +Chest=Lāde +Write=Rakstīt +Read=Lasīt +Title:=Virsraksts: +Contents:=Saturs: +Save=Saglabāt +by @1=autors @1 +Page @1 of @2=@1 lappuse no @2 +The book you were writing to mysteriously disappeared.=Grāmata, kuru rakstījāt, pēkšņi pazuda. +"@1" by @2="@1" @2 +Blueberries=Mellenes +Book=Grāmata +Book with Text=Grāmata ar tekstu +Bronze Ingot=Bronzas stienis +Clay Brick=Māla ķieģelis +Clay Lump=Māla pika +Coal Lump=Ogle +Copper Ingot=Vara stienis +Copper Lump=Vara rūdas gabals +Diamond=Dimants +Flint=Krams +Gold Ingot=Zelta stienis +Gold Lump=Zelta rūdas gabals +Iron Lump=Dzelzs rūdas gabals +Mese Crystal=Mēzes kristāls +Mese Crystal Fragment=Mēzes kristāla fragments +Obsidian Shard=Obsidiāna skaida +Paper=Papīrs +Steel Ingot=Tērauda stienis +Stick=Puļķis +Tin Ingot=Alvas stienis +Tin Lump=Alvas rūdas gabals +Furnace is empty=Krāsns ir tukša +100% (output full)=100% (izeja pilna) +@1%=@1% +Not cookable=Nav gatavojams +Empty=Tukšs +Furnace active=Krāsns kurās +Furnace inactive=Krāsns nekurās +(Item: @1; Fuel: @2)=(Priekšmets: @1; Degviela: @2) +Furnace=Krāsns +Stone=Akmens +Cobblestone=Mūrakmens +Stone Brick=Akmens ķieģeļi +Stone Block=Akmens bloks +Mossy Cobblestone=Apsūnojis mūrakmens +Desert Stone=Tuksneša akmens +Desert Cobblestone=Tuksneša mūrakmens +Desert Stone Brick=Tuksneša akmens ķieģeļi +Desert Stone Block=Tuksneša akmens bloks +Sandstone=Smilšakmens +Sandstone Brick=Smilšakmens ķieģeļi +Sandstone Block=Smilšakmens bloks +Desert Sandstone=Tuksnesa smilšakmens +Desert Sandstone Brick=Tuksneša smilšakmens ķieģeļi +Desert Sandstone Block=Tuksneša smilšakmens bloks +Silver Sandstone=Baltais smilšakmens +Silver Sandstone Brick=Baltā smilšakmens ķieģeļi +Silver Sandstone Block=Baltā smilšakmens bloks +Obsidian=Obsidiāns +Obsidian Brick=Obsidiāna ķieģeļi +Obsidian Block=Obsidiāna bloks +Dirt=Zeme +Dirt with Grass=Zeme ar zāli +Dirt with Grass and Footsteps=Pēdaina zeme ar zāli +Dirt with Savanna Grass=Zeme ar savannas zāli +Dirt with Snow=Zeme ar sniegu +Dirt with Rainforest Litter=Zeme ar lietusmeža zemsedzi +Dirt with Coniferous Litter=Zeme ar skujām +Savanna Dirt=Savannas zeme +Savanna Dirt with Savanna Grass=Savannas zeme ar savannas zāli +Permafrost=Mūžīgais sasalums +Permafrost with Stones=Mūžīgais sasalums ar akmentiņiem +Permafrost with Moss=Mūžīgais sasalums ar sūnām +Sand=Smilts +Desert Sand=Tuksneša smilts +Silver Sand=Baltā smilts +Gravel=Grants +Clay=Māla bloks +Snow=Sniegs +Snow Block=Sniega bloks +Ice=Ledus +Cave Ice=Alu ledus +Apple Tree=Ābele +Apple Wood Planks=Ābolkoka dēļi +Apple Tree Sapling=Ābeles dzinums +Apple Tree Leaves=Ābeles lapas +Apple=Ābols +Apple Marker=Ābola marķieris +Jungle Tree=Džungļu koks +Jungle Wood Planks=Džungļu koka dēļi +Jungle Tree Leaves=Džungļu koka lapas +Jungle Tree Sapling=Džungļu koka dzinums +Emergent Jungle Tree Sapling=Augsta džungļu koka dzinums +Pine Tree=Skujkoks +Pine Wood Planks=Skujkoka dēļi +Pine Needles=Skujas +Pine Tree Sapling=Skujkoka dzinums +Acacia Tree=Akācija +Acacia Wood Planks=Akācijas dēļi +Acacia Tree Leaves=Akācijas lapas +Acacia Tree Sapling=Akācijas dzinums +Aspen Tree=Apse +Aspen Wood Planks=Apses koka dēļi +Aspen Tree Leaves=Apses lapas +Aspen Tree Sapling=Apses dzinums +Coal Ore=Akmeņogļu rūda +Coal Block=Akmeņogļu bloks +Iron Ore=Dzelzs rūda +Steel Block=Tērauda bloks +Copper Ore=Vara rūda +Copper Block=Vara bloks +Tin Ore=Alvas rūda +Tin Block=Alvas bloks +Bronze Block=Bronzas bloks +Mese Ore=Mēzes rūda +Mese Block=Mēzes bloks +Gold Ore=Zelta rūda +Gold Block=Zelta bloks +Diamond Ore=Dimanta rūda +Diamond Block=Dimanta bloks +Cactus=Kaktuss +Large Cactus Seedling=Liela kaktusa dzinums +Papyrus=Papiruss +Dry Shrub=Izžuvis krūmiņš +Jungle Grass=Džungļu zāle +Grass=Zāle +Savanna Grass=Savannas zāle +Fern=Paparde +Marram Grass=Kāpu niedre +Bush Stem=Krūma stumbrājs +Bush Leaves=Krūma lapas +Bush Sapling=Krūma dzinums +Blueberry Bush Leaves with Berries=Melleņu krūms ar ogām +Blueberry Bush Leaves=Melleņu krūms +Blueberry Bush Sapling=Melleņu krūma dzinums +Acacia Bush Stem=Akācijas krūma stumbrājs +Acacia Bush Leaves=Akācijas krūma lapas +Acacia Bush Sapling=Akācijas krūma dzinums +Pine Bush Stem=Skujaina krūma stumbrājs +Pine Bush Needles=Skujaina krūma lapas +Pine Bush Sapling=Skujaina krūma dzinums +Kelp=Brūnaļģes +Green Coral=Zaļš korallis +Pink Coral=Rozā korallis +Cyan Coral=Ciānkrāsas korallis +Brown Coral=Brūns korallis +Orange Coral=Oranžs korallis +Coral Skeleton=Koraļļa skelets +Water Source=Ūdens avots +Flowing Water=Plūstošs ūdens +River Water Source=Upes ūdens avots +Flowing River Water=Tekošs upes ūdens +Lava Source=Lavas avots +Flowing Lava=Plūstoša lava +Empty Bookshelf=Tukss grāmatplaukts +Bookshelf (@1 written, @2 empty books)=Grāmatplauktā (@1 rakstītas, @2 tukšas grāmatas) +Bookshelf=Grāmatplaukts +Text too long=Teksts par garu +"@1"="@1" +Wooden Sign=Koka zīme +Steel Sign=Tērauda zīme +Wooden Ladder=Koka kāpnes +Steel Ladder=Tērauda kāpnes +Apple Wood Fence=Ābolkoka žogs +Acacia Wood Fence=Akācijas žogs +Jungle Wood Fence=Džungļu koka žogs +Pine Wood Fence=Skujkoka žogs +Aspen Wood Fence=Apses koka žogs +Apple Wood Fence Rail=Ābolkoka žoga margas +Acacia Wood Fence Rail=Akācijas žoga margas +Jungle Wood Fence Rail=Džungļu koka žoga margas +Pine Wood Fence Rail=Skujkoka žoga margas +Aspen Wood Fence Rail=Apses žoga margas +Glass=Stikls +Obsidian Glass=Obsidiāna stikls +Brick Block=Ķieģeļu bloks +Mese Lamp=Mēzes lampa +Apple Wood Mese Post Light=Ābolkoka mēzes lampa +Acacia Wood Mese Post Light=Akācijas mēzes lampa +Jungle Wood Mese Post Light=Džungļu koka mēzes lampa +Pine Wood Mese Post Light=Skujkoka mēzes lampa +Aspen Wood Mese Post Light=Apses koka mēzes lampa +Cloud=Mākonis +Wooden Pickaxe=Koka cērte +Stone Pickaxe=Akmens cērte +Bronze Pickaxe=Bronzas cērte +Steel Pickaxe=Tērauda cērte +Mese Pickaxe=Mēzes cērte +Diamond Pickaxe=Dimanta cērte +Wooden Shovel=Koka lāpsta +Stone Shovel=Akmens lāpsta +Bronze Shovel=Bronzas lāpsta +Steel Shovel=Tērauda lāpsta +Mese Shovel=Mēzes lāpsta +Diamond Shovel=Dimanta lāpsta +Wooden Axe=Koka cirvis +Stone Axe=Akmens cirvis +Bronze Axe=Bronzas cirvis +Steel Axe=Tērauda cirvis +Mese Axe=Mēzes cirvis +Diamond Axe=Dimanta cirvis +Wooden Sword=Koka zobens +Stone Sword=Akmens zobens +Bronze Sword=Bronzas zobens +Steel Sword=Tērauda zobens +Mese Sword=Mēzes zobens +Diamond Sword=Dimanta zobens +Torch=Lāpa +@1 will intersect protection on growth.=@1 augot krustos aisargājamo zonu. diff --git a/mods/default/locale/default.ms.tr b/mods/default/locale/default.ms.tr new file mode 100644 index 0000000..0395afa --- /dev/null +++ b/mods/default/locale/default.ms.tr @@ -0,0 +1,224 @@ +# textdomain: default +Locked Chest=Peti Berkunci +Locked Chest (owned by @1)=Peti Berkunci (milik @1) +You do not own this chest.=Ini bukan peti milik anda. +a locked chest=peti berkunci +Chest=Peti +Write=Tulis +Read=Baca +Title:=Tajuk: +Contents:=Kandungan: +Save=Simpan +by @1=oleh @1 +Page @1 of @2=Halaman @1 daripada @2 +The book you were writing to mysteriously disappeared.=Buku yang anda tulis hilang secara misterinya. +"@1" by @2="@1" oleh @2 +Blueberries=Beri Biru +Book=Buku +Book with Text=Buku Bertulisan +Bronze Ingot=Jongkong Gangsa +Clay Brick=Bata Tanah Liat +Clay Lump=Longgokan Tanah Liat +Coal Lump=Longgokan Batu Arang +Copper Ingot=Jongkong Tembaga +Copper Lump=Longgokan Tembaga +Diamond=Berlian +Flint=Batu Api +Gold Ingot=Jongkong Emas +Gold Lump=Longgokan Emas +Iron Lump=Longgokan Besi +Mese Crystal=Kristal Mese +Mese Crystal Fragment=Serpihan Kristal Mese +Obsidian Shard=Serpihan Obsidia +Paper=Kertas +Steel Ingot=Jongkong Keluli +Stick=Serpihan Kayu +Tin Ingot=Jongkong Timah +Tin Lump=Longgokan Timah +Furnace is empty=Relau masih kosong +100% (output full)=100% (keluaran penuh) +@1%=@1% +Not cookable=Tidak boleh dimasak +Empty=Kosong +Furnace active=Relau aktif +Furnace inactive=Relau tidak aktif +(Item: @1; Fuel: @2)=(Item: @1; Bahan api: @2) +Furnace=Relau +Stone=Batu +Cobblestone=Batu Buntar +Stone Brick=Bata Batu +Stone Block=Bongkah Batu +Mossy Cobblestone=Batu Buntar Berlumut +Desert Stone=Batu Gurun +Desert Cobblestone=Batu Buntar Gurun +Desert Stone Brick=Bata Batu Gurun +Desert Stone Block=Bongkah Batu Gurun +Sandstone=Batu Pasir +Sandstone Brick=Bata Batu Pasir +Sandstone Block=Bongkah Batu Pasir +Desert Sandstone=Batu Pasir Gurun +Desert Sandstone Brick=Bata Batu Pasir Gurun +Desert Sandstone Block=Bongkah Batu Pasir Gurun +Silver Sandstone=Batu Pasir Perak +Silver Sandstone Brick=Bata Batu Pasir Perak +Silver Sandstone Block=Bongkah Batu Pasir Perak +Obsidian=Obsidia +Obsidian Brick=Bata Obsidia +Obsidian Block=Bongkah Obsidia +Dirt=Tanah +Dirt with Grass=Tanah Berumput +Dirt with Grass and Footsteps=Tanah Berumput dan Tapak Kaki +Dirt with Savanna Grass=Tanah Berumput Savana +Dirt with Snow=Tanah Bersalji +Dirt with Rainforest Litter=Tanah Bersarap Hutan Hujan +Dirt with Coniferous Litter=Tanah Bersarap Hutan Konifer +Savanna Dirt=Tanah Savana +Savanna Dirt with Savanna Grass=Tanah Savana Berumput Savana +Permafrost=Ibun Abadi +Permafrost with Stones=Ibun Abadi Berbatu +Permafrost with Moss=Ibun Abadi Berlumut +Sand=Pasir +Desert Sand=Pasir Gurun +Silver Sand=Pasir Perak +Gravel=Kelikir +Clay=Tanah Liat +Snow=Salji +Snow Block=Bongkah Salji +Ice=Ais +Cave Ice=Ais Gua +Apple Tree=Kayu Pokok Epal +Apple Wood Planks=Papan Kayu Epal +Apple Tree Sapling=Anak Pokok Epal +Apple Tree Leaves=Daun Pokok Epal +Apple=Epal +Apple Marker=Penanda Epal +Jungle Tree=Kayu Pokok Hutan +Jungle Wood Planks=Papan Kayu Hutan +Jungle Tree Leaves=Daun Pokok Hutan +Jungle Tree Sapling=Anak Pokok Hutan +Emergent Jungle Tree Sapling=Anak Pokok Hutan Kembang +Pine Tree=Kayu Pokok Pain +Pine Wood Planks=Papan Kayu Pain +Pine Needles=Daun Pokok Pain +Pine Tree Sapling=Anak Pokok Pain +Acacia Tree=Kayu Pokok Akasia +Acacia Wood Planks=Papan Kayu Akasia +Acacia Tree Leaves=Daun Pokok Akasia +Acacia Tree Sapling=Anak Pokok Akasia +Aspen Tree=Kayu Pokok Aspen +Aspen Wood Planks=Papan Kayu Aspen +Aspen Tree Leaves=Daun Pokok Aspen +Aspen Tree Sapling=Anak Pokok Aspen +Coal Ore=Bijih Batu Arang +Coal Block=Bongkah Batu Arang +Iron Ore=Bijih Besi +Steel Block=Bongkah Keluli +Copper Ore=Bijih Tembaga +Copper Block=Bongkah Tembaga +Tin Ore=Bijih Timah +Tin Block=Bongkah Timah +Bronze Block=Bongkah Gangsa +Mese Ore=Bijih Mese +Mese Block=Bongkah Mese +Gold Ore=Bijih Emas +Gold Block=Bongkah Emas +Diamond Ore=Bijih Intan +Diamond Block=Bongkah Intan +Cactus=Kaktus +Large Cactus Seedling=Benih Kaktus Besar +Papyrus=Papirus +Dry Shrub=Pokok Renek Kering +Jungle Grass=Rumput Hutan +Grass=Rumput +Savanna Grass=Rumput Savana +Fern=Paku Pakis +Marram Grass=Rumput Maram +Bush Stem=Batang Belukar +Bush Leaves=Daun Belukar +Bush Sapling=Anak Belukar +Blueberry Bush Leaves with Berries=Daun Belukar Beri Biru Berberi +Blueberry Bush Leaves=Daun Belukar Beri Biru +Blueberry Bush Sapling=Anak Belukar Beri Biru +Acacia Bush Stem=Batang Belukar Akasia +Acacia Bush Leaves=Daun Belukar Akasia +Acacia Bush Sapling=Anak Belukar Akasia +Pine Bush Stem=Batang Belukar Pain +Pine Bush Needles=Daun Belukar Pain +Pine Bush Sapling=Anak Belukar Pain +Kelp=Kelpa +Green Coral=Batu Karang Hijau +Pink Coral=Batu Karang Merah Jambu +Cyan Coral=Batu Karang Biru Kehijauan +Brown Coral=Batu Karang Perang +Orange Coral=Batu Karang Jingga +Coral Skeleton= Rangka Karang +Water Source=Sumber Air +Flowing Water=Air Mengalir +River Water Source=Sumber Air Sungai +Flowing River Water=Air Sungai Mengalir +Lava Source=Sumber Lava +Flowing Lava=Lava Mengalir +Empty Bookshelf=Rak Buku Kosong +Bookshelf (@1 written, @2 empty books)=Rak Buku (@1 buku bertulis, @2 buku kosong) +Bookshelf=Rak Buku +Text too long=Tulisan terlalu panjang +"@1"="@1" +Wooden Sign=Papan Tanda Kayu +Steel Sign=Papan Tanda Keluli +Wooden Ladder=Tangga Panjat Kayu +Steel Ladder=Tangga Panjat Keluli +Apple Wood Fence=Pagar Kayu Epal +Acacia Wood Fence=Pagar Kayu Akasia +Jungle Wood Fence=Pagar Kayu Hutan +Pine Wood Fence=Pagar Kayu Pain +Aspen Wood Fence=Pagar Kayu Aspen +Apple Wood Fence Rail=Pagar Rel Kayu Epal +Acacia Wood Fence Rail=Pagar Rel Kayu Akasia +Jungle Wood Fence Rail=Pagar Rel Kayu Hutan +Pine Wood Fence Rail=Pagar Rel Kayu Pain +Aspen Wood Fence Rail=Pagar Rel Kayu Aspen +Glass=Kaca +Obsidian Glass=Kaca Obsidia +Brick Block=Bongkah Bata +Mese Lamp=Lampu Mese +Apple Wood Mese Post Light=Lampu Tiang Mese Kayu Epal +Acacia Wood Mese Post Light=Lampu Tiang Mese Kayu Akasia +Jungle Wood Mese Post Light=Lampu Tiang Mese Kayu Hutan +Pine Wood Mese Post Light=Lampu Tiang Mese Kayu Pain +Aspen Wood Mese Post Light=Lampu Tiang Mese Kayu Aspen +Cloud=Awan +Wooden Pickaxe=Beliung Kayu +Stone Pickaxe=Beliung Batu +Bronze Pickaxe=Beliung Gangsa +Steel Pickaxe=Beliung Keluli +Mese Pickaxe=Beliung Mese +Diamond Pickaxe=Beliung Intan +Wooden Shovel=Penyodok Kayu +Stone Shovel=Penyodok Batu +Bronze Shovel=Penyodok Gangsa +Steel Shovel=Penyodok Keluli +Mese Shovel=Penyodok Mese +Diamond Shovel=Penyodok Intan +Wooden Axe=Kapak Kayu +Stone Axe=Kapak Batu +Bronze Axe=Kapak Gangsa +Steel Axe=Kapak Keluli +Mese Axe=Kapak Mese +Diamond Axe=Kapak Intan +Wooden Sword=Pedang Kayu +Stone Sword=Pedang Batu +Bronze Sword=Pedang Gangsa +Steel Sword=Pedang Keluli +Mese Sword=Pedang Mese +Diamond Sword=Pedang Intan +Torch=Obor +@1 will intersect protection on growth.=@1 akan masuk kawasan perlindungan lain apabila ia tumbuh. + + +##### not used anymore ##### + +Dirt with Dry Grass=Tanah Berumput Kering +Dry Dirt=Tanah Kering +Dry Dirt with Dry Grass=Tanah Kering Berumput Kering +Dry Grass=Rumput Kering +Mese Post Light=Lampu Tiang Mese diff --git a/mods/default/locale/default.pl.tr b/mods/default/locale/default.pl.tr new file mode 100644 index 0000000..dd08b84 --- /dev/null +++ b/mods/default/locale/default.pl.tr @@ -0,0 +1,215 @@ +# textdomain: default +Locked Chest=Zablokowana skrzynia +Locked Chest (owned by @1)=Zablokowana skrzynia (właściciel: @1) +You do not own this chest.=Nie jesteś właścicielem tej skrzyni. +a locked chest=zablokowana skrzynia +Chest=Skrzynia +Write=Zapis +Read=Odczyt +Title:=Tytuł: +Contents:=Zawartość: +Save=Zapisz +by @1=autor: @1 +Page @1 of @2=Strona @1 z @2 +The book you were writing to mysteriously disappeared.= +"@1" by @2="@1" przez @2 +Blueberries=Jagody +Book=Książka +Book with Text=Zapisana książka +Bronze Ingot=Sztabka brązu +Clay Brick=Gliniana cegła +Clay Lump=Glina +Coal Lump=Węgiel +Copper Ingot=Sztabka miedzi +Copper Lump=Bryłka miedzi +Diamond=Diament +Flint=Krzemień +Gold Ingot=Sztabka złota +Gold Lump=Bryłka złota +Iron Lump=Bryłka żelaza +Mese Crystal=Kryształ Mese +Mese Crystal Fragment=Fragment kryształu Mese +Obsidian Shard=Odłamek obsydianu +Paper=Papier +Steel Ingot=Sztabka stali +Stick=Patyk +Tin Ingot=Sztabka cyny +Tin Lump=Bryłka cyny +Furnace is empty=Piec jest pusty +100% (output full)=100% (zapełnione) +@1%=@1% +Not cookable=Nie nadaje się do przepalania +Empty=Puste +Furnace active=Piec aktywny +Furnace inactive=Piec nieaktywny +(Item: @1; Fuel: @2)=(Przedmiot: @1; Paliwo: @2) +Furnace=Piec +Stone=Kamień +Cobblestone=Bruk +Stone Brick=Kamienne cegły +Stone Block=Blok kamienia +Mossy Cobblestone=Bruk z mchem +Desert Stone=Pustynny kamień +Desert Cobblestone=Pustynny bruk +Desert Stone Brick=Pustynne kamienne cegły +Desert Stone Block=Blok pustynnego kamienia +Sandstone=Piaskowiec +Sandstone Brick=Cegły z piaskowca +Sandstone Block=Blok piaskowca +Desert Sandstone=Pustynny piaskowiec +Desert Sandstone Brick=Cegły z pustynnego piaskowca +Desert Sandstone Block=Blok pustynnego piaskowca +Silver Sandstone=Srebrny piaskowiec +Silver Sandstone Brick=Cegły z srebrnego piaskowca +Silver Sandstone Block=Blok srebrnego piaskowca +Obsidian=Obsydian +Obsidian Brick=Obsydianowe cegły +Obsidian Block=Blok obsydianu +Dirt=Ziemia +Dirt with Grass=Ziemia z trawą +Dirt with Grass and Footsteps=Ziemia z trawą i śladami +Dirt with Savanna Grass=Ziemia z sawannową trawą +Dirt with Snow=Ziemia ze śniegiem +Dirt with Rainforest Litter=Ziemia ze ściółką lasu deszczowego +Dirt with Coniferous Litter=Ziemia ze ściółką lasu iglastego +Savanna Dirt=Sawannowa ziemia +Savanna Dirt with Savanna Grass=Sawannowa ziemia z sawannową trawą +Permafrost=Zmarzlina +Permafrost with Stones=Zmarzlina z kamieniami +Permafrost with Moss=Zmarzlina z mchem +Sand=Piasek +Desert Sand=Pustynny piasek +Silver Sand=Srebrny piasek +Gravel=Żwir +Clay=Glina +Snow=Śnieg +Snow Block=Blok śniegu +Ice=Lód +Cave Ice=Jaskiniowy lód +Apple Tree=Jabłkowe drewno +Apple Wood Planks=Deski z drzewa jabłkowego +Apple Tree Sapling=Sadzonka drzewa jabłkowego +Apple Tree Leaves=Liście drzewa jabłkowego +Apple=Jabłko +Apple Marker=Znacznik jabłka +Jungle Tree=Dżunglowe drewno +Jungle Wood Planks=Deski z dżunglowego drzewa +Jungle Tree Leaves=Liście dżunglowego drzewa +Jungle Tree Sapling=Sadzonka dżunglowego drzewa +Emergent Jungle Tree Sapling=Wyłaniająca się sadzonka dżunglowego drzewa +Pine Tree=Sosnowe drewno +Pine Wood Planks=Deski z sosnowego drzewa +Pine Needles=Sosnowe igły +Pine Tree Sapling=Sadzonka sosnowego drzewa +Acacia Tree=Akacjowe drewno +Acacia Wood Planks=Deski z akacjowego drzewa +Acacia Tree Leaves=Liście akacjowego drzewa +Acacia Tree Sapling=Sadzonka akacjowego drzewa +Aspen Tree=Brzozowe drzewo +Aspen Wood Planks=Deski z brzozowego drzewa +Aspen Tree Leaves=Liście brzozowego drzewa +Aspen Tree Sapling=Sadzonka brzozowego drzewa +Coal Ore=Ruda węgla +Coal Block=Blok węgla +Iron Ore=Ruda żelaza +Steel Block=Blok stali +Copper Ore=Ruda miedzi +Copper Block=Blok miedzi +Tin Ore=Ruda cyny +Tin Block=Blok cyny +Bronze Block=Blok brązu +Mese Ore=Ruda Mese +Mese Block=Blok Mese +Gold Ore=Ruda złota +Gold Block=Blok złota +Diamond Ore=Ruda diamentu +Diamond Block=Blok diamentu +Cactus=Kaktus +Large Cactus Seedling=Sadzonka dużego kaktusa +Papyrus=Papirus +Dry Shrub=Uschnięty krzak +Jungle Grass=Dżunglowa trawa +Grass=Trawa +Savanna Grass=Sawannowa trawa +Fern=Paproć +Marram Grass=Trzcinnik leśny +Bush Stem=Korzeń krzaku +Bush Leaves=Liście krzaku +Bush Sapling=Sadzonka krzaku +Blueberry Bush Leaves with Berries=Liście jagodowego krzaku z jagodami +Blueberry Bush Leaves=Liście jagodowego krzaku +Blueberry Bush Sapling=Sadzonka jagodowego krzaku +Acacia Bush Stem=Korzeń akacjowego krzaku +Acacia Bush Leaves=Liście akacjowego krzaku +Acacia Bush Sapling=Sadzonka akacjowego krzaku +Pine Bush Stem=Korzeń sosnowego krzaku +Pine Bush Needles=Igły sosnowego krzaku +Pine Bush Sapling=Sadzonka sosnowego krzaku +Kelp=Wodorost +Green Coral=Zielony koralowiec +Pink Coral=Różowy koralowiec +Cyan Coral=Cyjanowy koralowiec +Brown Coral=Brązowy koralowiec +Orange Coral=Pomarańczowy koralowiec +Coral Skeleton=Szkielet koralowca +Water Source=Źródło wody +Flowing Water=Płynąca woda +River Water Source=Źródło wody rzecznej +Flowing River Water=Płynąca woda rzeczna +Lava Source=Źródło lawy +Flowing Lava=Płynąca lawa +Empty Bookshelf=Pusta półka na książki +Bookshelf (@1 written, @2 empty books)=Półka na książki (@1 zapisanych, @2 pustych książek) +Bookshelf=Półka na książki +Text too long=Tekst jest zbyt długi +"@1"="@1" +Wooden Sign=Drewniana tabliczka +Steel Sign=Stalowa tabliczka +Wooden Ladder=Drewniana drabina +Steel Ladder=Stalowa drabina +Apple Wood Fence=Płot z jabłkowego drzewa +Acacia Wood Fence=Płot z akacjowego drzewa +Jungle Wood Fence=Płot z dżunglowego drzewa +Pine Wood Fence=Płot z sosnowego drzewa +Aspen Wood Fence=Płot z brzozowego drzewa +Apple Wood Fence Rail=Szyna ogrodzeniowa z jabłkowego drzewa +Acacia Wood Fence Rail=Szyna ogrodzeniowa z akacjowego drzewa +Jungle Wood Fence Rail=Szyna ogrodzeniowa z dżunglowego drzewa +Pine Wood Fence Rail=Szyna ogrodzeniowa z sosnowego drzewa +Aspen Wood Fence Rail=Szyna ogrodzeniowa z brzozowego drzewa +Glass=Szkło +Obsidian Glass=Obsydianowe szkło +Brick Block=Blok cegieł +Mese Lamp=Lampa Mese +Apple Wood Mese Post Light=Lampa Mese z obramowaniem z jabłkowego drzewa +Acacia Wood Mese Post Light=Lampa Mese z obramowaniem z akacjowego drzewa +Jungle Wood Mese Post Light=Lampa Mese z obramowaniem z dżunglowego drzewa +Pine Wood Mese Post Light=Lampa Mese z obramowaniem z sosnowego drzewa +Aspen Wood Mese Post Light=Lampa Mese z obramowaniem z brzozowego drzewa +Cloud=Chmura +Wooden Pickaxe=Drewniany kilof +Stone Pickaxe=Kamienny kilof +Bronze Pickaxe=Brązowy kilof +Steel Pickaxe=Stalowy kilof +Mese Pickaxe=Mesowy kilof +Diamond Pickaxe=Diamentowy kilof +Wooden Shovel=Drewniana łopata +Stone Shovel=Kamienna łopata +Bronze Shovel=Brązowa łopata +Steel Shovel=Stalowa łopata +Mese Shovel=Mesowa łopata +Diamond Shovel=Diamentowa łopata +Wooden Axe=Drewniana siekiera +Stone Axe=Kamienna siekiera +Bronze Axe=Brązowa siekiera +Steel Axe=Stalowa siekiera +Mese Axe=Mesowa siekiera +Diamond Axe=Diamentowa siekiera +Wooden Sword=Drewniany miecz +Stone Sword=Kamienny miecz +Bronze Sword=Brązowy miecz +Steel Sword=Stalowy miecz +Mese Sword=Mesowy miecz +Diamond Sword=Diamentowy miecz +Torch=Pochodnia +@1 will intersect protection on growth.=@1 będzie kolidować z ochroną terenu podczas rośnięcia. diff --git a/mods/default/locale/default.pt.tr b/mods/default/locale/default.pt.tr new file mode 100644 index 0000000..80ad587 --- /dev/null +++ b/mods/default/locale/default.pt.tr @@ -0,0 +1,215 @@ +# textdomain: default +Locked Chest=Baú Trancado +Locked Chest (owned by @1)=Baú Trancado (pertence a @1) +You do not own this chest.=Você não é dono deste baú. +a locked chest=um baú trancado +Chest=Baú +Write= +Read= +Title:=Título: +Contents:=Conteúdo: +Save=Salvar +by @1=por @1 +Page @1 of @2=Página @1 de @2 +The book you were writing to mysteriously disappeared.= +"@1" by @2="@1" por @2 +Blueberries=Mirtilo +Book=Livro +Book with Text=Livro com Texto +Bronze Ingot=Lingote de Bronze +Clay Brick=Tijolo de Argila +Clay Lump=Pedaço de Argila +Coal Lump=Pedaço de Carvão +Copper Ingot=Lingote de Cobre +Copper Lump=Pedaço de Cobre +Diamond=Diamante +Flint=Rocha Sílex +Gold Ingot=Lingote de Ouro +Gold Lump=Pedaço de Ouro +Iron Lump=Pedaço de Ferro +Mese Crystal=Cristal de Mese +Mese Crystal Fragment=Fragmento de Cristal de Mese +Obsidian Shard=Caco de Obsidian +Paper=Papel +Steel Ingot=Lingote de Aço +Stick=Graveto +Tin Ingot=Lingote de Estanho +Tin Lump=Pedaço de Estanho +Furnace is empty=A fornalha está vazia +100% (output full)=100% (saída cheia) +@1%=@1% +Not cookable=Não pode cozinhar +Empty=Vazio +Furnace active=Fornalha ativa +Furnace inactive=Fornalha inativa +(Item: @1; Fuel: @2)=(Item: @1; Combustível: @2) +Furnace=Fornalha +Stone=Pedra +Cobblestone=Pedregulho +Stone Brick=Tijolo de Pedra +Stone Block=Bloco de Pedra +Mossy Cobblestone=Pedregulho Musgoso +Desert Stone=Pedra do Deserto +Desert Cobblestone=Pedregulho do Deserto +Desert Stone Brick=Tijolo de Pedra do Deserto +Desert Stone Block=Bloco de Pedra do Deserto +Sandstone=Arenito +Sandstone Brick=Tijolo de Arenito +Sandstone Block=Bloco de Arenito +Desert Sandstone=Bloco de Arenito do Deserto +Desert Sandstone Brick=Tijolo de Arenito do Deserto +Desert Sandstone Block=Bloco de Arenito do Deserto +Silver Sandstone=Arenito Prateado +Silver Sandstone Brick=Tijolo de Arenito Prateado +Silver Sandstone Block=Bloco de Arenito Prateado +Obsidian=Obsidiana +Obsidian Brick=Tijolo de Obsidiana +Obsidian Block=Bloco de Obsidiana +Dirt=Terra +Dirt with Grass=Terra com Grama +Dirt with Grass and Footsteps=Terra com Grama e Pegadas +Dirt with Savanna Grass=Terra com Grama da Savana +Dirt with Snow=Terra com Neve +Dirt with Rainforest Litter=Terra com Serrapilheira Tropical +Dirt with Coniferous Litter=Terra com Serrapilheira +Savanna Dirt=Terra da Savana +Savanna Dirt with Savanna Grass=Terra da Savana com Grama da Savana +Permafrost=Terra Congelada +Permafrost with Stones=Terra Congelada com Pedras +Permafrost with Moss=Terra Congelada com Musgo +Sand=Areia +Desert Sand=Areia do Deserto +Silver Sand=Areia Prateada +Gravel=Cascalho +Clay=Argila +Snow=Neve +Snow Block=Bloco de Neve +Ice=Gelo +Cave Ice=Caverna de Gelo +Apple Tree=Macieira +Apple Wood Planks=Tábuas de Macieira +Apple Tree Sapling=Muda de Macieira +Apple Tree Leaves=Folhas de Macieira +Apple=Maçã +Apple Marker=Marcador de Maçã +Jungle Tree=Árvore da Selva +Jungle Wood Planks=Tábuas de Árvore da Selva +Jungle Tree Leaves=Folhas de Árvore da Selva +Jungle Tree Sapling=Muda de Árvore da Selva +Emergent Jungle Tree Sapling=Muda Crescida de Árvore da Selva +Pine Tree=Pinheiro +Pine Wood Planks=Tábuas de Pinheiro +Pine Needles=Agulhas de Pinheiro +Pine Tree Sapling=Muda de Pinheiro +Acacia Tree=Acácia +Acacia Wood Planks=Tábuas de Acácia +Acacia Tree Leaves=Folhas de Acácia +Acacia Tree Sapling=Mudas de Acácia +Aspen Tree=Álamo +Aspen Wood Planks=Tábuas de Álamo +Aspen Tree Leaves=Folhas de Álamo +Aspen Tree Sapling=Muda de Álamo +Coal Ore=Minério de Carvão +Coal Block=Bloco de Carvão +Iron Ore=Minério de Ferro +Steel Block=Bloco de Aço +Copper Ore=Minério de Cobre +Copper Block=Bloco de Cobre +Tin Ore=Minério de Estanho +Tin Block=Bloco de Estanho +Bronze Block=Bloco de Bronze +Mese Ore=Minério de Mese +Mese Block=Bloco de Mese +Gold Ore=Minério de Ouro +Gold Block=Bloco de Ouro +Diamond Ore=Minério de Diamante +Diamond Block=Bloco de Diamante +Cactus=Cacto +Large Cactus Seedling=Grande Muda de Cacto +Papyrus=Papiro +Dry Shrub=Arbusto Seco +Jungle Grass=Grama da Selva +Grass=Grama +Savanna Grass=Grama da Savana +Fern=Samambaia +Marram Grass=Grama de Feno +Bush Stem=Caule de Arbusto +Bush Leaves=Folhas de Arbusto +Bush Sapling=Muda de Arbusto +Blueberry Bush Leaves with Berries=Folhas de Arbusto de Mirtilo com Bagas +Blueberry Bush Leaves=Folhas de Arbusto de Mirtilo +Blueberry Bush Sapling=Muda de Arbusto de Mirtilo +Acacia Bush Stem=Caule de Arbusto de Acácia +Acacia Bush Leaves=Folhas de Arbusto de Acácia +Acacia Bush Sapling=Muda de Arbusto de Acácia +Pine Bush Stem=Caule de Arbusto de Pinheiro +Pine Bush Needles=Agulha de Arbusto de Pinheiro +Pine Bush Sapling=Muda de Arbusto de Pinheiro +Kelp=Alga +Green Coral=Coral Verde +Pink Coral=Coral Rosa +Cyan Coral=Coral Ciano +Brown Coral=Coral Marrom +Orange Coral=Coral Laranja +Coral Skeleton=Esqueleto de Coral +Water Source=Fonte de Água +Flowing Water=Água Corrente +River Water Source=Fonte de Água do Rio +Flowing River Water=Água Corrente do Rio +Lava Source=Fonte de Lava +Flowing Lava=Lava Corrente +Empty Bookshelf=Estante de Livros Vazia +Bookshelf (@1 written, @2 empty books)=Estante de Livros (@1 livros escritos, @2 livros em branco) +Bookshelf=Estante de Livros +Text too long=Texto muito longo +"@1"="@1" +Wooden Sign=Placa de Madeira +Steel Sign=Placa de Aço +Wooden Ladder=Escada de Madeira +Steel Ladder=Escada de Aço +Apple Wood Fence=Cerca de Macieira +Acacia Wood Fence=Cerca de Acácia +Jungle Wood Fence=Cerca de Madeira da Selva +Pine Wood Fence=Cerca de Pinheiro +Aspen Wood Fence=Cerca de Álamo +Apple Wood Fence Rail=Trilho de Cerca de Macieira +Acacia Wood Fence Rail=Trilho de Cerca de Acácia +Jungle Wood Fence Rail=Trilho de Cerca de Madeira da Selva +Pine Wood Fence Rail=Trilho de Cerca de Pinheiro +Aspen Wood Fence Rail=Trilho de Cerca de Álamo +Glass=Vidro +Obsidian Glass=Vidro de Obsidiana +Brick Block=Bloco de Tijolos +Mese Lamp=Lâmpada de Mese +Apple Wood Mese Post Light=Poste de Lâmpada de Mese de Macieira +Acacia Wood Mese Post Light=Poste de Lâmpada de Mese de Acácia +Jungle Wood Mese Post Light=Poste de Lâmpada de Mese de Madeira da Selva +Pine Wood Mese Post Light=Poste de Lâmpada de Mese de Pinheiro +Aspen Wood Mese Post Light=Poste de Lâmpada de Mese de Aspen +Cloud=Nuvem +Wooden Pickaxe=Picareta de Madeira +Stone Pickaxe=Picareta de Pedra +Bronze Pickaxe=Picareta de Bronze +Steel Pickaxe=Picareta de Aço +Mese Pickaxe=Picareta de Mese +Diamond Pickaxe=Picareta de Diamante +Wooden Shovel=Pá de Madeira +Stone Shovel=Pá de Pedra +Bronze Shovel=Pá de Bronze +Steel Shovel=Pá de Aço +Mese Shovel=Pá de Mese +Diamond Shovel=Pá de Diamante +Wooden Axe=Machado de Madeira +Stone Axe=Machado de Pedra +Bronze Axe=Machado de Bronze +Steel Axe=Machado de Aço +Mese Axe=Machado de Mese +Diamond Axe=Machado de Diamante +Wooden Sword=Espada de Madeira +Stone Sword=Espada de Pedra +Bronze Sword=Espada de Bronze +Steel Sword=Espada de Aço +Mese Sword=Espada de Mese +Diamond Sword=Espada de Diamante +Torch=Tocha +@1 will intersect protection on growth.=@1 cruzará a proteção no crescimento. diff --git a/mods/default/locale/default.pt_BR.tr b/mods/default/locale/default.pt_BR.tr new file mode 100644 index 0000000..80ad587 --- /dev/null +++ b/mods/default/locale/default.pt_BR.tr @@ -0,0 +1,215 @@ +# textdomain: default +Locked Chest=Baú Trancado +Locked Chest (owned by @1)=Baú Trancado (pertence a @1) +You do not own this chest.=Você não é dono deste baú. +a locked chest=um baú trancado +Chest=Baú +Write= +Read= +Title:=Título: +Contents:=Conteúdo: +Save=Salvar +by @1=por @1 +Page @1 of @2=Página @1 de @2 +The book you were writing to mysteriously disappeared.= +"@1" by @2="@1" por @2 +Blueberries=Mirtilo +Book=Livro +Book with Text=Livro com Texto +Bronze Ingot=Lingote de Bronze +Clay Brick=Tijolo de Argila +Clay Lump=Pedaço de Argila +Coal Lump=Pedaço de Carvão +Copper Ingot=Lingote de Cobre +Copper Lump=Pedaço de Cobre +Diamond=Diamante +Flint=Rocha Sílex +Gold Ingot=Lingote de Ouro +Gold Lump=Pedaço de Ouro +Iron Lump=Pedaço de Ferro +Mese Crystal=Cristal de Mese +Mese Crystal Fragment=Fragmento de Cristal de Mese +Obsidian Shard=Caco de Obsidian +Paper=Papel +Steel Ingot=Lingote de Aço +Stick=Graveto +Tin Ingot=Lingote de Estanho +Tin Lump=Pedaço de Estanho +Furnace is empty=A fornalha está vazia +100% (output full)=100% (saída cheia) +@1%=@1% +Not cookable=Não pode cozinhar +Empty=Vazio +Furnace active=Fornalha ativa +Furnace inactive=Fornalha inativa +(Item: @1; Fuel: @2)=(Item: @1; Combustível: @2) +Furnace=Fornalha +Stone=Pedra +Cobblestone=Pedregulho +Stone Brick=Tijolo de Pedra +Stone Block=Bloco de Pedra +Mossy Cobblestone=Pedregulho Musgoso +Desert Stone=Pedra do Deserto +Desert Cobblestone=Pedregulho do Deserto +Desert Stone Brick=Tijolo de Pedra do Deserto +Desert Stone Block=Bloco de Pedra do Deserto +Sandstone=Arenito +Sandstone Brick=Tijolo de Arenito +Sandstone Block=Bloco de Arenito +Desert Sandstone=Bloco de Arenito do Deserto +Desert Sandstone Brick=Tijolo de Arenito do Deserto +Desert Sandstone Block=Bloco de Arenito do Deserto +Silver Sandstone=Arenito Prateado +Silver Sandstone Brick=Tijolo de Arenito Prateado +Silver Sandstone Block=Bloco de Arenito Prateado +Obsidian=Obsidiana +Obsidian Brick=Tijolo de Obsidiana +Obsidian Block=Bloco de Obsidiana +Dirt=Terra +Dirt with Grass=Terra com Grama +Dirt with Grass and Footsteps=Terra com Grama e Pegadas +Dirt with Savanna Grass=Terra com Grama da Savana +Dirt with Snow=Terra com Neve +Dirt with Rainforest Litter=Terra com Serrapilheira Tropical +Dirt with Coniferous Litter=Terra com Serrapilheira +Savanna Dirt=Terra da Savana +Savanna Dirt with Savanna Grass=Terra da Savana com Grama da Savana +Permafrost=Terra Congelada +Permafrost with Stones=Terra Congelada com Pedras +Permafrost with Moss=Terra Congelada com Musgo +Sand=Areia +Desert Sand=Areia do Deserto +Silver Sand=Areia Prateada +Gravel=Cascalho +Clay=Argila +Snow=Neve +Snow Block=Bloco de Neve +Ice=Gelo +Cave Ice=Caverna de Gelo +Apple Tree=Macieira +Apple Wood Planks=Tábuas de Macieira +Apple Tree Sapling=Muda de Macieira +Apple Tree Leaves=Folhas de Macieira +Apple=Maçã +Apple Marker=Marcador de Maçã +Jungle Tree=Árvore da Selva +Jungle Wood Planks=Tábuas de Árvore da Selva +Jungle Tree Leaves=Folhas de Árvore da Selva +Jungle Tree Sapling=Muda de Árvore da Selva +Emergent Jungle Tree Sapling=Muda Crescida de Árvore da Selva +Pine Tree=Pinheiro +Pine Wood Planks=Tábuas de Pinheiro +Pine Needles=Agulhas de Pinheiro +Pine Tree Sapling=Muda de Pinheiro +Acacia Tree=Acácia +Acacia Wood Planks=Tábuas de Acácia +Acacia Tree Leaves=Folhas de Acácia +Acacia Tree Sapling=Mudas de Acácia +Aspen Tree=Álamo +Aspen Wood Planks=Tábuas de Álamo +Aspen Tree Leaves=Folhas de Álamo +Aspen Tree Sapling=Muda de Álamo +Coal Ore=Minério de Carvão +Coal Block=Bloco de Carvão +Iron Ore=Minério de Ferro +Steel Block=Bloco de Aço +Copper Ore=Minério de Cobre +Copper Block=Bloco de Cobre +Tin Ore=Minério de Estanho +Tin Block=Bloco de Estanho +Bronze Block=Bloco de Bronze +Mese Ore=Minério de Mese +Mese Block=Bloco de Mese +Gold Ore=Minério de Ouro +Gold Block=Bloco de Ouro +Diamond Ore=Minério de Diamante +Diamond Block=Bloco de Diamante +Cactus=Cacto +Large Cactus Seedling=Grande Muda de Cacto +Papyrus=Papiro +Dry Shrub=Arbusto Seco +Jungle Grass=Grama da Selva +Grass=Grama +Savanna Grass=Grama da Savana +Fern=Samambaia +Marram Grass=Grama de Feno +Bush Stem=Caule de Arbusto +Bush Leaves=Folhas de Arbusto +Bush Sapling=Muda de Arbusto +Blueberry Bush Leaves with Berries=Folhas de Arbusto de Mirtilo com Bagas +Blueberry Bush Leaves=Folhas de Arbusto de Mirtilo +Blueberry Bush Sapling=Muda de Arbusto de Mirtilo +Acacia Bush Stem=Caule de Arbusto de Acácia +Acacia Bush Leaves=Folhas de Arbusto de Acácia +Acacia Bush Sapling=Muda de Arbusto de Acácia +Pine Bush Stem=Caule de Arbusto de Pinheiro +Pine Bush Needles=Agulha de Arbusto de Pinheiro +Pine Bush Sapling=Muda de Arbusto de Pinheiro +Kelp=Alga +Green Coral=Coral Verde +Pink Coral=Coral Rosa +Cyan Coral=Coral Ciano +Brown Coral=Coral Marrom +Orange Coral=Coral Laranja +Coral Skeleton=Esqueleto de Coral +Water Source=Fonte de Água +Flowing Water=Água Corrente +River Water Source=Fonte de Água do Rio +Flowing River Water=Água Corrente do Rio +Lava Source=Fonte de Lava +Flowing Lava=Lava Corrente +Empty Bookshelf=Estante de Livros Vazia +Bookshelf (@1 written, @2 empty books)=Estante de Livros (@1 livros escritos, @2 livros em branco) +Bookshelf=Estante de Livros +Text too long=Texto muito longo +"@1"="@1" +Wooden Sign=Placa de Madeira +Steel Sign=Placa de Aço +Wooden Ladder=Escada de Madeira +Steel Ladder=Escada de Aço +Apple Wood Fence=Cerca de Macieira +Acacia Wood Fence=Cerca de Acácia +Jungle Wood Fence=Cerca de Madeira da Selva +Pine Wood Fence=Cerca de Pinheiro +Aspen Wood Fence=Cerca de Álamo +Apple Wood Fence Rail=Trilho de Cerca de Macieira +Acacia Wood Fence Rail=Trilho de Cerca de Acácia +Jungle Wood Fence Rail=Trilho de Cerca de Madeira da Selva +Pine Wood Fence Rail=Trilho de Cerca de Pinheiro +Aspen Wood Fence Rail=Trilho de Cerca de Álamo +Glass=Vidro +Obsidian Glass=Vidro de Obsidiana +Brick Block=Bloco de Tijolos +Mese Lamp=Lâmpada de Mese +Apple Wood Mese Post Light=Poste de Lâmpada de Mese de Macieira +Acacia Wood Mese Post Light=Poste de Lâmpada de Mese de Acácia +Jungle Wood Mese Post Light=Poste de Lâmpada de Mese de Madeira da Selva +Pine Wood Mese Post Light=Poste de Lâmpada de Mese de Pinheiro +Aspen Wood Mese Post Light=Poste de Lâmpada de Mese de Aspen +Cloud=Nuvem +Wooden Pickaxe=Picareta de Madeira +Stone Pickaxe=Picareta de Pedra +Bronze Pickaxe=Picareta de Bronze +Steel Pickaxe=Picareta de Aço +Mese Pickaxe=Picareta de Mese +Diamond Pickaxe=Picareta de Diamante +Wooden Shovel=Pá de Madeira +Stone Shovel=Pá de Pedra +Bronze Shovel=Pá de Bronze +Steel Shovel=Pá de Aço +Mese Shovel=Pá de Mese +Diamond Shovel=Pá de Diamante +Wooden Axe=Machado de Madeira +Stone Axe=Machado de Pedra +Bronze Axe=Machado de Bronze +Steel Axe=Machado de Aço +Mese Axe=Machado de Mese +Diamond Axe=Machado de Diamante +Wooden Sword=Espada de Madeira +Stone Sword=Espada de Pedra +Bronze Sword=Espada de Bronze +Steel Sword=Espada de Aço +Mese Sword=Espada de Mese +Diamond Sword=Espada de Diamante +Torch=Tocha +@1 will intersect protection on growth.=@1 cruzará a proteção no crescimento. diff --git a/mods/default/locale/default.ru.tr b/mods/default/locale/default.ru.tr new file mode 100644 index 0000000..ed99a2d --- /dev/null +++ b/mods/default/locale/default.ru.tr @@ -0,0 +1,215 @@ +# textdomain: default +Locked Chest=Запертый сундук +Locked Chest (owned by @1)=Запертый сундук (владелец: @1) +You do not own this chest.=Вы не владелец этого сундука. +a locked chest=запертый сундук +Chest=Сундук +Write=Написать +Read=Читать +Title:=Заголовок: +Contents:=Содержимое: +Save=Сохранить +by @1=от @1 +Page @1 of @2=Страница @1 из @2 +The book you were writing to mysteriously disappeared.=Книга, которую вы писали, загадочно исчезла. +"@1" by @2="@1" @2 +Blueberries=Черника +Book=Книга +Book with Text=Книга с текстом +Bronze Ingot=Бронзовый слиток +Clay Brick=Кирпич +Clay Lump=Глина +Coal Lump=Уголь +Copper Ingot=Медный слиток +Copper Lump=Кусок меди +Diamond=Алмаз +Flint=Кремень +Gold Ingot=Золотой слиток +Gold Lump=Кусок золота +Iron Lump=Кусок железа +Mese Crystal=Кристалл мезы +Mese Crystal Fragment=Осколок кристалла мезы +Obsidian Shard=Обсидиановый осколок +Paper=Бумага +Steel Ingot=Стальной слиток +Stick=Палка +Tin Ingot=Оловянный слиток +Tin Lump=Кусок олова +Furnace is empty=Печь пуста +100% (output full)=100% (выход заполнен) +@1%=@1% +Not cookable=Не может быть приготовлено +Empty=Пустое +Furnace active=Печь зажжена +Furnace inactive=Печь не зажжена +(Item: @1; Fuel: @2)=(Предмет: @1; Топливо: @2) +Furnace=Печь +Stone=Камень +Cobblestone=Булыжник +Stone Brick=Каменные кирпичи +Stone Block=Каменный блок +Mossy Cobblestone=Замшелый булыжник +Desert Stone=Пустынный камень +Desert Cobblestone=Пустынный булыжник +Desert Stone Brick=Пустынный каменные кирпичи +Desert Stone Block=Пустынный каменный блок +Sandstone=Песчаник +Sandstone Brick=Песчаниковые кирпичи +Sandstone Block=Песчаниковый блок +Desert Sandstone=Пустынный песчаник +Desert Sandstone Brick=Пустынные песчаниковые кирпичи +Desert Sandstone Block=Пустынный песчаниковый блок +Silver Sandstone=Серебристый песчаник +Silver Sandstone Brick=Серебристые песчаниковые кирпичи +Silver Sandstone Block=Серебристый песчаниковый блок +Obsidian=Обсидиан +Obsidian Brick=Обсидиановые кирпичи +Obsidian Block=Обсидиановый блок +Dirt=Земля +Dirt with Grass=Дёрн +Dirt with Grass and Footsteps=Дёрн со следами +Dirt with Savanna Grass=Саванный дёрн +Dirt with Snow=Земля со снегом +Dirt with Rainforest Litter=Земля с тропической подстилкой +Dirt with Coniferous Litter=Земля с сосновой подстилкой +Savanna Dirt=Саванная земля +Savanna Dirt with Savanna Grass=Саванная земля с саванной травой +Permafrost=Мёрзлая почва +Permafrost with Stones=Мёрзлая почва с камнями +Permafrost with Moss=Мёрзлая почва с мхом +Sand=Песок +Desert Sand=Пустынный песок +Silver Sand=Серебристый песок +Gravel=Гравий +Clay=Глиняный блок +Snow=Снежок +Snow Block=Снежный блок +Ice=Лёд +Cave Ice=Пещерный лёд +Apple Tree=Яблоневая древесина +Apple Wood Planks=Яблоневые доски +Apple Tree Sapling=Саженец яблони +Apple Tree Leaves=Яблоневая листва +Apple=Яблоко +Apple Marker=Яблочная метка +Jungle Tree=Древесина тропического дерева +Jungle Wood Planks=Доски из тропического дерева +Jungle Tree Leaves=Листва тропического дерева +Jungle Tree Sapling=Саженец тропического дерева +Emergent Jungle Tree Sapling=Выросший саженец тропического дерева +Pine Tree=Сосновая древесина +Pine Wood Planks=Сосновые доски +Pine Needles=Сосновая хвоя +Pine Tree Sapling=Саженец сосны +Acacia Tree=Акациевая древесина +Acacia Wood Planks=Акациевые доски +Acacia Tree Leaves=Акациевая листва +Acacia Tree Sapling=Саженец акации +Aspen Tree=Осиновая древесина +Aspen Wood Planks=Осиновые доски +Aspen Tree Leaves=Осиновая листва +Aspen Tree Sapling=Саженец осины +Coal Ore=Угольная руда +Coal Block=Угольный блок +Iron Ore=Железная руда +Steel Block=Стальной блок +Copper Ore=Медная руда +Copper Block=Медный блок +Tin Ore=Оловянная руда +Tin Block=Оловянный блок +Bronze Block=Бронзовый блок +Mese Ore=Мезовая руда +Mese Block=Мезовый блок +Gold Ore=Золотая руда +Gold Block=Золотой блок +Diamond Ore=Алмазная руда +Diamond Block=Алмазный блок +Cactus=Кактус +Large Cactus Seedling=Саженец кактуса +Papyrus=Папирус +Dry Shrub=Сухой куст +Jungle Grass=Тропическая трава +Grass=Трава +Savanna Grass=Саванная трава +Fern=Папоротник +Marram Grass=Песколюб +Bush Stem=Стебель куста +Bush Leaves=Листья куста +Bush Sapling=Саженец куста +Blueberry Bush Leaves with Berries=Черничный куст с ягодами +Blueberry Bush Leaves=Листья черничного куста +Blueberry Bush Sapling=Саженец черничного куста +Acacia Bush Stem=Стебель куста акации +Acacia Bush Leaves=Листья куста акации +Acacia Bush Sapling=Саженец куста акации +Pine Bush Stem=Стебли хвойного куста +Pine Bush Needles=Хвоя куста +Pine Bush Sapling=Саженец хвойного куста +Kelp=Ламинария +Green Coral=Зелёный коралл +Pink Coral=Розовый коралл +Cyan Coral=Бирюзовый коралл +Brown Coral=Коричневый коралл +Orange Coral=Оранжевый коралл +Coral Skeleton=Коралловый остов +Water Source=Источник воды +Flowing Water=Текущая вода +River Water Source=Источник речной воды +Flowing River Water=Текущая речная вода +Lava Source=Источник лавы +Flowing Lava=Текущая лава +Empty Bookshelf=Пустая книжная полка +Bookshelf (@1 written, @2 empty books)=Книжная полка (@1 написано, @2 чистые книги) +Bookshelf=Книжная полка +Text too long=Текст слишком длинный +"@1"="@1" +Wooden Sign=Деревянная табличка +Steel Sign=Стальная табличка +Wooden Ladder=Деревянная лестница +Steel Ladder=Стальная лестница +Apple Wood Fence=Яблоневый забор +Acacia Wood Fence=Акациевый забор +Jungle Wood Fence=Забор из тропического дерева +Pine Wood Fence=Сосновый забор +Aspen Wood Fence=Осиновый забор +Apple Wood Fence Rail=Яблоневый реечный забор +Acacia Wood Fence Rail=Акациевый реечный забор +Jungle Wood Fence Rail=Реечный забор из тропического дерева +Pine Wood Fence Rail=Сосновый реечный забор +Aspen Wood Fence Rail=Осиновый реечный забор +Glass=Стекло +Obsidian Glass=Обсидиановое стекло +Brick Block=Кирпичи +Mese Lamp=Мезовая лампа +Apple Wood Mese Post Light=Яблоневый уличный фонарь +Acacia Wood Mese Post Light=Акациевый уличный фонарь +Jungle Wood Mese Post Light=Уличный фонарь из тропического дерева +Pine Wood Mese Post Light=Сосновый уличный фонарь +Aspen Wood Mese Post Light=Осиновый уличный фонарь +Cloud=Облако +Wooden Pickaxe=Деревянная кирка +Stone Pickaxe=Каменная кирка +Bronze Pickaxe=Бронзовая кирка +Steel Pickaxe=Стальная кирка +Mese Pickaxe=Мезовая кирка +Diamond Pickaxe=Алмазная кирка +Wooden Shovel=Деревянная лопата +Stone Shovel=Каменная лопата +Bronze Shovel=Бронзовая лопата +Steel Shovel=Стальная лопата +Mese Shovel=Мезовая лопата +Diamond Shovel=Алмазная лопата +Wooden Axe=Деревянный топор +Stone Axe=Каменный топор +Bronze Axe=Бронзовый топор +Steel Axe=Стальной топор +Mese Axe=Мезовый топор +Diamond Axe=Алмазный топор +Wooden Sword=Деревянный меч +Stone Sword=Каменный меч +Bronze Sword=Бронзовый меч +Steel Sword=Стальной меч +Mese Sword=Мезовый меч +Diamond Sword=Алмазный меч +Torch=Факел +@1 will intersect protection on growth.=@1 пересечет защищённую зону при вырастании. \ No newline at end of file diff --git a/mods/default/locale/default.sk.tr b/mods/default/locale/default.sk.tr new file mode 100644 index 0000000..337ebcf --- /dev/null +++ b/mods/default/locale/default.sk.tr @@ -0,0 +1,220 @@ +# textdomain: default +Locked Chest=Uzamknutá truhlica +Locked Chest (owned by @1)=Uzamknutá truhlica (Vlastník - @1) +You do not own this chest.=Túto truhlicu nevlastníš. +a locked chest=zamknutá truhlica +Chest=Truhlica +Write= +Read= +Title:=Názov: +Contents:=Obsah: +Save=Uložiť +by @1=od @1 +Page @1 of @2=Strana @1 z @2 +The book you were writing to mysteriously disappeared.= +"@1" by @2=„@1“ z @2 +Blueberries=Čučoriedky +Book=Kniha +Book with Text=Kniha s textom +Bronze Ingot=Bronzový ingot +Clay Brick=Nepálená tehla +Clay Lump=Hruda ílu +Coal Lump=Hruda uhlia +Copper Ingot=Medený ingot +Copper Lump=Hruda medi +Diamond=Diamant +Flint=Kresací kamienok +Gold Ingot=Zlatý ingot +Gold Lump=Hruda zlata +Iron Lump=Hruda železa +Mese Crystal=Mese Krištáľ +Mese Crystal Fragment=Fragment Mese krištáľu +Obsidian Shard=Úlomok obsidiánu +Paper=Papier +Steel Ingot=Oceľový ingot +Stick=Palica +Tin Ingot=Cínový ingot +Tin Lump=Hruda cínu +Furnace is empty=Pec je prázdna +100% (output full)=100% (Výstup je plný) +@1%=@1% +Not cookable=Nie je variteľné +Empty=Prázdne +Furnace active=Pec je aktívna +Furnace inactive=Pec je neaktívna +(Item: @1; Fuel: @2)=(Vec: @1; Palivo: @2) +Furnace=Pec +Stone=Kameň +Cobblestone=Dlažbový kameň +Stone Brick=Tehla z kameňa +Stone Block=Blok kameňa +Mossy Cobblestone=Dlažbový kameň obrastený machom +Desert Stone=Púštny kameň +Desert Cobblestone=Púštny dlažbový kameň +Desert Stone Brick=Tehla z púštneho kameňa +Desert Stone Block=Blok púštneho kameňa +Sandstone=Pieskovec +Sandstone Brick=Tehla z pieskovca +Sandstone Block=Blok pieskovca +Desert Sandstone=Púštny pieskovec +Desert Sandstone Brick=Tehla z púštneho pieskovca +Desert Sandstone Block=Blok púštneho pieskovca +Silver Sandstone=Strieborný pieskovec +Silver Sandstone Brick=Tehla zo strieborného pieskovca +Silver Sandstone Block=Blok strieborného pieskovca +Obsidian=Obsidián +Obsidian Brick=Tehla z obsidiánu +Obsidian Block=Blok obsidiánu +Dirt=Hlina +Dirt with Grass=Hlina s trávou +Dirt with Grass and Footsteps=Hlina s trávou a stopami +Dirt with Savanna Grass=Hlina s trávou zo savany +Dirt with Snow=Hlina so snehom +Dirt with Rainforest Litter=Hlina s povrchom dažďového pralesa +Dirt with Coniferous Litter=Hlina s ihličnatým povrchom +Savanna Dirt=Hlina zo savany +Savanna Dirt with Savanna Grass=Hlina zo savany s trávou +Permafrost=Permafrost +Permafrost with Stones=Permafrost s kameňmi +Permafrost with Moss=Permafrost s machom +Sand=Piesok +Desert Sand=Púštny piesok +Silver Sand=Strieborný piesok +Gravel=Štrk +Clay=Íl +Snow=Sneh +Snow Block=Blok snehu +Ice=Ľad +Cave Ice=Jaskynný ľad +Apple Tree=Jabloň +Apple Wood Planks=Drevené dosky z jablone +Apple Tree Sapling=Stromček jablone +Apple Tree Leaves=Listy z jablone +Apple=Jablko +Apple Marker=Jablková značka +Jungle Tree=Ďungľový strom +Jungle Wood Planks=Drevené dosky z džungľového stromu +Jungle Tree Leaves=Listy z džungľového stromu +Jungle Tree Sapling=Džungľový stromček +Emergent Jungle Tree Sapling=Vznikajúci džungľový stromček +Pine Tree=Borovica +Pine Wood Planks=Drevené dosky z borovice +Pine Needles=Ihličie z borovice +Pine Tree Sapling=Borovicový stromček +Acacia Tree=Akácia +Acacia Wood Planks=Drevené dosky z akácie +Acacia Tree Leaves=Listy z akácie +Acacia Tree Sapling=Stromček akácie +Aspen Tree=Osika +Aspen Wood Planks=Drevené dosky z osiky +Aspen Tree Leaves=Listy z osiky +Aspen Tree Sapling=Stromček osiky +Coal Ore=Uhoľná ruda +Coal Block=Blok uhlia +Iron Ore=Železná ruda +Steel Block=Blok ocele +Copper Ore=Medená ruda +Copper Block=Blok medi +Tin Ore=Cínová ruda +Tin Block=Blok cínu +Bronze Block=Blok bronzu +Mese Ore=Mese Ruda +Mese Block=Blok Mese +Gold Ore=Zlatá ruda +Gold Block=Blok zlata +Diamond Ore=Diamantová ruda +Diamond Block=Blok diamantu +Cactus=Kaktus +Large Cactus Seedling=Vaľká sadenica kaktusu +Papyrus=Papyrus +Dry Shrub=Suchý ker +Jungle Grass=Džungľová tráva +Grass=Tráva +Savanna Grass=Tráva zo savany +Fern=Papraď +Marram Grass=Pobrežná tráva +Bush Stem=Stonka z kríka +Bush Leaves=Listy z kríka +Bush Sapling=Sadenica kríka +Blueberry Bush Leaves with Berries=Čučoriedkové listy s čučoriedkami +Blueberry Bush Leaves=Čučoriedkové listy +Blueberry Bush Sapling=Sadenica čučoriedky +Acacia Bush Stem=Stonka z kríka akácie +Acacia Bush Leaves=Listy z kríka akácie +Acacia Bush Sapling=Sadenica kríka akácie +Pine Bush Stem=Stonka kríka borovice +Pine Bush Needles=Ihličie kríka borovice +Pine Bush Sapling=Sadenica kríka borovice +Kelp=Riasa +Green Coral=Zelený koral +Pink Coral=Ružový koral +Cyan Coral=Tyrkysový koral +Brown Coral=Hnedý koral +Orange Coral=Oranžový koral +Coral Skeleton=Koralová kostra +Water Source=Zdroj vody +Flowing Water=Tečúca voda +River Water Source=Zdroj riečnej voda +Flowing River Water=Tečúca riečna voda +Lava Source=Zdroj lávy +Flowing Lava=Tečúca láva +Empty Bookshelf=Prázdna knižnica +Bookshelf (@1 written, @2 empty books)=Knižnica (@1 popísané, @2 prázdne knihy) +Bookshelf=Knižnica +Text too long=Text je príliš dlhý +"@1"=„@1“ +Wooden Sign=Drevená tabuľka +Steel Sign=Oceľová tabuľka +Wooden Ladder=Drevený rebrík +Steel Ladder=Oceľový rebrík +Apple Wood Fence=Drevený plot z jablone +Acacia Wood Fence=Drevený plot z akácie +Jungle Wood Fence=Drevený plot z džungľového dreva +Pine Wood Fence=Drevený plot z borovice +Aspen Wood Fence=Drevený plot z osiky +Apple Wood Fence Rail=Drevené zábradlie z jablone +Acacia Wood Fence Rail=Drevené zábradlie z akácie +Jungle Wood Fence Rail=Drevené zábradlie z džungľového dreva +Pine Wood Fence Rail=Drevené zábradlie z borovice +Aspen Wood Fence Rail=Drevené zábradlie z osiky +Glass=Sklo +Obsidian Glass=Obsidiánové sklo +Brick Block=Blok z tehál +Mese Lamp=Mese lampa +Apple Wood Mese Post Light= +Acacia Wood Mese Post Light= +Jungle Wood Mese Post Light= +Pine Wood Mese Post Light= +Aspen Wood Mese Post Light= +Cloud=Oblak +Wooden Pickaxe=Drevený krompáč +Stone Pickaxe=Kamenný krompáč +Bronze Pickaxe=Bronzový krompáč +Steel Pickaxe=Oceľový krompáč +Mese Pickaxe=Mese krompáč +Diamond Pickaxe=Diamantový krompáč +Wooden Shovel=Drevená lopata +Stone Shovel=Kamenná lopata +Bronze Shovel=Bronzová lopata +Steel Shovel=Oceľová lopata +Mese Shovel=Mese lopata +Diamond Shovel=Diamantová lopata +Wooden Axe=Drevená sekera +Stone Axe=Kamenná sekera +Bronze Axe=Bronzová sekera +Steel Axe=Oceľová sekera +Mese Axe=Mese sekera +Diamond Axe=Diamantová sekera +Wooden Sword=Drevený meč +Stone Sword=Kamenný meč +Bronze Sword=Bronzový meč +Steel Sword=Oceľový meč +Mese Sword=Mese meč +Diamond Sword=Diamantový meč +Torch=Fakľa +@1 will intersect protection on growth.=@1 prekročí pri raste chránenú zónu. + + +##### not used anymore ##### + +Mese Post Light=Mese stĺpová lampa diff --git a/mods/default/locale/default.sv.tr b/mods/default/locale/default.sv.tr new file mode 100644 index 0000000..90df6c3 --- /dev/null +++ b/mods/default/locale/default.sv.tr @@ -0,0 +1,215 @@ +# textdomain: default +Locked Chest=Låst kista +Locked Chest (owned by @1)=Låst kista (Ägd av @1) +You do not own this chest.=Du äger inte denna kista. +a locked chest=en låst kista +Chest=Kista +Write=Skriva +Read=Läs +Title:=Titel: +Contents:=Innehåll: +Save=Spara +by @1=av @1 +Page @1 of @2=Sida @1 av @2 +The book you were writing to mysteriously disappeared.= +"@1" by @2="@1" av @2 +Blueberries=Blåbär +Book=Bok +Book with Text=Bok med text +Bronze Ingot=Bronstacka +Clay Brick=Tegelsten +Clay Lump=Lerklump +Coal Lump=Kolklump +Copper Ingot=Koppartacka +Copper Lump=Kopparklump +Diamond=Diamant +Flint=Flinta +Gold Ingot=Guldtacka +Gold Lump=Guldklump +Iron Lump=Järnklump +Mese Crystal=Mesekristall +Mese Crystal Fragment=Mesekristallfragment +Obsidian Shard=Obsidianskärva +Paper=Papper +Steel Ingot=Ståltacka +Stick=Pinne +Tin Ingot=Tenntacka +Tin Lump=Tennklump +Furnace is empty=Ugnen är tom +100% (output full)=100% (utgången full) +@1%=@1% +Not cookable=Inte kokbar +Empty=Tom +Furnace active=Ugn aktiv +Furnace inactive=Ugn inaktiv +(Item: @1; Fuel: @2)=(Sak: @1; Bränsle: @2) +Furnace=Ugn +Stone=Sten +Cobblestone=Kullersten +Stone Brick=Stentegel +Stone Block=Stenblock +Mossy Cobblestone=Mossig kullersten +Desert Stone=Ökensten +Desert Cobblestone=Ökenkullersten +Desert Stone Brick=Ökenstenstegel +Desert Stone Block=Ökenstensblock +Sandstone=Sandsten +Sandstone Brick=Sandstenstegel +Sandstone Block=Sandstensblock +Desert Sandstone=Ökensandsten +Desert Sandstone Brick=Ökensandstenstegel +Desert Sandstone Block=Ökensandstensblock +Silver Sandstone=Silversandsten +Silver Sandstone Brick=Silversandstenstegel +Silver Sandstone Block=Silversandstensblock +Obsidian=Obsidian +Obsidian Brick=Obsidiantegel +Obsidian Block=Obsidianblock +Dirt=Jord +Dirt with Grass=Jord med gräs +Dirt with Grass and Footsteps=Jord med gräs och fotsteg +Dirt with Savanna Grass=Jord med savanngräs +Dirt with Snow=Jord med snö +Dirt with Rainforest Litter=Jord med regnskogströ +Dirt with Coniferous Litter=Jord med barrträd +Savanna Dirt=Savannjord +Savanna Dirt with Savanna Grass=Savannjord med savanngräs +Permafrost=Permafrost +Permafrost with Stones=Permafrost med sten +Permafrost with Moss=Permafrost med mossa +Sand=Sand +Desert Sand=Ökensand +Silver Sand=Silversand +Gravel=Grus +Clay=Lera +Snow=Snö +Snow Block=Snöblock +Ice=Is +Cave Ice=Grottis +Apple Tree=Äppleträd +Apple Wood Planks=Äppleträdplankor +Apple Tree Sapling=Äppleplanta +Apple Tree Leaves=Äpplelöv +Apple=Äpple +Apple Marker=Äpplemarkör +Jungle Tree=Djungelträd +Jungle Wood Planks=Djungelplankor +Jungle Tree Leaves=Djungellöv +Jungle Tree Sapling=Djungelplanta +Emergent Jungle Tree Sapling=Nybliven djungelplanta +Pine Tree=Tall +Pine Wood Planks=Tallplankor +Pine Needles=Granbarr +Pine Tree Sapling=Tallplanta +Acacia Tree=Akaciaträd +Acacia Wood Planks=Akaciaplankor +Acacia Tree Leaves=Akacialöv +Acacia Tree Sapling=Akaciaplanta +Aspen Tree=Asp +Aspen Wood Planks=Aspplankor +Aspen Tree Leaves=Asplöv +Aspen Tree Sapling=Aspplanta +Coal Ore=Kolmalm +Coal Block=Kolblock +Iron Ore=Järnmalm +Steel Block=Stålblock +Copper Ore=Kopparmalm +Copper Block=Kopparblock +Tin Ore=Tennmalm +Tin Block=Tennblock +Bronze Block=Bronsblock +Mese Ore=Mesemalm +Mese Block=Meseblock +Gold Ore=Guldmalm +Gold Block=Guldblock +Diamond Ore=Diamantmalm +Diamond Block=Diamantblock +Cactus=Kaktus +Large Cactus Seedling=Stor kaktusplanta +Papyrus=Papyrus +Dry Shrub=Torr buske +Jungle Grass=Djungelgräs +Grass=Gräs +Savanna Grass=Savanngräs +Fern=Ormbunke +Marram Grass=Marramgräs +Bush Stem=Buskstam +Bush Leaves=Busklöv +Bush Sapling=Buskplanta +Blueberry Bush Leaves with Berries=Blåbärsbuske med bär +Blueberry Bush Leaves=Blåbärsbuske +Blueberry Bush Sapling=Blåbärsbuskplanta +Acacia Bush Stem=Akaciabuskstam +Acacia Bush Leaves=Akaciabuske +Acacia Bush Sapling=Akaciabuskplanta +Pine Bush Stem=Tallbuskestam +Pine Bush Needles=Tallgranbarr +Pine Bush Sapling=Tallbuskplanta +Kelp=Brunalg +Green Coral=Grön korall +Pink Coral=Rosa korall +Cyan Coral=Cyan korall +Brown Coral=Brun korall +Orange Coral=Orange korall +Coral Skeleton=Korallskelett +Water Source=Vattenkälla +Flowing Water=Flytande vatten +River Water Source=Flodvattenkälla +Flowing River Water=Flytande flodvatten +Lava Source=Lavakälla +Flowing Lava=Flytande lava +Empty Bookshelf=Tom bokhylla +Bookshelf (@1 written, @2 empty books)=Bokhylla (@1 skriva, @2 tomma böcker) +Bookshelf=Bokhylla +Text too long=Texten är för lång +"@1"="@1" +Wooden Sign=Träskylt +Steel Sign=Stålskylt +Wooden Ladder=Trästege +Steel Ladder=Stålstege +Apple Wood Fence=Äppleträstaket +Acacia Wood Fence=Akaciastaket +Jungle Wood Fence=Djungelstaket +Pine Wood Fence=Tallstaket +Aspen Wood Fence=Aspträdstaket +Apple Wood Fence Rail=Äppleträstaketsräls +Acacia Wood Fence Rail=Akaciastaketsräls +Jungle Wood Fence Rail=Djungelstaketsräls +Pine Wood Fence Rail=Tallstaketsräls +Aspen Wood Fence Rail=Aspstaketsräls +Glass=Glas +Obsidian Glass=Obsidianglas +Brick Block=Tegelstensblock +Mese Lamp=Meselampa +Apple Wood Mese Post Light=Äppleträ-meselykta +Acacia Wood Mese Post Light=Acacia-meselykta +Jungle Wood Mese Post Light=Djungel-meselykta +Pine Wood Mese Post Light=Tall-meselykta +Aspen Wood Mese Post Light=Aspträ-meselykta +Cloud=Moln +Wooden Pickaxe=Trähacka +Stone Pickaxe=Stenhacka +Bronze Pickaxe=Bronshacka +Steel Pickaxe=Stålhacka +Mese Pickaxe=Mesehacka +Diamond Pickaxe=Diamanthacka +Wooden Shovel=Träspade +Stone Shovel=Stenspade +Bronze Shovel=Bronsspade +Steel Shovel=Stålspade +Mese Shovel=Mesespade +Diamond Shovel=Diamantspade +Wooden Axe=Träyxa +Stone Axe=Stenyxa +Bronze Axe=Bronsyxa +Steel Axe=Stålyxa +Mese Axe=Meseyxa +Diamond Axe=Diamantyxa +Wooden Sword=Träsvärd +Stone Sword=Stensvärd +Bronze Sword=Bronssvärd +Steel Sword=Stålsvärd +Mese Sword=Mesesvärd +Diamond Sword=Diamantsvärd +Torch=Fackla +@1 will intersect protection on growth.=@1 kommer korsa skyddet mot tillväxt. diff --git a/mods/default/locale/default.uk.tr b/mods/default/locale/default.uk.tr new file mode 100644 index 0000000..aa24bfb --- /dev/null +++ b/mods/default/locale/default.uk.tr @@ -0,0 +1,215 @@ +# textdomain: default +Locked Chest=Замкнена скриня +Locked Chest (owned by @1)=Замкнена скриня (власник — @1) +You do not own this chest.=Ви — не власник цієї скрині. +a locked chest=замкнена скриня +Chest=Скриня +Write=Писати +Read=Читати +Title:=Заголовок: +Contents:=Вміст: +Save=Зберегти +by @1=Автор: @1 +Page @1 of @2=Сторінка @1 з @2 +The book you were writing to mysteriously disappeared.=Книга, в яку ви писали, загадковим чином зникла. +"@1" by @2=@2 — "@1" +Blueberries=Чорниці +Book=Книга +Book with Text=Книга з текстом +Bronze Ingot=Бронзовий злиток +Clay Brick=Глиняна цегла +Clay Lump=Шматок глини +Coal Lump=Шматок вугілля +Copper Ingot=Мідний злиток +Copper Lump=Шматок міді +Diamond=Діамант +Flint=Кремінь +Gold Ingot=Золотий злиток +Gold Lump=Шматок золота +Iron Lump=Шматок заліза +Mese Crystal=Кристал Месе +Mese Crystal Fragment=Уламок кристалу Месе +Obsidian Shard=Обсидіановий уламок +Paper=Папір +Steel Ingot=Сталевий злиток +Stick=Палиця +Tin Ingot=Олов'яний злиток +Tin Lump=Шматок олова +Furnace is empty=Піч порожня +100% (output full)=100% (піч переповнена) +@1%=@1% +Not cookable=Не може бути приготовано +Empty=Порожньо +Furnace active=Піч запалена +Furnace inactive=Піч не запалена +(Item: @1; Fuel: @2)=(Предмет: @1; Паливо: @2) +Furnace=Піч +Stone=Камінь +Cobblestone=Кругляк +Stone Brick=Кам'яна цегла +Stone Block=Блок каменю +Mossy Cobblestone=Моховитий кругляк +Desert Stone=Пустельний камінь +Desert Cobblestone=Пустельний кругляк +Desert Stone Brick=Цегла з пустельного каменю +Desert Stone Block=Блок пустельного каменю +Sandstone=Пісковик +Sandstone Brick=Пісковикова цегла +Sandstone Block=Блок пісковику +Desert Sandstone=Пустельний пісковик +Desert Sandstone Brick=Цегла з пустельного пісковику +Desert Sandstone Block=Блок пустельного пісковику +Silver Sandstone=Срібний пісковик +Silver Sandstone Brick=Цегла зі срібного пісковику +Silver Sandstone Block=Блок срібного пісковику +Obsidian=Обсидіан +Obsidian Brick=Обсидіанова цегла +Obsidian Block=Блок обсидіану +Dirt=Земля +Dirt with Grass=Земля з травою +Dirt with Grass and Footsteps=Земля з травою та слідами +Dirt with Savanna Grass=Земля із саванною травою +Dirt with Snow=Земля зі снігом +Dirt with Rainforest Litter=Земля з тропічно-лісовою підстилкою +Dirt with Coniferous Litter=Земля з хвойно-лісовою підстилкою +Savanna Dirt=Саванна земля +Savanna Dirt with Savanna Grass=Саванна земля із саванною травою +Permafrost=Вічна мерзлота +Permafrost with Stones=Вічна мерзлота з камінням +Permafrost with Moss=Вічна мерзлота з мохом +Sand=Пісок +Desert Sand=Пустельний пісок +Silver Sand=Срібний пісок +Gravel=Гравій +Clay=Глина +Snow=Сніг +Snow Block=Блок снігу +Ice=Крига +Cave Ice=Печерова крига +Apple Tree=Стовбур яблуні +Apple Wood Planks=Яблуневі дошки +Apple Tree Sapling=Саджанець яблуні +Apple Tree Leaves=Яблуневе листя +Apple=Яблуко +Apple Marker=Мітка яблука +Jungle Tree=Стовбур тропічного дерева +Jungle Wood Planks=Дошки з тропічного дерева +Jungle Tree Leaves=Листя тропічного дерева +Jungle Tree Sapling=Саджанець тропічного дерева +Emergent Jungle Tree Sapling=Молодий саджанець тропічного дерева +Pine Tree=Сосновий стовбур +Pine Wood Planks=Соснові дошки +Pine Needles=Соснова хвоя +Pine Tree Sapling=Саджанець сосни +Acacia Tree=Акацієвий стовбур +Acacia Wood Planks=Акацієві дошки +Acacia Tree Leaves=Акацієве листя +Acacia Tree Sapling=Саджанець акації +Aspen Tree=Осиковий стовбур +Aspen Wood Planks=Осикові дошки +Aspen Tree Leaves=Осикове листя +Aspen Tree Sapling=Саджанець осики +Coal Ore=Поклади вугілля +Coal Block=Блок вугілля +Iron Ore=Поклади заліза +Steel Block=Блок сталі +Copper Ore=Поклади міді +Copper Block=Блок міді +Tin Ore=Поклади олова +Tin Block=Блок олова +Bronze Block=Блок бронзи +Mese Ore=Поклади Месе +Mese Block=Блок Месе +Gold Ore=Поклади золота +Gold Block=Блок золота +Diamond Ore=Поклади діамантів +Diamond Block=Блок діамантів +Cactus=Кактус +Large Cactus Seedling=Великий саджанець кактуса +Papyrus=Папірус +Dry Shrub=Сухий кущ +Jungle Grass=Тропічна трава +Grass=Трава +Savanna Grass=Саванна трава +Fern=Папороть +Marram Grass=Пляжна трава +Bush Stem=Стебла куща +Bush Leaves=Листя куща +Bush Sapling=Саджанець куща +Blueberry Bush Leaves with Berries=Кущ чорниці з ягодами +Blueberry Bush Leaves=Кущ чорниці +Blueberry Bush Sapling=Саджанець куща чорниці +Acacia Bush Stem=Стебла акацієвого куща +Acacia Bush Leaves=Листя акацієвого куща +Acacia Bush Sapling=Саджанець акацієвого куща +Pine Bush Stem=Стебла соснового куща +Pine Bush Needles=Хвоя соснового куща +Pine Bush Sapling=Саджанець соснового куща +Kelp=Ламінарія +Green Coral=Зелений корал +Pink Coral=Рожевий корал +Cyan Coral=Блакитний корал +Brown Coral=Коричневий корал +Orange Coral=Помаранчевий корал +Coral Skeleton=Скелет корала +Water Source=Водне джерело +Flowing Water=Проточна вода +River Water Source=Річкове водне джерело +Flowing River Water=Проточна річкова вода +Lava Source=Лавове джерело +Flowing Lava=Проточна лава +Empty Bookshelf=Порожня книжкова полиця +Bookshelf (@1 written, @2 empty books)=Книжкова полиця (книги: @1 з текстом, @2 без тексту) +Bookshelf=Книжкова полиця +Text too long=Текст занадто довгий +"@1"="@1" +Wooden Sign=Дерев'яна табличка +Steel Sign=Сталева табличка +Wooden Ladder=Дерев'яна драбина +Steel Ladder=Сталева драбина +Apple Wood Fence=Яблуневий паркан +Acacia Wood Fence=Акацієвий паркан +Jungle Wood Fence=Паркан із тропічного дерева +Pine Wood Fence=Сосновий паркан +Aspen Wood Fence=Осиковий паркан +Apple Wood Fence Rail=Яблуневий рейковий паркан +Acacia Wood Fence Rail=Акацієвий рейковий паркан +Jungle Wood Fence Rail=Рейковий паркан з тропічного дерева +Pine Wood Fence Rail=Сосновий рейковий паркан +Aspen Wood Fence Rail=Осиковий рейковий паркан +Glass=Скло +Obsidian Glass=Обсидіанове скло +Brick Block=Цегляний блок +Mese Lamp=Месе-лампа +Apple Wood Mese Post Light=Яблуневий стовповий Месе-світильник +Acacia Wood Mese Post Light=Акацієвий стовповий Месе-світильник +Jungle Wood Mese Post Light=Стовповий Месе-світильник із тропічного дерева +Pine Wood Mese Post Light=Сосновий стовповий Месе-світильник +Aspen Wood Mese Post Light=Осиковий стовповий Месе-світильник +Cloud=Хмара +Wooden Pickaxe=Дерев'яне кайло +Stone Pickaxe=Кам'яне кайло +Bronze Pickaxe=Бронзове кайло +Steel Pickaxe=Сталеве кайло +Mese Pickaxe=Месе-кайло +Diamond Pickaxe=Діамантове кайло +Wooden Shovel=Дерев'яна лопата +Stone Shovel=Кам'яна лопата +Bronze Shovel=Бронзова лопата +Steel Shovel=Сталева лопата +Mese Shovel=Месе-лопата +Diamond Shovel=Діамантова лопата +Wooden Axe=Дерев'яна сокира +Stone Axe=Кам'яна сокира +Bronze Axe=Бронзова сокира +Steel Axe=Сталева сокира +Mese Axe=Месе-сокира +Diamond Axe=Діамантова сокира +Wooden Sword=Дерев'яний меч +Stone Sword=Кам'яний меч +Bronze Sword=Бронзовий меч +Steel Sword=Сталевий меч +Mese Sword=Месе-меч +Diamond Sword=Діамантовий меч +Torch=Смолоскип +@1 will intersect protection on growth.=@1 перетне захист коли виросте. diff --git a/mods/default/locale/default.zh_CN.tr b/mods/default/locale/default.zh_CN.tr new file mode 100644 index 0000000..c887df8 --- /dev/null +++ b/mods/default/locale/default.zh_CN.tr @@ -0,0 +1,221 @@ +# textdomain: default +Locked Chest=已上锁的箱子 +Locked Chest (owned by @1)=已上锁的箱子(属于@1) +You do not own this chest.=这个箱子不属于你所有。 +a locked chest=一个已上锁的箱子 +Chest=箱子 +Write=写 +Read=读 +Title:=标题: +Contents:=内容: +Save=保存 +by @1=由@1 +Page @1 of @2=第@1页,共@2页。 +The book you were writing to mysteriously disappeared.=你正在写的书不知为何消失了。 +"@1" by @2="@1" by @2 +Blueberries=蓝莓 +Book=书 +Book with Text=带文字的书 +Bronze Ingot=青铜锭 +Clay Brick=粘土砖 +Clay Lump=粘土块 +Coal Lump=煤块 +Copper Ingot=铜锭 +Copper Lump=铜块 +Diamond=钻石 +Flint=燧石 +Gold Ingot=金锭 +Gold Lump=金块 +Iron Lump=铁块 +Mese Crystal=黄石晶体 +Mese Crystal Fragment=黄石晶体碎片 +Obsidian Shard=黑曜石碎片 +Paper=纸 +Steel Ingot=铁锭 +Stick=棒 +Tin Ingot=锡锭 +Tin Lump=锡块 +Furnace is empty=熔炉是空的 +100% (output full)=100%(输出已满) +@1%=@1% +Not cookable=不可烹饪 +Empty=空 +Furnace active=熔炉正在运转 +Furnace inactive=熔炉未使用 +(Item: @1; Fuel: @2)=(项目:@1;燃料:@2) +Furnace=熔炉 +Stone=石 +Cobblestone=鹅卵石 +Stone Brick=石砖 +Stone Block=石方块 +Mossy Cobblestone=苔藓覆盖的鹅卵石 +Desert Stone=沙漠石 +Desert Cobblestone=沙漠鹅卵石 +Desert Stone Brick=沙漠鹅卵石砖 +Desert Stone Block=沙漠鹅卵石方块 +Sandstone=砂岩 +Sandstone Brick=砂岩砖 +Sandstone Block=砂岩方块 +Desert Sandstone=沙漠砂岩 +Desert Sandstone Brick=沙漠砂岩砖 +Desert Sandstone Block=沙漠砂岩方块 +Silver Sandstone=银砂岩 +Silver Sandstone Brick=银砂岩砖 +Silver Sandstone Block=银砂岩方块 +Obsidian=黑曜石 +Obsidian Brick=黑曜石砖 +Obsidian Block=黑曜石方块 +Dirt=土方块 +Dirt with Grass=草方块 +Dirt with Grass and Footsteps=带有脚印的草方块 +Dirt with Savanna Grass=草原草方块 +Dirt with Snow=雪土方块 +Dirt with Rainforest Litter=雨林凋落物土 +Dirt with Coniferous Litter=针叶林凋落物土 +Savanna Dirt=草原土 +Savanna Dirt with Savanna Grass=草原草方块 +Permafrost=多年冻土 +Permafrost with Stones=带石头的多年冻土 +Permafrost with Moss=生苔的多年冻土 +Sand=沙 +Desert Sand=沙漠沙 +Silver Sand=银沙 +Gravel=沙砾 +Clay=粘土 +Snow=雪 +Snow Block=雪方块 +Ice=冰 +Cave Ice=洞穴冰 +Apple Tree=苹果树 +Apple Wood Planks=苹果树木板 +Apple Tree Sapling=苹果树苗 +Apple Tree Leaves=苹果树叶 +Apple=苹果 +Apple Marker=苹果标记 +Jungle Tree=丛林树 +Jungle Wood Planks=丛林树木板 +Jungle Tree Leaves=丛林树叶 +Jungle Tree Sapling=丛林树苗 +Emergent Jungle Tree Sapling=露生层丛林树苗 +Pine Tree=松树 +Pine Wood Planks=松树木板 +Pine Needles=松针 +Pine Tree Sapling=松树树苗 +Acacia Tree=相思树 +Acacia Wood Planks=相思树木板 +Acacia Tree Leaves=相思树叶 +Acacia Tree Sapling=相思树树苗 +Aspen Tree=白杨树 +Aspen Wood Planks=白杨树木板 +Aspen Tree Leaves=白杨树叶 +Aspen Tree Sapling=白杨树树苗 +Coal Ore=煤炭矿石 +Coal Block=煤炭方块 +Iron Ore=铁矿石 +Steel Block=钢方块 +Copper Ore=铜矿石 +Copper Block=铜方块 +Tin Ore=锡矿石 +Tin Block=锡方块 +Bronze Block=青铜方块 +Mese Ore=黄石矿石 +Mese Block=黄石方块 +Gold Ore=金矿石 +Gold Block=金方块 +Diamond Ore=钻石矿石 +Diamond Block=钻石方块 +Cactus=仙人掌 +Large Cactus Seedling=大仙人掌苗 +Papyrus=莎草纸 +Dry Shrub=干灌木 +Jungle Grass=丛林草 +Grass=草 +Savanna Grass=草原草 +Fern=蕨 +Marram Grass=滨草 +Bush Stem=灌木 +Bush Leaves=灌木叶 +Bush Sapling=灌木苗 +Blueberry Bush Leaves with Berries=长蓝莓的蓝莓灌木叶 +Blueberry Bush Leaves=蓝莓灌木叶 +Blueberry Bush Sapling=蓝莓灌木苗 +Acacia Bush Stem=相思灌木 +Acacia Bush Leaves=相思灌木叶 +Acacia Bush Sapling=相思灌木苗 +Pine Bush Stem=松树灌木 +Pine Bush Needles=松树灌木针 +Pine Bush Sapling=松树灌木苗 +Kelp=海带 +Green Coral=绿珊瑚 +Pink Coral=淡红珊瑚 +Cyan Coral=青珊瑚 +Brown Coral=棕珊瑚 +Orange Coral=橙珊瑚 +Coral Skeleton=珊瑚骨架 +Water Source=水方块 +Flowing Water=流动的水 +River Water Source=河水方块 +Flowing River Water=流动的河水 +Lava Source=岩浆方块 +Flowing Lava=流动的岩浆 +Empty Bookshelf=空书架 +Bookshelf (@1 written, @2 empty books)=书架(@1本有字的书,@2本空书) +Bookshelf=书架 +Text too long=文字太长 +"@1"="@1" +Wooden Sign=木牌 +Steel Sign=铁牌 +Wooden Ladder=木梯子 +Steel Ladder=铁梯子 +Apple Wood Fence=苹果木栅栏 +Acacia Wood Fence=相思木栅栏 +Jungle Wood Fence=丛林木栅栏 +Pine Wood Fence=松木栅栏 +Aspen Wood Fence=白杨木栅栏 +Apple Wood Fence Rail=苹果木栏杆 +Acacia Wood Fence Rail=相思木栏杆 +Jungle Wood Fence Rail=丛林木栏杆 +Pine Wood Fence Rail=松木栏杆 +Aspen Wood Fence Rail=白杨木栏杆 +Glass=玻璃 +Obsidian Glass=黑曜石玻璃 +Brick Block=砖方块 +Mese Lamp=黄石灯 +Apple Wood Mese Post Light=苹果木黄石灯柱 +Acacia Wood Mese Post Light=金合欢木黄石灯柱 +Jungle Wood Mese Post Light=丛林木黄石灯柱 +Pine Wood Mese Post Light=松木黄石灯柱 +Aspen Wood Mese Post Light=白杨木黄石灯柱 +Cloud=云 +Wooden Pickaxe=木镐 +Stone Pickaxe=石镐 +Bronze Pickaxe=青铜镐 +Steel Pickaxe=铁镐 +Mese Pickaxe=黄石镐 +Diamond Pickaxe=钻石镐 +Wooden Shovel=木铲 +Stone Shovel=石铲 +Bronze Shovel=青铜铲 +Steel Shovel=铁铲 +Mese Shovel=黄石铲 +Diamond Shovel=钻石铲 +Wooden Axe=木斧 +Stone Axe=石斧 +Bronze Axe=青铜斧 +Steel Axe=铁斧 +Mese Axe=黄石斧 +Diamond Axe=钻石斧 +Wooden Sword=木剑 +Stone Sword=石剑 +Bronze Sword=青铜剑 +Steel Sword=铁剑 +Mese Sword=黄石剑 +Diamond Sword=钻石剑 +Torch=火把 +@1 will intersect protection on growth.=@1生长时将与保护区域相交。 + + +##### not used anymore ##### + +Dirt with Dry Grass=干草土方块 +Dry Grass=干草 diff --git a/mods/default/locale/default.zh_TW.tr b/mods/default/locale/default.zh_TW.tr new file mode 100644 index 0000000..bd638b4 --- /dev/null +++ b/mods/default/locale/default.zh_TW.tr @@ -0,0 +1,221 @@ +# textdomain: default +Locked Chest=已上鎖的箱子 +Locked Chest (owned by @1)=已上鎖的箱子(屬於@1所有) +You do not own this chest.=這個箱子不屬於你所有。 +a locked chest=一個已上鎖的箱子 +Chest=箱子 +Write=寫 +Read=讀 +Title:=標題: +Contents:=內容: +Save=保存 +by @1=由@1 +Page @1 of @2=第@1頁,共@2頁。 +The book you were writing to mysteriously disappeared.=你正在寫的書神秘消失了。 +"@1" by @2="@1" by @2 +Blueberries=藍莓 +Book=書 +Book with Text=帶文字的書 +Bronze Ingot=青銅錠 +Clay Brick=粘土磚 +Clay Lump=粘土塊 +Coal Lump=煤塊 +Copper Ingot=銅錠 +Copper Lump=銅塊 +Diamond=鑽石 +Flint=燧石 +Gold Ingot=金錠 +Gold Lump=金塊 +Iron Lump=鐵塊 +Mese Crystal=黃石晶體 +Mese Crystal Fragment=黃石晶體碎片 +Obsidian Shard=黑曜石碎片 +Paper=紙 +Steel Ingot=鐵錠 +Stick=棒 +Tin Ingot=錫錠 +Tin Lump=錫塊 +Furnace is empty=熔爐是空的 +100% (output full)=100%(輸出已滿) +@1%=@1% +Not cookable=不可烹飪 +Empty=空 +Furnace active=熔爐正在運轉 +Furnace inactive=熔爐未使用 +(Item: @1; Fuel: @2)=(項目:@1;燃料:@2) +Furnace=熔爐 +Stone=石 +Cobblestone=鵝卵石 +Stone Brick=石磚 +Stone Block=石方塊 +Mossy Cobblestone=苔蘚覆蓋的鵝卵石 +Desert Stone=沙漠石 +Desert Cobblestone=沙漠鵝卵石 +Desert Stone Brick=沙漠鵝卵石磚 +Desert Stone Block=沙漠鵝卵石方塊 +Sandstone=砂岩 +Sandstone Brick=砂岩磚 +Sandstone Block=砂岩方塊 +Desert Sandstone=沙漠砂岩 +Desert Sandstone Brick=沙漠砂岩磚 +Desert Sandstone Block=沙漠砂岩方塊 +Silver Sandstone=銀砂岩 +Silver Sandstone Brick=銀砂岩磚 +Silver Sandstone Block=銀砂岩方塊 +Obsidian=黑曜石 +Obsidian Brick=黑曜石磚 +Obsidian Block=黑曜石方塊 +Dirt=土方塊 +Dirt with Grass=草方塊 +Dirt with Grass and Footsteps=草方塊及腳印 +Dirt with Savanna Grass=草原草方塊 +Dirt with Snow=雪土方塊 +Dirt with Rainforest Litter=雨林腐土 +Dirt with Coniferous Litter=針葉林腐土 +Savanna Dirt=草原土 +Savanna Dirt with Savanna Grass=草原草方塊(草原土) +Permafrost=多年凍土 +Permafrost with Stones=帶石頭的多年凍土 +Permafrost with Moss=生苔的多年凍土 +Sand=沙 +Desert Sand=沙漠沙 +Silver Sand=銀沙 +Gravel=沙礫 +Clay=粘土 +Snow=雪 +Snow Block=雪方塊 +Ice=冰 +Cave Ice=洞穴冰 +Apple Tree=蘋果樹 +Apple Wood Planks=蘋果樹木板 +Apple Tree Sapling=蘋果樹苗 +Apple Tree Leaves=蘋果樹葉 +Apple=蘋果 +Apple Marker=蘋果標記 +Jungle Tree=叢林樹 +Jungle Wood Planks=叢林樹木板 +Jungle Tree Leaves=叢林樹葉 +Jungle Tree Sapling=叢林樹苗 +Emergent Jungle Tree Sapling=應急叢林樹苗 +Pine Tree=松樹 +Pine Wood Planks=松樹木板 +Pine Needles=松針 +Pine Tree Sapling=松樹樹苗 +Acacia Tree=相思樹 +Acacia Wood Planks=相思樹木板 +Acacia Tree Leaves=相思樹葉 +Acacia Tree Sapling=相思樹樹苗 +Aspen Tree=白楊樹 +Aspen Wood Planks=白楊樹木板 +Aspen Tree Leaves=白楊樹葉 +Aspen Tree Sapling=白楊樹樹苗 +Coal Ore=煤炭礦石 +Coal Block=煤炭方塊 +Iron Ore=鐵礦石 +Steel Block=鋼方塊 +Copper Ore=銅礦石 +Copper Block=銅方塊 +Tin Ore=錫礦石 +Tin Block=錫方塊 +Bronze Block=青銅方塊 +Mese Ore=黃石礦石 +Mese Block=黃石方塊 +Gold Ore=金礦石 +Gold Block=金方塊 +Diamond Ore=鑽石礦石 +Diamond Block=鑽石方塊 +Cactus=仙人掌 +Large Cactus Seedling=大仙人掌苗 +Papyrus=莎草紙 +Dry Shrub=幹灌木 +Jungle Grass=叢林草 +Grass=草 +Savanna Grass= +Fern=蕨 +Marram Grass=濱草 +Bush Stem=灌木 +Bush Leaves=灌木葉 +Bush Sapling=灌木苗 +Blueberry Bush Leaves with Berries=藍莓灌木葉與漿果 +Blueberry Bush Leaves=藍莓灌木葉 +Blueberry Bush Sapling=藍莓灌木苗 +Acacia Bush Stem=相思灌木 +Acacia Bush Leaves=相思灌木葉 +Acacia Bush Sapling=相思灌木苗 +Pine Bush Stem=松樹灌木 +Pine Bush Needles=松樹灌木針 +Pine Bush Sapling=松樹灌木苗 +Kelp=海帶 +Green Coral=綠珊瑚 +Pink Coral=淡紅珊瑚 +Cyan Coral=青珊瑚 +Brown Coral=棕珊瑚 +Orange Coral=橙珊瑚 +Coral Skeleton=珊瑚骨架 +Water Source=水方塊 +Flowing Water=流動的水 +River Water Source=河水方塊 +Flowing River Water=流動的河水 +Lava Source=岩漿方塊 +Flowing Lava=流動的岩漿 +Empty Bookshelf=空書架 +Bookshelf (@1 written, @2 empty books)=書架(@1本有字的書,@2本空書) +Bookshelf=書架 +Text too long=文字太長 +"@1"="@1" +Wooden Sign=木牌 +Steel Sign=鐵牌 +Wooden Ladder=木梯子 +Steel Ladder=鐵梯子 +Apple Wood Fence=蘋果木柵欄 +Acacia Wood Fence=相思木柵欄 +Jungle Wood Fence=叢林木柵欄 +Pine Wood Fence=松木柵欄 +Aspen Wood Fence=白楊木柵欄 +Apple Wood Fence Rail=蘋果木欄杆 +Acacia Wood Fence Rail=相思木欄杆 +Jungle Wood Fence Rail=叢林木欄杆 +Pine Wood Fence Rail=松木欄杆 +Aspen Wood Fence Rail=白楊木欄杆 +Glass=玻璃 +Obsidian Glass=黑曜石玻璃 +Brick Block=磚方塊 +Mese Lamp=黃石燈 +Apple Wood Mese Post Light=蘋果木黃石燈柱 +Acacia Wood Mese Post Light=金合歡木黃石燈柱 +Jungle Wood Mese Post Light=叢林木黃石燈柱 +Pine Wood Mese Post Light=松木黃石燈柱 +Aspen Wood Mese Post Light=白楊木黃石燈柱 +Cloud=雲 +Wooden Pickaxe=木鎬 +Stone Pickaxe=石鎬 +Bronze Pickaxe=青銅鎬 +Steel Pickaxe=鐵鎬 +Mese Pickaxe=黃石鎬 +Diamond Pickaxe=鑽石鎬 +Wooden Shovel=木鏟 +Stone Shovel=石鏟 +Bronze Shovel=青銅鏟 +Steel Shovel=鐵鏟 +Mese Shovel=黃石鏟 +Diamond Shovel=鑽石鏟 +Wooden Axe=木斧 +Stone Axe=石斧 +Bronze Axe=青銅斧 +Steel Axe=鐵斧 +Mese Axe=黃石斧 +Diamond Axe=鑽石斧 +Wooden Sword=木劍 +Stone Sword=石劍 +Bronze Sword=青銅劍 +Steel Sword=鐵劍 +Mese Sword=黃石劍 +Diamond Sword=鑽石劍 +Torch=火把 +@1 will intersect protection on growth.=@1將與增長的保護相交。 + + +##### not used anymore ##### + +Dirt with Dry Grass=乾草土方塊 +Dry Grass=乾草 diff --git a/mods/default/locale/template.txt b/mods/default/locale/template.txt new file mode 100644 index 0000000..815c29c --- /dev/null +++ b/mods/default/locale/template.txt @@ -0,0 +1,215 @@ +# textdomain: default +Locked Chest= +Locked Chest (owned by @1)= +You do not own this chest.= +a locked chest= +Chest= +Write= +Read= +Title:= +Contents:= +Save= +by @1= +Page @1 of @2= +The book you were writing to mysteriously disappeared.= +"@1" by @2= +Blueberries= +Book= +Book with Text= +Bronze Ingot= +Clay Brick= +Clay Lump= +Coal Lump= +Copper Ingot= +Copper Lump= +Diamond= +Flint= +Gold Ingot= +Gold Lump= +Iron Lump= +Mese Crystal= +Mese Crystal Fragment= +Obsidian Shard= +Paper= +Steel Ingot= +Stick= +Tin Ingot= +Tin Lump= +Furnace is empty= +100% (output full)= +@1%= +Not cookable= +Empty= +Furnace active= +Furnace inactive= +(Item: @1; Fuel: @2)= +Furnace= +Stone= +Cobblestone= +Stone Brick= +Stone Block= +Mossy Cobblestone= +Desert Stone= +Desert Cobblestone= +Desert Stone Brick= +Desert Stone Block= +Sandstone= +Sandstone Brick= +Sandstone Block= +Desert Sandstone= +Desert Sandstone Brick= +Desert Sandstone Block= +Silver Sandstone= +Silver Sandstone Brick= +Silver Sandstone Block= +Obsidian= +Obsidian Brick= +Obsidian Block= +Dirt= +Dirt with Grass= +Dirt with Grass and Footsteps= +Dirt with Savanna Grass= +Dirt with Snow= +Dirt with Rainforest Litter= +Dirt with Coniferous Litter= +Savanna Dirt= +Savanna Dirt with Savanna Grass= +Permafrost= +Permafrost with Stones= +Permafrost with Moss= +Sand= +Desert Sand= +Silver Sand= +Gravel= +Clay= +Snow= +Snow Block= +Ice= +Cave Ice= +Apple Tree= +Apple Wood Planks= +Apple Tree Sapling= +Apple Tree Leaves= +Apple= +Apple Marker= +Jungle Tree= +Jungle Wood Planks= +Jungle Tree Leaves= +Jungle Tree Sapling= +Emergent Jungle Tree Sapling= +Pine Tree= +Pine Wood Planks= +Pine Needles= +Pine Tree Sapling= +Acacia Tree= +Acacia Wood Planks= +Acacia Tree Leaves= +Acacia Tree Sapling= +Aspen Tree= +Aspen Wood Planks= +Aspen Tree Leaves= +Aspen Tree Sapling= +Coal Ore= +Coal Block= +Iron Ore= +Steel Block= +Copper Ore= +Copper Block= +Tin Ore= +Tin Block= +Bronze Block= +Mese Ore= +Mese Block= +Gold Ore= +Gold Block= +Diamond Ore= +Diamond Block= +Cactus= +Large Cactus Seedling= +Papyrus= +Dry Shrub= +Jungle Grass= +Grass= +Savanna Grass= +Fern= +Marram Grass= +Bush Stem= +Bush Leaves= +Bush Sapling= +Blueberry Bush Leaves with Berries= +Blueberry Bush Leaves= +Blueberry Bush Sapling= +Acacia Bush Stem= +Acacia Bush Leaves= +Acacia Bush Sapling= +Pine Bush Stem= +Pine Bush Needles= +Pine Bush Sapling= +Kelp= +Green Coral= +Pink Coral= +Cyan Coral= +Brown Coral= +Orange Coral= +Coral Skeleton= +Water Source= +Flowing Water= +River Water Source= +Flowing River Water= +Lava Source= +Flowing Lava= +Empty Bookshelf= +Bookshelf (@1 written, @2 empty books)= +Bookshelf= +Text too long= +"@1"= +Wooden Sign= +Steel Sign= +Wooden Ladder= +Steel Ladder= +Apple Wood Fence= +Acacia Wood Fence= +Jungle Wood Fence= +Pine Wood Fence= +Aspen Wood Fence= +Apple Wood Fence Rail= +Acacia Wood Fence Rail= +Jungle Wood Fence Rail= +Pine Wood Fence Rail= +Aspen Wood Fence Rail= +Glass= +Obsidian Glass= +Brick Block= +Mese Lamp= +Apple Wood Mese Post Light= +Acacia Wood Mese Post Light= +Jungle Wood Mese Post Light= +Pine Wood Mese Post Light= +Aspen Wood Mese Post Light= +Cloud= +Wooden Pickaxe= +Stone Pickaxe= +Bronze Pickaxe= +Steel Pickaxe= +Mese Pickaxe= +Diamond Pickaxe= +Wooden Shovel= +Stone Shovel= +Bronze Shovel= +Steel Shovel= +Mese Shovel= +Diamond Shovel= +Wooden Axe= +Stone Axe= +Bronze Axe= +Steel Axe= +Mese Axe= +Diamond Axe= +Wooden Sword= +Stone Sword= +Bronze Sword= +Steel Sword= +Mese Sword= +Diamond Sword= +Torch= +@1 will intersect protection on growth.= diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua new file mode 100644 index 0000000..24978ff --- /dev/null +++ b/mods/default/mapgen.lua @@ -0,0 +1,2495 @@ +-- +-- Aliases for map generators +-- + +-- All mapgens + +minetest.register_alias("mapgen_stone", "default:stone") +minetest.register_alias("mapgen_water_source", "default:water_source") +minetest.register_alias("mapgen_river_water_source", "default:river_water_source") + +-- Additional aliases needed for mapgen v6 + +minetest.register_alias("mapgen_lava_source", "default:lava_source") +minetest.register_alias("mapgen_dirt", "default:dirt") +minetest.register_alias("mapgen_dirt_with_grass", "default:dirt_with_grass") +minetest.register_alias("mapgen_sand", "default:sand") +minetest.register_alias("mapgen_gravel", "default:gravel") +minetest.register_alias("mapgen_desert_stone", "default:desert_stone") +minetest.register_alias("mapgen_desert_sand", "default:desert_sand") +minetest.register_alias("mapgen_dirt_with_snow", "default:dirt_with_snow") +minetest.register_alias("mapgen_snowblock", "default:snowblock") +minetest.register_alias("mapgen_snow", "default:snow") +minetest.register_alias("mapgen_ice", "default:ice") + +minetest.register_alias("mapgen_tree", "default:tree") +minetest.register_alias("mapgen_leaves", "default:leaves") +minetest.register_alias("mapgen_apple", "default:apple") +minetest.register_alias("mapgen_jungletree", "default:jungletree") +minetest.register_alias("mapgen_jungleleaves", "default:jungleleaves") +minetest.register_alias("mapgen_junglegrass", "default:junglegrass") +minetest.register_alias("mapgen_pine_tree", "default:pine_tree") +minetest.register_alias("mapgen_pine_needles", "default:pine_needles") + +minetest.register_alias("mapgen_cobble", "default:cobble") +minetest.register_alias("mapgen_stair_cobble", "stairs:stair_cobble") +minetest.register_alias("mapgen_mossycobble", "default:mossycobble") +minetest.register_alias("mapgen_stair_desert_stone", "stairs:stair_desert_stone") + + +-- +-- Register ores +-- + +-- Mgv6 + +function default.register_mgv6_ores() + + -- Blob ore + -- These first to avoid other ores in blobs + + -- Clay + -- This first to avoid clay in sand blobs + + minetest.register_ore({ + ore_type = "blob", + ore = "default:clay", + wherein = {"default:sand"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_max = 0, + y_min = -15, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = -316, + octaves = 1, + persist = 0.0 + }, + }) + + -- Sand + + minetest.register_ore({ + ore_type = "blob", + ore = "default:sand", + wherein = {"default:stone", "default:desert_stone"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_max = 0, + y_min = -31, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = 2316, + octaves = 1, + persist = 0.0 + }, + }) + + -- Dirt + + minetest.register_ore({ + ore_type = "blob", + ore = "default:dirt", + wherein = {"default:stone"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_max = 31000, + y_min = -31, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = 17676, + octaves = 1, + persist = 0.0 + }, + }) + + -- Gravel + + minetest.register_ore({ + ore_type = "blob", + ore = "default:gravel", + wherein = {"default:stone"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_max = 31000, + y_min = -31000, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = 766, + octaves = 1, + persist = 0.0 + }, + }) + + -- Scatter ores + + -- Coal + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_coal", + wherein = "default:stone", + clust_scarcity = 8 * 8 * 8, + clust_num_ores = 9, + clust_size = 3, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_coal", + wherein = "default:stone", + clust_scarcity = 8 * 8 * 8, + clust_num_ores = 8, + clust_size = 3, + y_max = 64, + y_min = -31000, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_coal", + wherein = "default:stone", + clust_scarcity = 24 * 24 * 24, + clust_num_ores = 27, + clust_size = 6, + y_max = 0, + y_min = -31000, + }) + + -- Iron + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_iron", + wherein = "default:stone", + clust_scarcity = 9 * 9 * 9, + clust_num_ores = 12, + clust_size = 3, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_iron", + wherein = "default:stone", + clust_scarcity = 7 * 7 * 7, + clust_num_ores = 5, + clust_size = 3, + y_max = 0, + y_min = -31000, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_iron", + wherein = "default:stone", + clust_scarcity = 24 * 24 * 24, + clust_num_ores = 27, + clust_size = 6, + y_max = -64, + y_min = -31000, + }) + + -- Copper + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_copper", + wherein = "default:stone", + clust_scarcity = 9 * 9 * 9, + clust_num_ores = 5, + clust_size = 3, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_copper", + wherein = "default:stone", + clust_scarcity = 12 * 12 * 12, + clust_num_ores = 4, + clust_size = 3, + y_max = -16, + y_min = -63, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_copper", + wherein = "default:stone", + clust_scarcity = 9 * 9 * 9, + clust_num_ores = 5, + clust_size = 3, + y_max = -64, + y_min = -31000, + }) + + -- Tin + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_tin", + wherein = "default:stone", + clust_scarcity = 10 * 10 * 10, + clust_num_ores = 5, + clust_size = 3, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_tin", + wherein = "default:stone", + clust_scarcity = 13 * 13 * 13, + clust_num_ores = 4, + clust_size = 3, + y_max = -32, + y_min = -127, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_tin", + wherein = "default:stone", + clust_scarcity = 10 * 10 * 10, + clust_num_ores = 5, + clust_size = 3, + y_max = -128, + y_min = -31000, + }) + + -- Gold + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_gold", + wherein = "default:stone", + clust_scarcity = 13 * 13 * 13, + clust_num_ores = 5, + clust_size = 3, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_gold", + wherein = "default:stone", + clust_scarcity = 15 * 15 * 15, + clust_num_ores = 3, + clust_size = 2, + y_max = -64, + y_min = -255, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_gold", + wherein = "default:stone", + clust_scarcity = 13 * 13 * 13, + clust_num_ores = 5, + clust_size = 3, + y_max = -256, + y_min = -31000, + }) + + -- Mese crystal + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_mese", + wherein = "default:stone", + clust_scarcity = 14 * 14 * 14, + clust_num_ores = 5, + clust_size = 3, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_mese", + wherein = "default:stone", + clust_scarcity = 18 * 18 * 18, + clust_num_ores = 3, + clust_size = 2, + y_max = -64, + y_min = -255, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_mese", + wherein = "default:stone", + clust_scarcity = 14 * 14 * 14, + clust_num_ores = 5, + clust_size = 3, + y_max = -256, + y_min = -31000, + }) + + -- Diamond + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_diamond", + wherein = "default:stone", + clust_scarcity = 15 * 15 * 15, + clust_num_ores = 4, + clust_size = 3, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_diamond", + wherein = "default:stone", + clust_scarcity = 17 * 17 * 17, + clust_num_ores = 4, + clust_size = 3, + y_max = -128, + y_min = -255, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_diamond", + wherein = "default:stone", + clust_scarcity = 15 * 15 * 15, + clust_num_ores = 4, + clust_size = 3, + y_max = -256, + y_min = -31000, + }) + + -- Mese block + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:mese", + wherein = "default:stone", + clust_scarcity = 36 * 36 * 36, + clust_num_ores = 3, + clust_size = 2, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:mese", + wherein = "default:stone", + clust_scarcity = 36 * 36 * 36, + clust_num_ores = 3, + clust_size = 2, + y_max = -1024, + y_min = -31000, + }) +end + + +-- All mapgens except mgv6 + +function default.register_ores() + + -- Stratum ores. + -- These obviously first. + + -- Silver sandstone + + minetest.register_ore({ + ore_type = "stratum", + ore = "default:silver_sandstone", + wherein = {"default:stone"}, + clust_scarcity = 1, + y_max = 46, + y_min = 10, + noise_params = { + offset = 28, + scale = 16, + spread = {x = 128, y = 128, z = 128}, + seed = 90122, + octaves = 1, + }, + stratum_thickness = 4, + biomes = {"cold_desert"}, + }) + + minetest.register_ore({ + ore_type = "stratum", + ore = "default:silver_sandstone", + wherein = {"default:stone"}, + clust_scarcity = 1, + y_max = 42, + y_min = 6, + noise_params = { + offset = 24, + scale = 16, + spread = {x = 128, y = 128, z = 128}, + seed = 90122, + octaves = 1, + }, + stratum_thickness = 2, + biomes = {"cold_desert"}, + }) + + -- Desert sandstone + + minetest.register_ore({ + ore_type = "stratum", + ore = "default:desert_sandstone", + wherein = {"default:desert_stone"}, + clust_scarcity = 1, + y_max = 46, + y_min = 10, + noise_params = { + offset = 28, + scale = 16, + spread = {x = 128, y = 128, z = 128}, + seed = 90122, + octaves = 1, + }, + stratum_thickness = 4, + biomes = {"desert"}, + }) + + minetest.register_ore({ + ore_type = "stratum", + ore = "default:desert_sandstone", + wherein = {"default:desert_stone"}, + clust_scarcity = 1, + y_max = 42, + y_min = 6, + noise_params = { + offset = 24, + scale = 16, + spread = {x = 128, y = 128, z = 128}, + seed = 90122, + octaves = 1, + }, + stratum_thickness = 2, + biomes = {"desert"}, + }) + + -- Sandstone + + minetest.register_ore({ + ore_type = "stratum", + ore = "default:sandstone", + wherein = {"default:desert_stone"}, + clust_scarcity = 1, + y_max = 39, + y_min = 3, + noise_params = { + offset = 21, + scale = 16, + spread = {x = 128, y = 128, z = 128}, + seed = 90122, + octaves = 1, + }, + stratum_thickness = 2, + biomes = {"desert"}, + }) + + -- Blob ore. + -- These before scatter ores to avoid other ores in blobs. + + -- Clay + + minetest.register_ore({ + ore_type = "blob", + ore = "default:clay", + wherein = {"default:sand"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_max = 0, + y_min = -15, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = -316, + octaves = 1, + persist = 0.0 + }, + }) + + -- Silver sand + + minetest.register_ore({ + ore_type = "blob", + ore = "default:silver_sand", + wherein = {"default:stone"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_max = 31000, + y_min = -31000, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = 2316, + octaves = 1, + persist = 0.0 + }, + }) + + -- Dirt + + minetest.register_ore({ + ore_type = "blob", + ore = "default:dirt", + wherein = {"default:stone"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_max = 31000, + y_min = -31, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = 17676, + octaves = 1, + persist = 0.0 + }, + -- Only where default:dirt is present as surface material + biomes = {"taiga", "snowy_grassland", "grassland", "coniferous_forest", + "deciduous_forest", "deciduous_forest_shore", "rainforest", + "rainforest_swamp"} + }) + + -- Gravel + + minetest.register_ore({ + ore_type = "blob", + ore = "default:gravel", + wherein = {"default:stone"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_max = 31000, + y_min = -31000, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = 766, + octaves = 1, + persist = 0.0 + }, + }) + + -- Scatter ores + + -- Coal + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_coal", + wherein = "default:stone", + clust_scarcity = 8 * 8 * 8, + clust_num_ores = 9, + clust_size = 3, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_coal", + wherein = "default:stone", + clust_scarcity = 8 * 8 * 8, + clust_num_ores = 8, + clust_size = 3, + y_max = 64, + y_min = -127, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_coal", + wherein = "default:stone", + clust_scarcity = 12 * 12 * 12, + clust_num_ores = 30, + clust_size = 5, + y_max = -128, + y_min = -31000, + }) + + -- Tin + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_tin", + wherein = "default:stone", + clust_scarcity = 10 * 10 * 10, + clust_num_ores = 5, + clust_size = 3, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_tin", + wherein = "default:stone", + clust_scarcity = 13 * 13 * 13, + clust_num_ores = 4, + clust_size = 3, + y_max = -64, + y_min = -127, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_tin", + wherein = "default:stone", + clust_scarcity = 10 * 10 * 10, + clust_num_ores = 5, + clust_size = 3, + y_max = -128, + y_min = -31000, + }) + + -- Copper + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_copper", + wherein = "default:stone", + clust_scarcity = 9 * 9 * 9, + clust_num_ores = 5, + clust_size = 3, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_copper", + wherein = "default:stone", + clust_scarcity = 12 * 12 * 12, + clust_num_ores = 4, + clust_size = 3, + y_max = -64, + y_min = -127, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_copper", + wherein = "default:stone", + clust_scarcity = 9 * 9 * 9, + clust_num_ores = 5, + clust_size = 3, + y_max = -128, + y_min = -31000, + }) + + -- Iron + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_iron", + wherein = "default:stone", + clust_scarcity = 9 * 9 * 9, + clust_num_ores = 12, + clust_size = 3, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_iron", + wherein = "default:stone", + clust_scarcity = 7 * 7 * 7, + clust_num_ores = 5, + clust_size = 3, + y_max = -128, + y_min = -255, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_iron", + wherein = "default:stone", + clust_scarcity = 12 * 12 * 12, + clust_num_ores = 29, + clust_size = 5, + y_max = -256, + y_min = -31000, + }) + + -- Gold + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_gold", + wherein = "default:stone", + clust_scarcity = 13 * 13 * 13, + clust_num_ores = 5, + clust_size = 3, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_gold", + wherein = "default:stone", + clust_scarcity = 15 * 15 * 15, + clust_num_ores = 3, + clust_size = 2, + y_max = -256, + y_min = -511, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_gold", + wherein = "default:stone", + clust_scarcity = 13 * 13 * 13, + clust_num_ores = 5, + clust_size = 3, + y_max = -512, + y_min = -31000, + }) + + -- Mese crystal + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_mese", + wherein = "default:stone", + clust_scarcity = 14 * 14 * 14, + clust_num_ores = 5, + clust_size = 3, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_mese", + wherein = "default:stone", + clust_scarcity = 18 * 18 * 18, + clust_num_ores = 3, + clust_size = 2, + y_max = -512, + y_min = -1023, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_mese", + wherein = "default:stone", + clust_scarcity = 14 * 14 * 14, + clust_num_ores = 5, + clust_size = 3, + y_max = -1024, + y_min = -31000, + }) + + -- Diamond + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_diamond", + wherein = "default:stone", + clust_scarcity = 15 * 15 * 15, + clust_num_ores = 4, + clust_size = 3, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_diamond", + wherein = "default:stone", + clust_scarcity = 17 * 17 * 17, + clust_num_ores = 4, + clust_size = 3, + y_max = -1024, + y_min = -2047, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_diamond", + wherein = "default:stone", + clust_scarcity = 15 * 15 * 15, + clust_num_ores = 4, + clust_size = 3, + y_max = -2048, + y_min = -31000, + }) + + -- Mese block + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:mese", + wherein = "default:stone", + clust_scarcity = 36 * 36 * 36, + clust_num_ores = 3, + clust_size = 2, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:mese", + wherein = "default:stone", + clust_scarcity = 36 * 36 * 36, + clust_num_ores = 3, + clust_size = 2, + y_max = -2048, + y_min = -4095, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:mese", + wherein = "default:stone", + clust_scarcity = 28 * 28 * 28, + clust_num_ores = 5, + clust_size = 3, + y_max = -4096, + y_min = -31000, + }) +end + + +-- +-- Register biomes +-- + +-- All mapgens except mgv6 + +function default.register_biomes() + + -- Icesheet + + minetest.register_biome({ + name = "icesheet", + node_dust = "default:snowblock", + node_top = "default:snowblock", + depth_top = 1, + node_filler = "default:snowblock", + depth_filler = 3, + node_stone = "default:cave_ice", + node_water_top = "default:ice", + depth_water_top = 10, + node_river_water = "default:ice", + node_riverbed = "default:gravel", + depth_riverbed = 2, + node_dungeon = "default:ice", + node_dungeon_stair = "stairs:stair_ice", + y_max = 31000, + y_min = -8, + heat_point = 0, + humidity_point = 73, + }) + + minetest.register_biome({ + name = "icesheet_ocean", + node_dust = "default:snowblock", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_water_top = "default:ice", + depth_water_top = 10, + node_cave_liquid = "default:water_source", + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -9, + y_min = -255, + heat_point = 0, + humidity_point = 73, + }) + + minetest.register_biome({ + name = "icesheet_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 0, + humidity_point = 73, + }) + + -- Tundra + + minetest.register_biome({ + name = "tundra_highland", + node_dust = "default:snow", + node_riverbed = "default:gravel", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 31000, + y_min = 47, + heat_point = 0, + humidity_point = 40, + }) + + minetest.register_biome({ + name = "tundra", + node_top = "default:permafrost_with_stones", + depth_top = 1, + node_filler = "default:permafrost", + depth_filler = 1, + node_riverbed = "default:gravel", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + vertical_blend = 4, + y_max = 46, + y_min = 2, + heat_point = 0, + humidity_point = 40, + }) + + minetest.register_biome({ + name = "tundra_beach", + node_top = "default:gravel", + depth_top = 1, + node_filler = "default:gravel", + depth_filler = 2, + node_riverbed = "default:gravel", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + vertical_blend = 1, + y_max = 1, + y_min = -3, + heat_point = 0, + humidity_point = 40, + }) + + minetest.register_biome({ + name = "tundra_ocean", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_riverbed = "default:gravel", + depth_riverbed = 2, + node_cave_liquid = "default:water_source", + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + vertical_blend = 1, + y_max = -4, + y_min = -255, + heat_point = 0, + humidity_point = 40, + }) + + minetest.register_biome({ + name = "tundra_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 0, + humidity_point = 40, + }) + + -- Taiga + + minetest.register_biome({ + name = "taiga", + node_dust = "default:snow", + node_top = "default:dirt_with_snow", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 31000, + y_min = 4, + heat_point = 25, + humidity_point = 70, + }) + + minetest.register_biome({ + name = "taiga_ocean", + node_dust = "default:snow", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_cave_liquid = "default:water_source", + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + vertical_blend = 1, + y_max = 3, + y_min = -255, + heat_point = 25, + humidity_point = 70, + }) + + minetest.register_biome({ + name = "taiga_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 25, + humidity_point = 70, + }) + + -- Snowy grassland + + minetest.register_biome({ + name = "snowy_grassland", + node_dust = "default:snow", + node_top = "default:dirt_with_snow", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 1, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 31000, + y_min = 4, + heat_point = 20, + humidity_point = 35, + }) + + minetest.register_biome({ + name = "snowy_grassland_ocean", + node_dust = "default:snow", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_cave_liquid = "default:water_source", + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + vertical_blend = 1, + y_max = 3, + y_min = -255, + heat_point = 20, + humidity_point = 35, + }) + + minetest.register_biome({ + name = "snowy_grassland_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 20, + humidity_point = 35, + }) + + -- Grassland + + minetest.register_biome({ + name = "grassland", + node_top = "default:dirt_with_grass", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 1, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 31000, + y_min = 6, + heat_point = 50, + humidity_point = 35, + }) + + minetest.register_biome({ + name = "grassland_dunes", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 2, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + vertical_blend = 1, + y_max = 5, + y_min = 4, + heat_point = 50, + humidity_point = 35, + }) + + minetest.register_biome({ + name = "grassland_ocean", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_cave_liquid = "default:water_source", + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 3, + y_min = -255, + heat_point = 50, + humidity_point = 35, + }) + + minetest.register_biome({ + name = "grassland_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 50, + humidity_point = 35, + }) + + -- Coniferous forest + + minetest.register_biome({ + name = "coniferous_forest", + node_top = "default:dirt_with_coniferous_litter", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 31000, + y_min = 6, + heat_point = 45, + humidity_point = 70, + }) + + minetest.register_biome({ + name = "coniferous_forest_dunes", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + vertical_blend = 1, + y_max = 5, + y_min = 4, + heat_point = 45, + humidity_point = 70, + }) + + minetest.register_biome({ + name = "coniferous_forest_ocean", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_cave_liquid = "default:water_source", + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 3, + y_min = -255, + heat_point = 45, + humidity_point = 70, + }) + + minetest.register_biome({ + name = "coniferous_forest_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 45, + humidity_point = 70, + }) + + -- Deciduous forest + + minetest.register_biome({ + name = "deciduous_forest", + node_top = "default:dirt_with_grass", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 31000, + y_min = 1, + heat_point = 60, + humidity_point = 68, + }) + + minetest.register_biome({ + name = "deciduous_forest_shore", + node_top = "default:dirt", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 0, + y_min = -1, + heat_point = 60, + humidity_point = 68, + }) + + minetest.register_biome({ + name = "deciduous_forest_ocean", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_cave_liquid = "default:water_source", + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + vertical_blend = 1, + y_max = -2, + y_min = -255, + heat_point = 60, + humidity_point = 68, + }) + + minetest.register_biome({ + name = "deciduous_forest_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 60, + humidity_point = 68, + }) + + -- Desert + + minetest.register_biome({ + name = "desert", + node_top = "default:desert_sand", + depth_top = 1, + node_filler = "default:desert_sand", + depth_filler = 1, + node_stone = "default:desert_stone", + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:desert_stone", + node_dungeon_stair = "stairs:stair_desert_stone", + y_max = 31000, + y_min = 4, + heat_point = 92, + humidity_point = 16, + }) + + minetest.register_biome({ + name = "desert_ocean", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_stone = "default:desert_stone", + node_riverbed = "default:sand", + depth_riverbed = 2, + node_cave_liquid = "default:water_source", + node_dungeon = "default:desert_stone", + node_dungeon_stair = "stairs:stair_desert_stone", + vertical_blend = 1, + y_max = 3, + y_min = -255, + heat_point = 92, + humidity_point = 16, + }) + + minetest.register_biome({ + name = "desert_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 92, + humidity_point = 16, + }) + + -- Sandstone desert + + minetest.register_biome({ + name = "sandstone_desert", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 1, + node_stone = "default:sandstone", + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:sandstonebrick", + node_dungeon_stair = "stairs:stair_sandstone_block", + y_max = 31000, + y_min = 4, + heat_point = 60, + humidity_point = 0, + }) + + minetest.register_biome({ + name = "sandstone_desert_ocean", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_stone = "default:sandstone", + node_riverbed = "default:sand", + depth_riverbed = 2, + node_cave_liquid = "default:water_source", + node_dungeon = "default:sandstonebrick", + node_dungeon_stair = "stairs:stair_sandstone_block", + y_max = 3, + y_min = -255, + heat_point = 60, + humidity_point = 0, + }) + + minetest.register_biome({ + name = "sandstone_desert_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 60, + humidity_point = 0, + }) + + -- Cold desert + + minetest.register_biome({ + name = "cold_desert", + node_top = "default:silver_sand", + depth_top = 1, + node_filler = "default:silver_sand", + depth_filler = 1, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 31000, + y_min = 4, + heat_point = 40, + humidity_point = 0, + }) + + minetest.register_biome({ + name = "cold_desert_ocean", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_cave_liquid = "default:water_source", + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + vertical_blend = 1, + y_max = 3, + y_min = -255, + heat_point = 40, + humidity_point = 0, + }) + + minetest.register_biome({ + name = "cold_desert_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 40, + humidity_point = 0, + }) + + -- Savanna + + minetest.register_biome({ + name = "savanna", + node_top = "default:dry_dirt_with_dry_grass", + depth_top = 1, + node_filler = "default:dry_dirt", + depth_filler = 1, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 31000, + y_min = 1, + heat_point = 89, + humidity_point = 42, + }) + + minetest.register_biome({ + name = "savanna_shore", + node_top = "default:dry_dirt", + depth_top = 1, + node_filler = "default:dry_dirt", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 0, + y_min = -1, + heat_point = 89, + humidity_point = 42, + }) + + minetest.register_biome({ + name = "savanna_ocean", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_cave_liquid = "default:water_source", + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + vertical_blend = 1, + y_max = -2, + y_min = -255, + heat_point = 89, + humidity_point = 42, + }) + + minetest.register_biome({ + name = "savanna_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 89, + humidity_point = 42, + }) + + -- Rainforest + + minetest.register_biome({ + name = "rainforest", + node_top = "default:dirt_with_rainforest_litter", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 31000, + y_min = 1, + heat_point = 86, + humidity_point = 65, + }) + + minetest.register_biome({ + name = "rainforest_swamp", + node_top = "default:dirt", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 0, + y_min = -1, + heat_point = 86, + humidity_point = 65, + }) + + minetest.register_biome({ + name = "rainforest_ocean", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_cave_liquid = "default:water_source", + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + vertical_blend = 1, + y_max = -2, + y_min = -255, + heat_point = 86, + humidity_point = 65, + }) + + minetest.register_biome({ + name = "rainforest_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 86, + humidity_point = 65, + }) +end + + +-- +-- Register decorations +-- + +-- Mgv6 + +function default.register_mgv6_decorations() + + -- Papyrus + + minetest.register_decoration({ + name = "default:papyrus", + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = -0.3, + scale = 0.7, + spread = {x = 100, y = 100, z = 100}, + seed = 354, + octaves = 3, + persist = 0.7 + }, + y_max = 1, + y_min = 1, + decoration = "default:papyrus", + height = 2, + height_max = 4, + spawn_by = "default:water_source", + num_spawn_by = 1, + }) + + -- Cacti + + minetest.register_decoration({ + name = "default:cactus", + deco_type = "simple", + place_on = {"default:desert_sand"}, + sidelen = 16, + noise_params = { + offset = -0.012, + scale = 0.024, + spread = {x = 100, y = 100, z = 100}, + seed = 230, + octaves = 3, + persist = 0.6 + }, + y_max = 30, + y_min = 1, + decoration = "default:cactus", + height = 3, + height_max = 4, + }) + + -- Long grasses + + for length = 1, 5 do + minetest.register_decoration({ + name = "default:grass_"..length, + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.007, + spread = {x = 100, y = 100, z = 100}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + y_max = 30, + y_min = 1, + decoration = "default:grass_"..length, + }) + end + + -- Dry shrubs + + minetest.register_decoration({ + name = "default:dry_shrub", + deco_type = "simple", + place_on = {"default:desert_sand", "default:dirt_with_snow"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.035, + spread = {x = 100, y = 100, z = 100}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + y_max = 30, + y_min = 1, + decoration = "default:dry_shrub", + param2 = 4, + }) +end + + +-- All mapgens except mgv6 + +local function register_grass_decoration(offset, scale, length) + minetest.register_decoration({ + name = "default:grass_" .. length, + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = offset, + scale = scale, + spread = {x = 200, y = 200, z = 200}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + biomes = {"grassland", "deciduous_forest"}, + y_max = 31000, + y_min = 1, + decoration = "default:grass_" .. length, + }) +end + +local function register_dry_grass_decoration(offset, scale, length) + minetest.register_decoration({ + name = "default:dry_grass_" .. length, + deco_type = "simple", + place_on = {"default:dry_dirt_with_dry_grass"}, + sidelen = 16, + noise_params = { + offset = offset, + scale = scale, + spread = {x = 200, y = 200, z = 200}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + biomes = {"savanna"}, + y_max = 31000, + y_min = 1, + decoration = "default:dry_grass_" .. length, + }) +end + +local function register_fern_decoration(seed, length) + minetest.register_decoration({ + name = "default:fern_" .. length, + deco_type = "simple", + place_on = {"default:dirt_with_coniferous_litter"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.2, + spread = {x = 100, y = 100, z = 100}, + seed = seed, + octaves = 3, + persist = 0.7 + }, + biomes = {"coniferous_forest"}, + y_max = 31000, + y_min = 6, + decoration = "default:fern_" .. length, + }) +end + + +function default.register_decorations() + -- Savanna bare dirt patches. + -- Must come before all savanna decorations that are placed on dry grass. + -- Noise is similar to long dry grass noise, but scale inverted, to appear + -- where long dry grass is least dense and shortest. + + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dry_dirt_with_dry_grass"}, + sidelen = 4, + noise_params = { + offset = -1.5, + scale = -1.5, + spread = {x = 200, y = 200, z = 200}, + seed = 329, + octaves = 4, + persist = 1.0 + }, + biomes = {"savanna"}, + y_max = 31000, + y_min = 1, + decoration = "default:dry_dirt", + place_offset_y = -1, + flags = "force_placement", + }) + + -- Apple tree and log + + minetest.register_decoration({ + name = "default:apple_tree", + deco_type = "schematic", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0.024, + scale = 0.015, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"deciduous_forest"}, + y_max = 31000, + y_min = 1, + schematic = minetest.get_modpath("default") .. "/schematics/apple_tree.mts", + flags = "place_center_x, place_center_z", + rotation = "random", + }) + + minetest.register_decoration({ + name = "default:apple_log", + deco_type = "schematic", + place_on = {"default:dirt_with_grass"}, + place_offset_y = 1, + sidelen = 16, + noise_params = { + offset = 0.0012, + scale = 0.0007, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"deciduous_forest"}, + y_max = 31000, + y_min = 1, + schematic = minetest.get_modpath("default") .. "/schematics/apple_log.mts", + flags = "place_center_x", + rotation = "random", + spawn_by = "default:dirt_with_grass", + num_spawn_by = 8, + }) + + -- Emergent jungle tree + -- Due to 32 node height, altitude is limited and prescence depends on chunksize + + local chunksize + if core.get_mapgen_chunksize then + local v = core.get_mapgen_chunksize() + chunksize = math.max(v.x, v.y, v.z) + else + chunksize = tonumber(core.get_mapgen_setting("chunksize")) + end + if chunksize >= 5 then + minetest.register_decoration({ + name = "default:emergent_jungle_tree", + deco_type = "schematic", + place_on = {"default:dirt_with_rainforest_litter"}, + sidelen = 80, + noise_params = { + offset = 0.0, + scale = 0.0025, + spread = {x = 250, y = 250, z = 250}, + seed = 2685, + octaves = 3, + persist = 0.7 + }, + biomes = {"rainforest"}, + y_max = 32, + y_min = 1, + schematic = minetest.get_modpath("default") .. + "/schematics/emergent_jungle_tree.mts", + flags = "place_center_x, place_center_z", + rotation = "random", + place_offset_y = -4, + }) + end + + -- Jungle tree and log + + minetest.register_decoration({ + name = "default:jungle_tree", + deco_type = "schematic", + place_on = {"default:dirt_with_rainforest_litter"}, + sidelen = 80, + fill_ratio = 0.1, + biomes = {"rainforest"}, + y_max = 31000, + y_min = 1, + schematic = minetest.get_modpath("default") .. "/schematics/jungle_tree.mts", + flags = "place_center_x, place_center_z", + rotation = "random", + }) + + -- Swamp jungle trees + + minetest.register_decoration({ + name = "default:jungle_tree(swamp)", + deco_type = "schematic", + place_on = {"default:dirt"}, + sidelen = 16, + -- Noise tuned to place swamp trees where papyrus is absent + noise_params = { + offset = 0.0, + scale = -0.1, + spread = {x = 200, y = 200, z = 200}, + seed = 354, + octaves = 1, + persist = 0.5 + }, + biomes = {"rainforest_swamp"}, + y_max = 0, + y_min = -1, + schematic = minetest.get_modpath("default") .. "/schematics/jungle_tree.mts", + flags = "place_center_x, place_center_z", + rotation = "random", + }) + + minetest.register_decoration({ + name = "default:jungle_log", + deco_type = "schematic", + place_on = {"default:dirt_with_rainforest_litter"}, + place_offset_y = 1, + sidelen = 80, + fill_ratio = 0.005, + biomes = {"rainforest"}, + y_max = 31000, + y_min = 1, + schematic = minetest.get_modpath("default") .. "/schematics/jungle_log.mts", + flags = "place_center_x", + rotation = "random", + spawn_by = "default:dirt_with_rainforest_litter", + num_spawn_by = 8, + }) + + -- Taiga and temperate coniferous forest pine tree, small pine tree and log + + minetest.register_decoration({ + name = "default:pine_tree", + deco_type = "schematic", + place_on = {"default:dirt_with_snow", "default:dirt_with_coniferous_litter"}, + sidelen = 16, + noise_params = { + offset = 0.010, + scale = 0.048, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"taiga", "coniferous_forest"}, + y_max = 31000, + y_min = 4, + schematic = minetest.get_modpath("default") .. "/schematics/pine_tree.mts", + flags = "place_center_x, place_center_z", + }) + + minetest.register_decoration({ + name = "default:small_pine_tree", + deco_type = "schematic", + place_on = {"default:dirt_with_snow", "default:dirt_with_coniferous_litter"}, + sidelen = 16, + noise_params = { + offset = 0.010, + scale = -0.048, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"taiga", "coniferous_forest"}, + y_max = 31000, + y_min = 4, + schematic = minetest.get_modpath("default") .. "/schematics/small_pine_tree.mts", + flags = "place_center_x, place_center_z", + }) + + minetest.register_decoration({ + name = "default:pine_log", + deco_type = "schematic", + place_on = {"default:dirt_with_snow", "default:dirt_with_coniferous_litter"}, + place_offset_y = 1, + sidelen = 80, + fill_ratio = 0.0018, + biomes = {"taiga", "coniferous_forest"}, + y_max = 31000, + y_min = 4, + schematic = minetest.get_modpath("default") .. "/schematics/pine_log.mts", + flags = "place_center_x", + rotation = "random", + spawn_by = {"default:dirt_with_snow", "default:dirt_with_coniferous_litter"}, + num_spawn_by = 8, + }) + + -- Acacia tree and log + + minetest.register_decoration({ + name = "default:acacia_tree", + deco_type = "schematic", + place_on = {"default:dry_dirt_with_dry_grass"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.002, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"savanna"}, + y_max = 31000, + y_min = 1, + schematic = minetest.get_modpath("default") .. "/schematics/acacia_tree.mts", + flags = "place_center_x, place_center_z", + rotation = "random", + }) + + minetest.register_decoration({ + name = "default:acacia_log", + deco_type = "schematic", + place_on = {"default:dry_dirt_with_dry_grass"}, + place_offset_y = 1, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.001, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"savanna"}, + y_max = 31000, + y_min = 1, + schematic = minetest.get_modpath("default") .. "/schematics/acacia_log.mts", + flags = "place_center_x", + rotation = "random", + spawn_by = "default:dry_dirt_with_dry_grass", + num_spawn_by = 8, + }) + + -- Aspen tree and log + + minetest.register_decoration({ + name = "default:aspen_tree", + deco_type = "schematic", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0.0, + scale = -0.015, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"deciduous_forest"}, + y_max = 31000, + y_min = 1, + schematic = minetest.get_modpath("default") .. "/schematics/aspen_tree.mts", + flags = "place_center_x, place_center_z", + }) + + minetest.register_decoration({ + name = "default:aspen_log", + deco_type = "schematic", + place_on = {"default:dirt_with_grass"}, + place_offset_y = 1, + sidelen = 16, + noise_params = { + offset = 0.0, + scale = -0.0008, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"deciduous_forest"}, + y_max = 31000, + y_min = 1, + schematic = minetest.get_modpath("default") .. "/schematics/aspen_log.mts", + flags = "place_center_x", + rotation = "random", + spawn_by = "default:dirt_with_grass", + num_spawn_by = 8, + }) + + -- Large cactus + + minetest.register_decoration({ + name = "default:large_cactus", + deco_type = "schematic", + place_on = {"default:desert_sand"}, + sidelen = 16, + noise_params = { + offset = -0.0003, + scale = 0.0009, + spread = {x = 200, y = 200, z = 200}, + seed = 230, + octaves = 3, + persist = 0.6 + }, + biomes = {"desert"}, + y_max = 31000, + y_min = 4, + schematic = minetest.get_modpath("default") .. "/schematics/large_cactus.mts", + flags = "place_center_x, place_center_z", + rotation = "random", + }) + + -- Cactus + + minetest.register_decoration({ + name = "default:cactus", + deco_type = "simple", + place_on = {"default:desert_sand"}, + sidelen = 16, + noise_params = { + offset = -0.0003, + scale = 0.0009, + spread = {x = 200, y = 200, z = 200}, + seed = 230, + octaves = 3, + persist = 0.6 + }, + biomes = {"desert"}, + y_max = 31000, + y_min = 4, + decoration = "default:cactus", + height = 2, + height_max = 5, + }) + + -- Papyrus + + -- Dirt version for rainforest swamp + + minetest.register_decoration({ + name = "default:papyrus_on_dirt", + deco_type = "schematic", + place_on = {"default:dirt"}, + sidelen = 16, + noise_params = { + offset = -0.3, + scale = 0.7, + spread = {x = 200, y = 200, z = 200}, + seed = 354, + octaves = 3, + persist = 0.7 + }, + biomes = {"rainforest_swamp"}, + y_max = 0, + y_min = 0, + schematic = minetest.get_modpath("default") .. "/schematics/papyrus_on_dirt.mts", + }) + + -- Dry dirt version for savanna shore + + minetest.register_decoration({ + name = "default:papyrus_on_dry_dirt", + deco_type = "schematic", + place_on = {"default:dry_dirt"}, + sidelen = 16, + noise_params = { + offset = -0.3, + scale = 0.7, + spread = {x = 200, y = 200, z = 200}, + seed = 354, + octaves = 3, + persist = 0.7 + }, + biomes = {"savanna_shore"}, + y_max = 0, + y_min = 0, + schematic = minetest.get_modpath("default") .. + "/schematics/papyrus_on_dry_dirt.mts", + }) + + -- Bush + + minetest.register_decoration({ + name = "default:bush", + deco_type = "schematic", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = -0.004, + scale = 0.01, + spread = {x = 100, y = 100, z = 100}, + seed = 137, + octaves = 3, + persist = 0.7, + }, + biomes = {"grassland", "deciduous_forest"}, + y_max = 31000, + y_min = 1, + schematic = minetest.get_modpath("default") .. "/schematics/bush.mts", + flags = "place_center_x, place_center_z", + }) + + -- Blueberry bush + + minetest.register_decoration({ + name = "default:blueberry_bush", + deco_type = "schematic", + place_on = {"default:dirt_with_grass", "default:dirt_with_snow"}, + sidelen = 16, + noise_params = { + offset = -0.004, + scale = 0.01, + spread = {x = 100, y = 100, z = 100}, + seed = 697, + octaves = 3, + persist = 0.7, + }, + biomes = {"grassland", "snowy_grassland"}, + y_max = 31000, + y_min = 1, + place_offset_y = 1, + schematic = minetest.get_modpath("default") .. "/schematics/blueberry_bush.mts", + flags = "place_center_x, place_center_z", + }) + + -- Acacia bush + + minetest.register_decoration({ + name = "default:acacia_bush", + deco_type = "schematic", + place_on = {"default:dry_dirt_with_dry_grass"}, + sidelen = 16, + noise_params = { + offset = -0.004, + scale = 0.01, + spread = {x = 100, y = 100, z = 100}, + seed = 90155, + octaves = 3, + persist = 0.7, + }, + biomes = {"savanna"}, + y_max = 31000, + y_min = 1, + schematic = minetest.get_modpath("default") .. "/schematics/acacia_bush.mts", + flags = "place_center_x, place_center_z", + }) + + -- Pine bush + + minetest.register_decoration({ + name = "default:pine_bush", + deco_type = "schematic", + place_on = {"default:dirt_with_snow"}, + sidelen = 16, + noise_params = { + offset = -0.004, + scale = 0.01, + spread = {x = 100, y = 100, z = 100}, + seed = 137, + octaves = 3, + persist = 0.7, + }, + biomes = {"taiga", "snowy_grassland"}, + y_max = 31000, + y_min = 4, + schematic = minetest.get_modpath("default") .. "/schematics/pine_bush.mts", + flags = "place_center_x, place_center_z", + }) + + -- Grasses + + register_grass_decoration(-0.03, 0.09, 5) + register_grass_decoration(-0.015, 0.075, 4) + register_grass_decoration(0, 0.06, 3) + register_grass_decoration(0.015, 0.045, 2) + register_grass_decoration(0.03, 0.03, 1) + + -- Dry grasses + + register_dry_grass_decoration(0.01, 0.05, 5) + register_dry_grass_decoration(0.03, 0.03, 4) + register_dry_grass_decoration(0.05, 0.01, 3) + register_dry_grass_decoration(0.07, -0.01, 2) + register_dry_grass_decoration(0.09, -0.03, 1) + + -- Ferns + + register_fern_decoration(14936, 3) + register_fern_decoration(801, 2) + register_fern_decoration(5, 1) + + -- Junglegrass + + minetest.register_decoration({ + name = "default:junglegrass", + deco_type = "simple", + place_on = {"default:dirt_with_rainforest_litter"}, + sidelen = 80, + fill_ratio = 0.1, + biomes = {"rainforest"}, + y_max = 31000, + y_min = 1, + decoration = "default:junglegrass", + }) + + -- Dry shrub + + minetest.register_decoration({ + name = "default:dry_shrub", + deco_type = "simple", + place_on = {"default:desert_sand", + "default:sand", "default:silver_sand"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.02, + spread = {x = 200, y = 200, z = 200}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + biomes = {"desert", "sandstone_desert", "cold_desert"}, + y_max = 31000, + y_min = 2, + decoration = "default:dry_shrub", + param2 = 4, + }) + + -- Marram grass + + minetest.register_decoration({ + name = "default:marram_grass", + deco_type = "simple", + place_on = {"default:sand"}, + sidelen = 4, + noise_params = { + offset = -0.7, + scale = 4.0, + spread = {x = 16, y = 16, z = 16}, + seed = 513337, + octaves = 1, + persist = 0.0, + flags = "absvalue, eased" + }, + biomes = {"coniferous_forest_dunes", "grassland_dunes"}, + y_max = 6, + y_min = 4, + decoration = { + "default:marram_grass_1", + "default:marram_grass_2", + "default:marram_grass_3", + }, + }) + + -- Tundra moss + + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:permafrost_with_stones"}, + sidelen = 4, + noise_params = { + offset = -0.8, + scale = 2.0, + spread = {x = 100, y = 100, z = 100}, + seed = 53995, + octaves = 3, + persist = 1.0 + }, + biomes = {"tundra"}, + y_max = 50, + y_min = 2, + decoration = "default:permafrost_with_moss", + place_offset_y = -1, + flags = "force_placement", + }) + + -- Tundra patchy snow + + minetest.register_decoration({ + deco_type = "simple", + place_on = { + "default:permafrost_with_moss", + "default:permafrost_with_stones", + "default:stone", + "default:gravel" + }, + sidelen = 4, + noise_params = { + offset = 0, + scale = 1.0, + spread = {x = 100, y = 100, z = 100}, + seed = 172555, + octaves = 3, + persist = 1.0 + }, + biomes = {"tundra", "tundra_beach"}, + y_max = 50, + y_min = 1, + decoration = "default:snow", + }) + + -- Coral reef + + minetest.register_decoration({ + name = "default:corals", + deco_type = "simple", + place_on = {"default:sand"}, + place_offset_y = -1, + sidelen = 4, + noise_params = { + offset = -4, + scale = 4, + spread = {x = 50, y = 50, z = 50}, + seed = 7013, + octaves = 3, + persist = 0.7, + }, + biomes = { + "desert_ocean", + "savanna_ocean", + "rainforest_ocean", + }, + y_max = -2, + y_min = -8, + flags = "force_placement", + decoration = { + "default:coral_green", "default:coral_pink", + "default:coral_cyan", "default:coral_brown", + "default:coral_orange", "default:coral_skeleton", + }, + }) + + -- Kelp + + minetest.register_decoration({ + name = "default:kelp", + deco_type = "simple", + place_on = {"default:sand"}, + place_offset_y = -1, + sidelen = 16, + noise_params = { + offset = -0.04, + scale = 0.1, + spread = {x = 200, y = 200, z = 200}, + seed = 87112, + octaves = 3, + persist = 0.7 + }, + biomes = { + "taiga_ocean", + "snowy_grassland_ocean", + "grassland_ocean", + "coniferous_forest_ocean", + "deciduous_forest_ocean", + "sandstone_desert_ocean", + "cold_desert_ocean"}, + y_max = -5, + y_min = -10, + flags = "force_placement", + decoration = "default:sand_with_kelp", + param2 = 48, + param2_max = 96, + }) +end + + +-- +-- Detect mapgen to select functions +-- + + +local mg_name = minetest.get_mapgen_setting("mg_name") + +if mg_name == "v6" then + default.register_mgv6_ores() + default.register_mgv6_decorations() +else + default.register_biomes() + default.register_ores() + default.register_decorations() +end diff --git a/mods/default/mod.conf b/mods/default/mod.conf new file mode 100644 index 0000000..c9e7468 --- /dev/null +++ b/mods/default/mod.conf @@ -0,0 +1,3 @@ +name = default +description = Minetest Game mod: default +optional_depends = player_api diff --git a/mods/default/models/chest_open.obj b/mods/default/models/chest_open.obj new file mode 100644 index 0000000..72ba175 --- /dev/null +++ b/mods/default/models/chest_open.obj @@ -0,0 +1,79 @@ +# Blender v2.78 (sub 0) OBJ File: 'chest-open.blend' +# www.blender.org +o Top_Cube.002_None_Top_Cube.002_None_bottom +v -0.500000 0.408471 0.720970 +v -0.500000 1.115578 0.013863 +v -0.500000 0.894607 -0.207108 +v -0.500000 0.187501 0.499999 +v 0.500000 1.115578 0.013863 +v 0.500000 0.408471 0.720970 +v 0.500000 0.187501 0.499999 +v 0.500000 0.894607 -0.207108 +v -0.500000 0.187500 -0.500000 +v -0.500000 -0.500000 -0.500000 +v -0.500000 -0.500000 0.500000 +v 0.500000 0.187500 -0.500000 +v 0.500000 -0.500000 0.500000 +v 0.500000 -0.500000 -0.500000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 0.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 0.6875 +vt 0.0000 0.6875 +vt 1.0000 1.0000 +vt 0.0000 0.6875 +vt 1.0000 0.6875 +vt 1.0000 0.6875 +vt 1.0000 0.0000 +vt 0.0000 0.0000 +vt 1.0000 0.6875 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 1.0000 0.6875 +vt 1.0000 0.0000 +vt 0.0000 1.0000 +vt 0.0000 0.6875 +vt 0.0000 0.6875 +vt 0.0000 0.0000 +vt 1.0000 0.5000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.5000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vn 0.0000 0.7071 0.7071 +vn -0.0000 -1.0000 -0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 -0.0000 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 0.0000 1.0000 +vn -0.0000 0.7071 -0.7071 +vn -0.0000 0.0000 -1.0000 +vn -0.0000 -0.7071 -0.7071 +vn -0.0000 1.0000 -0.0000 +g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Top +s off +f 6/1/1 5/2/1 2/3/1 1/4/1 +g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Bottom +f 11/5/2 10/6/2 14/7/2 13/8/2 +g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Right-Left +f 1/9/3 2/10/3 3/11/3 4/12/3 +f 5/13/4 6/1/4 7/14/4 8/15/4 +f 4/12/3 9/16/3 10/17/3 11/18/3 +f 12/19/4 7/14/4 13/8/4 14/20/4 +g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Back +f 6/21/5 1/9/5 4/12/5 7/22/5 +f 7/22/6 4/12/6 11/18/6 13/23/6 +g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Front +f 2/10/7 5/24/7 8/25/7 3/11/7 +f 9/16/8 12/26/8 14/27/8 10/17/8 +g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Inside +f 4/28/9 3/29/9 8/30/9 7/31/9 +f 7/31/10 12/32/10 9/33/10 4/28/10 diff --git a/mods/default/models/torch_ceiling.obj b/mods/default/models/torch_ceiling.obj new file mode 100644 index 0000000..5df8597 --- /dev/null +++ b/mods/default/models/torch_ceiling.obj @@ -0,0 +1,53 @@ +# Blender v2.77 (sub 0) OBJ File: 'torch_ceiling.blend' +# www.blender.org +v -0.062469 -0.047331 0.068152 +v -0.062469 -0.559515 -0.164388 +v -0.062469 0.004344 -0.045667 +v -0.062469 -0.507839 -0.278206 +v 0.062531 -0.047331 0.068152 +v 0.062531 -0.559515 -0.164388 +v 0.062531 0.004344 -0.045667 +v 0.062531 -0.507839 -0.278206 +v 0.353584 0.040000 0.363553 +v 0.353584 -0.397500 0.363553 +v -0.353522 0.040000 -0.343553 +v -0.353522 -0.397500 -0.343553 +v 0.353584 0.040000 -0.343553 +v -0.353522 0.040000 0.363553 +v 0.353584 -0.397500 -0.343553 +v -0.353522 -0.397500 0.363553 +vt 0.5625 0.5000 +vt 0.5625 0.6250 +vt 0.4375 0.6250 +vt 0.4375 0.5000 +vt 0.4375 0.0000 +vt 0.5625 0.0000 +vt 0.5625 0.1250 +vt 0.4375 0.1250 +vt 0.5625 0.6250 +vt 0.4375 0.6250 +vt 0.4375 0.6250 +vt 0.4375 0.0000 +vt 0.5625 0.6250 +vt 0.5625 0.0000 +vt 1.0000 0.5625 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.5625 +vt 0.0000 0.5625 +vt 1.0000 0.5625 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vn 0.0000 0.9105 0.4134 +vn -0.0000 -0.4134 0.9105 +vn -1.0000 0.0000 0.0000 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +f 3/1/1 1/2/1 5/3/1 7/4/1 +f 8/5/1 4/6/1 2/7/1 6/8/1 +f 3/9/2 4/6/2 8/5/2 7/10/2 +f 1/11/3 3/9/3 4/6/3 2/12/3 +f 5/13/2 1/11/2 2/12/2 6/14/2 +f 7/10/3 8/5/3 6/14/3 5/13/3 +f 9/15/4 10/16/4 12/17/4 11/18/4 +f 13/19/5 14/20/5 16/21/5 15/22/5 diff --git a/mods/default/models/torch_floor.obj b/mods/default/models/torch_floor.obj new file mode 100644 index 0000000..dfd25e8 --- /dev/null +++ b/mods/default/models/torch_floor.obj @@ -0,0 +1,43 @@ +# Blender v2.76 (sub 11) OBJ File: 'torch_floor.blend' +# www.blender.org +v 0.062500 0.062500 -0.062500 +v 0.062500 -0.500000 -0.062500 +v 0.062500 0.062500 0.062500 +v 0.062500 -0.500000 0.062500 +v -0.062500 0.062500 -0.062500 +v -0.062500 -0.500000 -0.062500 +v -0.062500 0.062500 0.062500 +v -0.062500 -0.500000 0.062500 +v -0.353553 -0.500000 0.353553 +v -0.353553 0.500000 0.353553 +v 0.353553 -0.500000 -0.353553 +v 0.353553 0.500000 -0.353553 +v -0.353553 -0.500000 -0.353553 +v 0.353553 -0.500000 0.353553 +v -0.353553 0.500000 -0.353553 +v 0.353553 0.500000 0.353553 +vt 0.562500 0.500000 +vt 0.562500 0.625000 +vt 0.437500 0.625000 +vt 0.437500 0.500000 +vt 0.437500 0.000000 +vt 0.562500 0.000000 +vt 0.562500 0.125000 +vt 0.437500 0.125000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn -0.707100 0.000000 -0.707100 +vn -0.707100 -0.000000 0.707100 +f 3/1/1 1/2/1 5/3/1 7/4/1 +f 8/5/1 4/6/1 2/7/1 6/8/1 +f 3/2/2 4/6/2 8/5/2 7/3/2 +f 1/3/3 3/2/3 4/6/3 2/5/3 +f 5/2/2 1/3/2 2/5/2 6/6/2 +f 7/3/3 8/5/3 6/6/3 5/2/3 +f 9/9/4 10/10/4 12/11/4 11/12/4 +f 13/12/5 14/9/5 16/10/5 15/11/5 diff --git a/mods/default/models/torch_wall.obj b/mods/default/models/torch_wall.obj new file mode 100644 index 0000000..6de4b13 --- /dev/null +++ b/mods/default/models/torch_wall.obj @@ -0,0 +1,57 @@ +# Blender v2.76 (sub 11) OBJ File: 'torch_wall.blend' +# www.blender.org +v 0.062469 -0.195248 0.023570 +v 0.062469 -0.476498 -0.463570 +v 0.062469 -0.303502 0.086070 +v 0.062469 -0.584752 -0.401070 +v -0.062531 -0.195248 0.023570 +v -0.062531 -0.476498 -0.463570 +v -0.062531 -0.303502 0.086070 +v -0.062531 -0.584752 -0.401070 +v -0.353584 -0.613553 0.022500 +v -0.353584 -0.613553 0.460000 +v 0.353522 0.093553 0.022500 +v 0.353522 0.093553 0.460000 +v -0.353584 0.093553 0.022500 +v 0.353522 -0.613553 0.022500 +v -0.353584 0.093553 0.460000 +v 0.353522 -0.613553 0.460000 +v 0.353553 0.056811 -0.121957 +v 0.353553 -0.224439 -0.609096 +v -0.353553 -0.555561 0.231596 +v -0.353553 -0.836811 -0.255543 +v -0.353553 0.056811 -0.121957 +v -0.353553 -0.224439 -0.609096 +v 0.353553 -0.555561 0.231596 +v 0.353553 -0.836811 -0.255543 +vt 0.562500 0.500000 +vt 0.562500 0.625000 +vt 0.437500 0.625000 +vt 0.437500 0.500000 +vt 0.437500 0.000000 +vt 0.562500 0.000000 +vt 0.562500 0.125000 +vt 0.437500 0.125000 +vt 0.000000 0.562500 +vt 0.000000 -0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.562500 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn -0.000000 0.500000 0.866000 +vn -0.000000 0.866000 -0.500000 +vn 1.000000 0.000000 0.000000 +vn -0.707100 0.612400 -0.353600 +vn -0.707100 -0.612400 0.353600 +vn -0.707100 0.707100 -0.000000 +vn -0.707100 -0.707100 -0.000000 +f 3/1/1 1/2/1 5/3/1 7/4/1 +f 8/5/1 4/6/1 2/7/1 6/8/1 +f 3/2/2 4/6/2 8/5/2 7/3/2 +f 1/3/3 3/2/3 4/6/3 2/5/3 +f 5/2/2 1/3/2 2/5/2 6/6/2 +f 7/3/3 8/5/3 6/6/3 5/2/3 +f 17/9/4 18/10/4 20/11/4 19/12/4 +f 21/9/5 22/10/5 24/11/5 23/12/5 +f 9/12/6 10/13/6 12/14/6 11/9/6 +f 13/9/7 14/12/7 16/13/7 15/14/7 diff --git a/mods/default/nodes.lua b/mods/default/nodes.lua new file mode 100644 index 0000000..c18fb0a --- /dev/null +++ b/mods/default/nodes.lua @@ -0,0 +1,2970 @@ +-- mods/default/nodes.lua + +-- support for MT game translation. +local S = default.get_translator + +--[[ Node name convention: + +Although many node names are in combined-word form, the required form for new +node names is words separated by underscores. If both forms are used in written +language (for example pinewood and pine wood) the underscore form should be used. + +--]] + + +--[[ Index: + +Stone +----- +(1. Material 2. Cobble variant 3. Brick variant 4. Modified forms) + +default:stone +default:cobble +default:stonebrick +default:stone_block +default:mossycobble + +default:desert_stone +default:desert_cobble +default:desert_stonebrick +default:desert_stone_block + +default:sandstone +default:sandstonebrick +default:sandstone_block +default:desert_sandstone +default:desert_sandstone_brick +default:desert_sandstone_block +default:silver_sandstone +default:silver_sandstone_brick +default:silver_sandstone_block + +default:obsidian +default:obsidianbrick +default:obsidian_block + +Soft / Non-Stone +---------------- +(1. Material 2. Modified forms) + +default:dirt +default:dirt_with_grass +default:dirt_with_grass_footsteps +default:dirt_with_dry_grass +default:dirt_with_snow +default:dirt_with_rainforest_litter +default:dirt_with_coniferous_litter +default:dry_dirt +default:dry_dirt_with_dry_grass + +default:permafrost +default:permafrost_with_stones +default:permafrost_with_moss + +default:sand +default:desert_sand +default:silver_sand + +default:gravel + +default:clay + +default:snow +default:snowblock +default:ice +default:cave_ice + +Trees +----- +(1. Trunk 2. Fabricated trunk 3. Leaves 4. Sapling 5. Fruits) + +default:tree +default:wood +default:leaves +default:sapling +default:apple + +default:jungletree +default:junglewood +default:jungleleaves +default:junglesapling +default:emergent_jungle_sapling + +default:pine_tree +default:pine_wood +default:pine_needles +default:pine_sapling + +default:acacia_tree +default:acacia_wood +default:acacia_leaves +default:acacia_sapling + +default:aspen_tree +default:aspen_wood +default:aspen_leaves +default:aspen_sapling + +Ores +---- +(1. In stone 2. Blocks) + +default:stone_with_coal +default:coalblock + +default:stone_with_iron +default:steelblock + +default:stone_with_copper +default:copperblock + +default:stone_with_tin +default:tinblock + +default:bronzeblock + +default:stone_with_gold +default:goldblock + +default:stone_with_mese +default:mese + +default:stone_with_diamond +default:diamondblock + +Plantlife +--------- + +default:cactus +default:large_cactus_seedling + +default:papyrus +default:dry_shrub +default:junglegrass + +default:grass_1 +default:grass_2 +default:grass_3 +default:grass_4 +default:grass_5 + +default:dry_grass_1 +default:dry_grass_2 +default:dry_grass_3 +default:dry_grass_4 +default:dry_grass_5 + +default:fern_1 +default:fern_2 +default:fern_3 + +default:marram_grass_1 +default:marram_grass_2 +default:marram_grass_3 + +default:bush_stem +default:bush_leaves +default:bush_sapling +default:acacia_bush_stem +default:acacia_bush_leaves +default:acacia_bush_sapling +default:pine_bush_stem +default:pine_bush_needles +default:pine_bush_sapling +default:blueberry_bush_leaves_with_berries +default:blueberry_bush_leaves +default:blueberry_bush_sapling + +default:sand_with_kelp + +Corals +------ + +default:coral_green +default:coral_pink +default:coral_cyan +default:coral_brown +default:coral_orange +default:coral_skeleton + +Liquids +------- +(1. Source 2. Flowing) + +default:water_source +default:water_flowing + +default:river_water_source +default:river_water_flowing + +default:lava_source +default:lava_flowing + +Tools / "Advanced" crafting / Non-"natural" +------------------------------------------- + +default:bookshelf + +default:sign_wall_wood +default:sign_wall_steel + +default:ladder_wood +default:ladder_steel + +default:fence_wood +default:fence_acacia_wood +default:fence_junglewood +default:fence_pine_wood +default:fence_aspen_wood + +default:fence_rail_wood +default:fence_rail_acacia_wood +default:fence_rail_junglewood +default:fence_rail_pine_wood +default:fence_rail_aspen_wood + +default:glass +default:obsidian_glass + +default:brick + +default:meselamp +default:mese_post_light +default:mese_post_light_acacia_wood +default:mese_post_light_junglewood +default:mese_post_light_pine_wood +default:mese_post_light_aspen_wood + +Misc +---- + +default:cloud + +--]] + +-- Required wrapper to allow customization of default.after_place_leaves +local function after_place_leaves(...) + return default.after_place_leaves(...) +end + +-- Required wrapper to allow customization of default.grow_sapling +local function grow_sapling(...) + return default.grow_sapling(...) +end + +-- +-- Stone +-- + +minetest.register_node("default:stone", { + description = S("Stone"), + tiles = {"default_stone.png"}, + groups = {cracky = 3, stone = 1}, + drop = "default:cobble", + legacy_mineral = true, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:cobble", { + description = S("Cobblestone"), + tiles = {"default_cobble.png"}, + is_ground_content = false, + groups = {cracky = 3, stone = 2}, + sounds = default.node_sound_stone_defaults(), + _tnt_loss = 4, +}) + +minetest.register_node("default:stonebrick", { + description = S("Stone Brick"), + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_stone_brick.png"}, + is_ground_content = false, + groups = {cracky = 2, stone = 1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:stone_block", { + description = S("Stone Block"), + tiles = {"default_stone_block.png"}, + is_ground_content = false, + groups = {cracky = 2, stone = 1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:mossycobble", { + description = S("Mossy Cobblestone"), + tiles = {"default_mossycobble.png"}, + is_ground_content = false, + groups = {cracky = 3, stone = 1}, + sounds = default.node_sound_stone_defaults(), + _tnt_loss = 4, +}) + +minetest.register_node("default:desert_stone", { + description = S("Desert Stone"), + tiles = {"default_desert_stone.png"}, + groups = {cracky = 3, stone = 1}, + drop = "default:desert_cobble", + legacy_mineral = true, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:desert_cobble", { + description = S("Desert Cobblestone"), + tiles = {"default_desert_cobble.png"}, + is_ground_content = false, + groups = {cracky = 3, stone = 2}, + sounds = default.node_sound_stone_defaults(), + _tnt_loss = 4, +}) + +minetest.register_node("default:desert_stonebrick", { + description = S("Desert Stone Brick"), + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_desert_stone_brick.png"}, + is_ground_content = false, + groups = {cracky = 2, stone = 1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:desert_stone_block", { + description = S("Desert Stone Block"), + tiles = {"default_desert_stone_block.png"}, + is_ground_content = false, + groups = {cracky = 2, stone = 1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:sandstone", { + description = S("Sandstone"), + tiles = {"default_sandstone.png"}, + groups = {crumbly = 1, cracky = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:sandstonebrick", { + description = S("Sandstone Brick"), + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_sandstone_brick.png"}, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:sandstone_block", { + description = S("Sandstone Block"), + tiles = {"default_sandstone_block.png"}, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:desert_sandstone", { + description = S("Desert Sandstone"), + tiles = {"default_desert_sandstone.png"}, + groups = {crumbly = 1, cracky = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:desert_sandstone_brick", { + description = S("Desert Sandstone Brick"), + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_desert_sandstone_brick.png"}, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:desert_sandstone_block", { + description = S("Desert Sandstone Block"), + tiles = {"default_desert_sandstone_block.png"}, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:silver_sandstone", { + description = S("Silver Sandstone"), + tiles = {"default_silver_sandstone.png"}, + groups = {crumbly = 1, cracky = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:silver_sandstone_brick", { + description = S("Silver Sandstone Brick"), + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_silver_sandstone_brick.png"}, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:silver_sandstone_block", { + description = S("Silver Sandstone Block"), + tiles = {"default_silver_sandstone_block.png"}, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:obsidian", { + description = S("Obsidian"), + tiles = {"default_obsidian.png"}, + sounds = default.node_sound_stone_defaults(), + groups = {cracky = 1, level = 2}, +}) + +minetest.register_node("default:obsidianbrick", { + description = S("Obsidian Brick"), + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_obsidian_brick.png"}, + is_ground_content = false, + sounds = default.node_sound_stone_defaults(), + groups = {cracky = 1, level = 2}, +}) + +minetest.register_node("default:obsidian_block", { + description = S("Obsidian Block"), + tiles = {"default_obsidian_block.png"}, + is_ground_content = false, + sounds = default.node_sound_stone_defaults(), + groups = {cracky = 1, level = 2}, +}) + +-- +-- Soft / Non-Stone +-- + +minetest.register_node("default:dirt", { + description = S("Dirt"), + tiles = {"default_dirt.png"}, + groups = {crumbly = 3, soil = 1}, + sounds = default.node_sound_dirt_defaults(), + _tnt_loss = 3, +}) + +minetest.register_node("default:dirt_with_grass", { + description = S("Dirt with Grass"), + tiles = {"default_grass.png", "default_dirt.png", + {name = "default_dirt.png^default_grass_side.png", + tileable_vertical = false}}, + groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1}, + drop = "default:dirt", + sounds = default.node_sound_dirt_defaults({ + footstep = {name = "default_grass_footstep", gain = 0.25}, + }), +}) + +minetest.register_node("default:dirt_with_grass_footsteps", { + description = S("Dirt with Grass and Footsteps"), + tiles = {"default_grass.png^default_footprint.png", "default_dirt.png", + {name = "default_dirt.png^default_grass_side.png", + tileable_vertical = false}}, + groups = {crumbly = 3, soil = 1, not_in_creative_inventory = 1}, + drop = "default:dirt", + sounds = default.node_sound_dirt_defaults({ + footstep = {name = "default_grass_footstep", gain = 0.25}, + }), +}) + +minetest.register_node("default:dirt_with_dry_grass", { + description = S("Dirt with Savanna Grass"), + tiles = {"default_dry_grass.png", + "default_dirt.png", + {name = "default_dirt.png^default_dry_grass_side.png", + tileable_vertical = false}}, + groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1}, + drop = "default:dirt", + sounds = default.node_sound_dirt_defaults({ + footstep = {name = "default_grass_footstep", gain = 0.4}, + }), +}) + +minetest.register_node("default:dirt_with_snow", { + description = S("Dirt with Snow"), + tiles = {"default_snow.png", "default_dirt.png", + {name = "default_dirt.png^default_snow_side.png", + tileable_vertical = false}}, + groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1, snowy = 1}, + drop = "default:dirt", + sounds = default.node_sound_dirt_defaults({ + footstep = {name = "default_snow_footstep", gain = 0.2}, + }), +}) + +minetest.register_node("default:dirt_with_rainforest_litter", { + description = S("Dirt with Rainforest Litter"), + tiles = { + "default_rainforest_litter.png", + "default_dirt.png", + {name = "default_dirt.png^default_rainforest_litter_side.png", + tileable_vertical = false} + }, + groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1}, + drop = "default:dirt", + sounds = default.node_sound_dirt_defaults({ + footstep = {name = "default_grass_footstep", gain = 0.4}, + }), +}) + +minetest.register_node("default:dirt_with_coniferous_litter", { + description = S("Dirt with Coniferous Litter"), + tiles = { + "default_coniferous_litter.png", + "default_dirt.png", + {name = "default_dirt.png^default_coniferous_litter_side.png", + tileable_vertical = false} + }, + groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1}, + drop = "default:dirt", + sounds = default.node_sound_dirt_defaults({ + footstep = {name = "default_grass_footstep", gain = 0.4}, + }), +}) + +minetest.register_node("default:dry_dirt", { + description = S("Savanna Dirt"), + tiles = {"default_dry_dirt.png"}, + groups = {crumbly = 3, soil = 1}, + sounds = default.node_sound_dirt_defaults(), + _tnt_loss = 3, +}) + +minetest.register_node("default:dry_dirt_with_dry_grass", { + description = S("Savanna Dirt with Savanna Grass"), + tiles = {"default_dry_grass.png", "default_dry_dirt.png", + {name = "default_dry_dirt.png^default_dry_grass_side.png", + tileable_vertical = false}}, + groups = {crumbly = 3, soil = 1}, + drop = "default:dry_dirt", + sounds = default.node_sound_dirt_defaults({ + footstep = {name = "default_grass_footstep", gain = 0.4}, + }), +}) + +minetest.register_node("default:permafrost", { + description = S("Permafrost"), + tiles = {"default_permafrost.png"}, + groups = {cracky = 3}, + sounds = default.node_sound_dirt_defaults(), +}) + +minetest.register_node("default:permafrost_with_stones", { + description = S("Permafrost with Stones"), + tiles = {"default_permafrost.png^default_stones.png", + "default_permafrost.png", + "default_permafrost.png^default_stones_side.png"}, + groups = {cracky = 3}, + sounds = default.node_sound_gravel_defaults(), +}) + +minetest.register_node("default:permafrost_with_moss", { + description = S("Permafrost with Moss"), + tiles = {"default_moss.png", "default_permafrost.png", + {name = "default_permafrost.png^default_moss_side.png", + tileable_vertical = false}}, + groups = {cracky = 3}, + sounds = default.node_sound_dirt_defaults({ + footstep = {name = "default_grass_footstep", gain = 0.25}, + }), +}) + +minetest.register_node("default:sand", { + description = S("Sand"), + tiles = {"default_sand.png"}, + groups = {crumbly = 3, falling_node = 1, sand = 1}, + sounds = default.node_sound_sand_defaults(), + _tnt_loss = 2, +}) + +minetest.register_node("default:desert_sand", { + description = S("Desert Sand"), + tiles = {"default_desert_sand.png"}, + groups = {crumbly = 3, falling_node = 1, sand = 1}, + sounds = default.node_sound_sand_defaults(), + _tnt_loss = 2, +}) + +minetest.register_node("default:silver_sand", { + description = S("Silver Sand"), + tiles = {"default_silver_sand.png"}, + groups = {crumbly = 3, falling_node = 1, sand = 1}, + sounds = default.node_sound_sand_defaults(), + _tnt_loss = 2, +}) + + +minetest.register_node("default:gravel", { + description = S("Gravel"), + tiles = {"default_gravel.png"}, + groups = {crumbly = 2, falling_node = 1}, + sounds = default.node_sound_gravel_defaults(), + drop = { + max_items = 1, + items = { + {items = {"default:flint"}, rarity = 16}, + {items = {"default:gravel"}} + } + }, + _tnt_loss = 3, +}) + +minetest.register_node("default:clay", { + description = S("Clay"), + tiles = {"default_clay.png"}, + groups = {crumbly = 3}, + drop = "default:clay_lump 4", + sounds = default.node_sound_dirt_defaults(), +}) + + +minetest.register_node("default:snow", { + description = S("Snow"), + tiles = {"default_snow.png"}, + inventory_image = "default_snowball.png", + wield_image = "default_snowball.png", + paramtype = "light", + buildable_to = true, + floodable = true, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, + }, + }, + collision_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -6 / 16, 0.5}, + }, + }, + groups = {crumbly = 3, falling_node = 1, snowy = 1}, + sounds = default.node_sound_snow_defaults(), + _tnt_loss = 1, -- means it will disappear entirely + + on_construct = function(pos) + pos.y = pos.y - 1 + if minetest.get_node(pos).name == "default:dirt_with_grass" then + minetest.set_node(pos, {name = "default:dirt_with_snow"}) + end + end, +}) + +minetest.register_node("default:snowblock", { + description = S("Snow Block"), + tiles = {"default_snow.png"}, + groups = {crumbly = 3, cools_lava = 1, snowy = 1}, + sounds = default.node_sound_snow_defaults(), + + on_construct = function(pos) + pos.y = pos.y - 1 + if minetest.get_node(pos).name == "default:dirt_with_grass" then + minetest.set_node(pos, {name = "default:dirt_with_snow"}) + end + end, +}) + +-- 'is ground content = false' to avoid tunnels in sea ice or ice rivers +minetest.register_node("default:ice", { + description = S("Ice"), + tiles = {"default_ice.png"}, + is_ground_content = false, + paramtype = "light", + groups = {cracky = 3, cools_lava = 1, slippery = 3}, + sounds = default.node_sound_ice_defaults(), +}) + +-- Mapgen-placed ice with 'is ground content = true' to contain tunnels +minetest.register_node("default:cave_ice", { + description = S("Cave Ice"), + tiles = {"default_ice.png"}, + paramtype = "light", + groups = {cracky = 3, cools_lava = 1, slippery = 3, + not_in_creative_inventory = 1}, + drop = "default:ice", + sounds = default.node_sound_ice_defaults(), +}) + +-- +-- Trees +-- + +minetest.register_node("default:tree", { + description = S("Apple Tree"), + tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"}, + paramtype2 = "facedir", + is_ground_content = false, + groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + + on_place = minetest.rotate_node +}) + +minetest.register_node("default:wood", { + description = S("Apple Wood Planks"), + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_wood.png"}, + is_ground_content = false, + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("default:sapling", { + description = S("Apple Tree Sapling"), + drawtype = "plantlike", + tiles = {"default_sapling.png"}, + inventory_image = "default_sapling.png", + wield_image = "default_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = grow_sapling, + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:sapling", + -- minp, maxp to be checked, relative to sapling pos + -- minp_relative.y = 1 because sapling pos has been checked + {x = -3, y = 1, z = -3}, + {x = 3, y = 6, z = 3}, + -- maximum interval of interior volume check + 4) + + return itemstack + end, +}) + +minetest.register_node("default:leaves", { + description = S("Apple Tree Leaves"), + drawtype = "allfaces_optional", + waving = 1, + tiles = {"default_leaves.png"}, + special_tiles = {"default_leaves_simple.png"}, + paramtype = "light", + is_ground_content = false, + groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + { + -- player will get sapling with 1/20 chance + items = {"default:sapling"}, + rarity = 20, + }, + { + -- player will get leaves only if he get no saplings, + -- this is because max_items is 1 + items = {"default:leaves"}, + } + } + }, + sounds = default.node_sound_leaves_defaults(), + + after_place_node = after_place_leaves, +}) + +minetest.register_node("default:apple", { + description = S("Apple"), + drawtype = "plantlike", + tiles = {"default_apple.png"}, + inventory_image = "default_apple.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + is_ground_content = false, + selection_box = { + type = "fixed", + fixed = {-3 / 16, -7 / 16, -3 / 16, 3 / 16, 4 / 16, 3 / 16} + }, + groups = {fleshy = 3, dig_immediate = 3, flammable = 2, + leafdecay = 3, leafdecay_drop = 1, food_apple = 1}, + on_use = minetest.item_eat(2), + sounds = default.node_sound_leaves_defaults(), + + after_place_node = function(pos, placer, itemstack) + minetest.set_node(pos, {name = "default:apple", param2 = 1}) + end, + + after_dig_node = function(pos, oldnode, oldmetadata, digger) + if oldnode.param2 == 0 then + minetest.set_node(pos, {name = "default:apple_mark"}) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end + end, +}) + +minetest.register_node("default:apple_mark", { + description = S("Apple Marker"), + inventory_image = "default_apple.png^default_invisible_node_overlay.png", + wield_image = "default_apple.png^default_invisible_node_overlay.png", + drawtype = "airlike", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + drop = "", + groups = {not_in_creative_inventory = 1}, + on_timer = function(pos, elapsed) + if not minetest.find_node_near(pos, 1, "default:leaves") then + minetest.remove_node(pos) + elseif minetest.get_node_light(pos) < 11 then + minetest.get_node_timer(pos):start(200) + else + minetest.set_node(pos, {name = "default:apple"}) + end + end +}) + + +minetest.register_node("default:jungletree", { + description = S("Jungle Tree"), + tiles = {"default_jungletree_top.png", "default_jungletree_top.png", + "default_jungletree.png"}, + paramtype2 = "facedir", + is_ground_content = false, + groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + + on_place = minetest.rotate_node +}) + +minetest.register_node("default:junglewood", { + description = S("Jungle Wood Planks"), + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_junglewood.png"}, + is_ground_content = false, + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("default:jungleleaves", { + description = S("Jungle Tree Leaves"), + drawtype = "allfaces_optional", + waving = 1, + tiles = {"default_jungleleaves.png"}, + special_tiles = {"default_jungleleaves_simple.png"}, + paramtype = "light", + is_ground_content = false, + groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"default:junglesapling"}, rarity = 20}, + {items = {"default:jungleleaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + + after_place_node = after_place_leaves, +}) + +minetest.register_node("default:junglesapling", { + description = S("Jungle Tree Sapling"), + drawtype = "plantlike", + tiles = {"default_junglesapling.png"}, + inventory_image = "default_junglesapling.png", + wield_image = "default_junglesapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = grow_sapling, + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:junglesapling", + -- minp, maxp to be checked, relative to sapling pos + -- minp_relative.y = 1 because sapling pos has been checked + {x = -2, y = 1, z = -2}, + {x = 2, y = 15, z = 2}, + -- maximum interval of interior volume check + 4) + + return itemstack + end, +}) + +minetest.register_node("default:emergent_jungle_sapling", { + description = S("Emergent Jungle Tree Sapling"), + drawtype = "plantlike", + tiles = {"default_emergent_jungle_sapling.png"}, + inventory_image = "default_emergent_jungle_sapling.png", + wield_image = "default_emergent_jungle_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = grow_sapling, + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:emergent_jungle_sapling", + -- minp, maxp to be checked, relative to sapling pos + {x = -3, y = -5, z = -3}, + {x = 3, y = 31, z = 3}, + -- maximum interval of interior volume check + 4) + + return itemstack + end, +}) + + +minetest.register_node("default:pine_tree", { + description = S("Pine Tree"), + tiles = {"default_pine_tree_top.png", "default_pine_tree_top.png", + "default_pine_tree.png"}, + paramtype2 = "facedir", + is_ground_content = false, + groups = {tree = 1, choppy = 3, oddly_breakable_by_hand = 1, flammable = 3}, + sounds = default.node_sound_wood_defaults(), + + on_place = minetest.rotate_node +}) + +minetest.register_node("default:pine_wood", { + description = S("Pine Wood Planks"), + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_pine_wood.png"}, + is_ground_content = false, + groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3, wood = 1}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("default:pine_needles",{ + description = S("Pine Needles"), + drawtype = "allfaces_optional", + tiles = {"default_pine_needles.png"}, + waving = 1, + paramtype = "light", + is_ground_content = false, + groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"default:pine_sapling"}, rarity = 20}, + {items = {"default:pine_needles"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + + after_place_node = after_place_leaves, +}) + +minetest.register_node("default:pine_sapling", { + description = S("Pine Tree Sapling"), + drawtype = "plantlike", + tiles = {"default_pine_sapling.png"}, + inventory_image = "default_pine_sapling.png", + wield_image = "default_pine_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = grow_sapling, + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 3, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:pine_sapling", + -- minp, maxp to be checked, relative to sapling pos + -- minp_relative.y = 1 because sapling pos has been checked + {x = -2, y = 1, z = -2}, + {x = 2, y = 14, z = 2}, + -- maximum interval of interior volume check + 4) + + return itemstack + end, +}) + + +minetest.register_node("default:acacia_tree", { + description = S("Acacia Tree"), + tiles = {"default_acacia_tree_top.png", "default_acacia_tree_top.png", + "default_acacia_tree.png"}, + paramtype2 = "facedir", + is_ground_content = false, + groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + + on_place = minetest.rotate_node +}) + +minetest.register_node("default:acacia_wood", { + description = S("Acacia Wood Planks"), + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_acacia_wood.png"}, + is_ground_content = false, + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("default:acacia_leaves", { + description = S("Acacia Tree Leaves"), + drawtype = "allfaces_optional", + tiles = {"default_acacia_leaves.png"}, + special_tiles = {"default_acacia_leaves_simple.png"}, + waving = 1, + paramtype = "light", + is_ground_content = false, + groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"default:acacia_sapling"}, rarity = 20}, + {items = {"default:acacia_leaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + + after_place_node = after_place_leaves, +}) + +minetest.register_node("default:acacia_sapling", { + description = S("Acacia Tree Sapling"), + drawtype = "plantlike", + tiles = {"default_acacia_sapling.png"}, + inventory_image = "default_acacia_sapling.png", + wield_image = "default_acacia_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = grow_sapling, + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:acacia_sapling", + -- minp, maxp to be checked, relative to sapling pos + -- minp_relative.y = 1 because sapling pos has been checked + {x = -4, y = 1, z = -4}, + {x = 4, y = 7, z = 4}, + -- maximum interval of interior volume check + 4) + + return itemstack + end, +}) + +minetest.register_node("default:aspen_tree", { + description = S("Aspen Tree"), + tiles = {"default_aspen_tree_top.png", "default_aspen_tree_top.png", + "default_aspen_tree.png"}, + paramtype2 = "facedir", + is_ground_content = false, + groups = {tree = 1, choppy = 3, oddly_breakable_by_hand = 1, flammable = 3}, + sounds = default.node_sound_wood_defaults(), + + on_place = minetest.rotate_node +}) + +minetest.register_node("default:aspen_wood", { + description = S("Aspen Wood Planks"), + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_aspen_wood.png"}, + is_ground_content = false, + groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3, wood = 1}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("default:aspen_leaves", { + description = S("Aspen Tree Leaves"), + drawtype = "allfaces_optional", + tiles = {"default_aspen_leaves.png"}, + waving = 1, + paramtype = "light", + is_ground_content = false, + groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"default:aspen_sapling"}, rarity = 20}, + {items = {"default:aspen_leaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + + after_place_node = after_place_leaves, +}) + +minetest.register_node("default:aspen_sapling", { + description = S("Aspen Tree Sapling"), + drawtype = "plantlike", + tiles = {"default_aspen_sapling.png"}, + inventory_image = "default_aspen_sapling.png", + wield_image = "default_aspen_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = grow_sapling, + selection_box = { + type = "fixed", + fixed = {-3 / 16, -0.5, -3 / 16, 3 / 16, 0.5, 3 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 3, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:aspen_sapling", + -- minp, maxp to be checked, relative to sapling pos + -- minp_relative.y = 1 because sapling pos has been checked + {x = -2, y = 1, z = -2}, + {x = 2, y = 12, z = 2}, + -- maximum interval of interior volume check + 4) + + return itemstack + end, +}) + +-- +-- Ores +-- + +minetest.register_node("default:stone_with_coal", { + description = S("Coal Ore"), + tiles = {"default_stone.png^default_mineral_coal.png"}, + groups = {cracky = 3}, + drop = "default:coal_lump", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:coalblock", { + description = S("Coal Block"), + tiles = {"default_coal_block.png"}, + is_ground_content = false, + groups = {cracky = 3}, + sounds = default.node_sound_stone_defaults(), +}) + + +minetest.register_node("default:stone_with_iron", { + description = S("Iron Ore"), + tiles = {"default_stone.png^default_mineral_iron.png"}, + groups = {cracky = 2}, + drop = "default:iron_lump", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:steelblock", { + description = S("Steel Block"), + tiles = {"default_steel_block.png"}, + is_ground_content = false, + groups = {cracky = 1, level = 2}, + sounds = default.node_sound_metal_defaults(), +}) + + +minetest.register_node("default:stone_with_copper", { + description = S("Copper Ore"), + tiles = {"default_stone.png^default_mineral_copper.png"}, + groups = {cracky = 2}, + drop = "default:copper_lump", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:copperblock", { + description = S("Copper Block"), + tiles = {"default_copper_block.png"}, + is_ground_content = false, + groups = {cracky = 1, level = 2}, + sounds = default.node_sound_metal_defaults(), +}) + + +minetest.register_node("default:stone_with_tin", { + description = S("Tin Ore"), + tiles = {"default_stone.png^default_mineral_tin.png"}, + groups = {cracky = 2}, + drop = "default:tin_lump", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:tinblock", { + description = S("Tin Block"), + tiles = {"default_tin_block.png"}, + is_ground_content = false, + groups = {cracky = 1, level = 2}, + sounds = default.node_sound_metal_defaults(), +}) + + +minetest.register_node("default:bronzeblock", { + description = S("Bronze Block"), + tiles = {"default_bronze_block.png"}, + is_ground_content = false, + groups = {cracky = 1, level = 2}, + sounds = default.node_sound_metal_defaults(), +}) + + +minetest.register_node("default:stone_with_mese", { + description = S("Mese Ore"), + tiles = {"default_stone.png^default_mineral_mese.png"}, + groups = {cracky = 1}, + drop = "default:mese_crystal", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:mese", { + description = S("Mese Block"), + tiles = {"default_mese_block.png"}, + paramtype = "light", + groups = {cracky = 1, level = 2}, + sounds = default.node_sound_stone_defaults(), + light_source = 3, +}) + + +minetest.register_node("default:stone_with_gold", { + description = S("Gold Ore"), + tiles = {"default_stone.png^default_mineral_gold.png"}, + groups = {cracky = 2}, + drop = "default:gold_lump", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:goldblock", { + description = S("Gold Block"), + tiles = {"default_gold_block.png"}, + is_ground_content = false, + groups = {cracky = 1}, + sounds = default.node_sound_metal_defaults(), +}) + + +minetest.register_node("default:stone_with_diamond", { + description = S("Diamond Ore"), + tiles = {"default_stone.png^default_mineral_diamond.png"}, + groups = {cracky = 1}, + drop = "default:diamond", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:diamondblock", { + description = S("Diamond Block"), + tiles = {"default_diamond_block.png"}, + is_ground_content = false, + groups = {cracky = 1, level = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +-- +-- Plantlife (non-cubic) +-- + +minetest.register_node("default:cactus", { + description = S("Cactus"), + tiles = {"default_cactus_top.png", "default_cactus_top.png", + "default_cactus_side.png"}, + paramtype2 = "facedir", + groups = {choppy = 3}, + sounds = default.node_sound_wood_defaults(), + on_place = minetest.rotate_node, +}) + +minetest.register_node("default:large_cactus_seedling", { + description = S("Large Cactus Seedling"), + drawtype = "plantlike", + tiles = {"default_large_cactus_seedling.png"}, + inventory_image = "default_large_cactus_seedling.png", + wield_image = "default_large_cactus_seedling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "fixed", + fixed = { + -5 / 16, -0.5, -5 / 16, + 5 / 16, 0.5, 5 / 16 + } + }, + groups = {choppy = 3, dig_immediate = 3, attached_node = 1}, + sounds = default.node_sound_wood_defaults(), + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:large_cactus_seedling", + {x = -2, y = -1, z = -2}, + {x = 2, y = 5, z = 2}, + 4) + + return itemstack + end, + + on_construct = function(pos) + -- Normal cactus farming adds 1 cactus node by ABM, + -- interval 12s, chance 83. + -- Consider starting with 5 cactus nodes. We make sure that growing a + -- large cactus is not a faster way to produce new cactus nodes. + -- Confirmed by experiment, when farming 5 cacti, on average 1 new + -- cactus node is added on average every + -- 83 / 5 = 16.6 intervals = 16.6 * 12 = 199.2s. + -- Large cactus contains on average 14 cactus nodes. + -- 14 * 199.2 = 2788.8s. + -- Set random range to average to 2789s. + minetest.get_node_timer(pos):start(math.random(1859, 3719)) + end, + + on_timer = function(pos) + local node_under = minetest.get_node_or_nil( + {x = pos.x, y = pos.y - 1, z = pos.z}) + if not node_under then + -- Node under not yet loaded, try later + minetest.get_node_timer(pos):start(300) + return + end + + if minetest.get_item_group(node_under.name, "sand") == 0 then + -- Seedling dies + minetest.remove_node(pos) + return + end + + local light_level = minetest.get_node_light(pos) + if not light_level or light_level < 13 then + -- Too dark for growth, try later in case it's night + minetest.get_node_timer(pos):start(300) + return + end + + minetest.log("action", "A large cactus seedling grows into a large" .. + "cactus at ".. minetest.pos_to_string(pos)) + default.grow_large_cactus(pos) + end, +}) + +minetest.register_node("default:papyrus", { + description = S("Papyrus"), + drawtype = "plantlike", + tiles = {"default_papyrus.png"}, + inventory_image = "default_papyrus.png", + wield_image = "default_papyrus.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 0.5, 6 / 16}, + }, + groups = {snappy = 3, flammable = 2}, + sounds = default.node_sound_leaves_defaults(), + + after_dig_node = function(pos, node, metadata, digger) + default.dig_up(pos, node, digger) + end, +}) + +minetest.register_node("default:dry_shrub", { + description = S("Dry Shrub"), + drawtype = "plantlike", + waving = 1, + tiles = {"default_dry_shrub.png"}, + inventory_image = "default_dry_shrub.png", + wield_image = "default_dry_shrub.png", + paramtype = "light", + paramtype2 = "meshoptions", + place_param2 = 4, + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flammable = 3, attached_node = 1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 4 / 16, 6 / 16}, + }, +}) + +minetest.register_node("default:junglegrass", { + description = S("Jungle Grass"), + drawtype = "plantlike", + waving = 1, + visual_scale = 1.69, + tiles = {"default_junglegrass.png"}, + inventory_image = "default_junglegrass.png", + wield_image = "default_junglegrass.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flora = 1, attached_node = 1, grass = 1, junglegrass = 1, flammable = 1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 0.5, 6 / 16}, + }, +}) + + +minetest.register_node("default:grass_1", { + description = S("Grass"), + drawtype = "plantlike", + waving = 1, + tiles = {"default_grass_1.png"}, + -- Use texture of a taller grass stage in inventory + inventory_image = "default_grass_3.png", + wield_image = "default_grass_3.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flora = 1, attached_node = 1, grass = 1, + normal_grass = 1, flammable = 1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -5 / 16, 6 / 16}, + }, + + on_place = function(itemstack, placer, pointed_thing) + -- place a random grass node + local stack = ItemStack("default:grass_" .. math.random(1,5)) + local ret = minetest.item_place(stack, placer, pointed_thing) + return ItemStack("default:grass_1 " .. + itemstack:get_count() - (1 - ret:get_count())) + end, +}) + +for i = 2, 5 do + minetest.register_node("default:grass_" .. i, { + description = S("Grass"), + drawtype = "plantlike", + waving = 1, + tiles = {"default_grass_" .. i .. ".png"}, + inventory_image = "default_grass_" .. i .. ".png", + wield_image = "default_grass_" .. i .. ".png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "default:grass_1", + groups = {snappy = 3, flora = 1, attached_node = 1, + not_in_creative_inventory = 1, grass = 1, + normal_grass = 1, flammable = 1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -3 / 16, 6 / 16}, + }, + }) +end + + +minetest.register_node("default:dry_grass_1", { + description = S("Savanna Grass"), + drawtype = "plantlike", + waving = 1, + tiles = {"default_dry_grass_1.png"}, + inventory_image = "default_dry_grass_3.png", + wield_image = "default_dry_grass_3.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flammable = 3, flora = 1, + attached_node = 1, grass = 1, dry_grass = 1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -3 / 16, 6 / 16}, + }, + + on_place = function(itemstack, placer, pointed_thing) + -- place a random dry grass node + local stack = ItemStack("default:dry_grass_" .. math.random(1, 5)) + local ret = minetest.item_place(stack, placer, pointed_thing) + return ItemStack("default:dry_grass_1 " .. + itemstack:get_count() - (1 - ret:get_count())) + end, +}) + +for i = 2, 5 do + minetest.register_node("default:dry_grass_" .. i, { + description = S("Savanna Grass"), + drawtype = "plantlike", + waving = 1, + tiles = {"default_dry_grass_" .. i .. ".png"}, + inventory_image = "default_dry_grass_" .. i .. ".png", + wield_image = "default_dry_grass_" .. i .. ".png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flammable = 3, flora = 1, attached_node = 1, + not_in_creative_inventory = 1, grass = 1, dry_grass = 1}, + drop = "default:dry_grass_1", + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -1 / 16, 6 / 16}, + }, + }) +end + + +minetest.register_node("default:fern_1", { + description = S("Fern"), + drawtype = "plantlike", + waving = 1, + tiles = {"default_fern_1.png"}, + inventory_image = "default_fern_1.png", + wield_image = "default_fern_1.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flammable = 3, flora = 1, grass = 1, + fern = 1, attached_node = 1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -0.25, 6 / 16}, + }, + + on_place = function(itemstack, placer, pointed_thing) + -- place a random fern node + local stack = ItemStack("default:fern_" .. math.random(1, 3)) + local ret = minetest.item_place(stack, placer, pointed_thing) + return ItemStack("default:fern_1 " .. + itemstack:get_count() - (1 - ret:get_count())) + end, +}) + +for i = 2, 3 do + minetest.register_node("default:fern_" .. i, { + description = S("Fern"), + drawtype = "plantlike", + waving = 1, + visual_scale = 2, + tiles = {"default_fern_" .. i .. ".png"}, + inventory_image = "default_fern_" .. i .. ".png", + wield_image = "default_fern_" .. i .. ".png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flammable = 3, flora = 1, attached_node = 1, + grass = 1, fern = 1, not_in_creative_inventory = 1}, + drop = "default:fern_1", + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -0.25, 6 / 16}, + }, + }) +end + + +minetest.register_node("default:marram_grass_1", { + description = S("Marram Grass"), + drawtype = "plantlike", + waving = 1, + tiles = {"default_marram_grass_1.png"}, + inventory_image = "default_marram_grass_1.png", + wield_image = "default_marram_grass_1.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flammable = 3, flora = 1, grass = 1, marram_grass = 1, + attached_node = 1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -0.25, 6 / 16}, + }, + + on_place = function(itemstack, placer, pointed_thing) + -- place a random marram grass node + local stack = ItemStack("default:marram_grass_" .. math.random(1, 3)) + local ret = minetest.item_place(stack, placer, pointed_thing) + return ItemStack("default:marram_grass_1 " .. + itemstack:get_count() - (1 - ret:get_count())) + end, +}) + +for i = 2, 3 do + minetest.register_node("default:marram_grass_" .. i, { + description = S("Marram Grass"), + drawtype = "plantlike", + waving = 1, + tiles = {"default_marram_grass_" .. i .. ".png"}, + inventory_image = "default_marram_grass_" .. i .. ".png", + wield_image = "default_marram_grass_" .. i .. ".png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flammable = 3, flora = 1, attached_node = 1, + grass = 1, marram_grass = 1, not_in_creative_inventory = 1}, + drop = "default:marram_grass_1", + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -0.25, 6 / 16}, + }, + }) +end + + +minetest.register_node("default:bush_stem", { + description = S("Bush Stem"), + drawtype = "plantlike", + visual_scale = 1.41, + tiles = {"default_bush_stem.png"}, + inventory_image = "default_bush_stem.png", + wield_image = "default_bush_stem.png", + paramtype = "light", + sunlight_propagates = true, + groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + selection_box = { + type = "fixed", + fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, 0.5, 7 / 16}, + }, +}) + +minetest.register_node("default:bush_leaves", { + description = S("Bush Leaves"), + drawtype = "allfaces_optional", + tiles = {"default_leaves_simple.png"}, + paramtype = "light", + groups = {snappy = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"default:bush_sapling"}, rarity = 5}, + {items = {"default:bush_leaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + + after_place_node = after_place_leaves, +}) + +minetest.register_node("default:bush_sapling", { + description = S("Bush Sapling"), + drawtype = "plantlike", + tiles = {"default_bush_sapling.png"}, + inventory_image = "default_bush_sapling.png", + wield_image = "default_bush_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = grow_sapling, + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 2 / 16, 4 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:bush_sapling", + -- minp, maxp to be checked, relative to sapling pos + {x = -1, y = 0, z = -1}, + {x = 1, y = 1, z = 1}, + -- maximum interval of interior volume check + 2) + + return itemstack + end, +}) + +minetest.register_node("default:blueberry_bush_leaves_with_berries", { + description = S("Blueberry Bush Leaves with Berries"), + drawtype = "allfaces_optional", + tiles = {"default_blueberry_bush_leaves.png^default_blueberry_overlay.png"}, + paramtype = "light", + groups = {snappy = 3, flammable = 2, leaves = 1, dig_immediate = 3}, + drop = "default:blueberries", + sounds = default.node_sound_leaves_defaults(), + node_dig_prediction = "default:blueberry_bush_leaves", + + after_dig_node = function(pos, oldnode, oldmetadata, digger) + minetest.set_node(pos, {name = "default:blueberry_bush_leaves"}) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, +}) + +minetest.register_node("default:blueberry_bush_leaves", { + description = S("Blueberry Bush Leaves"), + drawtype = "allfaces_optional", + tiles = {"default_blueberry_bush_leaves.png"}, + paramtype = "light", + groups = {snappy = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"default:blueberry_bush_sapling"}, rarity = 5}, + {items = {"default:blueberry_bush_leaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + + on_timer = function(pos, elapsed) + if minetest.get_node_light(pos) < 11 then + minetest.get_node_timer(pos):start(200) + else + minetest.set_node(pos, {name = "default:blueberry_bush_leaves_with_berries"}) + end + end, + + after_place_node = after_place_leaves, +}) + +minetest.register_node("default:blueberry_bush_sapling", { + description = S("Blueberry Bush Sapling"), + drawtype = "plantlike", + tiles = {"default_blueberry_bush_sapling.png"}, + inventory_image = "default_blueberry_bush_sapling.png", + wield_image = "default_blueberry_bush_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = grow_sapling, + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 2 / 16, 4 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:blueberry_bush_sapling", + -- minp, maxp to be checked, relative to sapling pos + {x = -1, y = 0, z = -1}, + {x = 1, y = 1, z = 1}, + -- maximum interval of interior volume check + 2) + + return itemstack + end, +}) + +minetest.register_node("default:acacia_bush_stem", { + description = S("Acacia Bush Stem"), + drawtype = "plantlike", + visual_scale = 1.41, + tiles = {"default_acacia_bush_stem.png"}, + inventory_image = "default_acacia_bush_stem.png", + wield_image = "default_acacia_bush_stem.png", + paramtype = "light", + sunlight_propagates = true, + groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + selection_box = { + type = "fixed", + fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, 0.5, 7 / 16}, + }, +}) + +minetest.register_node("default:acacia_bush_leaves", { + description = S("Acacia Bush Leaves"), + drawtype = "allfaces_optional", + tiles = {"default_acacia_leaves_simple.png"}, + paramtype = "light", + groups = {snappy = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"default:acacia_bush_sapling"}, rarity = 5}, + {items = {"default:acacia_bush_leaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + + after_place_node = after_place_leaves, +}) + +minetest.register_node("default:acacia_bush_sapling", { + description = S("Acacia Bush Sapling"), + drawtype = "plantlike", + tiles = {"default_acacia_bush_sapling.png"}, + inventory_image = "default_acacia_bush_sapling.png", + wield_image = "default_acacia_bush_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = grow_sapling, + selection_box = { + type = "fixed", + fixed = {-3 / 16, -0.5, -3 / 16, 3 / 16, 2 / 16, 3 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:acacia_bush_sapling", + -- minp, maxp to be checked, relative to sapling pos + {x = -1, y = 0, z = -1}, + {x = 1, y = 1, z = 1}, + -- maximum interval of interior volume check + 2) + + return itemstack + end, +}) + +minetest.register_node("default:pine_bush_stem", { + description = S("Pine Bush Stem"), + drawtype = "plantlike", + visual_scale = 1.41, + tiles = {"default_pine_bush_stem.png"}, + inventory_image = "default_pine_bush_stem.png", + wield_image = "default_pine_bush_stem.png", + paramtype = "light", + sunlight_propagates = true, + groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + selection_box = { + type = "fixed", + fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, 0.5, 7 / 16}, + }, +}) + +minetest.register_node("default:pine_bush_needles", { + description = S("Pine Bush Needles"), + drawtype = "allfaces_optional", + tiles = {"default_pine_needles.png"}, + paramtype = "light", + groups = {snappy = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"default:pine_bush_sapling"}, rarity = 5}, + {items = {"default:pine_bush_needles"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + + after_place_node = after_place_leaves, +}) + +minetest.register_node("default:pine_bush_sapling", { + description = S("Pine Bush Sapling"), + drawtype = "plantlike", + tiles = {"default_pine_bush_sapling.png"}, + inventory_image = "default_pine_bush_sapling.png", + wield_image = "default_pine_bush_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = grow_sapling, + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 2 / 16, 4 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:pine_bush_sapling", + -- minp, maxp to be checked, relative to sapling pos + {x = -1, y = 0, z = -1}, + {x = 1, y = 1, z = 1}, + -- maximum interval of interior volume check + 2) + + return itemstack + end, +}) + + +minetest.register_node("default:sand_with_kelp", { + description = S("Kelp"), + drawtype = "plantlike_rooted", + waving = 1, + tiles = {"default_sand.png"}, + special_tiles = {{name = "default_kelp.png", tileable_vertical = true}}, + inventory_image = "default_kelp.png", + wield_image = "default_kelp.png", + paramtype = "light", + paramtype2 = "leveled", + groups = {snappy = 3}, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, + {-2/16, 0.5, -2/16, 2/16, 3.5, 2/16}, + }, + }, + node_dig_prediction = "default:sand", + node_placement_prediction = "", + sounds = default.node_sound_sand_defaults({ + dig = {name = "default_dig_snappy", gain = 0.2}, + dug = {name = "default_grass_footstep", gain = 0.25}, + }), + + on_place = function(itemstack, placer, pointed_thing) + -- Call on_rightclick if the pointed node defines it + if pointed_thing.type == "node" and not (placer and placer:is_player() + and placer:get_player_control().sneak) then + local node_ptu = minetest.get_node(pointed_thing.under) + local def_ptu = minetest.registered_nodes[node_ptu.name] + if def_ptu and def_ptu.on_rightclick then + return def_ptu.on_rightclick(pointed_thing.under, node_ptu, placer, + itemstack, pointed_thing) + end + end + + local pos = pointed_thing.under + if minetest.get_node(pos).name ~= "default:sand" then + return itemstack + end + + local height = math.random(4, 6) + local pos_top = {x = pos.x, y = pos.y + height, z = pos.z} + local node_top = minetest.get_node(pos_top) + local def_top = minetest.registered_nodes[node_top.name] + local player_name = placer:get_player_name() + + if def_top and def_top.liquidtype == "source" and + minetest.get_item_group(node_top.name, "water") > 0 then + if not minetest.is_protected(pos, player_name) and + not minetest.is_protected(pos_top, player_name) then + minetest.set_node(pos, {name = "default:sand_with_kelp", + param2 = height * 16}) + if not minetest.is_creative_enabled(player_name) then + itemstack:take_item() + end + else + minetest.chat_send_player(player_name, "Node is protected") + minetest.record_protection_violation(pos, player_name) + end + end + + return itemstack + end, + + after_dig_node = function(pos, oldnode, oldmetadata, digger) + minetest.set_node(pos, {name = "default:sand"}) + end +}) + + +-- +-- Corals +-- + +local function coral_on_place(itemstack, placer, pointed_thing) + if pointed_thing.type ~= "node" then + return itemstack + end + + local player_name = placer and placer:get_player_name() + local pos_under = pointed_thing.under + local pos_above = pointed_thing.above + local node_under = minetest.get_node(pos_under) + local def_under = minetest.registered_nodes[node_under.name] + + if def_under and def_under.on_rightclick and not ( + placer and placer:is_player() and placer:get_player_control().sneak) then + return def_under.on_rightclick(pos_under, node_under, + placer, itemstack, pointed_thing) + end + + if node_under.name ~= "default:coral_skeleton" or + minetest.get_node(pos_above).name ~= "default:water_source" then + return itemstack + end + + if minetest.is_protected(pos_under, player_name) or + minetest.is_protected(pos_above, player_name) then + minetest.record_protection_violation(pos_under, player_name) + return itemstack + end + + node_under.name = itemstack:get_name() + minetest.set_node(pos_under, node_under) + if not minetest.is_creative_enabled(player_name) then + itemstack:take_item() + end + + return itemstack +end + +minetest.register_node("default:coral_green", { + description = S("Green Coral"), + drawtype = "plantlike_rooted", + waving = 1, + paramtype = "light", + tiles = {"default_coral_skeleton.png"}, + special_tiles = {{name = "default_coral_green.png", tileable_vertical = true}}, + inventory_image = "default_coral_green.png", + wield_image = "default_coral_green.png", + groups = {snappy = 3}, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, + {-4/16, 0.5, -4/16, 4/16, 1.5, 4/16}, + }, + }, + node_dig_prediction = "default:coral_skeleton", + node_placement_prediction = "", + sounds = default.node_sound_stone_defaults({ + dig = {name = "default_dig_snappy", gain = 0.2}, + dug = {name = "default_grass_footstep", gain = 0.25}, + }), + + on_place = coral_on_place, + + after_dig_node = function(pos, oldnode, oldmetadata, digger) + minetest.set_node(pos, {name = "default:coral_skeleton"}) + end, +}) + +minetest.register_node("default:coral_pink", { + description = S("Pink Coral"), + drawtype = "plantlike_rooted", + waving = 1, + paramtype = "light", + tiles = {"default_coral_skeleton.png"}, + special_tiles = {{name = "default_coral_pink.png", tileable_vertical = true}}, + inventory_image = "default_coral_pink.png", + wield_image = "default_coral_pink.png", + groups = {snappy = 3}, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, + {-4/16, 0.5, -4/16, 4/16, 1.5, 4/16}, + }, + }, + node_dig_prediction = "default:coral_skeleton", + node_placement_prediction = "", + sounds = default.node_sound_stone_defaults({ + dig = {name = "default_dig_snappy", gain = 0.2}, + dug = {name = "default_grass_footstep", gain = 0.25}, + }), + + on_place = coral_on_place, + + after_dig_node = function(pos, oldnode, oldmetadata, digger) + minetest.set_node(pos, {name = "default:coral_skeleton"}) + end, +}) + +minetest.register_node("default:coral_cyan", { + description = S("Cyan Coral"), + drawtype = "plantlike_rooted", + waving = 1, + paramtype = "light", + tiles = {"default_coral_skeleton.png"}, + special_tiles = {{name = "default_coral_cyan.png", tileable_vertical = true}}, + inventory_image = "default_coral_cyan.png", + wield_image = "default_coral_cyan.png", + groups = {snappy = 3}, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, + {-4/16, 0.5, -4/16, 4/16, 1.5, 4/16}, + }, + }, + node_dig_prediction = "default:coral_skeleton", + node_placement_prediction = "", + sounds = default.node_sound_stone_defaults({ + dig = {name = "default_dig_snappy", gain = 0.2}, + dug = {name = "default_grass_footstep", gain = 0.25}, + }), + + on_place = coral_on_place, + + after_dig_node = function(pos, oldnode, oldmetadata, digger) + minetest.set_node(pos, {name = "default:coral_skeleton"}) + end, +}) + +minetest.register_node("default:coral_brown", { + description = S("Brown Coral"), + tiles = {"default_coral_brown.png"}, + groups = {cracky = 3}, + drop = "default:coral_skeleton", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:coral_orange", { + description = S("Orange Coral"), + tiles = {"default_coral_orange.png"}, + groups = {cracky = 3}, + drop = "default:coral_skeleton", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:coral_skeleton", { + description = S("Coral Skeleton"), + tiles = {"default_coral_skeleton.png"}, + groups = {cracky = 3}, + sounds = default.node_sound_stone_defaults(), +}) + + +-- +-- Liquids +-- + +minetest.register_node("default:water_source", { + description = S("Water Source"), + drawtype = "liquid", + waving = 3, + tiles = { + { + name = "default_water_source_animated.png", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 2.0, + }, + }, + { + name = "default_water_source_animated.png", + backface_culling = true, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 2.0, + }, + }, + }, + use_texture_alpha = "blend", + paramtype = "light", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drop = "", + drowning = 1, + liquidtype = "source", + liquid_alternative_flowing = "default:water_flowing", + liquid_alternative_source = "default:water_source", + liquid_viscosity = 1, + post_effect_color = {a = 103, r = 30, g = 60, b = 90}, + groups = {water = 3, liquid = 3, cools_lava = 1}, + sounds = default.node_sound_water_defaults(), +}) + +minetest.register_node("default:water_flowing", { + description = S("Flowing Water"), + drawtype = "flowingliquid", + waving = 3, + tiles = {"default_water.png"}, + special_tiles = { + { + name = "default_water_flowing_animated.png", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 0.5, + }, + }, + { + name = "default_water_flowing_animated.png", + backface_culling = true, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 0.5, + }, + }, + }, + use_texture_alpha = "blend", + paramtype = "light", + paramtype2 = "flowingliquid", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drop = "", + drowning = 1, + liquidtype = "flowing", + liquid_alternative_flowing = "default:water_flowing", + liquid_alternative_source = "default:water_source", + liquid_viscosity = 1, + post_effect_color = {a = 103, r = 30, g = 60, b = 90}, + groups = {water = 3, liquid = 3, not_in_creative_inventory = 1, + cools_lava = 1}, + sounds = default.node_sound_water_defaults(), +}) + + +minetest.register_node("default:river_water_source", { + description = S("River Water Source"), + drawtype = "liquid", + tiles = { + { + name = "default_river_water_source_animated.png", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 2.0, + }, + }, + { + name = "default_river_water_source_animated.png", + backface_culling = true, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 2.0, + }, + }, + }, + use_texture_alpha = "blend", + paramtype = "light", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drop = "", + drowning = 1, + liquidtype = "source", + liquid_alternative_flowing = "default:river_water_flowing", + liquid_alternative_source = "default:river_water_source", + liquid_viscosity = 1, + -- Not renewable to avoid horizontal spread of water sources in sloping + -- rivers that can cause water to overflow riverbanks and cause floods. + -- River water source is instead made renewable by the 'force renew' + -- option used in the 'bucket' mod by the river water bucket. + liquid_renewable = false, + liquid_range = 2, + post_effect_color = {a = 103, r = 30, g = 76, b = 90}, + groups = {water = 3, liquid = 3, cools_lava = 1}, + sounds = default.node_sound_water_defaults(), +}) + +minetest.register_node("default:river_water_flowing", { + description = S("Flowing River Water"), + drawtype = "flowingliquid", + tiles = {"default_river_water.png"}, + special_tiles = { + { + name = "default_river_water_flowing_animated.png", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 0.5, + }, + }, + { + name = "default_river_water_flowing_animated.png", + backface_culling = true, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 0.5, + }, + }, + }, + use_texture_alpha = "blend", + paramtype = "light", + paramtype2 = "flowingliquid", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drop = "", + drowning = 1, + liquidtype = "flowing", + liquid_alternative_flowing = "default:river_water_flowing", + liquid_alternative_source = "default:river_water_source", + liquid_viscosity = 1, + liquid_renewable = false, + liquid_range = 2, + post_effect_color = {a = 103, r = 30, g = 76, b = 90}, + groups = {water = 3, liquid = 3, not_in_creative_inventory = 1, + cools_lava = 1}, + sounds = default.node_sound_water_defaults(), +}) + + +minetest.register_node("default:lava_source", { + description = S("Lava Source"), + drawtype = "liquid", + tiles = { + { + name = "default_lava_source_animated.png", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 3.0, + }, + }, + { + name = "default_lava_source_animated.png", + backface_culling = true, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 3.0, + }, + }, + }, + paramtype = "light", + light_source = default.LIGHT_MAX - 1, + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drop = "", + drowning = 1, + liquidtype = "source", + liquid_alternative_flowing = "default:lava_flowing", + liquid_alternative_source = "default:lava_source", + liquid_viscosity = 7, + liquid_renewable = false, + damage_per_second = 4 * 2, + post_effect_color = {a = 191, r = 255, g = 64, b = 0}, + groups = {lava = 3, liquid = 2, igniter = 1}, +}) + +minetest.register_node("default:lava_flowing", { + description = S("Flowing Lava"), + drawtype = "flowingliquid", + tiles = {"default_lava.png"}, + special_tiles = { + { + name = "default_lava_flowing_animated.png", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 3.3, + }, + }, + { + name = "default_lava_flowing_animated.png", + backface_culling = true, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 3.3, + }, + }, + }, + paramtype = "light", + paramtype2 = "flowingliquid", + light_source = default.LIGHT_MAX - 1, + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drop = "", + drowning = 1, + liquidtype = "flowing", + liquid_alternative_flowing = "default:lava_flowing", + liquid_alternative_source = "default:lava_source", + liquid_viscosity = 7, + liquid_renewable = false, + damage_per_second = 4 * 2, + post_effect_color = {a = 191, r = 255, g = 64, b = 0}, + groups = {lava = 3, liquid = 2, igniter = 1, + not_in_creative_inventory = 1}, +}) + +-- +-- Tools / "Advanced" crafting / Non-"natural" +-- + +local bookshelf_formspec = + "size[8,7;]" .. + "list[context;books;0,0.3;8,2;]" .. + "list[current_player;main;0,2.85;8,1;]" .. + "list[current_player;main;0,4.08;8,3;8]" .. + "listring[context;books]" .. + "listring[current_player;main]" .. + default.get_hotbar_bg(0,2.85) + +local function update_bookshelf(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local invlist = inv:get_list("books") + + local formspec = bookshelf_formspec + -- Inventory slots overlay + local bx, by = 0, 0.3 + local n_written, n_empty = 0, 0 + for i = 1, 16 do + if i == 9 then + bx = 0 + by = by + 1 + end + local stack = invlist[i] + if stack:is_empty() then + formspec = formspec .. + "image[" .. bx .. "," .. by .. ";1,1;default_bookshelf_slot.png]" + else + local metatable = stack:get_meta():to_table() or {} + if metatable.fields and metatable.fields.text then + n_written = n_written + stack:get_count() + else + n_empty = n_empty + stack:get_count() + end + end + bx = bx + 1 + end + meta:set_string("formspec", formspec) + if n_written + n_empty == 0 then + meta:set_string("infotext", S("Empty Bookshelf")) + else + meta:set_string("infotext", S("Bookshelf (@1 written, @2 empty books)", n_written, n_empty)) + end +end + +local default_bookshelf_def = { + description = S("Bookshelf"), + tiles = {"default_wood.png", "default_wood.png", "default_wood.png", + "default_wood.png", "default_bookshelf.png", "default_bookshelf.png"}, + paramtype2 = "facedir", + is_ground_content = false, + groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}, + sounds = default.node_sound_wood_defaults(), + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + inv:set_size("books", 8 * 2) + update_bookshelf(pos) + end, + can_dig = function(pos,player) + local inv = minetest.get_meta(pos):get_inventory() + return inv:is_empty("books") + end, + allow_metadata_inventory_put = function(pos, listname, index, stack) + if minetest.get_item_group(stack:get_name(), "book") ~= 0 then + return stack:get_count() + end + return 0 + end, + on_metadata_inventory_put = function(pos) + update_bookshelf(pos) + end, + on_metadata_inventory_take = function(pos) + update_bookshelf(pos) + end, + on_metadata_inventory_move = function(pos) + update_bookshelf(pos) + end, + on_blast = function(pos) + local drops = {} + default.get_inventory_drops(pos, "books", drops) + drops[#drops+1] = "default:bookshelf" + minetest.remove_node(pos) + return drops + end, +} +default.set_inventory_action_loggers(default_bookshelf_def, "bookshelf") +minetest.register_node("default:bookshelf", default_bookshelf_def) + +local function register_sign(material, desc, def) + minetest.register_node("default:sign_wall_" .. material, { + description = desc, + drawtype = "nodebox", + tiles = {"default_sign_wall_" .. material .. ".png"}, + inventory_image = "default_sign_" .. material .. ".png", + wield_image = "default_sign_" .. material .. ".png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + is_ground_content = false, + walkable = false, + use_texture_alpha = "opaque", + node_box = { + type = "wallmounted", + wall_top = {-0.4375, 0.4375, -0.3125, 0.4375, 0.5, 0.3125}, + wall_bottom = {-0.4375, -0.5, -0.3125, 0.4375, -0.4375, 0.3125}, + wall_side = {-0.5, -0.3125, -0.4375, -0.4375, 0.3125, 0.4375}, + }, + groups = def.groups, + legacy_wallmounted = true, + sounds = def.sounds, + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[text;;${text}]") + end, + on_receive_fields = function(pos, formname, fields, sender) + if not fields.quit then + return -- workaround for https://github.com/luanti-org/luanti/issues/16187 + end + local player_name = sender:get_player_name() + if minetest.is_protected(pos, player_name) then + minetest.record_protection_violation(pos, player_name) + return + end + local text = fields.text + if not text then + return + end + if #text > 512 then + minetest.chat_send_player(player_name, S("Text too long")) + return + end + text = text:gsub("[%z\1-\8\11-\31\127]", "") -- strip naughty control characters (keeps \t and \n) + default.log_player_action(sender, ("wrote %q to the sign at"):format(text), pos) + local meta = minetest.get_meta(pos) + meta:set_string("text", text) + + if #text > 0 then + meta:set_string("infotext", S('"@1"', text)) + else + meta:set_string("infotext", '') + end + end, + }) +end + +register_sign("wood", S("Wooden Sign"), { + sounds = default.node_sound_wood_defaults(), + groups = {choppy = 2, attached_node = 1, flammable = 2, oddly_breakable_by_hand = 3} +}) + +register_sign("steel", S("Steel Sign"), { + sounds = default.node_sound_metal_defaults(), + groups = {cracky = 2, attached_node = 1} +}) + +minetest.register_node("default:ladder_wood", { + description = S("Wooden Ladder"), + drawtype = "signlike", + tiles = {"default_ladder_wood.png"}, + inventory_image = "default_ladder_wood.png", + wield_image = "default_ladder_wood.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + climbable = true, + is_ground_content = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy = 2, oddly_breakable_by_hand = 3, flammable = 2}, + legacy_wallmounted = true, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("default:ladder_steel", { + description = S("Steel Ladder"), + drawtype = "signlike", + tiles = {"default_ladder_steel.png"}, + inventory_image = "default_ladder_steel.png", + wield_image = "default_ladder_steel.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + climbable = true, + is_ground_content = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {cracky = 2}, + sounds = default.node_sound_metal_defaults(), +}) + +default.register_fence("default:fence_wood", { + description = S("Apple Wood Fence"), + texture = "default_fence_wood.png", + inventory_image = "default_fence_overlay.png^default_wood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_overlay.png^default_wood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + material = "default:wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence("default:fence_acacia_wood", { + description = S("Acacia Wood Fence"), + texture = "default_fence_acacia_wood.png", + inventory_image = "default_fence_overlay.png^default_acacia_wood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_overlay.png^default_acacia_wood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + material = "default:acacia_wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence("default:fence_junglewood", { + description = S("Jungle Wood Fence"), + texture = "default_fence_junglewood.png", + inventory_image = "default_fence_overlay.png^default_junglewood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_overlay.png^default_junglewood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + material = "default:junglewood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence("default:fence_pine_wood", { + description = S("Pine Wood Fence"), + texture = "default_fence_pine_wood.png", + inventory_image = "default_fence_overlay.png^default_pine_wood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_overlay.png^default_pine_wood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + material = "default:pine_wood", + groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence("default:fence_aspen_wood", { + description = S("Aspen Wood Fence"), + texture = "default_fence_aspen_wood.png", + inventory_image = "default_fence_overlay.png^default_aspen_wood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_overlay.png^default_aspen_wood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + material = "default:aspen_wood", + groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence_rail("default:fence_rail_wood", { + description = S("Apple Wood Fence Rail"), + texture = "default_fence_rail_wood.png", + inventory_image = "default_fence_rail_overlay.png^default_wood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_rail_overlay.png^default_wood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + material = "default:wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence_rail("default:fence_rail_acacia_wood", { + description = S("Acacia Wood Fence Rail"), + texture = "default_fence_rail_acacia_wood.png", + inventory_image = "default_fence_rail_overlay.png^default_acacia_wood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_rail_overlay.png^default_acacia_wood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + material = "default:acacia_wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence_rail("default:fence_rail_junglewood", { + description = S("Jungle Wood Fence Rail"), + texture = "default_fence_rail_junglewood.png", + inventory_image = "default_fence_rail_overlay.png^default_junglewood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_rail_overlay.png^default_junglewood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + material = "default:junglewood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence_rail("default:fence_rail_pine_wood", { + description = S("Pine Wood Fence Rail"), + texture = "default_fence_rail_pine_wood.png", + inventory_image = "default_fence_rail_overlay.png^default_pine_wood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_rail_overlay.png^default_pine_wood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + material = "default:pine_wood", + groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence_rail("default:fence_rail_aspen_wood", { + description = S("Aspen Wood Fence Rail"), + texture = "default_fence_rail_aspen_wood.png", + inventory_image = "default_fence_rail_overlay.png^default_aspen_wood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_rail_overlay.png^default_aspen_wood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + material = "default:aspen_wood", + groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +minetest.register_node("default:glass", { + description = S("Glass"), + drawtype = "glasslike_framed_optional", + tiles = {"default_glass.png", "default_glass_detail.png"}, + use_texture_alpha = "clip", -- only needed for stairs API + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + groups = {cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_glass_defaults(), + _tnt_loss = 2, +}) + +minetest.register_node("default:obsidian_glass", { + description = S("Obsidian Glass"), + drawtype = "glasslike_framed_optional", + tiles = {"default_obsidian_glass.png", "default_obsidian_glass_detail.png"}, + use_texture_alpha = "clip", -- only needed for stairs API + paramtype = "light", + is_ground_content = false, + sunlight_propagates = true, + sounds = default.node_sound_glass_defaults(), + groups = {cracky = 3}, +}) + + +minetest.register_node("default:brick", { + description = S("Brick Block"), + paramtype2 = "facedir", + place_param2 = 0, + tiles = { + "default_brick.png^[transformFX", + "default_brick.png", + }, + is_ground_content = false, + groups = {cracky = 3}, + sounds = default.node_sound_stone_defaults(), +}) + + +minetest.register_node("default:meselamp", { + description = S("Mese Lamp"), + drawtype = "glasslike", + tiles = {"default_meselamp.png"}, + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + groups = {cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_glass_defaults(), + light_source = default.LIGHT_MAX, +}) + +default.register_mesepost("default:mese_post_light", { + description = S("Apple Wood Mese Post Light"), + texture = "default_fence_wood.png", + material = "default:wood", +}) + +default.register_mesepost("default:mese_post_light_acacia_wood", { + description = S("Acacia Wood Mese Post Light"), + texture = "default_fence_acacia_wood.png", + material = "default:acacia_wood", +}) + +default.register_mesepost("default:mese_post_light_junglewood", { + description = S("Jungle Wood Mese Post Light"), + texture = "default_fence_junglewood.png", + material = "default:junglewood", +}) + +default.register_mesepost("default:mese_post_light_pine_wood", { + description = S("Pine Wood Mese Post Light"), + texture = "default_fence_pine_wood.png", + material = "default:pine_wood", +}) + +default.register_mesepost("default:mese_post_light_aspen_wood", { + description = S("Aspen Wood Mese Post Light"), + texture = "default_fence_aspen_wood.png", + material = "default:aspen_wood", +}) + +-- +-- Misc +-- + +minetest.register_node("default:cloud", { + description = S("Cloud"), + tiles = {"default_cloud.png"}, + is_ground_content = false, + sounds = default.node_sound_defaults(), + groups = {not_in_creative_inventory = 1}, +}) + +-- +-- register trees for leafdecay +-- + +if minetest.get_mapgen_setting("mg_name") == "v6" then + default.register_leafdecay({ + trunks = {"default:tree"}, + leaves = {"default:apple", "default:leaves"}, + radius = 2, + }) + + default.register_leafdecay({ + trunks = {"default:jungletree"}, + leaves = {"default:jungleleaves"}, + radius = 3, + }) +else + default.register_leafdecay({ + trunks = {"default:tree"}, + leaves = {"default:apple", "default:leaves"}, + radius = 3, + }) + + default.register_leafdecay({ + trunks = {"default:jungletree"}, + leaves = {"default:jungleleaves"}, + radius = 2, + }) +end + +default.register_leafdecay({ + trunks = {"default:pine_tree"}, + leaves = {"default:pine_needles"}, + radius = 3, +}) + +default.register_leafdecay({ + trunks = {"default:acacia_tree"}, + leaves = {"default:acacia_leaves"}, + radius = 2, +}) + +default.register_leafdecay({ + trunks = {"default:aspen_tree"}, + leaves = {"default:aspen_leaves"}, + radius = 3, +}) + +default.register_leafdecay({ + trunks = {"default:bush_stem"}, + leaves = {"default:bush_leaves"}, + radius = 1, +}) + +default.register_leafdecay({ + trunks = {"default:acacia_bush_stem"}, + leaves = {"default:acacia_bush_leaves"}, + radius = 1, +}) + +default.register_leafdecay({ + trunks = {"default:pine_bush_stem"}, + leaves = {"default:pine_bush_needles"}, + radius = 1, +}) diff --git a/mods/default/schematics/acacia_bush.mts b/mods/default/schematics/acacia_bush.mts new file mode 100644 index 0000000..3322e3b Binary files /dev/null and b/mods/default/schematics/acacia_bush.mts differ diff --git a/mods/default/schematics/acacia_log.mts b/mods/default/schematics/acacia_log.mts new file mode 100644 index 0000000..aff3bd6 Binary files /dev/null and b/mods/default/schematics/acacia_log.mts differ diff --git a/mods/default/schematics/acacia_tree.mts b/mods/default/schematics/acacia_tree.mts new file mode 100644 index 0000000..9b23498 Binary files /dev/null and b/mods/default/schematics/acacia_tree.mts differ diff --git a/mods/default/schematics/acacia_tree_from_sapling.mts b/mods/default/schematics/acacia_tree_from_sapling.mts new file mode 100644 index 0000000..c32a995 Binary files /dev/null and b/mods/default/schematics/acacia_tree_from_sapling.mts differ diff --git a/mods/default/schematics/apple_log.mts b/mods/default/schematics/apple_log.mts new file mode 100644 index 0000000..92fb900 Binary files /dev/null and b/mods/default/schematics/apple_log.mts differ diff --git a/mods/default/schematics/apple_tree.mts b/mods/default/schematics/apple_tree.mts new file mode 100644 index 0000000..d56cd54 Binary files /dev/null and b/mods/default/schematics/apple_tree.mts differ diff --git a/mods/default/schematics/apple_tree_from_sapling.mts b/mods/default/schematics/apple_tree_from_sapling.mts new file mode 100644 index 0000000..2325100 Binary files /dev/null and b/mods/default/schematics/apple_tree_from_sapling.mts differ diff --git a/mods/default/schematics/aspen_log.mts b/mods/default/schematics/aspen_log.mts new file mode 100644 index 0000000..d0c723d Binary files /dev/null and b/mods/default/schematics/aspen_log.mts differ diff --git a/mods/default/schematics/aspen_tree.mts b/mods/default/schematics/aspen_tree.mts new file mode 100644 index 0000000..429a831 Binary files /dev/null and b/mods/default/schematics/aspen_tree.mts differ diff --git a/mods/default/schematics/aspen_tree_from_sapling.mts b/mods/default/schematics/aspen_tree_from_sapling.mts new file mode 100644 index 0000000..b7ab3ee Binary files /dev/null and b/mods/default/schematics/aspen_tree_from_sapling.mts differ diff --git a/mods/default/schematics/blueberry_bush.mts b/mods/default/schematics/blueberry_bush.mts new file mode 100644 index 0000000..cf4d8ef Binary files /dev/null and b/mods/default/schematics/blueberry_bush.mts differ diff --git a/mods/default/schematics/bush.mts b/mods/default/schematics/bush.mts new file mode 100644 index 0000000..d08cf5f Binary files /dev/null and b/mods/default/schematics/bush.mts differ diff --git a/mods/default/schematics/emergent_jungle_tree.mts b/mods/default/schematics/emergent_jungle_tree.mts new file mode 100644 index 0000000..b526430 Binary files /dev/null and b/mods/default/schematics/emergent_jungle_tree.mts differ diff --git a/mods/default/schematics/emergent_jungle_tree_from_sapling.mts b/mods/default/schematics/emergent_jungle_tree_from_sapling.mts new file mode 100644 index 0000000..cb4e4e9 Binary files /dev/null and b/mods/default/schematics/emergent_jungle_tree_from_sapling.mts differ diff --git a/mods/default/schematics/jungle_log.mts b/mods/default/schematics/jungle_log.mts new file mode 100644 index 0000000..34dca43 Binary files /dev/null and b/mods/default/schematics/jungle_log.mts differ diff --git a/mods/default/schematics/jungle_tree.mts b/mods/default/schematics/jungle_tree.mts new file mode 100644 index 0000000..fe93c8c Binary files /dev/null and b/mods/default/schematics/jungle_tree.mts differ diff --git a/mods/default/schematics/jungle_tree_from_sapling.mts b/mods/default/schematics/jungle_tree_from_sapling.mts new file mode 100644 index 0000000..f32d312 Binary files /dev/null and b/mods/default/schematics/jungle_tree_from_sapling.mts differ diff --git a/mods/default/schematics/large_cactus.mts b/mods/default/schematics/large_cactus.mts new file mode 100644 index 0000000..755e2d8 Binary files /dev/null and b/mods/default/schematics/large_cactus.mts differ diff --git a/mods/default/schematics/papyrus_on_dirt.mts b/mods/default/schematics/papyrus_on_dirt.mts new file mode 100644 index 0000000..1333a7c Binary files /dev/null and b/mods/default/schematics/papyrus_on_dirt.mts differ diff --git a/mods/default/schematics/papyrus_on_dry_dirt.mts b/mods/default/schematics/papyrus_on_dry_dirt.mts new file mode 100644 index 0000000..3626580 Binary files /dev/null and b/mods/default/schematics/papyrus_on_dry_dirt.mts differ diff --git a/mods/default/schematics/pine_bush.mts b/mods/default/schematics/pine_bush.mts new file mode 100644 index 0000000..ca572a7 Binary files /dev/null and b/mods/default/schematics/pine_bush.mts differ diff --git a/mods/default/schematics/pine_log.mts b/mods/default/schematics/pine_log.mts new file mode 100644 index 0000000..d51a489 Binary files /dev/null and b/mods/default/schematics/pine_log.mts differ diff --git a/mods/default/schematics/pine_tree.mts b/mods/default/schematics/pine_tree.mts new file mode 100644 index 0000000..c80532a Binary files /dev/null and b/mods/default/schematics/pine_tree.mts differ diff --git a/mods/default/schematics/pine_tree_from_sapling.mts b/mods/default/schematics/pine_tree_from_sapling.mts new file mode 100644 index 0000000..0800387 Binary files /dev/null and b/mods/default/schematics/pine_tree_from_sapling.mts differ diff --git a/mods/default/schematics/small_pine_tree.mts b/mods/default/schematics/small_pine_tree.mts new file mode 100644 index 0000000..b283226 Binary files /dev/null and b/mods/default/schematics/small_pine_tree.mts differ diff --git a/mods/default/schematics/small_pine_tree_from_sapling.mts b/mods/default/schematics/small_pine_tree_from_sapling.mts new file mode 100644 index 0000000..a1b1170 Binary files /dev/null and b/mods/default/schematics/small_pine_tree_from_sapling.mts differ diff --git a/mods/default/schematics/snowy_pine_tree_from_sapling.mts b/mods/default/schematics/snowy_pine_tree_from_sapling.mts new file mode 100644 index 0000000..3d502a3 Binary files /dev/null and b/mods/default/schematics/snowy_pine_tree_from_sapling.mts differ diff --git a/mods/default/schematics/snowy_small_pine_tree_from_sapling.mts b/mods/default/schematics/snowy_small_pine_tree_from_sapling.mts new file mode 100644 index 0000000..d017c9e Binary files /dev/null and b/mods/default/schematics/snowy_small_pine_tree_from_sapling.mts differ diff --git a/mods/default/sounds/default_break_glass.1.ogg b/mods/default/sounds/default_break_glass.1.ogg new file mode 100644 index 0000000..b1ccc5f Binary files /dev/null and b/mods/default/sounds/default_break_glass.1.ogg differ diff --git a/mods/default/sounds/default_break_glass.2.ogg b/mods/default/sounds/default_break_glass.2.ogg new file mode 100644 index 0000000..b6cc9e8 Binary files /dev/null and b/mods/default/sounds/default_break_glass.2.ogg differ diff --git a/mods/default/sounds/default_break_glass.3.ogg b/mods/default/sounds/default_break_glass.3.ogg new file mode 100644 index 0000000..ae6a6bf Binary files /dev/null and b/mods/default/sounds/default_break_glass.3.ogg differ diff --git a/mods/default/sounds/default_chest_close.ogg b/mods/default/sounds/default_chest_close.ogg new file mode 100644 index 0000000..068d900 Binary files /dev/null and b/mods/default/sounds/default_chest_close.ogg differ diff --git a/mods/default/sounds/default_chest_open.ogg b/mods/default/sounds/default_chest_open.ogg new file mode 100644 index 0000000..40b0b93 Binary files /dev/null and b/mods/default/sounds/default_chest_open.ogg differ diff --git a/mods/default/sounds/default_cool_lava.1.ogg b/mods/default/sounds/default_cool_lava.1.ogg new file mode 100644 index 0000000..42506dd Binary files /dev/null and b/mods/default/sounds/default_cool_lava.1.ogg differ diff --git a/mods/default/sounds/default_cool_lava.2.ogg b/mods/default/sounds/default_cool_lava.2.ogg new file mode 100644 index 0000000..2747ab8 Binary files /dev/null and b/mods/default/sounds/default_cool_lava.2.ogg differ diff --git a/mods/default/sounds/default_cool_lava.3.ogg b/mods/default/sounds/default_cool_lava.3.ogg new file mode 100644 index 0000000..8baeac3 Binary files /dev/null and b/mods/default/sounds/default_cool_lava.3.ogg differ diff --git a/mods/default/sounds/default_dig_choppy.1.ogg b/mods/default/sounds/default_dig_choppy.1.ogg new file mode 100644 index 0000000..95fa6d4 Binary files /dev/null and b/mods/default/sounds/default_dig_choppy.1.ogg differ diff --git a/mods/default/sounds/default_dig_choppy.2.ogg b/mods/default/sounds/default_dig_choppy.2.ogg new file mode 100644 index 0000000..5d3a044 Binary files /dev/null and b/mods/default/sounds/default_dig_choppy.2.ogg differ diff --git a/mods/default/sounds/default_dig_choppy.3.ogg b/mods/default/sounds/default_dig_choppy.3.ogg new file mode 100644 index 0000000..2bb0ace Binary files /dev/null and b/mods/default/sounds/default_dig_choppy.3.ogg differ diff --git a/mods/default/sounds/default_dig_cracky.1.ogg b/mods/default/sounds/default_dig_cracky.1.ogg new file mode 100644 index 0000000..ffced27 Binary files /dev/null and b/mods/default/sounds/default_dig_cracky.1.ogg differ diff --git a/mods/default/sounds/default_dig_cracky.2.ogg b/mods/default/sounds/default_dig_cracky.2.ogg new file mode 100644 index 0000000..d9e8010 Binary files /dev/null and b/mods/default/sounds/default_dig_cracky.2.ogg differ diff --git a/mods/default/sounds/default_dig_cracky.3.ogg b/mods/default/sounds/default_dig_cracky.3.ogg new file mode 100644 index 0000000..7d19d40 Binary files /dev/null and b/mods/default/sounds/default_dig_cracky.3.ogg differ diff --git a/mods/default/sounds/default_dig_crumbly.ogg b/mods/default/sounds/default_dig_crumbly.ogg new file mode 100644 index 0000000..a0b2a1f Binary files /dev/null and b/mods/default/sounds/default_dig_crumbly.ogg differ diff --git a/mods/default/sounds/default_dig_dig_immediate.ogg b/mods/default/sounds/default_dig_dig_immediate.ogg new file mode 100644 index 0000000..e65d766 Binary files /dev/null and b/mods/default/sounds/default_dig_dig_immediate.ogg differ diff --git a/mods/default/sounds/default_dig_metal.ogg b/mods/default/sounds/default_dig_metal.ogg new file mode 100644 index 0000000..0b58509 Binary files /dev/null and b/mods/default/sounds/default_dig_metal.ogg differ diff --git a/mods/default/sounds/default_dig_oddly_breakable_by_hand.ogg b/mods/default/sounds/default_dig_oddly_breakable_by_hand.ogg new file mode 100644 index 0000000..ef4d7b1 Binary files /dev/null and b/mods/default/sounds/default_dig_oddly_breakable_by_hand.ogg differ diff --git a/mods/default/sounds/default_dig_snappy.ogg b/mods/default/sounds/default_dig_snappy.ogg new file mode 100644 index 0000000..3686fcd Binary files /dev/null and b/mods/default/sounds/default_dig_snappy.ogg differ diff --git a/mods/default/sounds/default_dirt_footstep.1.ogg b/mods/default/sounds/default_dirt_footstep.1.ogg new file mode 100644 index 0000000..201aa3b Binary files /dev/null and b/mods/default/sounds/default_dirt_footstep.1.ogg differ diff --git a/mods/default/sounds/default_dirt_footstep.2.ogg b/mods/default/sounds/default_dirt_footstep.2.ogg new file mode 100644 index 0000000..2667dbc Binary files /dev/null and b/mods/default/sounds/default_dirt_footstep.2.ogg differ diff --git a/mods/default/sounds/default_dug_metal.1.ogg b/mods/default/sounds/default_dug_metal.1.ogg new file mode 100644 index 0000000..5d6cb5b Binary files /dev/null and b/mods/default/sounds/default_dug_metal.1.ogg differ diff --git a/mods/default/sounds/default_dug_metal.2.ogg b/mods/default/sounds/default_dug_metal.2.ogg new file mode 100644 index 0000000..63567fc Binary files /dev/null and b/mods/default/sounds/default_dug_metal.2.ogg differ diff --git a/mods/default/sounds/default_dug_node.1.ogg b/mods/default/sounds/default_dug_node.1.ogg new file mode 100644 index 0000000..c04975d Binary files /dev/null and b/mods/default/sounds/default_dug_node.1.ogg differ diff --git a/mods/default/sounds/default_dug_node.2.ogg b/mods/default/sounds/default_dug_node.2.ogg new file mode 100644 index 0000000..9f20926 Binary files /dev/null and b/mods/default/sounds/default_dug_node.2.ogg differ diff --git a/mods/default/sounds/default_furnace_active.ogg b/mods/default/sounds/default_furnace_active.ogg new file mode 100644 index 0000000..536edc2 Binary files /dev/null and b/mods/default/sounds/default_furnace_active.ogg differ diff --git a/mods/default/sounds/default_glass_footstep.ogg b/mods/default/sounds/default_glass_footstep.ogg new file mode 100644 index 0000000..191287a Binary files /dev/null and b/mods/default/sounds/default_glass_footstep.ogg differ diff --git a/mods/default/sounds/default_grass_footstep.1.ogg b/mods/default/sounds/default_grass_footstep.1.ogg new file mode 100644 index 0000000..a04cdb4 Binary files /dev/null and b/mods/default/sounds/default_grass_footstep.1.ogg differ diff --git a/mods/default/sounds/default_grass_footstep.2.ogg b/mods/default/sounds/default_grass_footstep.2.ogg new file mode 100644 index 0000000..d193068 Binary files /dev/null and b/mods/default/sounds/default_grass_footstep.2.ogg differ diff --git a/mods/default/sounds/default_grass_footstep.3.ogg b/mods/default/sounds/default_grass_footstep.3.ogg new file mode 100644 index 0000000..e1897ea Binary files /dev/null and b/mods/default/sounds/default_grass_footstep.3.ogg differ diff --git a/mods/default/sounds/default_gravel_dig.1.ogg b/mods/default/sounds/default_gravel_dig.1.ogg new file mode 100644 index 0000000..baf8fca Binary files /dev/null and b/mods/default/sounds/default_gravel_dig.1.ogg differ diff --git a/mods/default/sounds/default_gravel_dig.2.ogg b/mods/default/sounds/default_gravel_dig.2.ogg new file mode 100644 index 0000000..e0c0c50 Binary files /dev/null and b/mods/default/sounds/default_gravel_dig.2.ogg differ diff --git a/mods/default/sounds/default_gravel_dug.1.ogg b/mods/default/sounds/default_gravel_dug.1.ogg new file mode 100644 index 0000000..1303433 Binary files /dev/null and b/mods/default/sounds/default_gravel_dug.1.ogg differ diff --git a/mods/default/sounds/default_gravel_dug.2.ogg b/mods/default/sounds/default_gravel_dug.2.ogg new file mode 100644 index 0000000..ee5ed33 Binary files /dev/null and b/mods/default/sounds/default_gravel_dug.2.ogg differ diff --git a/mods/default/sounds/default_gravel_dug.3.ogg b/mods/default/sounds/default_gravel_dug.3.ogg new file mode 100644 index 0000000..add4c54 Binary files /dev/null and b/mods/default/sounds/default_gravel_dug.3.ogg differ diff --git a/mods/default/sounds/default_gravel_footstep.1.ogg b/mods/default/sounds/default_gravel_footstep.1.ogg new file mode 100644 index 0000000..8d260ce Binary files /dev/null and b/mods/default/sounds/default_gravel_footstep.1.ogg differ diff --git a/mods/default/sounds/default_gravel_footstep.2.ogg b/mods/default/sounds/default_gravel_footstep.2.ogg new file mode 100644 index 0000000..2aba2c6 Binary files /dev/null and b/mods/default/sounds/default_gravel_footstep.2.ogg differ diff --git a/mods/default/sounds/default_gravel_footstep.3.ogg b/mods/default/sounds/default_gravel_footstep.3.ogg new file mode 100644 index 0000000..1bcd8a1 Binary files /dev/null and b/mods/default/sounds/default_gravel_footstep.3.ogg differ diff --git a/mods/default/sounds/default_gravel_footstep.4.ogg b/mods/default/sounds/default_gravel_footstep.4.ogg new file mode 100644 index 0000000..696c9ff Binary files /dev/null and b/mods/default/sounds/default_gravel_footstep.4.ogg differ diff --git a/mods/default/sounds/default_hard_footstep.1.ogg b/mods/default/sounds/default_hard_footstep.1.ogg new file mode 100644 index 0000000..0a08efa Binary files /dev/null and b/mods/default/sounds/default_hard_footstep.1.ogg differ diff --git a/mods/default/sounds/default_hard_footstep.2.ogg b/mods/default/sounds/default_hard_footstep.2.ogg new file mode 100644 index 0000000..be52a87 Binary files /dev/null and b/mods/default/sounds/default_hard_footstep.2.ogg differ diff --git a/mods/default/sounds/default_hard_footstep.3.ogg b/mods/default/sounds/default_hard_footstep.3.ogg new file mode 100644 index 0000000..a342787 Binary files /dev/null and b/mods/default/sounds/default_hard_footstep.3.ogg differ diff --git a/mods/default/sounds/default_ice_dig.1.ogg b/mods/default/sounds/default_ice_dig.1.ogg new file mode 100644 index 0000000..97399c8 Binary files /dev/null and b/mods/default/sounds/default_ice_dig.1.ogg differ diff --git a/mods/default/sounds/default_ice_dig.2.ogg b/mods/default/sounds/default_ice_dig.2.ogg new file mode 100644 index 0000000..8a5da11 Binary files /dev/null and b/mods/default/sounds/default_ice_dig.2.ogg differ diff --git a/mods/default/sounds/default_ice_dig.3.ogg b/mods/default/sounds/default_ice_dig.3.ogg new file mode 100644 index 0000000..765fb9b Binary files /dev/null and b/mods/default/sounds/default_ice_dig.3.ogg differ diff --git a/mods/default/sounds/default_ice_dug.ogg b/mods/default/sounds/default_ice_dug.ogg new file mode 100644 index 0000000..ae37673 Binary files /dev/null and b/mods/default/sounds/default_ice_dug.ogg differ diff --git a/mods/default/sounds/default_ice_footstep.1.ogg b/mods/default/sounds/default_ice_footstep.1.ogg new file mode 100644 index 0000000..c235f1e Binary files /dev/null and b/mods/default/sounds/default_ice_footstep.1.ogg differ diff --git a/mods/default/sounds/default_ice_footstep.2.ogg b/mods/default/sounds/default_ice_footstep.2.ogg new file mode 100644 index 0000000..61d2c99 Binary files /dev/null and b/mods/default/sounds/default_ice_footstep.2.ogg differ diff --git a/mods/default/sounds/default_ice_footstep.3.ogg b/mods/default/sounds/default_ice_footstep.3.ogg new file mode 100644 index 0000000..2ecbb43 Binary files /dev/null and b/mods/default/sounds/default_ice_footstep.3.ogg differ diff --git a/mods/default/sounds/default_item_smoke.ogg b/mods/default/sounds/default_item_smoke.ogg new file mode 100644 index 0000000..038a46e Binary files /dev/null and b/mods/default/sounds/default_item_smoke.ogg differ diff --git a/mods/default/sounds/default_metal_footstep.1.ogg b/mods/default/sounds/default_metal_footstep.1.ogg new file mode 100644 index 0000000..49fe89b Binary files /dev/null and b/mods/default/sounds/default_metal_footstep.1.ogg differ diff --git a/mods/default/sounds/default_metal_footstep.2.ogg b/mods/default/sounds/default_metal_footstep.2.ogg new file mode 100644 index 0000000..878711d Binary files /dev/null and b/mods/default/sounds/default_metal_footstep.2.ogg differ diff --git a/mods/default/sounds/default_metal_footstep.3.ogg b/mods/default/sounds/default_metal_footstep.3.ogg new file mode 100644 index 0000000..2a566a8 Binary files /dev/null and b/mods/default/sounds/default_metal_footstep.3.ogg differ diff --git a/mods/default/sounds/default_place_node.1.ogg b/mods/default/sounds/default_place_node.1.ogg new file mode 100644 index 0000000..46b9756 Binary files /dev/null and b/mods/default/sounds/default_place_node.1.ogg differ diff --git a/mods/default/sounds/default_place_node.2.ogg b/mods/default/sounds/default_place_node.2.ogg new file mode 100644 index 0000000..d34c01a Binary files /dev/null and b/mods/default/sounds/default_place_node.2.ogg differ diff --git a/mods/default/sounds/default_place_node.3.ogg b/mods/default/sounds/default_place_node.3.ogg new file mode 100644 index 0000000..fc29365 Binary files /dev/null and b/mods/default/sounds/default_place_node.3.ogg differ diff --git a/mods/default/sounds/default_place_node_hard.1.ogg b/mods/default/sounds/default_place_node_hard.1.ogg new file mode 100644 index 0000000..9f97fac Binary files /dev/null and b/mods/default/sounds/default_place_node_hard.1.ogg differ diff --git a/mods/default/sounds/default_place_node_hard.2.ogg b/mods/default/sounds/default_place_node_hard.2.ogg new file mode 100644 index 0000000..1d3b3de Binary files /dev/null and b/mods/default/sounds/default_place_node_hard.2.ogg differ diff --git a/mods/default/sounds/default_place_node_metal.1.ogg b/mods/default/sounds/default_place_node_metal.1.ogg new file mode 100644 index 0000000..5da085e Binary files /dev/null and b/mods/default/sounds/default_place_node_metal.1.ogg differ diff --git a/mods/default/sounds/default_place_node_metal.2.ogg b/mods/default/sounds/default_place_node_metal.2.ogg new file mode 100644 index 0000000..5ee67fc Binary files /dev/null and b/mods/default/sounds/default_place_node_metal.2.ogg differ diff --git a/mods/default/sounds/default_sand_footstep.1.ogg b/mods/default/sounds/default_sand_footstep.1.ogg new file mode 100644 index 0000000..b92feab Binary files /dev/null and b/mods/default/sounds/default_sand_footstep.1.ogg differ diff --git a/mods/default/sounds/default_sand_footstep.2.ogg b/mods/default/sounds/default_sand_footstep.2.ogg new file mode 100644 index 0000000..6bc5da3 Binary files /dev/null and b/mods/default/sounds/default_sand_footstep.2.ogg differ diff --git a/mods/default/sounds/default_sand_footstep.3.ogg b/mods/default/sounds/default_sand_footstep.3.ogg new file mode 100644 index 0000000..880306f Binary files /dev/null and b/mods/default/sounds/default_sand_footstep.3.ogg differ diff --git a/mods/default/sounds/default_snow_footstep.1.ogg b/mods/default/sounds/default_snow_footstep.1.ogg new file mode 100644 index 0000000..97cc825 Binary files /dev/null and b/mods/default/sounds/default_snow_footstep.1.ogg differ diff --git a/mods/default/sounds/default_snow_footstep.2.ogg b/mods/default/sounds/default_snow_footstep.2.ogg new file mode 100644 index 0000000..97a6baa Binary files /dev/null and b/mods/default/sounds/default_snow_footstep.2.ogg differ diff --git a/mods/default/sounds/default_snow_footstep.3.ogg b/mods/default/sounds/default_snow_footstep.3.ogg new file mode 100644 index 0000000..bde1f21 Binary files /dev/null and b/mods/default/sounds/default_snow_footstep.3.ogg differ diff --git a/mods/default/sounds/default_snow_footstep.4.ogg b/mods/default/sounds/default_snow_footstep.4.ogg new file mode 100644 index 0000000..8ca6a59 Binary files /dev/null and b/mods/default/sounds/default_snow_footstep.4.ogg differ diff --git a/mods/default/sounds/default_snow_footstep.5.ogg b/mods/default/sounds/default_snow_footstep.5.ogg new file mode 100644 index 0000000..220d60c Binary files /dev/null and b/mods/default/sounds/default_snow_footstep.5.ogg differ diff --git a/mods/default/sounds/default_tool_breaks.1.ogg b/mods/default/sounds/default_tool_breaks.1.ogg new file mode 100644 index 0000000..2a571ae Binary files /dev/null and b/mods/default/sounds/default_tool_breaks.1.ogg differ diff --git a/mods/default/sounds/default_tool_breaks.2.ogg b/mods/default/sounds/default_tool_breaks.2.ogg new file mode 100644 index 0000000..1789352 Binary files /dev/null and b/mods/default/sounds/default_tool_breaks.2.ogg differ diff --git a/mods/default/sounds/default_tool_breaks.3.ogg b/mods/default/sounds/default_tool_breaks.3.ogg new file mode 100644 index 0000000..a99c4b7 Binary files /dev/null and b/mods/default/sounds/default_tool_breaks.3.ogg differ diff --git a/mods/default/sounds/default_water_footstep.1.ogg b/mods/default/sounds/default_water_footstep.1.ogg new file mode 100644 index 0000000..63b9744 Binary files /dev/null and b/mods/default/sounds/default_water_footstep.1.ogg differ diff --git a/mods/default/sounds/default_water_footstep.2.ogg b/mods/default/sounds/default_water_footstep.2.ogg new file mode 100644 index 0000000..8d79c1f Binary files /dev/null and b/mods/default/sounds/default_water_footstep.2.ogg differ diff --git a/mods/default/sounds/default_water_footstep.3.ogg b/mods/default/sounds/default_water_footstep.3.ogg new file mode 100644 index 0000000..f889150 Binary files /dev/null and b/mods/default/sounds/default_water_footstep.3.ogg differ diff --git a/mods/default/sounds/default_wood_footstep.1.ogg b/mods/default/sounds/default_wood_footstep.1.ogg new file mode 100644 index 0000000..34f63a1 Binary files /dev/null and b/mods/default/sounds/default_wood_footstep.1.ogg differ diff --git a/mods/default/sounds/default_wood_footstep.2.ogg b/mods/default/sounds/default_wood_footstep.2.ogg new file mode 100644 index 0000000..124fc29 Binary files /dev/null and b/mods/default/sounds/default_wood_footstep.2.ogg differ diff --git a/mods/default/sounds/player_damage.ogg b/mods/default/sounds/player_damage.ogg new file mode 100644 index 0000000..7888087 Binary files /dev/null and b/mods/default/sounds/player_damage.ogg differ diff --git a/mods/default/textures/bubble.png b/mods/default/textures/bubble.png new file mode 100644 index 0000000..30170d2 Binary files /dev/null and b/mods/default/textures/bubble.png differ diff --git a/mods/default/textures/crack_anylength.png b/mods/default/textures/crack_anylength.png new file mode 100644 index 0000000..297eced Binary files /dev/null and b/mods/default/textures/crack_anylength.png differ diff --git a/mods/default/textures/default_acacia_bush_sapling.png b/mods/default/textures/default_acacia_bush_sapling.png new file mode 100644 index 0000000..940b3aa Binary files /dev/null and b/mods/default/textures/default_acacia_bush_sapling.png differ diff --git a/mods/default/textures/default_acacia_bush_stem.png b/mods/default/textures/default_acacia_bush_stem.png new file mode 100644 index 0000000..f2ee9fa Binary files /dev/null and b/mods/default/textures/default_acacia_bush_stem.png differ diff --git a/mods/default/textures/default_acacia_leaves.png b/mods/default/textures/default_acacia_leaves.png new file mode 100644 index 0000000..9620c40 Binary files /dev/null and b/mods/default/textures/default_acacia_leaves.png differ diff --git a/mods/default/textures/default_acacia_leaves_simple.png b/mods/default/textures/default_acacia_leaves_simple.png new file mode 100644 index 0000000..ab464ba Binary files /dev/null and b/mods/default/textures/default_acacia_leaves_simple.png differ diff --git a/mods/default/textures/default_acacia_sapling.png b/mods/default/textures/default_acacia_sapling.png new file mode 100644 index 0000000..e34aec5 Binary files /dev/null and b/mods/default/textures/default_acacia_sapling.png differ diff --git a/mods/default/textures/default_acacia_tree.png b/mods/default/textures/default_acacia_tree.png new file mode 100644 index 0000000..86ab6b1 Binary files /dev/null and b/mods/default/textures/default_acacia_tree.png differ diff --git a/mods/default/textures/default_acacia_tree_top.png b/mods/default/textures/default_acacia_tree_top.png new file mode 100644 index 0000000..5dbe97b Binary files /dev/null and b/mods/default/textures/default_acacia_tree_top.png differ diff --git a/mods/default/textures/default_acacia_wood.png b/mods/default/textures/default_acacia_wood.png new file mode 100644 index 0000000..f2f8337 Binary files /dev/null and b/mods/default/textures/default_acacia_wood.png differ diff --git a/mods/default/textures/default_apple.png b/mods/default/textures/default_apple.png new file mode 100644 index 0000000..7549bfd Binary files /dev/null and b/mods/default/textures/default_apple.png differ diff --git a/mods/default/textures/default_aspen_leaves.png b/mods/default/textures/default_aspen_leaves.png new file mode 100644 index 0000000..2d6a7ef Binary files /dev/null and b/mods/default/textures/default_aspen_leaves.png differ diff --git a/mods/default/textures/default_aspen_sapling.png b/mods/default/textures/default_aspen_sapling.png new file mode 100644 index 0000000..f4c772c Binary files /dev/null and b/mods/default/textures/default_aspen_sapling.png differ diff --git a/mods/default/textures/default_aspen_tree.png b/mods/default/textures/default_aspen_tree.png new file mode 100644 index 0000000..db2285e Binary files /dev/null and b/mods/default/textures/default_aspen_tree.png differ diff --git a/mods/default/textures/default_aspen_tree_top.png b/mods/default/textures/default_aspen_tree_top.png new file mode 100644 index 0000000..61ac009 Binary files /dev/null and b/mods/default/textures/default_aspen_tree_top.png differ diff --git a/mods/default/textures/default_aspen_wood.png b/mods/default/textures/default_aspen_wood.png new file mode 100644 index 0000000..f31ac30 Binary files /dev/null and b/mods/default/textures/default_aspen_wood.png differ diff --git a/mods/default/textures/default_blueberries.png b/mods/default/textures/default_blueberries.png new file mode 100644 index 0000000..1dbb0d6 Binary files /dev/null and b/mods/default/textures/default_blueberries.png differ diff --git a/mods/default/textures/default_blueberry_bush_leaves.png b/mods/default/textures/default_blueberry_bush_leaves.png new file mode 100644 index 0000000..d6736ca Binary files /dev/null and b/mods/default/textures/default_blueberry_bush_leaves.png differ diff --git a/mods/default/textures/default_blueberry_bush_sapling.png b/mods/default/textures/default_blueberry_bush_sapling.png new file mode 100644 index 0000000..c22a374 Binary files /dev/null and b/mods/default/textures/default_blueberry_bush_sapling.png differ diff --git a/mods/default/textures/default_blueberry_overlay.png b/mods/default/textures/default_blueberry_overlay.png new file mode 100644 index 0000000..a7f8ab0 Binary files /dev/null and b/mods/default/textures/default_blueberry_overlay.png differ diff --git a/mods/default/textures/default_book.png b/mods/default/textures/default_book.png new file mode 100644 index 0000000..bcf1e6a Binary files /dev/null and b/mods/default/textures/default_book.png differ diff --git a/mods/default/textures/default_book_written.png b/mods/default/textures/default_book_written.png new file mode 100644 index 0000000..f23d122 Binary files /dev/null and b/mods/default/textures/default_book_written.png differ diff --git a/mods/default/textures/default_bookshelf.png b/mods/default/textures/default_bookshelf.png new file mode 100644 index 0000000..3407f75 Binary files /dev/null and b/mods/default/textures/default_bookshelf.png differ diff --git a/mods/default/textures/default_bookshelf_slot.png b/mods/default/textures/default_bookshelf_slot.png new file mode 100644 index 0000000..ea4fdba Binary files /dev/null and b/mods/default/textures/default_bookshelf_slot.png differ diff --git a/mods/default/textures/default_brick.png b/mods/default/textures/default_brick.png new file mode 100644 index 0000000..de98961 Binary files /dev/null and b/mods/default/textures/default_brick.png differ diff --git a/mods/default/textures/default_bronze_block.png b/mods/default/textures/default_bronze_block.png new file mode 100644 index 0000000..491fc78 Binary files /dev/null and b/mods/default/textures/default_bronze_block.png differ diff --git a/mods/default/textures/default_bronze_ingot.png b/mods/default/textures/default_bronze_ingot.png new file mode 100644 index 0000000..6cccdf6 Binary files /dev/null and b/mods/default/textures/default_bronze_ingot.png differ diff --git a/mods/default/textures/default_bush_sapling.png b/mods/default/textures/default_bush_sapling.png new file mode 100644 index 0000000..905ba4b Binary files /dev/null and b/mods/default/textures/default_bush_sapling.png differ diff --git a/mods/default/textures/default_bush_stem.png b/mods/default/textures/default_bush_stem.png new file mode 100644 index 0000000..6ad8888 Binary files /dev/null and b/mods/default/textures/default_bush_stem.png differ diff --git a/mods/default/textures/default_cactus_side.png b/mods/default/textures/default_cactus_side.png new file mode 100644 index 0000000..e5c10c3 Binary files /dev/null and b/mods/default/textures/default_cactus_side.png differ diff --git a/mods/default/textures/default_cactus_top.png b/mods/default/textures/default_cactus_top.png new file mode 100644 index 0000000..cf46aa2 Binary files /dev/null and b/mods/default/textures/default_cactus_top.png differ diff --git a/mods/default/textures/default_chest_front.png b/mods/default/textures/default_chest_front.png new file mode 100644 index 0000000..f413279 Binary files /dev/null and b/mods/default/textures/default_chest_front.png differ diff --git a/mods/default/textures/default_chest_inside.png b/mods/default/textures/default_chest_inside.png new file mode 100644 index 0000000..9d2e883 Binary files /dev/null and b/mods/default/textures/default_chest_inside.png differ diff --git a/mods/default/textures/default_chest_lock.png b/mods/default/textures/default_chest_lock.png new file mode 100644 index 0000000..b1885ea Binary files /dev/null and b/mods/default/textures/default_chest_lock.png differ diff --git a/mods/default/textures/default_chest_side.png b/mods/default/textures/default_chest_side.png new file mode 100644 index 0000000..44a65a4 Binary files /dev/null and b/mods/default/textures/default_chest_side.png differ diff --git a/mods/default/textures/default_chest_top.png b/mods/default/textures/default_chest_top.png new file mode 100644 index 0000000..1fbdbb9 Binary files /dev/null and b/mods/default/textures/default_chest_top.png differ diff --git a/mods/default/textures/default_clay.png b/mods/default/textures/default_clay.png new file mode 100644 index 0000000..76e5a40 Binary files /dev/null and b/mods/default/textures/default_clay.png differ diff --git a/mods/default/textures/default_clay_brick.png b/mods/default/textures/default_clay_brick.png new file mode 100644 index 0000000..b288ef0 Binary files /dev/null and b/mods/default/textures/default_clay_brick.png differ diff --git a/mods/default/textures/default_clay_lump.png b/mods/default/textures/default_clay_lump.png new file mode 100644 index 0000000..c1d0220 Binary files /dev/null and b/mods/default/textures/default_clay_lump.png differ diff --git a/mods/default/textures/default_cloud.png b/mods/default/textures/default_cloud.png new file mode 100644 index 0000000..faf0ec1 Binary files /dev/null and b/mods/default/textures/default_cloud.png differ diff --git a/mods/default/textures/default_coal_block.png b/mods/default/textures/default_coal_block.png new file mode 100644 index 0000000..e92c532 Binary files /dev/null and b/mods/default/textures/default_coal_block.png differ diff --git a/mods/default/textures/default_coal_lump.png b/mods/default/textures/default_coal_lump.png new file mode 100644 index 0000000..792961d Binary files /dev/null and b/mods/default/textures/default_coal_lump.png differ diff --git a/mods/default/textures/default_cobble.png b/mods/default/textures/default_cobble.png new file mode 100644 index 0000000..d379840 Binary files /dev/null and b/mods/default/textures/default_cobble.png differ diff --git a/mods/default/textures/default_coniferous_litter.png b/mods/default/textures/default_coniferous_litter.png new file mode 100644 index 0000000..9d9651a Binary files /dev/null and b/mods/default/textures/default_coniferous_litter.png differ diff --git a/mods/default/textures/default_coniferous_litter_side.png b/mods/default/textures/default_coniferous_litter_side.png new file mode 100644 index 0000000..9a39058 Binary files /dev/null and b/mods/default/textures/default_coniferous_litter_side.png differ diff --git a/mods/default/textures/default_copper_block.png b/mods/default/textures/default_copper_block.png new file mode 100644 index 0000000..e1b60f0 Binary files /dev/null and b/mods/default/textures/default_copper_block.png differ diff --git a/mods/default/textures/default_copper_ingot.png b/mods/default/textures/default_copper_ingot.png new file mode 100644 index 0000000..bcad9c0 Binary files /dev/null and b/mods/default/textures/default_copper_ingot.png differ diff --git a/mods/default/textures/default_copper_lump.png b/mods/default/textures/default_copper_lump.png new file mode 100644 index 0000000..998c592 Binary files /dev/null and b/mods/default/textures/default_copper_lump.png differ diff --git a/mods/default/textures/default_coral_brown.png b/mods/default/textures/default_coral_brown.png new file mode 100644 index 0000000..7a18bd7 Binary files /dev/null and b/mods/default/textures/default_coral_brown.png differ diff --git a/mods/default/textures/default_coral_cyan.png b/mods/default/textures/default_coral_cyan.png new file mode 100644 index 0000000..890347f Binary files /dev/null and b/mods/default/textures/default_coral_cyan.png differ diff --git a/mods/default/textures/default_coral_green.png b/mods/default/textures/default_coral_green.png new file mode 100644 index 0000000..78f3f33 Binary files /dev/null and b/mods/default/textures/default_coral_green.png differ diff --git a/mods/default/textures/default_coral_orange.png b/mods/default/textures/default_coral_orange.png new file mode 100644 index 0000000..d7432ab Binary files /dev/null and b/mods/default/textures/default_coral_orange.png differ diff --git a/mods/default/textures/default_coral_pink.png b/mods/default/textures/default_coral_pink.png new file mode 100644 index 0000000..3708ba5 Binary files /dev/null and b/mods/default/textures/default_coral_pink.png differ diff --git a/mods/default/textures/default_coral_skeleton.png b/mods/default/textures/default_coral_skeleton.png new file mode 100644 index 0000000..d00c6fe Binary files /dev/null and b/mods/default/textures/default_coral_skeleton.png differ diff --git a/mods/default/textures/default_desert_cobble.png b/mods/default/textures/default_desert_cobble.png new file mode 100644 index 0000000..fa1af5d Binary files /dev/null and b/mods/default/textures/default_desert_cobble.png differ diff --git a/mods/default/textures/default_desert_sand.png b/mods/default/textures/default_desert_sand.png new file mode 100644 index 0000000..75ade0b Binary files /dev/null and b/mods/default/textures/default_desert_sand.png differ diff --git a/mods/default/textures/default_desert_sandstone.png b/mods/default/textures/default_desert_sandstone.png new file mode 100644 index 0000000..e0b22d0 Binary files /dev/null and b/mods/default/textures/default_desert_sandstone.png differ diff --git a/mods/default/textures/default_desert_sandstone_block.png b/mods/default/textures/default_desert_sandstone_block.png new file mode 100644 index 0000000..6f6c8ff Binary files /dev/null and b/mods/default/textures/default_desert_sandstone_block.png differ diff --git a/mods/default/textures/default_desert_sandstone_brick.png b/mods/default/textures/default_desert_sandstone_brick.png new file mode 100644 index 0000000..d2b70dd Binary files /dev/null and b/mods/default/textures/default_desert_sandstone_brick.png differ diff --git a/mods/default/textures/default_desert_stone.png b/mods/default/textures/default_desert_stone.png new file mode 100644 index 0000000..5d3aded Binary files /dev/null and b/mods/default/textures/default_desert_stone.png differ diff --git a/mods/default/textures/default_desert_stone_block.png b/mods/default/textures/default_desert_stone_block.png new file mode 100644 index 0000000..e8e842b Binary files /dev/null and b/mods/default/textures/default_desert_stone_block.png differ diff --git a/mods/default/textures/default_desert_stone_brick.png b/mods/default/textures/default_desert_stone_brick.png new file mode 100644 index 0000000..8e7208d Binary files /dev/null and b/mods/default/textures/default_desert_stone_brick.png differ diff --git a/mods/default/textures/default_diamond.png b/mods/default/textures/default_diamond.png new file mode 100644 index 0000000..a8dac74 Binary files /dev/null and b/mods/default/textures/default_diamond.png differ diff --git a/mods/default/textures/default_diamond_block.png b/mods/default/textures/default_diamond_block.png new file mode 100644 index 0000000..20c33ed Binary files /dev/null and b/mods/default/textures/default_diamond_block.png differ diff --git a/mods/default/textures/default_dirt.png b/mods/default/textures/default_dirt.png new file mode 100644 index 0000000..4ed965a Binary files /dev/null and b/mods/default/textures/default_dirt.png differ diff --git a/mods/default/textures/default_dry_dirt.png b/mods/default/textures/default_dry_dirt.png new file mode 100644 index 0000000..8ee5398 Binary files /dev/null and b/mods/default/textures/default_dry_dirt.png differ diff --git a/mods/default/textures/default_dry_grass.png b/mods/default/textures/default_dry_grass.png new file mode 100644 index 0000000..11def9c Binary files /dev/null and b/mods/default/textures/default_dry_grass.png differ diff --git a/mods/default/textures/default_dry_grass_1.png b/mods/default/textures/default_dry_grass_1.png new file mode 100644 index 0000000..d91174c Binary files /dev/null and b/mods/default/textures/default_dry_grass_1.png differ diff --git a/mods/default/textures/default_dry_grass_2.png b/mods/default/textures/default_dry_grass_2.png new file mode 100644 index 0000000..b12bf54 Binary files /dev/null and b/mods/default/textures/default_dry_grass_2.png differ diff --git a/mods/default/textures/default_dry_grass_3.png b/mods/default/textures/default_dry_grass_3.png new file mode 100644 index 0000000..c37a8eb Binary files /dev/null and b/mods/default/textures/default_dry_grass_3.png differ diff --git a/mods/default/textures/default_dry_grass_4.png b/mods/default/textures/default_dry_grass_4.png new file mode 100644 index 0000000..c00c702 Binary files /dev/null and b/mods/default/textures/default_dry_grass_4.png differ diff --git a/mods/default/textures/default_dry_grass_5.png b/mods/default/textures/default_dry_grass_5.png new file mode 100644 index 0000000..10a0931 Binary files /dev/null and b/mods/default/textures/default_dry_grass_5.png differ diff --git a/mods/default/textures/default_dry_grass_side.png b/mods/default/textures/default_dry_grass_side.png new file mode 100644 index 0000000..3ccbe41 Binary files /dev/null and b/mods/default/textures/default_dry_grass_side.png differ diff --git a/mods/default/textures/default_dry_shrub.png b/mods/default/textures/default_dry_shrub.png new file mode 100644 index 0000000..82c9cc5 Binary files /dev/null and b/mods/default/textures/default_dry_shrub.png differ diff --git a/mods/default/textures/default_emergent_jungle_sapling.png b/mods/default/textures/default_emergent_jungle_sapling.png new file mode 100644 index 0000000..b363b3c Binary files /dev/null and b/mods/default/textures/default_emergent_jungle_sapling.png differ diff --git a/mods/default/textures/default_fence_acacia_wood.png b/mods/default/textures/default_fence_acacia_wood.png new file mode 100644 index 0000000..0fb97cc Binary files /dev/null and b/mods/default/textures/default_fence_acacia_wood.png differ diff --git a/mods/default/textures/default_fence_aspen_wood.png b/mods/default/textures/default_fence_aspen_wood.png new file mode 100644 index 0000000..fec9755 Binary files /dev/null and b/mods/default/textures/default_fence_aspen_wood.png differ diff --git a/mods/default/textures/default_fence_junglewood.png b/mods/default/textures/default_fence_junglewood.png new file mode 100644 index 0000000..b3b8549 Binary files /dev/null and b/mods/default/textures/default_fence_junglewood.png differ diff --git a/mods/default/textures/default_fence_overlay.png b/mods/default/textures/default_fence_overlay.png new file mode 100644 index 0000000..718184c Binary files /dev/null and b/mods/default/textures/default_fence_overlay.png differ diff --git a/mods/default/textures/default_fence_pine_wood.png b/mods/default/textures/default_fence_pine_wood.png new file mode 100644 index 0000000..5045d19 Binary files /dev/null and b/mods/default/textures/default_fence_pine_wood.png differ diff --git a/mods/default/textures/default_fence_rail_acacia_wood.png b/mods/default/textures/default_fence_rail_acacia_wood.png new file mode 100644 index 0000000..7081cdb Binary files /dev/null and b/mods/default/textures/default_fence_rail_acacia_wood.png differ diff --git a/mods/default/textures/default_fence_rail_aspen_wood.png b/mods/default/textures/default_fence_rail_aspen_wood.png new file mode 100644 index 0000000..0d35302 Binary files /dev/null and b/mods/default/textures/default_fence_rail_aspen_wood.png differ diff --git a/mods/default/textures/default_fence_rail_junglewood.png b/mods/default/textures/default_fence_rail_junglewood.png new file mode 100644 index 0000000..6616059 Binary files /dev/null and b/mods/default/textures/default_fence_rail_junglewood.png differ diff --git a/mods/default/textures/default_fence_rail_overlay.png b/mods/default/textures/default_fence_rail_overlay.png new file mode 100644 index 0000000..4da47ae Binary files /dev/null and b/mods/default/textures/default_fence_rail_overlay.png differ diff --git a/mods/default/textures/default_fence_rail_pine_wood.png b/mods/default/textures/default_fence_rail_pine_wood.png new file mode 100644 index 0000000..b2f74a3 Binary files /dev/null and b/mods/default/textures/default_fence_rail_pine_wood.png differ diff --git a/mods/default/textures/default_fence_rail_wood.png b/mods/default/textures/default_fence_rail_wood.png new file mode 100644 index 0000000..e41143c Binary files /dev/null and b/mods/default/textures/default_fence_rail_wood.png differ diff --git a/mods/default/textures/default_fence_wood.png b/mods/default/textures/default_fence_wood.png new file mode 100644 index 0000000..7d161dc Binary files /dev/null and b/mods/default/textures/default_fence_wood.png differ diff --git a/mods/default/textures/default_fern_1.png b/mods/default/textures/default_fern_1.png new file mode 100644 index 0000000..b307986 Binary files /dev/null and b/mods/default/textures/default_fern_1.png differ diff --git a/mods/default/textures/default_fern_2.png b/mods/default/textures/default_fern_2.png new file mode 100644 index 0000000..6c5f7d5 Binary files /dev/null and b/mods/default/textures/default_fern_2.png differ diff --git a/mods/default/textures/default_fern_3.png b/mods/default/textures/default_fern_3.png new file mode 100644 index 0000000..2c1f605 Binary files /dev/null and b/mods/default/textures/default_fern_3.png differ diff --git a/mods/default/textures/default_flint.png b/mods/default/textures/default_flint.png new file mode 100644 index 0000000..9763f4b Binary files /dev/null and b/mods/default/textures/default_flint.png differ diff --git a/mods/default/textures/default_footprint.png b/mods/default/textures/default_footprint.png new file mode 100644 index 0000000..24d3e94 Binary files /dev/null and b/mods/default/textures/default_footprint.png differ diff --git a/mods/default/textures/default_furnace_bottom.png b/mods/default/textures/default_furnace_bottom.png new file mode 100644 index 0000000..92279ba Binary files /dev/null and b/mods/default/textures/default_furnace_bottom.png differ diff --git a/mods/default/textures/default_furnace_fire_bg.png b/mods/default/textures/default_furnace_fire_bg.png new file mode 100644 index 0000000..126204a Binary files /dev/null and b/mods/default/textures/default_furnace_fire_bg.png differ diff --git a/mods/default/textures/default_furnace_fire_fg.png b/mods/default/textures/default_furnace_fire_fg.png new file mode 100644 index 0000000..576f113 Binary files /dev/null and b/mods/default/textures/default_furnace_fire_fg.png differ diff --git a/mods/default/textures/default_furnace_front.png b/mods/default/textures/default_furnace_front.png new file mode 100644 index 0000000..f445d83 Binary files /dev/null and b/mods/default/textures/default_furnace_front.png differ diff --git a/mods/default/textures/default_furnace_front_active.png b/mods/default/textures/default_furnace_front_active.png new file mode 100644 index 0000000..68c03f5 Binary files /dev/null and b/mods/default/textures/default_furnace_front_active.png differ diff --git a/mods/default/textures/default_furnace_side.png b/mods/default/textures/default_furnace_side.png new file mode 100644 index 0000000..33408cf Binary files /dev/null and b/mods/default/textures/default_furnace_side.png differ diff --git a/mods/default/textures/default_furnace_top.png b/mods/default/textures/default_furnace_top.png new file mode 100644 index 0000000..92279ba Binary files /dev/null and b/mods/default/textures/default_furnace_top.png differ diff --git a/mods/default/textures/default_glass.png b/mods/default/textures/default_glass.png new file mode 100644 index 0000000..74d6a02 Binary files /dev/null and b/mods/default/textures/default_glass.png differ diff --git a/mods/default/textures/default_glass_detail.png b/mods/default/textures/default_glass_detail.png new file mode 100644 index 0000000..7eab49e Binary files /dev/null and b/mods/default/textures/default_glass_detail.png differ diff --git a/mods/default/textures/default_gold_block.png b/mods/default/textures/default_gold_block.png new file mode 100644 index 0000000..170d50b Binary files /dev/null and b/mods/default/textures/default_gold_block.png differ diff --git a/mods/default/textures/default_gold_ingot.png b/mods/default/textures/default_gold_ingot.png new file mode 100644 index 0000000..ba66471 Binary files /dev/null and b/mods/default/textures/default_gold_ingot.png differ diff --git a/mods/default/textures/default_gold_lump.png b/mods/default/textures/default_gold_lump.png new file mode 100644 index 0000000..d5a1be7 Binary files /dev/null and b/mods/default/textures/default_gold_lump.png differ diff --git a/mods/default/textures/default_grass.png b/mods/default/textures/default_grass.png new file mode 100644 index 0000000..5778caa Binary files /dev/null and b/mods/default/textures/default_grass.png differ diff --git a/mods/default/textures/default_grass_1.png b/mods/default/textures/default_grass_1.png new file mode 100644 index 0000000..d16b307 Binary files /dev/null and b/mods/default/textures/default_grass_1.png differ diff --git a/mods/default/textures/default_grass_2.png b/mods/default/textures/default_grass_2.png new file mode 100644 index 0000000..6a1dac2 Binary files /dev/null and b/mods/default/textures/default_grass_2.png differ diff --git a/mods/default/textures/default_grass_3.png b/mods/default/textures/default_grass_3.png new file mode 100644 index 0000000..e67727a Binary files /dev/null and b/mods/default/textures/default_grass_3.png differ diff --git a/mods/default/textures/default_grass_4.png b/mods/default/textures/default_grass_4.png new file mode 100644 index 0000000..80269d7 Binary files /dev/null and b/mods/default/textures/default_grass_4.png differ diff --git a/mods/default/textures/default_grass_5.png b/mods/default/textures/default_grass_5.png new file mode 100644 index 0000000..df45760 Binary files /dev/null and b/mods/default/textures/default_grass_5.png differ diff --git a/mods/default/textures/default_grass_side.png b/mods/default/textures/default_grass_side.png new file mode 100644 index 0000000..77aa655 Binary files /dev/null and b/mods/default/textures/default_grass_side.png differ diff --git a/mods/default/textures/default_gravel.png b/mods/default/textures/default_gravel.png new file mode 100644 index 0000000..37bf286 Binary files /dev/null and b/mods/default/textures/default_gravel.png differ diff --git a/mods/default/textures/default_ice.png b/mods/default/textures/default_ice.png new file mode 100644 index 0000000..09b53f2 Binary files /dev/null and b/mods/default/textures/default_ice.png differ diff --git a/mods/default/textures/default_invisible_node_overlay.png b/mods/default/textures/default_invisible_node_overlay.png new file mode 100644 index 0000000..7fc8806 Binary files /dev/null and b/mods/default/textures/default_invisible_node_overlay.png differ diff --git a/mods/default/textures/default_iron_lump.png b/mods/default/textures/default_iron_lump.png new file mode 100644 index 0000000..db61a94 Binary files /dev/null and b/mods/default/textures/default_iron_lump.png differ diff --git a/mods/default/textures/default_item_smoke.png b/mods/default/textures/default_item_smoke.png new file mode 100644 index 0000000..ae95c16 Binary files /dev/null and b/mods/default/textures/default_item_smoke.png differ diff --git a/mods/default/textures/default_junglegrass.png b/mods/default/textures/default_junglegrass.png new file mode 100644 index 0000000..25abb71 Binary files /dev/null and b/mods/default/textures/default_junglegrass.png differ diff --git a/mods/default/textures/default_jungleleaves.png b/mods/default/textures/default_jungleleaves.png new file mode 100644 index 0000000..9a8d5f9 Binary files /dev/null and b/mods/default/textures/default_jungleleaves.png differ diff --git a/mods/default/textures/default_jungleleaves_simple.png b/mods/default/textures/default_jungleleaves_simple.png new file mode 100644 index 0000000..d0c3f7e Binary files /dev/null and b/mods/default/textures/default_jungleleaves_simple.png differ diff --git a/mods/default/textures/default_junglesapling.png b/mods/default/textures/default_junglesapling.png new file mode 100644 index 0000000..05e1e50 Binary files /dev/null and b/mods/default/textures/default_junglesapling.png differ diff --git a/mods/default/textures/default_jungletree.png b/mods/default/textures/default_jungletree.png new file mode 100644 index 0000000..671b24d Binary files /dev/null and b/mods/default/textures/default_jungletree.png differ diff --git a/mods/default/textures/default_jungletree_top.png b/mods/default/textures/default_jungletree_top.png new file mode 100644 index 0000000..4027d9e Binary files /dev/null and b/mods/default/textures/default_jungletree_top.png differ diff --git a/mods/default/textures/default_junglewood.png b/mods/default/textures/default_junglewood.png new file mode 100644 index 0000000..68d9e48 Binary files /dev/null and b/mods/default/textures/default_junglewood.png differ diff --git a/mods/default/textures/default_kelp.png b/mods/default/textures/default_kelp.png new file mode 100644 index 0000000..4b95b84 Binary files /dev/null and b/mods/default/textures/default_kelp.png differ diff --git a/mods/default/textures/default_ladder_steel.png b/mods/default/textures/default_ladder_steel.png new file mode 100644 index 0000000..8704126 Binary files /dev/null and b/mods/default/textures/default_ladder_steel.png differ diff --git a/mods/default/textures/default_ladder_wood.png b/mods/default/textures/default_ladder_wood.png new file mode 100644 index 0000000..6e18e54 Binary files /dev/null and b/mods/default/textures/default_ladder_wood.png differ diff --git a/mods/default/textures/default_large_cactus_seedling.png b/mods/default/textures/default_large_cactus_seedling.png new file mode 100644 index 0000000..c8ebf3c Binary files /dev/null and b/mods/default/textures/default_large_cactus_seedling.png differ diff --git a/mods/default/textures/default_lava.png b/mods/default/textures/default_lava.png new file mode 100644 index 0000000..1d7039f Binary files /dev/null and b/mods/default/textures/default_lava.png differ diff --git a/mods/default/textures/default_lava_flowing_animated.png b/mods/default/textures/default_lava_flowing_animated.png new file mode 100644 index 0000000..ebb0ec1 Binary files /dev/null and b/mods/default/textures/default_lava_flowing_animated.png differ diff --git a/mods/default/textures/default_lava_source_animated.png b/mods/default/textures/default_lava_source_animated.png new file mode 100644 index 0000000..326af64 Binary files /dev/null and b/mods/default/textures/default_lava_source_animated.png differ diff --git a/mods/default/textures/default_leaves.png b/mods/default/textures/default_leaves.png new file mode 100644 index 0000000..55ba1e6 Binary files /dev/null and b/mods/default/textures/default_leaves.png differ diff --git a/mods/default/textures/default_leaves_simple.png b/mods/default/textures/default_leaves_simple.png new file mode 100644 index 0000000..c71def7 Binary files /dev/null and b/mods/default/textures/default_leaves_simple.png differ diff --git a/mods/default/textures/default_marram_grass_1.png b/mods/default/textures/default_marram_grass_1.png new file mode 100644 index 0000000..107a259 Binary files /dev/null and b/mods/default/textures/default_marram_grass_1.png differ diff --git a/mods/default/textures/default_marram_grass_2.png b/mods/default/textures/default_marram_grass_2.png new file mode 100644 index 0000000..a6d05c5 Binary files /dev/null and b/mods/default/textures/default_marram_grass_2.png differ diff --git a/mods/default/textures/default_marram_grass_3.png b/mods/default/textures/default_marram_grass_3.png new file mode 100644 index 0000000..2a9668c Binary files /dev/null and b/mods/default/textures/default_marram_grass_3.png differ diff --git a/mods/default/textures/default_mese_block.png b/mods/default/textures/default_mese_block.png new file mode 100644 index 0000000..77524fa Binary files /dev/null and b/mods/default/textures/default_mese_block.png differ diff --git a/mods/default/textures/default_mese_crystal.png b/mods/default/textures/default_mese_crystal.png new file mode 100644 index 0000000..f1d71f1 Binary files /dev/null and b/mods/default/textures/default_mese_crystal.png differ diff --git a/mods/default/textures/default_mese_crystal_fragment.png b/mods/default/textures/default_mese_crystal_fragment.png new file mode 100644 index 0000000..d5416ab Binary files /dev/null and b/mods/default/textures/default_mese_crystal_fragment.png differ diff --git a/mods/default/textures/default_mese_post_light_side.png b/mods/default/textures/default_mese_post_light_side.png new file mode 100644 index 0000000..80a0999 Binary files /dev/null and b/mods/default/textures/default_mese_post_light_side.png differ diff --git a/mods/default/textures/default_mese_post_light_side_dark.png b/mods/default/textures/default_mese_post_light_side_dark.png new file mode 100644 index 0000000..4243e48 Binary files /dev/null and b/mods/default/textures/default_mese_post_light_side_dark.png differ diff --git a/mods/default/textures/default_meselamp.png b/mods/default/textures/default_meselamp.png new file mode 100644 index 0000000..d15c8b9 Binary files /dev/null and b/mods/default/textures/default_meselamp.png differ diff --git a/mods/default/textures/default_mineral_coal.png b/mods/default/textures/default_mineral_coal.png new file mode 100644 index 0000000..6d1386b Binary files /dev/null and b/mods/default/textures/default_mineral_coal.png differ diff --git a/mods/default/textures/default_mineral_copper.png b/mods/default/textures/default_mineral_copper.png new file mode 100644 index 0000000..c4c518e Binary files /dev/null and b/mods/default/textures/default_mineral_copper.png differ diff --git a/mods/default/textures/default_mineral_diamond.png b/mods/default/textures/default_mineral_diamond.png new file mode 100644 index 0000000..b817bd1 Binary files /dev/null and b/mods/default/textures/default_mineral_diamond.png differ diff --git a/mods/default/textures/default_mineral_gold.png b/mods/default/textures/default_mineral_gold.png new file mode 100644 index 0000000..2220add Binary files /dev/null and b/mods/default/textures/default_mineral_gold.png differ diff --git a/mods/default/textures/default_mineral_iron.png b/mods/default/textures/default_mineral_iron.png new file mode 100644 index 0000000..5d63062 Binary files /dev/null and b/mods/default/textures/default_mineral_iron.png differ diff --git a/mods/default/textures/default_mineral_mese.png b/mods/default/textures/default_mineral_mese.png new file mode 100644 index 0000000..56a447d Binary files /dev/null and b/mods/default/textures/default_mineral_mese.png differ diff --git a/mods/default/textures/default_mineral_tin.png b/mods/default/textures/default_mineral_tin.png new file mode 100644 index 0000000..232d4b5 Binary files /dev/null and b/mods/default/textures/default_mineral_tin.png differ diff --git a/mods/default/textures/default_moss.png b/mods/default/textures/default_moss.png new file mode 100644 index 0000000..bb98d7f Binary files /dev/null and b/mods/default/textures/default_moss.png differ diff --git a/mods/default/textures/default_moss_side.png b/mods/default/textures/default_moss_side.png new file mode 100644 index 0000000..f18322c Binary files /dev/null and b/mods/default/textures/default_moss_side.png differ diff --git a/mods/default/textures/default_mossycobble.png b/mods/default/textures/default_mossycobble.png new file mode 100644 index 0000000..1071cb4 Binary files /dev/null and b/mods/default/textures/default_mossycobble.png differ diff --git a/mods/default/textures/default_obsidian.png b/mods/default/textures/default_obsidian.png new file mode 100644 index 0000000..30e063f Binary files /dev/null and b/mods/default/textures/default_obsidian.png differ diff --git a/mods/default/textures/default_obsidian_block.png b/mods/default/textures/default_obsidian_block.png new file mode 100644 index 0000000..dd93f8d Binary files /dev/null and b/mods/default/textures/default_obsidian_block.png differ diff --git a/mods/default/textures/default_obsidian_brick.png b/mods/default/textures/default_obsidian_brick.png new file mode 100644 index 0000000..e4c8fe7 Binary files /dev/null and b/mods/default/textures/default_obsidian_brick.png differ diff --git a/mods/default/textures/default_obsidian_glass.png b/mods/default/textures/default_obsidian_glass.png new file mode 100644 index 0000000..d5ac83d Binary files /dev/null and b/mods/default/textures/default_obsidian_glass.png differ diff --git a/mods/default/textures/default_obsidian_glass_detail.png b/mods/default/textures/default_obsidian_glass_detail.png new file mode 100644 index 0000000..1397ecc Binary files /dev/null and b/mods/default/textures/default_obsidian_glass_detail.png differ diff --git a/mods/default/textures/default_obsidian_shard.png b/mods/default/textures/default_obsidian_shard.png new file mode 100644 index 0000000..a988d8c Binary files /dev/null and b/mods/default/textures/default_obsidian_shard.png differ diff --git a/mods/default/textures/default_paper.png b/mods/default/textures/default_paper.png new file mode 100644 index 0000000..8f23924 Binary files /dev/null and b/mods/default/textures/default_paper.png differ diff --git a/mods/default/textures/default_papyrus.png b/mods/default/textures/default_papyrus.png new file mode 100644 index 0000000..982d589 Binary files /dev/null and b/mods/default/textures/default_papyrus.png differ diff --git a/mods/default/textures/default_permafrost.png b/mods/default/textures/default_permafrost.png new file mode 100644 index 0000000..6f2567e Binary files /dev/null and b/mods/default/textures/default_permafrost.png differ diff --git a/mods/default/textures/default_pine_bush_sapling.png b/mods/default/textures/default_pine_bush_sapling.png new file mode 100644 index 0000000..fadeff8 Binary files /dev/null and b/mods/default/textures/default_pine_bush_sapling.png differ diff --git a/mods/default/textures/default_pine_bush_stem.png b/mods/default/textures/default_pine_bush_stem.png new file mode 100644 index 0000000..7dc00f7 Binary files /dev/null and b/mods/default/textures/default_pine_bush_stem.png differ diff --git a/mods/default/textures/default_pine_needles.png b/mods/default/textures/default_pine_needles.png new file mode 100644 index 0000000..e0e3990 Binary files /dev/null and b/mods/default/textures/default_pine_needles.png differ diff --git a/mods/default/textures/default_pine_sapling.png b/mods/default/textures/default_pine_sapling.png new file mode 100644 index 0000000..c30131d Binary files /dev/null and b/mods/default/textures/default_pine_sapling.png differ diff --git a/mods/default/textures/default_pine_tree.png b/mods/default/textures/default_pine_tree.png new file mode 100644 index 0000000..4a5328f Binary files /dev/null and b/mods/default/textures/default_pine_tree.png differ diff --git a/mods/default/textures/default_pine_tree_top.png b/mods/default/textures/default_pine_tree_top.png new file mode 100644 index 0000000..e26a835 Binary files /dev/null and b/mods/default/textures/default_pine_tree_top.png differ diff --git a/mods/default/textures/default_pine_wood.png b/mods/default/textures/default_pine_wood.png new file mode 100644 index 0000000..29f9d6d Binary files /dev/null and b/mods/default/textures/default_pine_wood.png differ diff --git a/mods/default/textures/default_rainforest_litter.png b/mods/default/textures/default_rainforest_litter.png new file mode 100644 index 0000000..d762deb Binary files /dev/null and b/mods/default/textures/default_rainforest_litter.png differ diff --git a/mods/default/textures/default_rainforest_litter_side.png b/mods/default/textures/default_rainforest_litter_side.png new file mode 100644 index 0000000..1bd0bb6 Binary files /dev/null and b/mods/default/textures/default_rainforest_litter_side.png differ diff --git a/mods/default/textures/default_river_water.png b/mods/default/textures/default_river_water.png new file mode 100644 index 0000000..bee757b Binary files /dev/null and b/mods/default/textures/default_river_water.png differ diff --git a/mods/default/textures/default_river_water_flowing_animated.png b/mods/default/textures/default_river_water_flowing_animated.png new file mode 100644 index 0000000..760d9eb Binary files /dev/null and b/mods/default/textures/default_river_water_flowing_animated.png differ diff --git a/mods/default/textures/default_river_water_source_animated.png b/mods/default/textures/default_river_water_source_animated.png new file mode 100644 index 0000000..e7259cc Binary files /dev/null and b/mods/default/textures/default_river_water_source_animated.png differ diff --git a/mods/default/textures/default_sand.png b/mods/default/textures/default_sand.png new file mode 100644 index 0000000..645a300 Binary files /dev/null and b/mods/default/textures/default_sand.png differ diff --git a/mods/default/textures/default_sandstone.png b/mods/default/textures/default_sandstone.png new file mode 100644 index 0000000..16e3d13 Binary files /dev/null and b/mods/default/textures/default_sandstone.png differ diff --git a/mods/default/textures/default_sandstone_block.png b/mods/default/textures/default_sandstone_block.png new file mode 100644 index 0000000..c3adfd9 Binary files /dev/null and b/mods/default/textures/default_sandstone_block.png differ diff --git a/mods/default/textures/default_sandstone_brick.png b/mods/default/textures/default_sandstone_brick.png new file mode 100644 index 0000000..6326391 Binary files /dev/null and b/mods/default/textures/default_sandstone_brick.png differ diff --git a/mods/default/textures/default_sapling.png b/mods/default/textures/default_sapling.png new file mode 100644 index 0000000..3fd64f0 Binary files /dev/null and b/mods/default/textures/default_sapling.png differ diff --git a/mods/default/textures/default_sign_steel.png b/mods/default/textures/default_sign_steel.png new file mode 100644 index 0000000..1ea3ec9 Binary files /dev/null and b/mods/default/textures/default_sign_steel.png differ diff --git a/mods/default/textures/default_sign_wall_steel.png b/mods/default/textures/default_sign_wall_steel.png new file mode 100644 index 0000000..9a9273d Binary files /dev/null and b/mods/default/textures/default_sign_wall_steel.png differ diff --git a/mods/default/textures/default_sign_wall_wood.png b/mods/default/textures/default_sign_wall_wood.png new file mode 100644 index 0000000..eb91cf6 Binary files /dev/null and b/mods/default/textures/default_sign_wall_wood.png differ diff --git a/mods/default/textures/default_sign_wood.png b/mods/default/textures/default_sign_wood.png new file mode 100644 index 0000000..07eb984 Binary files /dev/null and b/mods/default/textures/default_sign_wood.png differ diff --git a/mods/default/textures/default_silver_sand.png b/mods/default/textures/default_silver_sand.png new file mode 100644 index 0000000..90a7044 Binary files /dev/null and b/mods/default/textures/default_silver_sand.png differ diff --git a/mods/default/textures/default_silver_sandstone.png b/mods/default/textures/default_silver_sandstone.png new file mode 100644 index 0000000..1ccecbf Binary files /dev/null and b/mods/default/textures/default_silver_sandstone.png differ diff --git a/mods/default/textures/default_silver_sandstone_block.png b/mods/default/textures/default_silver_sandstone_block.png new file mode 100644 index 0000000..c8c14e4 Binary files /dev/null and b/mods/default/textures/default_silver_sandstone_block.png differ diff --git a/mods/default/textures/default_silver_sandstone_brick.png b/mods/default/textures/default_silver_sandstone_brick.png new file mode 100644 index 0000000..cb7be40 Binary files /dev/null and b/mods/default/textures/default_silver_sandstone_brick.png differ diff --git a/mods/default/textures/default_snow.png b/mods/default/textures/default_snow.png new file mode 100644 index 0000000..6a12161 Binary files /dev/null and b/mods/default/textures/default_snow.png differ diff --git a/mods/default/textures/default_snow_side.png b/mods/default/textures/default_snow_side.png new file mode 100644 index 0000000..8465d80 Binary files /dev/null and b/mods/default/textures/default_snow_side.png differ diff --git a/mods/default/textures/default_snowball.png b/mods/default/textures/default_snowball.png new file mode 100644 index 0000000..13eb27a Binary files /dev/null and b/mods/default/textures/default_snowball.png differ diff --git a/mods/default/textures/default_steel_block.png b/mods/default/textures/default_steel_block.png new file mode 100644 index 0000000..5e421f0 Binary files /dev/null and b/mods/default/textures/default_steel_block.png differ diff --git a/mods/default/textures/default_steel_ingot.png b/mods/default/textures/default_steel_ingot.png new file mode 100644 index 0000000..8100b01 Binary files /dev/null and b/mods/default/textures/default_steel_ingot.png differ diff --git a/mods/default/textures/default_stick.png b/mods/default/textures/default_stick.png new file mode 100644 index 0000000..0378d07 Binary files /dev/null and b/mods/default/textures/default_stick.png differ diff --git a/mods/default/textures/default_stone.png b/mods/default/textures/default_stone.png new file mode 100644 index 0000000..d3f0ef8 Binary files /dev/null and b/mods/default/textures/default_stone.png differ diff --git a/mods/default/textures/default_stone_block.png b/mods/default/textures/default_stone_block.png new file mode 100644 index 0000000..2d09878 Binary files /dev/null and b/mods/default/textures/default_stone_block.png differ diff --git a/mods/default/textures/default_stone_brick.png b/mods/default/textures/default_stone_brick.png new file mode 100644 index 0000000..3ae9602 Binary files /dev/null and b/mods/default/textures/default_stone_brick.png differ diff --git a/mods/default/textures/default_stones.png b/mods/default/textures/default_stones.png new file mode 100644 index 0000000..d09e329 Binary files /dev/null and b/mods/default/textures/default_stones.png differ diff --git a/mods/default/textures/default_stones_side.png b/mods/default/textures/default_stones_side.png new file mode 100644 index 0000000..7ae823a Binary files /dev/null and b/mods/default/textures/default_stones_side.png differ diff --git a/mods/default/textures/default_tin_block.png b/mods/default/textures/default_tin_block.png new file mode 100644 index 0000000..a834d27 Binary files /dev/null and b/mods/default/textures/default_tin_block.png differ diff --git a/mods/default/textures/default_tin_ingot.png b/mods/default/textures/default_tin_ingot.png new file mode 100644 index 0000000..eed5361 Binary files /dev/null and b/mods/default/textures/default_tin_ingot.png differ diff --git a/mods/default/textures/default_tin_lump.png b/mods/default/textures/default_tin_lump.png new file mode 100644 index 0000000..72bd339 Binary files /dev/null and b/mods/default/textures/default_tin_lump.png differ diff --git a/mods/default/textures/default_tool_bronzeaxe.png b/mods/default/textures/default_tool_bronzeaxe.png new file mode 100644 index 0000000..8ae43b5 Binary files /dev/null and b/mods/default/textures/default_tool_bronzeaxe.png differ diff --git a/mods/default/textures/default_tool_bronzepick.png b/mods/default/textures/default_tool_bronzepick.png new file mode 100644 index 0000000..c88a5f0 Binary files /dev/null and b/mods/default/textures/default_tool_bronzepick.png differ diff --git a/mods/default/textures/default_tool_bronzeshovel.png b/mods/default/textures/default_tool_bronzeshovel.png new file mode 100644 index 0000000..d7d800e Binary files /dev/null and b/mods/default/textures/default_tool_bronzeshovel.png differ diff --git a/mods/default/textures/default_tool_bronzesword.png b/mods/default/textures/default_tool_bronzesword.png new file mode 100644 index 0000000..cdab898 Binary files /dev/null and b/mods/default/textures/default_tool_bronzesword.png differ diff --git a/mods/default/textures/default_tool_diamondaxe.png b/mods/default/textures/default_tool_diamondaxe.png new file mode 100644 index 0000000..e32a0bf Binary files /dev/null and b/mods/default/textures/default_tool_diamondaxe.png differ diff --git a/mods/default/textures/default_tool_diamondpick.png b/mods/default/textures/default_tool_diamondpick.png new file mode 100644 index 0000000..5dcc998 Binary files /dev/null and b/mods/default/textures/default_tool_diamondpick.png differ diff --git a/mods/default/textures/default_tool_diamondshovel.png b/mods/default/textures/default_tool_diamondshovel.png new file mode 100644 index 0000000..d0fe24d Binary files /dev/null and b/mods/default/textures/default_tool_diamondshovel.png differ diff --git a/mods/default/textures/default_tool_diamondsword.png b/mods/default/textures/default_tool_diamondsword.png new file mode 100644 index 0000000..dbccd0e Binary files /dev/null and b/mods/default/textures/default_tool_diamondsword.png differ diff --git a/mods/default/textures/default_tool_meseaxe.png b/mods/default/textures/default_tool_meseaxe.png new file mode 100644 index 0000000..c01fb4f Binary files /dev/null and b/mods/default/textures/default_tool_meseaxe.png differ diff --git a/mods/default/textures/default_tool_mesepick.png b/mods/default/textures/default_tool_mesepick.png new file mode 100644 index 0000000..1b2e25b Binary files /dev/null and b/mods/default/textures/default_tool_mesepick.png differ diff --git a/mods/default/textures/default_tool_meseshovel.png b/mods/default/textures/default_tool_meseshovel.png new file mode 100644 index 0000000..00813a2 Binary files /dev/null and b/mods/default/textures/default_tool_meseshovel.png differ diff --git a/mods/default/textures/default_tool_mesesword.png b/mods/default/textures/default_tool_mesesword.png new file mode 100644 index 0000000..d395d3a Binary files /dev/null and b/mods/default/textures/default_tool_mesesword.png differ diff --git a/mods/default/textures/default_tool_steelaxe.png b/mods/default/textures/default_tool_steelaxe.png new file mode 100644 index 0000000..1528cad Binary files /dev/null and b/mods/default/textures/default_tool_steelaxe.png differ diff --git a/mods/default/textures/default_tool_steelpick.png b/mods/default/textures/default_tool_steelpick.png new file mode 100644 index 0000000..a7543a1 Binary files /dev/null and b/mods/default/textures/default_tool_steelpick.png differ diff --git a/mods/default/textures/default_tool_steelshovel.png b/mods/default/textures/default_tool_steelshovel.png new file mode 100644 index 0000000..65e4045 Binary files /dev/null and b/mods/default/textures/default_tool_steelshovel.png differ diff --git a/mods/default/textures/default_tool_steelsword.png b/mods/default/textures/default_tool_steelsword.png new file mode 100644 index 0000000..630a339 Binary files /dev/null and b/mods/default/textures/default_tool_steelsword.png differ diff --git a/mods/default/textures/default_tool_stoneaxe.png b/mods/default/textures/default_tool_stoneaxe.png new file mode 100644 index 0000000..cc36054 Binary files /dev/null and b/mods/default/textures/default_tool_stoneaxe.png differ diff --git a/mods/default/textures/default_tool_stonepick.png b/mods/default/textures/default_tool_stonepick.png new file mode 100644 index 0000000..237d739 Binary files /dev/null and b/mods/default/textures/default_tool_stonepick.png differ diff --git a/mods/default/textures/default_tool_stoneshovel.png b/mods/default/textures/default_tool_stoneshovel.png new file mode 100644 index 0000000..11711bd Binary files /dev/null and b/mods/default/textures/default_tool_stoneshovel.png differ diff --git a/mods/default/textures/default_tool_stonesword.png b/mods/default/textures/default_tool_stonesword.png new file mode 100644 index 0000000..1a493ac Binary files /dev/null and b/mods/default/textures/default_tool_stonesword.png differ diff --git a/mods/default/textures/default_tool_woodaxe.png b/mods/default/textures/default_tool_woodaxe.png new file mode 100644 index 0000000..68f1fd8 Binary files /dev/null and b/mods/default/textures/default_tool_woodaxe.png differ diff --git a/mods/default/textures/default_tool_woodpick.png b/mods/default/textures/default_tool_woodpick.png new file mode 100644 index 0000000..0aed583 Binary files /dev/null and b/mods/default/textures/default_tool_woodpick.png differ diff --git a/mods/default/textures/default_tool_woodshovel.png b/mods/default/textures/default_tool_woodshovel.png new file mode 100644 index 0000000..dcef2b5 Binary files /dev/null and b/mods/default/textures/default_tool_woodshovel.png differ diff --git a/mods/default/textures/default_tool_woodsword.png b/mods/default/textures/default_tool_woodsword.png new file mode 100644 index 0000000..c78ba50 Binary files /dev/null and b/mods/default/textures/default_tool_woodsword.png differ diff --git a/mods/default/textures/default_torch_animated.png b/mods/default/textures/default_torch_animated.png new file mode 100644 index 0000000..cdf33ef Binary files /dev/null and b/mods/default/textures/default_torch_animated.png differ diff --git a/mods/default/textures/default_torch_on_ceiling_animated.png b/mods/default/textures/default_torch_on_ceiling_animated.png new file mode 100644 index 0000000..5465217 Binary files /dev/null and b/mods/default/textures/default_torch_on_ceiling_animated.png differ diff --git a/mods/default/textures/default_torch_on_floor.png b/mods/default/textures/default_torch_on_floor.png new file mode 100644 index 0000000..bc4bdd6 Binary files /dev/null and b/mods/default/textures/default_torch_on_floor.png differ diff --git a/mods/default/textures/default_torch_on_floor_animated.png b/mods/default/textures/default_torch_on_floor_animated.png new file mode 100644 index 0000000..ad51c03 Binary files /dev/null and b/mods/default/textures/default_torch_on_floor_animated.png differ diff --git a/mods/default/textures/default_tree.png b/mods/default/textures/default_tree.png new file mode 100644 index 0000000..fe89963 Binary files /dev/null and b/mods/default/textures/default_tree.png differ diff --git a/mods/default/textures/default_tree_top.png b/mods/default/textures/default_tree_top.png new file mode 100644 index 0000000..9205ed9 Binary files /dev/null and b/mods/default/textures/default_tree_top.png differ diff --git a/mods/default/textures/default_water.png b/mods/default/textures/default_water.png new file mode 100644 index 0000000..ee093a9 Binary files /dev/null and b/mods/default/textures/default_water.png differ diff --git a/mods/default/textures/default_water_flowing_animated.png b/mods/default/textures/default_water_flowing_animated.png new file mode 100644 index 0000000..c9d9e3b Binary files /dev/null and b/mods/default/textures/default_water_flowing_animated.png differ diff --git a/mods/default/textures/default_water_source_animated.png b/mods/default/textures/default_water_source_animated.png new file mode 100644 index 0000000..c4fed81 Binary files /dev/null and b/mods/default/textures/default_water_source_animated.png differ diff --git a/mods/default/textures/default_wood.png b/mods/default/textures/default_wood.png new file mode 100644 index 0000000..af56d6c Binary files /dev/null and b/mods/default/textures/default_wood.png differ diff --git a/mods/default/textures/gui_formbg.png b/mods/default/textures/gui_formbg.png new file mode 100644 index 0000000..e259fec Binary files /dev/null and b/mods/default/textures/gui_formbg.png differ diff --git a/mods/default/textures/gui_furnace_arrow_bg.png b/mods/default/textures/gui_furnace_arrow_bg.png new file mode 100644 index 0000000..046d8cd Binary files /dev/null and b/mods/default/textures/gui_furnace_arrow_bg.png differ diff --git a/mods/default/textures/gui_furnace_arrow_fg.png b/mods/default/textures/gui_furnace_arrow_fg.png new file mode 100644 index 0000000..8d3c396 Binary files /dev/null and b/mods/default/textures/gui_furnace_arrow_fg.png differ diff --git a/mods/default/textures/gui_hb_bg.png b/mods/default/textures/gui_hb_bg.png new file mode 100644 index 0000000..99248e1 Binary files /dev/null and b/mods/default/textures/gui_hb_bg.png differ diff --git a/mods/default/textures/gui_hotbar.png b/mods/default/textures/gui_hotbar.png new file mode 100644 index 0000000..7bc7887 Binary files /dev/null and b/mods/default/textures/gui_hotbar.png differ diff --git a/mods/default/textures/gui_hotbar_selected.png b/mods/default/textures/gui_hotbar_selected.png new file mode 100644 index 0000000..7203e9a Binary files /dev/null and b/mods/default/textures/gui_hotbar_selected.png differ diff --git a/mods/default/textures/heart.png b/mods/default/textures/heart.png new file mode 100644 index 0000000..4412cab Binary files /dev/null and b/mods/default/textures/heart.png differ diff --git a/mods/default/textures/wieldhand.png b/mods/default/textures/wieldhand.png new file mode 100644 index 0000000..69f4b7b Binary files /dev/null and b/mods/default/textures/wieldhand.png differ diff --git a/mods/default/tools.lua b/mods/default/tools.lua new file mode 100644 index 0000000..1a95a50 --- /dev/null +++ b/mods/default/tools.lua @@ -0,0 +1,477 @@ +-- mods/default/tools.lua + +-- support for MT game translation. +local S = default.get_translator + +-- The hand +-- Override the hand item registered in the engine in builtin/game/register.lua +minetest.override_item("", { + wield_scale = {x=1,y=1,z=2.5}, + tool_capabilities = { + full_punch_interval = 0.9, + max_drop_level = 0, + groupcaps = { + crumbly = {times={[2]=3.00, [3]=0.70}, uses=0, maxlevel=1}, + snappy = {times={[3]=0.40}, uses=0, maxlevel=1}, + oddly_breakable_by_hand = {times={[1]=3.50,[2]=2.00,[3]=0.70}, uses=0} + }, + damage_groups = {fleshy=1}, + } +}) + +-- +-- Picks +-- + +minetest.register_tool("default:pick_wood", { + description = S("Wooden Pickaxe"), + inventory_image = "default_tool_woodpick.png", + tool_capabilities = { + full_punch_interval = 1.2, + max_drop_level=0, + groupcaps={ + cracky = {times={[3]=1.60}, uses=10, maxlevel=1}, + }, + damage_groups = {fleshy=2}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {pickaxe = 1, flammable = 2} +}) + +minetest.register_tool("default:pick_stone", { + description = S("Stone Pickaxe"), + inventory_image = "default_tool_stonepick.png", + tool_capabilities = { + full_punch_interval = 1.3, + max_drop_level=0, + groupcaps={ + cracky = {times={[2]=2.0, [3]=1.00}, uses=20, maxlevel=1}, + }, + damage_groups = {fleshy=3}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {pickaxe = 1} +}) + +minetest.register_tool("default:pick_bronze", { + description = S("Bronze Pickaxe"), + inventory_image = "default_tool_bronzepick.png", + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=1, + groupcaps={ + cracky = {times={[1]=4.50, [2]=1.80, [3]=0.90}, uses=20, maxlevel=2}, + }, + damage_groups = {fleshy=4}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {pickaxe = 1} +}) + +minetest.register_tool("default:pick_steel", { + description = S("Steel Pickaxe"), + inventory_image = "default_tool_steelpick.png", + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=1, + groupcaps={ + cracky = {times={[1]=4.00, [2]=1.60, [3]=0.80}, uses=20, maxlevel=2}, + }, + damage_groups = {fleshy=4}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {pickaxe = 1} +}) + +minetest.register_tool("default:pick_mese", { + description = S("Mese Pickaxe"), + inventory_image = "default_tool_mesepick.png", + tool_capabilities = { + full_punch_interval = 0.9, + max_drop_level=3, + groupcaps={ + cracky = {times={[1]=2.4, [2]=1.2, [3]=0.60}, uses=20, maxlevel=3}, + }, + damage_groups = {fleshy=5}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {pickaxe = 1} +}) + +minetest.register_tool("default:pick_diamond", { + description = S("Diamond Pickaxe"), + inventory_image = "default_tool_diamondpick.png", + tool_capabilities = { + full_punch_interval = 0.9, + max_drop_level=3, + groupcaps={ + cracky = {times={[1]=2.0, [2]=1.0, [3]=0.50}, uses=30, maxlevel=3}, + }, + damage_groups = {fleshy=5}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {pickaxe = 1} +}) + +-- +-- Shovels +-- + +minetest.register_tool("default:shovel_wood", { + description = S("Wooden Shovel"), + inventory_image = "default_tool_woodshovel.png", + wield_image = "default_tool_woodshovel.png^[transformR90", + tool_capabilities = { + full_punch_interval = 1.2, + max_drop_level=0, + groupcaps={ + crumbly = {times={[1]=3.00, [2]=1.60, [3]=0.60}, uses=10, maxlevel=1}, + }, + damage_groups = {fleshy=2}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {shovel = 1, flammable = 2} +}) + +minetest.register_tool("default:shovel_stone", { + description = S("Stone Shovel"), + inventory_image = "default_tool_stoneshovel.png", + wield_image = "default_tool_stoneshovel.png^[transformR90", + tool_capabilities = { + full_punch_interval = 1.4, + max_drop_level=0, + groupcaps={ + crumbly = {times={[1]=1.80, [2]=1.20, [3]=0.50}, uses=20, maxlevel=1}, + }, + damage_groups = {fleshy=2}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {shovel = 1} +}) + +minetest.register_tool("default:shovel_bronze", { + description = S("Bronze Shovel"), + inventory_image = "default_tool_bronzeshovel.png", + wield_image = "default_tool_bronzeshovel.png^[transformR90", + tool_capabilities = { + full_punch_interval = 1.1, + max_drop_level=1, + groupcaps={ + crumbly = {times={[1]=1.65, [2]=1.05, [3]=0.45}, uses=25, maxlevel=2}, + }, + damage_groups = {fleshy=3}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {shovel = 1} +}) + +minetest.register_tool("default:shovel_steel", { + description = S("Steel Shovel"), + inventory_image = "default_tool_steelshovel.png", + wield_image = "default_tool_steelshovel.png^[transformR90", + tool_capabilities = { + full_punch_interval = 1.1, + max_drop_level=1, + groupcaps={ + crumbly = {times={[1]=1.50, [2]=0.90, [3]=0.40}, uses=30, maxlevel=2}, + }, + damage_groups = {fleshy=3}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {shovel = 1} +}) + +minetest.register_tool("default:shovel_mese", { + description = S("Mese Shovel"), + inventory_image = "default_tool_meseshovel.png", + wield_image = "default_tool_meseshovel.png^[transformR90", + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=3, + groupcaps={ + crumbly = {times={[1]=1.20, [2]=0.60, [3]=0.30}, uses=20, maxlevel=3}, + }, + damage_groups = {fleshy=4}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {shovel = 1} +}) + +minetest.register_tool("default:shovel_diamond", { + description = S("Diamond Shovel"), + inventory_image = "default_tool_diamondshovel.png", + wield_image = "default_tool_diamondshovel.png^[transformR90", + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=1, + groupcaps={ + crumbly = {times={[1]=1.10, [2]=0.50, [3]=0.30}, uses=30, maxlevel=3}, + }, + damage_groups = {fleshy=4}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {shovel = 1} +}) + +-- +-- Axes +-- + +minetest.register_tool("default:axe_wood", { + description = S("Wooden Axe"), + inventory_image = "default_tool_woodaxe.png", + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=0, + groupcaps={ + choppy = {times={[2]=3.00, [3]=1.60}, uses=10, maxlevel=1}, + }, + damage_groups = {fleshy=2}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {axe = 1, flammable = 2} +}) + +minetest.register_tool("default:axe_stone", { + description = S("Stone Axe"), + inventory_image = "default_tool_stoneaxe.png", + tool_capabilities = { + full_punch_interval = 1.2, + max_drop_level=0, + groupcaps={ + choppy={times={[1]=3.00, [2]=2.00, [3]=1.30}, uses=20, maxlevel=1}, + }, + damage_groups = {fleshy=3}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {axe = 1} +}) + +minetest.register_tool("default:axe_bronze", { + description = S("Bronze Axe"), + inventory_image = "default_tool_bronzeaxe.png", + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=1, + groupcaps={ + choppy={times={[1]=2.75, [2]=1.70, [3]=1.15}, uses=20, maxlevel=2}, + }, + damage_groups = {fleshy=4}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {axe = 1} +}) + +minetest.register_tool("default:axe_steel", { + description = S("Steel Axe"), + inventory_image = "default_tool_steelaxe.png", + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=1, + groupcaps={ + choppy={times={[1]=2.50, [2]=1.40, [3]=1.00}, uses=20, maxlevel=2}, + }, + damage_groups = {fleshy=4}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {axe = 1} +}) + +minetest.register_tool("default:axe_mese", { + description = S("Mese Axe"), + inventory_image = "default_tool_meseaxe.png", + tool_capabilities = { + full_punch_interval = 0.9, + max_drop_level=1, + groupcaps={ + choppy={times={[1]=2.20, [2]=1.00, [3]=0.60}, uses=20, maxlevel=3}, + }, + damage_groups = {fleshy=6}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {axe = 1} +}) + +minetest.register_tool("default:axe_diamond", { + description = S("Diamond Axe"), + inventory_image = "default_tool_diamondaxe.png", + tool_capabilities = { + full_punch_interval = 0.9, + max_drop_level=1, + groupcaps={ + choppy={times={[1]=2.10, [2]=0.90, [3]=0.50}, uses=30, maxlevel=3}, + }, + damage_groups = {fleshy=7}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {axe = 1} +}) + +-- +-- Swords +-- + +minetest.register_tool("default:sword_wood", { + description = S("Wooden Sword"), + inventory_image = "default_tool_woodsword.png", + tool_capabilities = { + full_punch_interval = 1, + max_drop_level=0, + groupcaps={ + snappy={times={[2]=1.6, [3]=0.40}, uses=10, maxlevel=1}, + }, + damage_groups = {fleshy=2}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {sword = 1, flammable = 2} +}) + +minetest.register_tool("default:sword_stone", { + description = S("Stone Sword"), + inventory_image = "default_tool_stonesword.png", + tool_capabilities = { + full_punch_interval = 1.2, + max_drop_level=0, + groupcaps={ + snappy={times={[2]=1.4, [3]=0.40}, uses=20, maxlevel=1}, + }, + damage_groups = {fleshy=4}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {sword = 1} +}) + +minetest.register_tool("default:sword_bronze", { + description = S("Bronze Sword"), + inventory_image = "default_tool_bronzesword.png", + tool_capabilities = { + full_punch_interval = 0.8, + max_drop_level=1, + groupcaps={ + snappy={times={[1]=2.75, [2]=1.30, [3]=0.375}, uses=25, maxlevel=2}, + }, + damage_groups = {fleshy=6}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {sword = 1} +}) + +minetest.register_tool("default:sword_steel", { + description = S("Steel Sword"), + inventory_image = "default_tool_steelsword.png", + tool_capabilities = { + full_punch_interval = 0.8, + max_drop_level=1, + groupcaps={ + snappy={times={[1]=2.5, [2]=1.20, [3]=0.35}, uses=30, maxlevel=2}, + }, + damage_groups = {fleshy=6}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {sword = 1} +}) + +minetest.register_tool("default:sword_mese", { + description = S("Mese Sword"), + inventory_image = "default_tool_mesesword.png", + tool_capabilities = { + full_punch_interval = 0.7, + max_drop_level=1, + groupcaps={ + snappy={times={[1]=2.0, [2]=1.00, [3]=0.35}, uses=30, maxlevel=3}, + }, + damage_groups = {fleshy=7}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {sword = 1} +}) + +minetest.register_tool("default:sword_diamond", { + description = S("Diamond Sword"), + inventory_image = "default_tool_diamondsword.png", + tool_capabilities = { + full_punch_interval = 0.7, + max_drop_level=1, + groupcaps={ + snappy={times={[1]=1.90, [2]=0.90, [3]=0.30}, uses=40, maxlevel=3}, + }, + damage_groups = {fleshy=8}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {sword = 1} +}) + +-- +-- Register Craft Recipies +-- + +local craft_ingreds = { + wood = "group:wood", + stone = "group:stone", + steel = "default:steel_ingot", + bronze = "default:bronze_ingot", + mese = "default:mese_crystal", + diamond = "default:diamond" +} + +for name, mat in pairs(craft_ingreds) do + minetest.register_craft({ + output = "default:pick_".. name, + recipe = { + {mat, mat, mat}, + {"", "group:stick", ""}, + {"", "group:stick", ""} + } + }) + + minetest.register_craft({ + output = "default:shovel_".. name, + recipe = { + {mat}, + {"group:stick"}, + {"group:stick"} + } + }) + + minetest.register_craft({ + output = "default:axe_".. name, + recipe = { + {mat, mat}, + {mat, "group:stick"}, + {"", "group:stick"} + } + }) + + minetest.register_craft({ + output = "default:sword_".. name, + recipe = { + {mat}, + {mat}, + {"group:stick"} + } + }) +end + +minetest.register_craft({ + type = "fuel", + recipe = "default:pick_wood", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:shovel_wood", + burntime = 4, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:axe_wood", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:sword_wood", + burntime = 5, +}) diff --git a/mods/default/torch.lua b/mods/default/torch.lua new file mode 100644 index 0000000..e8f734c --- /dev/null +++ b/mods/default/torch.lua @@ -0,0 +1,157 @@ +-- default/torch.lua + +-- support for MT game translation. +local S = default.get_translator + +local function on_flood(pos, oldnode, newnode) + minetest.add_item(pos, ItemStack("default:torch 1")) + -- Play flame-extinguish sound if liquid is not an 'igniter' + local nodedef = minetest.registered_items[newnode.name] + if not (nodedef and nodedef.groups and + nodedef.groups.igniter and nodedef.groups.igniter > 0) then + minetest.sound_play( + "default_cool_lava", + {pos = pos, max_hear_distance = 16, gain = 0.07}, + true + ) + end + -- Remove the torch node + return false +end + +minetest.register_node("default:torch", { + description = S("Torch"), + drawtype = "mesh", + mesh = "torch_floor.obj", + inventory_image = "default_torch_on_floor.png", + wield_image = "default_torch_on_floor.png", + tiles = {{ + name = "default_torch_on_floor_animated.png", + animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} + }}, + use_texture_alpha = "clip", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + liquids_pointable = false, + light_source = 12, + groups = {choppy=2, dig_immediate=3, flammable=1, attached_node=1, torch=1}, + drop = "default:torch", + selection_box = { + type = "wallmounted", + wall_bottom = {-1/8, -1/2, -1/8, 1/8, 2/16, 1/8}, + }, + sounds = default.node_sound_wood_defaults(), + on_place = function(itemstack, placer, pointed_thing) + local under = pointed_thing.under + local node = minetest.get_node(under) + local def = minetest.registered_nodes[node.name] + if def and def.on_rightclick and + not (placer and placer:is_player() and + placer:get_player_control().sneak) then + return def.on_rightclick(under, node, placer, itemstack, + pointed_thing) or itemstack + end + + local above = pointed_thing.above + local wdir = minetest.dir_to_wallmounted(vector.subtract(under, above)) + local fakestack = itemstack + if wdir == 0 then + fakestack:set_name("default:torch_ceiling") + elseif wdir == 1 then + fakestack:set_name("default:torch") + else + fakestack:set_name("default:torch_wall") + end + + itemstack = minetest.item_place(fakestack, placer, pointed_thing, wdir) + itemstack:set_name("default:torch") + + return itemstack + end, + floodable = true, + on_flood = on_flood, + on_rotate = false +}) + +minetest.register_node("default:torch_wall", { + drawtype = "mesh", + mesh = "torch_wall.obj", + tiles = {{ + name = "default_torch_on_floor_animated.png", + animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} + }}, + use_texture_alpha = "clip", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + light_source = 12, + groups = {choppy=2, dig_immediate=3, flammable=1, not_in_creative_inventory=1, attached_node=1, torch=1}, + drop = "default:torch", + selection_box = { + type = "wallmounted", + wall_side = {-1/2, -1/2, -1/8, -1/8, 1/8, 1/8}, + }, + sounds = default.node_sound_wood_defaults(), + floodable = true, + on_flood = on_flood, + on_rotate = false +}) + +minetest.register_node("default:torch_ceiling", { + drawtype = "mesh", + mesh = "torch_ceiling.obj", + tiles = {{ + name = "default_torch_on_floor_animated.png", + animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} + }}, + use_texture_alpha = "clip", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + light_source = 12, + groups = {choppy=2, dig_immediate=3, flammable=1, not_in_creative_inventory=1, attached_node=1, torch=1}, + drop = "default:torch", + selection_box = { + type = "wallmounted", + wall_top = {-1/8, -1/16, -5/16, 1/8, 1/2, 1/8}, + }, + sounds = default.node_sound_wood_defaults(), + floodable = true, + on_flood = on_flood, + on_rotate = false +}) + +minetest.register_lbm({ + name = "default:3dtorch", + nodenames = {"default:torch", "torches:floor", "torches:wall"}, + action = function(pos, node) + if node.param2 == 0 then + minetest.set_node(pos, {name = "default:torch_ceiling", + param2 = node.param2}) + elseif node.param2 == 1 then + minetest.set_node(pos, {name = "default:torch", + param2 = node.param2}) + else + minetest.set_node(pos, {name = "default:torch_wall", + param2 = node.param2}) + end + end +}) + +minetest.register_craft({ + output = "default:torch 4", + recipe = { + {"default:coal_lump"}, + {"group:stick"}, + } +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:torch", + burntime = 4, +}) diff --git a/mods/default/trees.lua b/mods/default/trees.lua new file mode 100644 index 0000000..5445a6f --- /dev/null +++ b/mods/default/trees.lua @@ -0,0 +1,611 @@ +-- default/trees.lua + +-- support for MT game translation. +local S = default.get_translator + +local random = math.random + +-- +-- Grow trees from saplings +-- + +-- 'can grow' function + +function default.can_grow(pos) + local node_under = minetest.get_node_or_nil({x = pos.x, y = pos.y - 1, z = pos.z}) + if not node_under then + return false + end + if minetest.get_item_group(node_under.name, "soil") == 0 then + return false + end + local light_level = minetest.get_node_light(pos) + if not light_level or light_level < 13 then + return false + end + return true +end + +function default.on_grow_failed(pos) + minetest.get_node_timer(pos):start(300) +end + + +-- 'is snow nearby' function + +local function is_snow_nearby(pos) + return minetest.find_node_near(pos, 1, {"group:snowy"}) +end + + + +-- +-- Tree generation +-- + +-- Apple tree and jungle tree trunk and leaves function + +local function add_trunk_and_leaves(data, a, pos, tree_cid, leaves_cid, + height, size, iters, is_apple_tree) + local x, y, z = pos.x, pos.y, pos.z + local c_air = minetest.get_content_id("air") + local c_ignore = minetest.get_content_id("ignore") + local c_apple = minetest.get_content_id("default:apple") + + -- Trunk + data[a:index(x, y, z)] = tree_cid -- Force-place lowest trunk node to replace sapling + for yy = y + 1, y + height - 1 do + local vi = a:index(x, yy, z) + local node_id = data[vi] + if node_id == c_air or node_id == c_ignore or node_id == leaves_cid then + data[vi] = tree_cid + end + end + + -- Force leaves near the trunk + for z_dist = -1, 1 do + for y_dist = -size, 1 do + local vi = a:index(x - 1, y + height + y_dist, z + z_dist) + for x_dist = -1, 1 do + if data[vi] == c_air or data[vi] == c_ignore then + if is_apple_tree and random(1, 8) == 1 then + data[vi] = c_apple + else + data[vi] = leaves_cid + end + end + vi = vi + 1 + end + end + end + + -- Randomly add leaves in 2x2x2 clusters. + for i = 1, iters do + local clust_x = x + random(-size, size - 1) + local clust_y = y + height + random(-size, 0) + local clust_z = z + random(-size, size - 1) + + for xi = 0, 1 do + for yi = 0, 1 do + for zi = 0, 1 do + local vi = a:index(clust_x + xi, clust_y + yi, clust_z + zi) + if data[vi] == c_air or data[vi] == c_ignore then + if is_apple_tree and random(1, 8) == 1 then + data[vi] = c_apple + else + data[vi] = leaves_cid + end + end + end + end + end + end +end + + +-- Apple tree + +function default.grow_tree(pos, is_apple_tree, bad) + --[[ + NOTE: Tree-placing code is currently duplicated in the engine + and in games that have saplings; both are deprecated but not + replaced yet + --]] + if bad then + error("Deprecated use of default.grow_tree") + end + + local x, y, z = pos.x, pos.y, pos.z + local height = random(4, 5) + local c_tree = minetest.get_content_id("default:tree") + local c_leaves = minetest.get_content_id("default:leaves") + + local vm = minetest.get_voxel_manip() + local minp, maxp = vm:read_from_map( + {x = x - 2, y = y, z = z - 2}, + {x = x + 2, y = y + height + 1, z = z + 2} + ) + local a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) + local data = vm:get_data() + + add_trunk_and_leaves(data, a, pos, c_tree, c_leaves, height, 2, 8, is_apple_tree) + + vm:set_data(data) + vm:write_to_map() + if vm.close ~= nil then + vm:close() + end +end + +-- Jungle tree + +function default.grow_jungle_tree(pos, bad) + --[[ + NOTE: Jungletree-placing code is currently duplicated in the engine + and in games that have saplings; both are deprecated but not + replaced yet + --]] + if bad then + error("Deprecated use of default.grow_jungle_tree") + end + + local x, y, z = pos.x, pos.y, pos.z + local height = random(8, 12) + local c_air = minetest.get_content_id("air") + local c_ignore = minetest.get_content_id("ignore") + local c_jungletree = minetest.get_content_id("default:jungletree") + local c_jungleleaves = minetest.get_content_id("default:jungleleaves") + + local vm = minetest.get_voxel_manip() + local minp, maxp = vm:read_from_map( + {x = x - 3, y = y - 1, z = z - 3}, + {x = x + 3, y = y + height + 1, z = z + 3} + ) + local a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) + local data = vm:get_data() + + add_trunk_and_leaves(data, a, pos, c_jungletree, c_jungleleaves, + height, 3, 30, false) + + -- Roots + for z_dist = -1, 1 do + local vi_1 = a:index(x - 1, y - 1, z + z_dist) + local vi_2 = a:index(x - 1, y, z + z_dist) + for x_dist = -1, 1 do + if random(1, 3) >= 2 then + if data[vi_1] == c_air or data[vi_1] == c_ignore then + data[vi_1] = c_jungletree + elseif data[vi_2] == c_air or data[vi_2] == c_ignore then + data[vi_2] = c_jungletree + end + end + vi_1 = vi_1 + 1 + vi_2 = vi_2 + 1 + end + end + + vm:set_data(data) + vm:write_to_map() + if vm.close ~= nil then + vm:close() + end +end + + +-- Pine tree from mg mapgen mod, design by sfan5, pointy top added by paramat + +local function add_pine_needles(data, vi, c_air, c_ignore, c_snow, c_pine_needles) + local node_id = data[vi] + if node_id == c_air or node_id == c_ignore or node_id == c_snow then + data[vi] = c_pine_needles + end +end + +local function add_snow(data, vi, c_air, c_ignore, c_snow) + local node_id = data[vi] + if node_id == c_air or node_id == c_ignore then + data[vi] = c_snow + end +end + +function default.grow_pine_tree(pos, snow) + local x, y, z = pos.x, pos.y, pos.z + local maxy = y + random(9, 13) -- Trunk top + + local c_air = minetest.get_content_id("air") + local c_ignore = minetest.get_content_id("ignore") + local c_pine_tree = minetest.get_content_id("default:pine_tree") + local c_pine_needles = minetest.get_content_id("default:pine_needles") + local c_snow = minetest.get_content_id("default:snow") + + local vm = minetest.get_voxel_manip() + local minp, maxp = vm:read_from_map( + {x = x - 3, y = y, z = z - 3}, + {x = x + 3, y = maxy + 3, z = z + 3} + ) + local a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) + local data = vm:get_data() + + -- Upper branches layer + local dev = 3 + for yy = maxy - 1, maxy + 1 do + for zz = z - dev, z + dev do + local vi = a:index(x - dev, yy, zz) + local via = a:index(x - dev, yy + 1, zz) + for xx = x - dev, x + dev do + if random() < 0.95 - dev * 0.05 then + add_pine_needles(data, vi, c_air, c_ignore, c_snow, + c_pine_needles) + if snow then + add_snow(data, via, c_air, c_ignore, c_snow) + end + end + vi = vi + 1 + via = via + 1 + end + end + dev = dev - 1 + end + + -- Centre top nodes + add_pine_needles(data, a:index(x, maxy + 1, z), c_air, c_ignore, c_snow, + c_pine_needles) + add_pine_needles(data, a:index(x, maxy + 2, z), c_air, c_ignore, c_snow, + c_pine_needles) -- Paramat added a pointy top node + if snow then + add_snow(data, a:index(x, maxy + 3, z), c_air, c_ignore, c_snow) + end + + -- Lower branches layer + local my = 0 + for i = 1, 20 do -- Random 2x2 squares of needles + local xi = x + random(-3, 2) + local yy = maxy + random(-6, -5) + local zi = z + random(-3, 2) + if yy > my then + my = yy + end + for zz = zi, zi+1 do + local vi = a:index(xi, yy, zz) + local via = a:index(xi, yy + 1, zz) + for xx = xi, xi + 1 do + add_pine_needles(data, vi, c_air, c_ignore, c_snow, + c_pine_needles) + if snow then + add_snow(data, via, c_air, c_ignore, c_snow) + end + vi = vi + 1 + via = via + 1 + end + end + end + + dev = 2 + for yy = my + 1, my + 2 do + for zz = z - dev, z + dev do + local vi = a:index(x - dev, yy, zz) + local via = a:index(x - dev, yy + 1, zz) + for xx = x - dev, x + dev do + if random() < 0.95 - dev * 0.05 then + add_pine_needles(data, vi, c_air, c_ignore, c_snow, + c_pine_needles) + if snow then + add_snow(data, via, c_air, c_ignore, c_snow) + end + end + vi = vi + 1 + via = via + 1 + end + end + dev = dev - 1 + end + + -- Trunk + -- Force-place lowest trunk node to replace sapling + data[a:index(x, y, z)] = c_pine_tree + for yy = y + 1, maxy do + local vi = a:index(x, yy, z) + local node_id = data[vi] + if node_id == c_air or node_id == c_ignore or + node_id == c_pine_needles or node_id == c_snow then + data[vi] = c_pine_tree + end + end + + vm:set_data(data) + vm:write_to_map() + if vm.close ~= nil then + vm:close() + end +end + + +-- New apple tree + +function default.grow_new_apple_tree(pos) + local path = minetest.get_modpath("default") .. + "/schematics/apple_tree_from_sapling.mts" + minetest.place_schematic({x = pos.x - 3, y = pos.y - 1, z = pos.z - 3}, + path, "random", nil, false) +end + + +-- New jungle tree + +function default.grow_new_jungle_tree(pos) + local path = minetest.get_modpath("default") .. + "/schematics/jungle_tree_from_sapling.mts" + minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, + path, "random", nil, false) +end + + +-- New emergent jungle tree + +function default.grow_new_emergent_jungle_tree(pos) + local path = minetest.get_modpath("default") .. + "/schematics/emergent_jungle_tree_from_sapling.mts" + minetest.place_schematic({x = pos.x - 3, y = pos.y - 5, z = pos.z - 3}, + path, "random", nil, false) +end + + +-- New pine tree + +function default.grow_new_pine_tree(pos) + local path + if math.random() > 0.5 then + path = minetest.get_modpath("default") .. + "/schematics/pine_tree_from_sapling.mts" + else + path = minetest.get_modpath("default") .. + "/schematics/small_pine_tree_from_sapling.mts" + end + minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, + path, "0", nil, false) +end + + +-- New snowy pine tree + +function default.grow_new_snowy_pine_tree(pos) + local path + if math.random() > 0.5 then + path = minetest.get_modpath("default") .. + "/schematics/snowy_pine_tree_from_sapling.mts" + else + path = minetest.get_modpath("default") .. + "/schematics/snowy_small_pine_tree_from_sapling.mts" + end + minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, + path, "random", nil, false) +end + + +-- New acacia tree + +function default.grow_new_acacia_tree(pos) + local path = minetest.get_modpath("default") .. + "/schematics/acacia_tree_from_sapling.mts" + minetest.place_schematic({x = pos.x - 4, y = pos.y - 1, z = pos.z - 4}, + path, "random", nil, false) +end + + +-- New aspen tree + +function default.grow_new_aspen_tree(pos) + local path = minetest.get_modpath("default") .. + "/schematics/aspen_tree_from_sapling.mts" + minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, + path, "0", nil, false) +end + + +-- Bushes do not need 'from sapling' schematic variants because +-- only the stem node is force-placed in the schematic. + +-- Bush + +function default.grow_bush(pos) + local path = minetest.get_modpath("default") .. + "/schematics/bush.mts" + minetest.place_schematic({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, + path, "0", nil, false) +end + +-- Blueberry bush + +function default.grow_blueberry_bush(pos) + local path = minetest.get_modpath("default") .. + "/schematics/blueberry_bush.mts" + minetest.place_schematic({x = pos.x - 1, y = pos.y, z = pos.z - 1}, + path, "0", nil, false) +end + + +-- Acacia bush + +function default.grow_acacia_bush(pos) + local path = minetest.get_modpath("default") .. + "/schematics/acacia_bush.mts" + minetest.place_schematic({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, + path, "0", nil, false) +end + + +-- Pine bush + +function default.grow_pine_bush(pos) + local path = minetest.get_modpath("default") .. + "/schematics/pine_bush.mts" + minetest.place_schematic({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, + path, "0", nil, false) +end + + +-- Large cactus + +function default.grow_large_cactus(pos) + local path = minetest.get_modpath("default") .. + "/schematics/large_cactus.mts" + minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, + path, "random", nil, false) +end + + +-- +-- Sapling 'on place' function to check protection of node and resulting tree volume +-- + +function default.sapling_on_place(itemstack, placer, pointed_thing, + sapling_name, minp_relative, maxp_relative, interval) + -- Position of sapling + local pos = pointed_thing.under + local node = minetest.get_node_or_nil(pos) + local pdef = node and minetest.registered_nodes[node.name] + + if pdef and pdef.on_rightclick and + not (placer and placer:is_player() and + placer:get_player_control().sneak) then + return pdef.on_rightclick(pos, node, placer, itemstack, pointed_thing) + end + + if not pdef or not pdef.buildable_to then + pos = pointed_thing.above + node = minetest.get_node_or_nil(pos) + pdef = node and minetest.registered_nodes[node.name] + if not pdef or not pdef.buildable_to then + return itemstack + end + end + + local player_name = placer and placer:get_player_name() or "" + -- Check sapling position for protection + if minetest.is_protected(pos, player_name) then + minetest.record_protection_violation(pos, player_name) + return itemstack + end + -- Check tree volume for protection + if minetest.is_area_protected( + vector.add(pos, minp_relative), + vector.add(pos, maxp_relative), + player_name, + interval) then + minetest.record_protection_violation(pos, player_name) + -- Print extra information to explain + minetest.chat_send_player(player_name, + S("@1 will intersect protection on growth.", + itemstack:get_definition().description)) + return itemstack + end + + if placer then + default.log_player_action(placer, "places node", sapling_name, "at", pos) + end + + local take_item = not minetest.is_creative_enabled(player_name) + local newnode = {name = sapling_name} + local ndef = minetest.registered_nodes[sapling_name] + minetest.set_node(pos, newnode) + + -- Run callback + if ndef and ndef.after_place_node then + -- Deepcopy place_to and pointed_thing because callback can modify it + if ndef.after_place_node(table.copy(pos), placer, + itemstack, table.copy(pointed_thing)) then + take_item = false + end + end + + -- Run script hook + for _, callback in ipairs(minetest.registered_on_placenodes) do + -- Deepcopy pos, node and pointed_thing because callback can modify them + if callback(table.copy(pos), table.copy(newnode), + placer, table.copy(node or {}), + itemstack, table.copy(pointed_thing)) then + take_item = false + end + end + + if take_item then + itemstack:take_item() + end + + return itemstack +end + +-- Grow sapling + +default.sapling_growth_defs = {} + +function default.register_sapling_growth(name, def) + default.sapling_growth_defs[name] = { + can_grow = def.can_grow or default.can_grow, + on_grow_failed = def.on_grow_failed or default.on_grow_failed, + grow = assert(def.grow) + } +end + +function default.grow_sapling(pos) + local node = minetest.get_node(pos) + local sapling_def = default.sapling_growth_defs[node.name] + + if not sapling_def then + minetest.log("warning", "default.grow_sapling called on undefined sapling " .. node.name) + return + end + + if not sapling_def.can_grow(pos) then + sapling_def.on_grow_failed(pos) + return + end + + minetest.log("action", "Growing sapling " .. node.name .. " at " .. minetest.pos_to_string(pos)) + sapling_def.grow(pos) +end + +local function register_sapling_growth(nodename, grow) + default.register_sapling_growth("default:" .. nodename, {grow = grow}) +end + +if minetest.get_mapgen_setting("mg_name") == "v6" then + register_sapling_growth("sapling", function(pos) + default.grow_tree(pos, random(1, 4) == 1) + end) + register_sapling_growth("junglesapling", default.grow_jungle_tree) + register_sapling_growth("pine_sapling", function(pos) + local snow = is_snow_nearby(pos) + default.grow_pine_tree(pos, snow) + end) +else + register_sapling_growth("sapling", default.grow_new_apple_tree) + register_sapling_growth("junglesapling", default.grow_new_jungle_tree) + register_sapling_growth("pine_sapling", function(pos) + local snow = is_snow_nearby(pos) + if snow then + default.grow_new_snowy_pine_tree(pos) + else + default.grow_new_pine_tree(pos) + end + end) +end + +register_sapling_growth("acacia_sapling", default.grow_new_acacia_tree) +register_sapling_growth("aspen_sapling", default.grow_new_aspen_tree) +register_sapling_growth("bush_sapling", default.grow_bush) +register_sapling_growth("blueberry_bush_sapling", default.grow_blueberry_bush) +register_sapling_growth("acacia_bush_sapling", default.grow_acacia_bush) +register_sapling_growth("pine_bush_sapling", default.grow_pine_bush) +register_sapling_growth("emergent_jungle_sapling", default.grow_new_emergent_jungle_tree) + +-- Backwards compatibility for saplings that used to use ABMs; does not need to include newer saplings. +minetest.register_lbm({ + name = "default:convert_saplings_to_node_timer", + nodenames = {"default:sapling", "default:junglesapling", + "default:pine_sapling", "default:acacia_sapling", + "default:aspen_sapling"}, + action = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end +}) diff --git a/mods/flowers/README.txt b/mods/flowers/README.txt new file mode 100644 index 0000000..1cb02a7 --- /dev/null +++ b/mods/flowers/README.txt @@ -0,0 +1,30 @@ +Minetest Game mod: flowers +========================== +See license.txt for license information. + +Authors of source code +---------------------- +Originally by Ironzorg (MIT) and VanessaE (MIT) +Various Minetest Game developers and contributors (MIT) + +Authors of media (textures) +--------------------------- +RHRhino (CC BY-SA 3.0): + flowers_dandelion_white.png + flowers_geranium.png + flowers_rose.png + flowers_tulip.png + flowers_viola.png + +Gambit (CC BY-SA 3.0): + flowers_mushroom_brown.png + flowers_mushroom_red.png + flowers_waterlily.png + +yyt16384 (CC BY-SA 3.0): + flowers_waterlily_bottom.png -- Derived from Gambit's texture + +paramat (CC BY-SA 3.0): + flowers_dandelion_yellow.png -- Derived from RHRhino's texture + flowers_tulip_black.png -- Derived from RHRhino's texture + flowers_chrysanthemum_green.png diff --git a/mods/flowers/init.lua b/mods/flowers/init.lua new file mode 100644 index 0000000..6456216 --- /dev/null +++ b/mods/flowers/init.lua @@ -0,0 +1,336 @@ +-- flowers/init.lua + +-- Minetest Game mod: flowers +-- See README.txt for licensing and other information. + + +-- Namespace for functions + +flowers = {} + +-- Load support for MT game translation. +local S = minetest.get_translator("flowers") + + +-- Map Generation + +dofile(minetest.get_modpath("flowers") .. "/mapgen.lua") + + +-- +-- Flowers +-- + +-- Aliases for original flowers mod + +minetest.register_alias("flowers:flower_rose", "flowers:rose") +minetest.register_alias("flowers:flower_tulip", "flowers:tulip") +minetest.register_alias("flowers:flower_dandelion_yellow", "flowers:dandelion_yellow") +minetest.register_alias("flowers:flower_geranium", "flowers:geranium") +minetest.register_alias("flowers:flower_viola", "flowers:viola") +minetest.register_alias("flowers:flower_dandelion_white", "flowers:dandelion_white") + + +-- Flower registration + +local function add_simple_flower(name, desc, box, f_groups) + -- Common flowers' groups + f_groups.snappy = 3 + f_groups.flower = 1 + f_groups.flora = 1 + f_groups.attached_node = 1 + + minetest.register_node("flowers:" .. name, { + description = desc, + drawtype = "plantlike", + waving = 1, + tiles = {"flowers_" .. name .. ".png"}, + inventory_image = "flowers_" .. name .. ".png", + wield_image = "flowers_" .. name .. ".png", + sunlight_propagates = true, + paramtype = "light", + walkable = false, + buildable_to = true, + groups = f_groups, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = box + } + }) +end + +flowers.datas = { + { + "rose", + S("Red Rose"), + {-2 / 16, -0.5, -2 / 16, 2 / 16, 5 / 16, 2 / 16}, + {color_red = 1, flammable = 1} + }, + { + "tulip", + S("Orange Tulip"), + {-2 / 16, -0.5, -2 / 16, 2 / 16, 3 / 16, 2 / 16}, + {color_orange = 1, flammable = 1} + }, + { + "dandelion_yellow", + S("Yellow Dandelion"), + {-4 / 16, -0.5, -4 / 16, 4 / 16, -2 / 16, 4 / 16}, + {color_yellow = 1, flammable = 1} + }, + { + "chrysanthemum_green", + S("Green Chrysanthemum"), + {-4 / 16, -0.5, -4 / 16, 4 / 16, -1 / 16, 4 / 16}, + {color_green = 1, flammable = 1} + }, + { + "geranium", + S("Blue Geranium"), + {-2 / 16, -0.5, -2 / 16, 2 / 16, 2 / 16, 2 / 16}, + {color_blue = 1, flammable = 1} + }, + { + "viola", + S("Viola"), + {-5 / 16, -0.5, -5 / 16, 5 / 16, -1 / 16, 5 / 16}, + {color_violet = 1, flammable = 1} + }, + { + "dandelion_white", + S("White Dandelion"), + {-5 / 16, -0.5, -5 / 16, 5 / 16, -2 / 16, 5 / 16}, + {color_white = 1, flammable = 1} + }, + { + "tulip_black", + S("Black Tulip"), + {-2 / 16, -0.5, -2 / 16, 2 / 16, 3 / 16, 2 / 16}, + {color_black = 1, flammable = 1} + }, +} + +for _,item in pairs(flowers.datas) do + add_simple_flower(unpack(item)) +end + + +-- Flower spread +-- Public function to enable override by mods + +function flowers.flower_spread(pos, node) + pos.y = pos.y - 1 + local under = minetest.get_node(pos) + pos.y = pos.y + 1 + -- Replace flora with dry shrub in desert sand and silver sand, + -- as this is the only way to generate them. + -- However, preserve grasses in sand dune biomes. + if minetest.get_item_group(under.name, "sand") == 1 and + under.name ~= "default:sand" then + minetest.set_node(pos, {name = "default:dry_shrub"}) + return + end + + if minetest.get_item_group(under.name, "soil") == 0 then + return + end + + local light = minetest.get_node_light(pos) + if not light or light < 13 then + return + end + + local pos0 = vector.subtract(pos, 4) + local pos1 = vector.add(pos, 4) + -- Testing shows that a threshold of 3 results in an appropriate maximum + -- density of approximately 7 flora per 9x9 area. + if #minetest.find_nodes_in_area(pos0, pos1, "group:flora") > 3 then + return + end + + local soils = minetest.find_nodes_in_area_under_air( + pos0, pos1, "group:soil") + local num_soils = #soils + if num_soils >= 1 then + for si = 1, math.min(3, num_soils) do + local soil = soils[math.random(num_soils)] + local soil_name = minetest.get_node(soil).name + local soil_above = {x = soil.x, y = soil.y + 1, z = soil.z} + light = minetest.get_node_light(soil_above) + if light and light >= 13 and + -- Only spread to same surface node + soil_name == under.name and + -- Desert sand is in the soil group + soil_name ~= "default:desert_sand" then + minetest.set_node(soil_above, {name = node.name}) + end + end + end +end + +minetest.register_abm({ + label = "Flower spread", + nodenames = {"group:flora"}, + interval = 13, + chance = 300, + action = function(...) + flowers.flower_spread(...) + end, +}) + + +-- +-- Mushrooms +-- + +minetest.register_node("flowers:mushroom_red", { + description = S("Red Mushroom"), + tiles = {"flowers_mushroom_red.png"}, + inventory_image = "flowers_mushroom_red.png", + wield_image = "flowers_mushroom_red.png", + drawtype = "plantlike", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {mushroom = 1, snappy = 3, attached_node = 1, flammable = 1}, + sounds = default.node_sound_leaves_defaults(), + on_use = minetest.item_eat(-5), + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, -1 / 16, 4 / 16}, + } +}) + +minetest.register_node("flowers:mushroom_brown", { + description = S("Brown Mushroom"), + tiles = {"flowers_mushroom_brown.png"}, + inventory_image = "flowers_mushroom_brown.png", + wield_image = "flowers_mushroom_brown.png", + drawtype = "plantlike", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {mushroom = 1, food_mushroom = 1, snappy = 3, attached_node = 1, flammable = 1}, + sounds = default.node_sound_leaves_defaults(), + on_use = minetest.item_eat(1), + selection_box = { + type = "fixed", + fixed = {-3 / 16, -0.5, -3 / 16, 3 / 16, -2 / 16, 3 / 16}, + } +}) + + +-- Mushroom spread and death + +function flowers.mushroom_spread(pos, node) + if minetest.get_node_light(pos, 0.5) > 3 then + if minetest.get_node_light(pos, nil) == 15 then + minetest.remove_node(pos) + end + return + end + local positions = minetest.find_nodes_in_area_under_air( + {x = pos.x - 1, y = pos.y - 2, z = pos.z - 1}, + {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, + {"group:soil", "group:tree"}) + if #positions == 0 then + return + end + local pos2 = positions[math.random(#positions)] + pos2.y = pos2.y + 1 + if minetest.get_node_light(pos2, 0.5) <= 3 then + minetest.set_node(pos2, {name = node.name}) + end +end + +minetest.register_abm({ + label = "Mushroom spread", + nodenames = {"group:mushroom"}, + interval = 11, + chance = 150, + action = function(...) + flowers.mushroom_spread(...) + end, +}) + + +-- These old mushroom related nodes can be simplified now + +minetest.register_alias("flowers:mushroom_spores_brown", "flowers:mushroom_brown") +minetest.register_alias("flowers:mushroom_spores_red", "flowers:mushroom_red") +minetest.register_alias("flowers:mushroom_fertile_brown", "flowers:mushroom_brown") +minetest.register_alias("flowers:mushroom_fertile_red", "flowers:mushroom_red") +minetest.register_alias("mushroom:brown_natural", "flowers:mushroom_brown") +minetest.register_alias("mushroom:red_natural", "flowers:mushroom_red") + + +-- +-- Waterlily +-- + +local waterlily_def = { + description = S("Waterlily"), + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + tiles = {"flowers_waterlily.png", "flowers_waterlily_bottom.png"}, + inventory_image = "flowers_waterlily.png", + wield_image = "flowers_waterlily.png", + use_texture_alpha = "clip", + liquids_pointable = true, + walkable = false, + buildable_to = true, + floodable = true, + groups = {snappy = 3, flower = 1, flammable = 1}, + sounds = default.node_sound_leaves_defaults(), + node_placement_prediction = "", + node_box = { + type = "fixed", + fixed = {-0.5, -31 / 64, -0.5, 0.5, -15 / 32, 0.5} + }, + selection_box = { + type = "fixed", + fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, -15 / 32, 7 / 16} + }, + + on_place = function(itemstack, placer, pointed_thing) + local pos = pointed_thing.above + local node = minetest.get_node(pointed_thing.under) + local def = minetest.registered_nodes[node.name] + + if def and def.on_rightclick then + return def.on_rightclick(pointed_thing.under, node, placer, itemstack, + pointed_thing) + end + + if def and def.liquidtype == "source" and + minetest.get_item_group(node.name, "water") > 0 then + local player_name = placer and placer:get_player_name() or "" + if not minetest.is_protected(pos, player_name) then + minetest.set_node(pos, {name = "flowers:waterlily" .. + (def.waving == 3 and "_waving" or ""), + param2 = math.random(0, 3)}) + if not minetest.is_creative_enabled(player_name) then + itemstack:take_item() + end + else + minetest.chat_send_player(player_name, "Node is protected") + minetest.record_protection_violation(pos, player_name) + end + end + + return itemstack + end +} + +local waterlily_waving_def = table.copy(waterlily_def) +waterlily_waving_def.waving = 3 +waterlily_waving_def.drop = "flowers:waterlily" +waterlily_waving_def.groups.not_in_creative_inventory = 1 + +minetest.register_node("flowers:waterlily", waterlily_def) +minetest.register_node("flowers:waterlily_waving", waterlily_waving_def) + diff --git a/mods/flowers/license.txt b/mods/flowers/license.txt new file mode 100644 index 0000000..4cd7024 --- /dev/null +++ b/mods/flowers/license.txt @@ -0,0 +1,63 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2012-2016 Ironzorg, VanessaE +Copyright (C) 2012-2016 Various Minetest Game developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2014-2016 RHRhino +Copyright (C) 2015-2016 Gambit +Copyright (C) 2016 yyt16384 +Copyright (C) 2017 paramat + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/flowers/locale/flowers.bg.tr b/mods/flowers/locale/flowers.bg.tr new file mode 100644 index 0000000..bee898c --- /dev/null +++ b/mods/flowers/locale/flowers.bg.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Червена роза +Orange Tulip=Оранжево лале +Yellow Dandelion=Жълтурче +Green Chrysanthemum=Зелена хризантема +Blue Geranium=Син здравец +Viola=Виолетка +White Dandelion=Глухарче +Black Tulip=Черно лале +Red Mushroom=Червена гъба +Brown Mushroom=Кафява гъба +Waterlily=Водна лилия diff --git a/mods/flowers/locale/flowers.da.tr b/mods/flowers/locale/flowers.da.tr new file mode 100644 index 0000000..5302300 --- /dev/null +++ b/mods/flowers/locale/flowers.da.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Rød rose +Orange Tulip=Orange tulipan +Yellow Dandelion=Gul mælkebøtte +Green Chrysanthemum=Grøn krysantemum +Blue Geranium=Blå geranium +Viola=Viol +White Dandelion=Hvid mælkebøtte +Black Tulip=Sort tulipan +Red Mushroom=Rød svamp +Brown Mushroom=Brun svamp +Waterlily=Åkande diff --git a/mods/flowers/locale/flowers.de.tr b/mods/flowers/locale/flowers.de.tr new file mode 100644 index 0000000..18afb2a --- /dev/null +++ b/mods/flowers/locale/flowers.de.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Rote Rose +Orange Tulip=Orange Tulpe +Yellow Dandelion=Gelber Löwenzahn +Green Chrysanthemum=Grüne Chrysantheme +Blue Geranium=Blaue Geranie +Viola=Veilchen +White Dandelion=Weißer Löwenzahn +Black Tulip=Schwarze Tulpe +Red Mushroom=Roter Pilz +Brown Mushroom=Brauner Pilz +Waterlily=Wasserlilie diff --git a/mods/flowers/locale/flowers.eo.tr b/mods/flowers/locale/flowers.eo.tr new file mode 100644 index 0000000..076df18 --- /dev/null +++ b/mods/flowers/locale/flowers.eo.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Ruĝa rozo +Orange Tulip=Oranĝkolora tulipo +Yellow Dandelion=Flava leontodo +Green Chrysanthemum=Verda krizantemo +Blue Geranium=Blua geranio +Viola=Violo +White Dandelion=Blanka leontodo +Black Tulip=Nigra tulipo +Red Mushroom=Ruĝa fungo +Brown Mushroom=Bruna fungo +Waterlily=Nimfeo diff --git a/mods/flowers/locale/flowers.es.tr b/mods/flowers/locale/flowers.es.tr new file mode 100644 index 0000000..e9c345d --- /dev/null +++ b/mods/flowers/locale/flowers.es.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Rosa roja +Orange Tulip=Tulipán naranja +Yellow Dandelion=Diente de León amarillo +Green Chrysanthemum=Crisantemo verde +Blue Geranium=Geranio azul +Viola=Violeta +White Dandelion=Diente de León blanco +Black Tulip=Tulipán negro +Red Mushroom=Champiñón rojo +Brown Mushroom=Champiñón café +Waterlily=Nenúfar diff --git a/mods/flowers/locale/flowers.eu.tr b/mods/flowers/locale/flowers.eu.tr new file mode 100644 index 0000000..1015797 --- /dev/null +++ b/mods/flowers/locale/flowers.eu.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Arrosa gorria +Orange Tulip=Tulipan laranja +Yellow Dandelion=Txikoria-belar horia +Green Chrysanthemum=Krisantemo berdea +Blue Geranium=Geranio urdina +Viola=Pentsamendua +White Dandelion=Txikoria-belar zuria +Black Tulip=Tulipan beltza +Red Mushroom=Perretxiko gorria +Brown Mushroom=Perretxiko marroia +Waterlily=Nenufarra diff --git a/mods/flowers/locale/flowers.fr.tr b/mods/flowers/locale/flowers.fr.tr new file mode 100644 index 0000000..41e0d00 --- /dev/null +++ b/mods/flowers/locale/flowers.fr.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Rose rouge +Orange Tulip=Tulipe orange +Yellow Dandelion=Pissenlit jaune +Green Chrysanthemum=Chrysanthème vert +Blue Geranium=Géranium bleu +Viola=Violette +White Dandelion=Pissenlit blanc +Black Tulip=Tulipe noire +Red Mushroom=Champignon rouge +Brown Mushroom=Champignon brun +Waterlily=Nénuphar diff --git a/mods/flowers/locale/flowers.hu.tr b/mods/flowers/locale/flowers.hu.tr new file mode 100644 index 0000000..42a523e --- /dev/null +++ b/mods/flowers/locale/flowers.hu.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Vörös rózsa +Orange Tulip=Narancssárga tulipán +Yellow Dandelion=Sárga pitypang +Green Chrysanthemum=Zöld krizantém +Blue Geranium=Kék muskátli +Viola=Ibolya +White Dandelion=Fehér pitypang +Black Tulip=Fekete tulipán +Red Mushroom=Vörös gomba +Brown Mushroom=Barna gomba +Waterlily=Tavirózsa diff --git a/mods/flowers/locale/flowers.id.tr b/mods/flowers/locale/flowers.id.tr new file mode 100644 index 0000000..730529b --- /dev/null +++ b/mods/flowers/locale/flowers.id.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Mawar Merah +Orange Tulip=Tulip Oranye +Yellow Dandelion=Dandelion Kuning +Green Chrysanthemum=Krisan Hijau +Blue Geranium=Geranium Biru +Viola=Viola +White Dandelion=Dandelion Putih +Black Tulip=Tulip Hitam +Red Mushroom=Jamur Merah +Brown Mushroom=Jamur Cokelat +Waterlily=Teratai diff --git a/mods/flowers/locale/flowers.it.tr b/mods/flowers/locale/flowers.it.tr new file mode 100644 index 0000000..1ab49dd --- /dev/null +++ b/mods/flowers/locale/flowers.it.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Rosa rossa +Orange Tulip=Tulipano arancione +Yellow Dandelion=Dente di leone giallo +Green Chrysanthemum=Crisantemo verde +Blue Geranium=Geranio blu +Viola=Viola +White Dandelion=Dente di leone bianco +Black Tulip=Tulipano nero +Red Mushroom=Fungo rosso +Brown Mushroom=Fungo marrone +Waterlily=Ninfea diff --git a/mods/flowers/locale/flowers.ja.tr b/mods/flowers/locale/flowers.ja.tr new file mode 100644 index 0000000..bea87e2 --- /dev/null +++ b/mods/flowers/locale/flowers.ja.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=赤色のバラ +Orange Tulip=橙色のチューリップ +Yellow Dandelion=黄色のタンポポ +Green Chrysanthemum=緑色のキク +Blue Geranium=青色のゼラニウム +Viola=ビオラ +White Dandelion=白色のタンポポ +Black Tulip=黒色のチューリップ +Red Mushroom=赤色のキノコ +Brown Mushroom=茶色のキノコ +Waterlily=スイレン diff --git a/mods/flowers/locale/flowers.jbo.tr b/mods/flowers/locale/flowers.jbo.tr new file mode 100644 index 0000000..1df06ec --- /dev/null +++ b/mods/flowers/locale/flowers.jbo.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=lo xunre rozgu +Orange Tulip=lo narju tujli +Yellow Dandelion=lo pelxu spatrtaraksaku +Green Chrysanthemum=lo crino xrisantemo +Blue Geranium=lo blanu plargoni +Viola=lo spatrvi'ola +White Dandelion=lo blabi spatrtaraksaku +Black Tulip=lo xekri tujli +Red Mushroom=lo xunre ledgrute +Brown Mushroom=lo bunre ledgrute +Waterlily=lo jacrulspa diff --git a/mods/flowers/locale/flowers.lv.tr b/mods/flowers/locale/flowers.lv.tr new file mode 100644 index 0000000..315272d --- /dev/null +++ b/mods/flowers/locale/flowers.lv.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Sarkanā roze +Orange Tulip=Oranžā tulpe +Yellow Dandelion=Dzeltena pienene +Green Chrysanthemum=Zaļā krizantema +Blue Geranium=Zilā ģerānija +Viola=Vijolīte +White Dandelion=Balta pienene +Black Tulip=Melnā tulpe +Red Mushroom=Sarkanā sēne +Brown Mushroom=Brūnā sēne +Waterlily=Ūdensroze diff --git a/mods/flowers/locale/flowers.ms.tr b/mods/flowers/locale/flowers.ms.tr new file mode 100644 index 0000000..4e846eb --- /dev/null +++ b/mods/flowers/locale/flowers.ms.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Ros Merah +Orange Tulip=Tulip Jingga +Yellow Dandelion=Dandelion Kuning +Green Chrysanthemum=Kekwa Hijau +Blue Geranium=Geranium Biru +Viola=Violet +White Dandelion=Dandelion Putih +Black Tulip=Tulip Hitam +Red Mushroom=Cendawan Merah +Brown Mushroom=Cendawan Perang +Waterlily=Teratai diff --git a/mods/flowers/locale/flowers.pl.tr b/mods/flowers/locale/flowers.pl.tr new file mode 100644 index 0000000..ff6a5e2 --- /dev/null +++ b/mods/flowers/locale/flowers.pl.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Czerwona róża +Orange Tulip=Pomarańczowy tulipan +Yellow Dandelion=Żółty mlecz +Green Chrysanthemum=Zielona chryzantema +Blue Geranium=Niebieska pelargonia +Viola=Fiołek +White Dandelion=Biały mlecz +Black Tulip=Czarny tulipan +Red Mushroom=Czerwony muchomor +Brown Mushroom=Brązowy grzyb +Waterlily=Lilia wodna diff --git a/mods/flowers/locale/flowers.pt_BR.tr b/mods/flowers/locale/flowers.pt_BR.tr new file mode 100644 index 0000000..1f5ff92 --- /dev/null +++ b/mods/flowers/locale/flowers.pt_BR.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Rosa Vermelha +Orange Tulip=Tulipa Laranja +Yellow Dandelion=Dente-de-leão Amarelo +Green Chrysanthemum=Crisântemo Verde +Blue Geranium=Gerânio Azul +Viola=Violeta +White Dandelion=Dente-de-leão Branco +Black Tulip=Tulipa Negra +Red Mushroom=Cogumelo Vermelho +Brown Mushroom=Cogumelo Marrom +Waterlily=Nenúfar diff --git a/mods/flowers/locale/flowers.ru.tr b/mods/flowers/locale/flowers.ru.tr new file mode 100644 index 0000000..0d129a5 --- /dev/null +++ b/mods/flowers/locale/flowers.ru.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Красная роза +Orange Tulip=Оранжевый тюльпан +Yellow Dandelion=Жёлтый одуванчик +Green Chrysanthemum=Зелёная хризантема +Blue Geranium=Синяя герань +Viola=Фиалка +White Dandelion=Белый одуванчик +Black Tulip=Чёрный тюльпан +Red Mushroom=Красный гриб +Brown Mushroom=Коричневый гриб +Waterlily=Лилия diff --git a/mods/flowers/locale/flowers.sk.tr b/mods/flowers/locale/flowers.sk.tr new file mode 100644 index 0000000..75d4ae1 --- /dev/null +++ b/mods/flowers/locale/flowers.sk.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Červená ruža +Orange Tulip=Oranžový tulipán +Yellow Dandelion=Žltá púpava +Green Chrysanthemum=Zelená chryzantéma +Blue Geranium=Modrý muškát +Viola=Fialka +White Dandelion=Biela púpava +Black Tulip=Čierny tulipán +Red Mushroom=Červená huba +Brown Mushroom=Hnedá huba +Waterlily=Lekno diff --git a/mods/flowers/locale/flowers.sv.tr b/mods/flowers/locale/flowers.sv.tr new file mode 100644 index 0000000..c8a26a3 --- /dev/null +++ b/mods/flowers/locale/flowers.sv.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Röd ros +Orange Tulip=Orange tulpan +Yellow Dandelion=Gul maskros +Green Chrysanthemum=Grön krysantemum +Blue Geranium=Blå geranium +Viola=Violett viola +White Dandelion=Vit maskros +Black Tulip=Svart tulpan +Red Mushroom=Röd svamp +Brown Mushroom=Brun svamp +Waterlily=Näckros diff --git a/mods/flowers/locale/flowers.uk.tr b/mods/flowers/locale/flowers.uk.tr new file mode 100644 index 0000000..5620029 --- /dev/null +++ b/mods/flowers/locale/flowers.uk.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Червона троянда +Orange Tulip=Помаранчевий тюльпан +Yellow Dandelion=Жовта кульбаба +Green Chrysanthemum=Зелена хризантема +Blue Geranium=Синій журавець +Viola=Фіалка +White Dandelion=Біла кульбаба +Black Tulip=Чорний тюльпан +Red Mushroom=Червоний гриб +Brown Mushroom=Коричневий гриб +Waterlily=Латаття diff --git a/mods/flowers/locale/flowers.zh_CN.tr b/mods/flowers/locale/flowers.zh_CN.tr new file mode 100644 index 0000000..3139dfb --- /dev/null +++ b/mods/flowers/locale/flowers.zh_CN.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=红玫瑰 +Orange Tulip=橙郁金香 +Yellow Dandelion=黄蒲公英 +Green Chrysanthemum=绿菊花 +Blue Geranium=蓝天竺葵 +Viola=三色堇 +White Dandelion=白蒲公英 +Black Tulip=黑郁金香 +Red Mushroom=红蘑菇 +Brown Mushroom=棕蘑菇 +Waterlily=睡莲 diff --git a/mods/flowers/locale/flowers.zh_TW.tr b/mods/flowers/locale/flowers.zh_TW.tr new file mode 100644 index 0000000..a3a3ec5 --- /dev/null +++ b/mods/flowers/locale/flowers.zh_TW.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=紅玫瑰 +Orange Tulip=橙鬱金香 +Yellow Dandelion=黃蒲公英 +Green Chrysanthemum=綠菊花 +Blue Geranium=藍天竺葵 +Viola=三色堇 +White Dandelion=白蒲公英 +Black Tulip=黑鬱金香 +Red Mushroom=紅蘑菇 +Brown Mushroom=棕蘑菇 +Waterlily=睡蓮 diff --git a/mods/flowers/locale/template.txt b/mods/flowers/locale/template.txt new file mode 100644 index 0000000..a3a687f --- /dev/null +++ b/mods/flowers/locale/template.txt @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose= +Orange Tulip= +Yellow Dandelion= +Green Chrysanthemum= +Blue Geranium= +Viola= +White Dandelion= +Black Tulip= +Red Mushroom= +Brown Mushroom= +Waterlily= diff --git a/mods/flowers/mapgen.lua b/mods/flowers/mapgen.lua new file mode 100644 index 0000000..f282f50 --- /dev/null +++ b/mods/flowers/mapgen.lua @@ -0,0 +1,181 @@ +-- +-- Mgv6 +-- + +local function register_mgv6_flower(flower_name) + minetest.register_decoration({ + name = "flowers:"..flower_name, + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.006, + spread = {x = 100, y = 100, z = 100}, + seed = 436, + octaves = 3, + persist = 0.6 + }, + y_max = 30, + y_min = 1, + decoration = "flowers:"..flower_name, + }) +end + +local function register_mgv6_mushroom(mushroom_name) + minetest.register_decoration({ + name = "flowers:"..mushroom_name, + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.04, + spread = {x = 100, y = 100, z = 100}, + seed = 7133, + octaves = 3, + persist = 0.6 + }, + y_max = 30, + y_min = 1, + decoration = "flowers:"..mushroom_name, + spawn_by = "default:tree", + num_spawn_by = 1, + }) +end + +local function register_mgv6_waterlily() + minetest.register_decoration({ + name = "flowers:waterlily", + deco_type = "simple", + place_on = {"default:dirt"}, + sidelen = 16, + noise_params = { + offset = -0.12, + scale = 0.3, + spread = {x = 100, y = 100, z = 100}, + seed = 33, + octaves = 3, + persist = 0.7 + }, + y_max = 0, + y_min = 0, + decoration = "flowers:waterlily_waving", + param2 = 0, + param2_max = 3, + place_offset_y = 1, + }) +end + +function flowers.register_mgv6_decorations() + register_mgv6_flower("rose") + register_mgv6_flower("tulip") + register_mgv6_flower("dandelion_yellow") + register_mgv6_flower("geranium") + register_mgv6_flower("viola") + register_mgv6_flower("dandelion_white") + + register_mgv6_mushroom("mushroom_brown") + register_mgv6_mushroom("mushroom_red") + + register_mgv6_waterlily() +end + + +-- +-- All other biome API mapgens +-- + +local function register_flower(seed, flower_name) + minetest.register_decoration({ + name = "flowers:"..flower_name, + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = -0.02, + scale = 0.04, + spread = {x = 200, y = 200, z = 200}, + seed = seed, + octaves = 3, + persist = 0.6 + }, + biomes = {"grassland", "deciduous_forest"}, + y_max = 31000, + y_min = 1, + decoration = "flowers:"..flower_name, + }) +end + +local function register_mushroom(mushroom_name) + minetest.register_decoration({ + name = "flowers:"..mushroom_name, + deco_type = "simple", + place_on = {"default:dirt_with_grass", "default:dirt_with_coniferous_litter"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.006, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"deciduous_forest", "coniferous_forest"}, + y_max = 31000, + y_min = 1, + decoration = "flowers:"..mushroom_name, + }) +end + +local function register_waterlily() + minetest.register_decoration({ + name = "default:waterlily", + deco_type = "simple", + place_on = {"default:dirt"}, + sidelen = 16, + noise_params = { + offset = -0.12, + scale = 0.3, + spread = {x = 200, y = 200, z = 200}, + seed = 33, + octaves = 3, + persist = 0.7 + }, + biomes = {"rainforest_swamp", "savanna_shore", "deciduous_forest_shore"}, + y_max = 0, + y_min = 0, + decoration = "flowers:waterlily_waving", + param2 = 0, + param2_max = 3, + place_offset_y = 1, + }) +end + +function flowers.register_decorations() + register_flower(436, "rose") + register_flower(19822, "tulip") + register_flower(1220999, "dandelion_yellow") + register_flower(800081, "chrysanthemum_green") + register_flower(36662, "geranium") + register_flower(1133, "viola") + register_flower(73133, "dandelion_white") + register_flower(42, "tulip_black") + + register_mushroom("mushroom_brown") + register_mushroom("mushroom_red") + + register_waterlily() +end + + +-- +-- Detect mapgen to select functions +-- + +local mg_name = minetest.get_mapgen_setting("mg_name") +if mg_name == "v6" then + flowers.register_mgv6_decorations() +else + flowers.register_decorations() +end diff --git a/mods/flowers/mod.conf b/mods/flowers/mod.conf new file mode 100644 index 0000000..cdafe64 --- /dev/null +++ b/mods/flowers/mod.conf @@ -0,0 +1,3 @@ +name = flowers +description = Minetest Game mod: flowers +depends = default diff --git a/mods/flowers/textures/flowers_chrysanthemum_green.png b/mods/flowers/textures/flowers_chrysanthemum_green.png new file mode 100644 index 0000000..01d8c7e Binary files /dev/null and b/mods/flowers/textures/flowers_chrysanthemum_green.png differ diff --git a/mods/flowers/textures/flowers_dandelion_white.png b/mods/flowers/textures/flowers_dandelion_white.png new file mode 100644 index 0000000..1bc02fb Binary files /dev/null and b/mods/flowers/textures/flowers_dandelion_white.png differ diff --git a/mods/flowers/textures/flowers_dandelion_yellow.png b/mods/flowers/textures/flowers_dandelion_yellow.png new file mode 100644 index 0000000..544f60c Binary files /dev/null and b/mods/flowers/textures/flowers_dandelion_yellow.png differ diff --git a/mods/flowers/textures/flowers_geranium.png b/mods/flowers/textures/flowers_geranium.png new file mode 100644 index 0000000..88de1d7 Binary files /dev/null and b/mods/flowers/textures/flowers_geranium.png differ diff --git a/mods/flowers/textures/flowers_mushroom_brown.png b/mods/flowers/textures/flowers_mushroom_brown.png new file mode 100644 index 0000000..33ffcd4 Binary files /dev/null and b/mods/flowers/textures/flowers_mushroom_brown.png differ diff --git a/mods/flowers/textures/flowers_mushroom_red.png b/mods/flowers/textures/flowers_mushroom_red.png new file mode 100644 index 0000000..a68f5d5 Binary files /dev/null and b/mods/flowers/textures/flowers_mushroom_red.png differ diff --git a/mods/flowers/textures/flowers_rose.png b/mods/flowers/textures/flowers_rose.png new file mode 100644 index 0000000..e3b841d Binary files /dev/null and b/mods/flowers/textures/flowers_rose.png differ diff --git a/mods/flowers/textures/flowers_tulip.png b/mods/flowers/textures/flowers_tulip.png new file mode 100644 index 0000000..471fcd3 Binary files /dev/null and b/mods/flowers/textures/flowers_tulip.png differ diff --git a/mods/flowers/textures/flowers_tulip_black.png b/mods/flowers/textures/flowers_tulip_black.png new file mode 100644 index 0000000..1dd09f7 Binary files /dev/null and b/mods/flowers/textures/flowers_tulip_black.png differ diff --git a/mods/flowers/textures/flowers_viola.png b/mods/flowers/textures/flowers_viola.png new file mode 100644 index 0000000..ca2d750 Binary files /dev/null and b/mods/flowers/textures/flowers_viola.png differ diff --git a/mods/flowers/textures/flowers_waterlily.png b/mods/flowers/textures/flowers_waterlily.png new file mode 100644 index 0000000..973e511 Binary files /dev/null and b/mods/flowers/textures/flowers_waterlily.png differ diff --git a/mods/flowers/textures/flowers_waterlily_bottom.png b/mods/flowers/textures/flowers_waterlily_bottom.png new file mode 100644 index 0000000..3dbeaf4 Binary files /dev/null and b/mods/flowers/textures/flowers_waterlily_bottom.png differ diff --git a/mods/main/init.lua b/mods/main/init.lua new file mode 100644 index 0000000..11df4bc --- /dev/null +++ b/mods/main/init.lua @@ -0,0 +1,91 @@ +player_data = {} +alive_players = {} + +core.register_on_mods_loaded(function() + for itemname, _ in pairs(core.registered_nodes) do + core.override_item(itemname, {groups = {fall_damage_add_percent = -100}}) + end +end) + +core.register_on_joinplayer(function(player) + core.place_schematic({x = 0, y = 0, z = 0}, core.get_modpath("main") .. "/schematics/map1.mts", 0, nil, false) + player:set_pos({x = 20, y = 26.5, z = 17}) + player:get_inventory():set_list("main", {}) + core.change_player_privs(player:get_player_name(), {["fly"] = false, ["fast"] = false, ["noclip"] = false, ["shout"] = true, ["interact"] = true}) +end) + +core.register_on_leaveplayer(function(player) + alive_players[player:get_player_name()] = "alive" + core.chat_send_all(core.colorize("red", player:get_player_name() .. " left the game! " .. tostring(#alive_players) .. " players left!")) + if #alive_players == 1 then + core.chat_send_all(core.colorize("green", alive_players[1] .. " wins!")) + end +end) + +core.register_on_dieplayer(function(player) + alive_players[player:get_player_name()] = "dead" + core.chat_send_all(core.colorize("red", player:get_player_name() .. " died! " .. tostring(#alive_players) .. " players left!")) + if #alive_players == 1 then + core.chat_send_all(core.colorize("green", tostring(alive_players[1]) .. " wins!")) + end +end) + +core.register_on_respawnplayer(function(player) + core.change_player_privs(player:get_player_name(), {["fly"] = true, ["fast"] = true, ["noclip"] = true, ["shout"] = false, ["interact"] = false}) + player:get_inventory():set_list("main", {}) + player_data[player] = {} + player_data[player].size = player:get_properties().visual_size + player_data[player].skin = player:get_properties().textures + player:set_properties({ + visual = "mesh", + textures={"invisible_skin.png"}, + visual_size = {x=0, y=0}, + pointable=false, + }) +end) + +core.register_chatcommand("start", { + params = "", + description = "Start the match", + func = function() + for x = 1, 39 do + for z = 1, 36 do + core.set_node({x = x, y = 25, z = z}, {name = "air"}) + end + end + core.chat_send_all(core.colorize("green", "Match started!")) + alive_players = {} + for _, player in pairs(core.get_connected_players()) do + player:set_nametag_attributes({color = {a = 0}}) + player:set_hp(20) + inv = player:get_inventory() + inv:add_item("main", "ctf_ranged:ak47_loaded") + inv:add_item("main", "ctf_ranged:ammo 3") + alive_players[player:get_player_name()] = "alive" + end + return "" + end +}) + +core.register_chatcommand("reset", { + params = "", + description = "Reset map", + func = function() + core.place_schematic({x = 0, y = 0, z = 0}, core.get_modpath("main") .. "/schematics/map1.mts", 0, nil, false) + for _, player in pairs(core.get_connected_players()) do + player:set_nametag_attributes({color = {a = 255, r = 255, g = 255, b = 255}}) + player:set_pos({x = 20, y = 26.5, z = 17}) + core.change_player_privs(player:get_player_name(), {["fly"] = false, ["fast"] = false, ["noclip"] = false, ["shout"] = true, ["interact"] = true}) + player:get_inventory():set_list("main", {}) + player:set_properties({ + visual = "mesh", + textures = player_data[player].skin, + visual_size = player_data[player].size, + pointable=true, + }) + player_data[player] = {} + end + core.chat_send_all(core.colorize("red", "Match terminated.")) + return "" + end +}) diff --git a/mods/main/mod.conf b/mods/main/mod.conf new file mode 100644 index 0000000..bdb454f --- /dev/null +++ b/mods/main/mod.conf @@ -0,0 +1,2 @@ +name = main +description = Main mod for Game diff --git a/mods/main/schematics/map1.mts b/mods/main/schematics/map1.mts new file mode 100644 index 0000000..0df74d2 Binary files /dev/null and b/mods/main/schematics/map1.mts differ diff --git a/mods/main/textures/invisible_skin.png b/mods/main/textures/invisible_skin.png new file mode 100644 index 0000000..e28e0d4 Binary files /dev/null and b/mods/main/textures/invisible_skin.png differ diff --git a/mods/player_api/README.txt b/mods/player_api/README.txt new file mode 100644 index 0000000..eade644 --- /dev/null +++ b/mods/player_api/README.txt @@ -0,0 +1,27 @@ +Minetest Game mod: player_api +============================= +See license.txt for license information. + +Provides an API to allow multiple mods to set player models and textures. +Also sets the default model, texture, and player flags. +This mod is only for content related to the Player API and the player object. + +Authors of source code +---------------------- +Originally by celeron55, Perttu Ahola (LGPLv2.1+) +Various Minetest Game developers and contributors (LGPLv2.1+) + +Authors of media (textures, models and sounds) +---------------------------------------------- +Original model by MirceaKitsune (CC BY-SA 3.0). +Various alterations and fixes by kilbith, sofar, xunto, Rogier-5, TeTpaAka, Desour, +stujones11, An0n3m0us (CC BY-SA 3.0): + character.b3d + character.blend + +Jordach (CC BY-SA 3.0): + character.png + +celeron55, Perttu Ahola (CC BY-SA 3.0): + player.png + player_back.png diff --git a/mods/player_api/api.lua b/mods/player_api/api.lua new file mode 100644 index 0000000..6a572f5 --- /dev/null +++ b/mods/player_api/api.lua @@ -0,0 +1,239 @@ +player_api = {} + +-- Player animation blending +-- Note: This is currently broken due to a bug in Irrlicht, leave at 0 +local animation_blend = 0 + +player_api.registered_models = {} + +-- Local for speed. +local models = player_api.registered_models + +local function collisionbox_equals(collisionbox, other_collisionbox) + if collisionbox == other_collisionbox then + return true + end + for index = 1, 6 do + if collisionbox[index] ~= other_collisionbox[index] then + return false + end + end + return true +end + +function player_api.register_model(name, def) + models[name] = def + def.visual_size = def.visual_size or {x = 1, y = 1} + def.collisionbox = def.collisionbox or {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3} + def.stepheight = def.stepheight or 0.6 + def.eye_height = def.eye_height or 1.47 + + -- Sort animations into property classes: + -- Animations with same properties have the same _equals value + for animation_name, animation in pairs(def.animations) do + animation.eye_height = animation.eye_height or def.eye_height + animation.collisionbox = animation.collisionbox or def.collisionbox + animation.override_local = animation.override_local or false + + for _, other_animation in pairs(def.animations) do + if other_animation._equals then + if collisionbox_equals(animation.collisionbox, other_animation.collisionbox) + and animation.eye_height == other_animation.eye_height then + animation._equals = other_animation._equals + break + end + end + end + animation._equals = animation._equals or animation_name + end +end + +-- Player stats and animations +-- model, textures, animation +local players = {} +player_api.player_attached = {} + +local function get_player_data(player) + return assert(players[player:get_player_name()]) +end + +function player_api.get_animation(player) + return get_player_data(player) +end + +-- Called when a player's appearance needs to be updated +function player_api.set_model(player, model_name) + local player_data = get_player_data(player) + if player_data.model == model_name then + return + end + -- Update data + player_data.model = model_name + -- Clear animation data as the model has changed + -- (required for setting the `stand` animation not to be a no-op) + player_data.animation, player_data.animation_speed, player_data.animation_loop = nil, nil, nil + + local model = models[model_name] + if model then + player:set_properties({ + mesh = model_name, + textures = player_data.textures or model.textures, + visual = "mesh", + visual_size = model.visual_size, + stepheight = model.stepheight + }) + -- sets local_animation, collisionbox & eye_height + player_api.set_animation(player, "stand") + else + player:set_properties({ + textures = {"player.png", "player_back.png"}, + visual = "upright_sprite", + visual_size = {x = 1, y = 2}, + collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.75, 0.3}, + stepheight = 0.6, + eye_height = 1.625, + }) + end +end + +function player_api.get_textures(player) + local player_data = get_player_data(player) + local model = models[player_data.model] + return assert(player_data.textures or (model and model.textures)) +end + +function player_api.set_textures(player, textures) + local player_data = get_player_data(player) + local model = models[player_data.model] + local new_textures = assert(textures or (model and model.textures)) + player_data.textures = new_textures + player:set_properties({textures = new_textures}) +end + +function player_api.set_texture(player, index, texture) + local textures = table.copy(player_api.get_textures(player)) + textures[index] = texture + player_api.set_textures(player, textures) +end + +function player_api.set_animation(player, anim_name, speed, loop) + local player_data = get_player_data(player) + local model = models[player_data.model] + if not (model and model.animations[anim_name]) then + return + end + speed = speed or model.animation_speed + if loop == nil then + loop = true + end + if player_data.animation == anim_name + and player_data.animation_speed == speed + and player_data.animation_loop == loop + then + return + end + local previous_anim = model.animations[player_data.animation] or {} + local anim = model.animations[anim_name] + player_data.animation = anim_name + player_data.animation_speed = speed + player_data.animation_loop = loop + -- If necessary change the local animation (only seen by the client of *that* player) + -- `override_local` <=> suspend local animations while this one is active + -- (this is basically a hack, proper engine feature needed...) + if anim.override_local ~= previous_anim.override_local then + if anim.override_local then + local none = {x=0, y=0} + player:set_local_animation(none, none, none, none, 1) + else + local a = model.animations -- (not specific to the animation being set) + player:set_local_animation( + a.stand, a.walk, a.mine, a.walk_mine, + model.animation_speed or 30 + ) + end + end + -- Set the animation seen by everyone else + player:set_animation(anim, speed, animation_blend, loop) + -- Update related properties if they changed + if anim._equals ~= previous_anim._equals then + player:set_properties({ + collisionbox = anim.collisionbox, + eye_height = anim.eye_height + }) + end +end + +minetest.register_on_joinplayer(function(player) + local name = player:get_player_name() + players[name] = {} + player_api.player_attached[name] = false +end) + +minetest.register_on_leaveplayer(function(player) + local name = player:get_player_name() + players[name] = nil + player_api.player_attached[name] = nil +end) + +-- Localize for better performance. +local player_set_animation = player_api.set_animation +local player_attached = player_api.player_attached + +-- Prevent knockback for attached players +local old_calculate_knockback = minetest.calculate_knockback +function minetest.calculate_knockback(player, ...) + if player_attached[player:get_player_name()] then + return 0 + end + return old_calculate_knockback(player, ...) +end + +-- Check each player and apply animations +function player_api.globalstep() + for _, player in ipairs(minetest.get_connected_players()) do + local name = player:get_player_name() + local player_data = players[name] + local model = player_data and models[player_data.model] + if model and not player_attached[name] then + local controls = player:get_player_control() + local animation_speed_mod = model.animation_speed or 30 + + -- Determine if the player is sneaking, and reduce animation speed if so + if controls.sneak then + animation_speed_mod = animation_speed_mod / 2 + end + + -- Apply animations based on what the player is doing + if player:get_hp() == 0 then + player_set_animation(player, "lay") + elseif controls.up or controls.down or controls.left or controls.right then + if controls.LMB or controls.RMB then + player_set_animation(player, "walk_mine", animation_speed_mod) + else + player_set_animation(player, "walk", animation_speed_mod) + end + elseif controls.LMB or controls.RMB then + player_set_animation(player, "mine", animation_speed_mod) + else + player_set_animation(player, "stand", animation_speed_mod) + end + end + end +end + +-- Mods can modify the globalstep by overriding player_api.globalstep +minetest.register_globalstep(function(...) + player_api.globalstep(...) +end) + +for _, api_function in pairs({"get_animation", "set_animation", "set_model", "set_textures"}) do + local original_function = player_api[api_function] + player_api[api_function] = function(player, ...) + if not players[player:get_player_name()] then + -- HACK for keeping backwards compatibility + minetest.log("warning", api_function .. " called on offline player") + return + end + return original_function(player, ...) + end +end diff --git a/mods/player_api/init.lua b/mods/player_api/init.lua new file mode 100644 index 0000000..f258aea --- /dev/null +++ b/mods/player_api/init.lua @@ -0,0 +1,26 @@ +dofile(minetest.get_modpath("player_api") .. "/api.lua") + +-- Default player appearance +player_api.register_model("character.b3d", { + animation_speed = 30, + textures = {"character.png"}, + animations = { + -- Standard animations. + stand = {x = 0, y = 79}, + lay = {x = 162, y = 166, eye_height = 0.3, override_local = true, + collisionbox = {-0.6, 0.0, -0.6, 0.6, 0.3, 0.6}}, + walk = {x = 168, y = 187}, + mine = {x = 189, y = 198}, + walk_mine = {x = 200, y = 219}, + sit = {x = 81, y = 160, eye_height = 0.8, override_local = true, + collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.0, 0.3}} + }, + collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3}, + stepheight = 0.6, + eye_height = 1.47, +}) + +-- Update appearance when the player joins +minetest.register_on_joinplayer(function(player) + player_api.set_model(player, "character.b3d") +end) diff --git a/mods/player_api/license.txt b/mods/player_api/license.txt new file mode 100644 index 0000000..8ddb090 --- /dev/null +++ b/mods/player_api/license.txt @@ -0,0 +1,60 @@ +License of source code +---------------------- + +GNU Lesser General Public License, version 2.1 +Copyright (C) 2011 celeron55, Perttu Ahola +Copyright (C) 2011 Various Minetest Game developers and contributors + +This program is free software; you can redistribute it and/or modify it under the terms +of the GNU Lesser General Public License as published by the Free Software Foundation; +either version 2.1 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 Lesser General Public License for more details: +https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + + +Licenses of media (textures, models and sounds) +----------------------------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2011 celeron55, Perttu Ahola +Copyright (C) 2012 MirceaKitsune +Copyright (C) 2012 Jordach +Copyright (C) 2015 kilbith +Copyright (C) 2016 sofar +Copyright (C) 2016 xunto +Copyright (C) 2016 Rogier-5 +Copyright (C) 2017 TeTpaAka +Copyright (C) 2017 Desour +Copyright (C) 2018 stujones11 +Copyright (C) 2019 An0n3m0us + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/player_api/mod.conf b/mods/player_api/mod.conf new file mode 100644 index 0000000..bf62327 --- /dev/null +++ b/mods/player_api/mod.conf @@ -0,0 +1,2 @@ +name = player_api +description = Minetest Game mod: Manages player visuals diff --git a/mods/player_api/models/character.b3d b/mods/player_api/models/character.b3d new file mode 100644 index 0000000..3e0827e Binary files /dev/null and b/mods/player_api/models/character.b3d differ diff --git a/mods/player_api/models/character.blend b/mods/player_api/models/character.blend new file mode 100644 index 0000000..a32c343 Binary files /dev/null and b/mods/player_api/models/character.blend differ diff --git a/mods/player_api/models/character.png b/mods/player_api/models/character.png new file mode 100644 index 0000000..0502178 Binary files /dev/null and b/mods/player_api/models/character.png differ diff --git a/mods/player_api/textures/player.png b/mods/player_api/textures/player.png new file mode 100644 index 0000000..6d61c43 Binary files /dev/null and b/mods/player_api/textures/player.png differ diff --git a/mods/player_api/textures/player_back.png b/mods/player_api/textures/player_back.png new file mode 100644 index 0000000..5e9ef05 Binary files /dev/null and b/mods/player_api/textures/player_back.png differ diff --git a/mods/wield3d/.gitignore b/mods/wield3d/.gitignore new file mode 100644 index 0000000..8c5eec1 --- /dev/null +++ b/mods/wield3d/.gitignore @@ -0,0 +1,6 @@ +## Generic ignorable patterns and files +*~ +.*.swp +*bak* +tags +*.vim diff --git a/mods/wield3d/.luacheckrc b/mods/wield3d/.luacheckrc new file mode 100644 index 0000000..3a8d220 --- /dev/null +++ b/mods/wield3d/.luacheckrc @@ -0,0 +1,13 @@ +allow_defined_top = true +max_line_length = 80 + +read_globals = { + "vector", + table = {fields = {"getn"}}, + + "core", + "minetest", +} + +globals = { +} diff --git a/mods/wield3d/LICENSE b/mods/wield3d/LICENSE new file mode 100644 index 0000000..80dac12 --- /dev/null +++ b/mods/wield3d/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Stuart Jones + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/mods/wield3d/README.md b/mods/wield3d/README.md new file mode 100644 index 0000000..1b2db84 --- /dev/null +++ b/mods/wield3d/README.md @@ -0,0 +1,24 @@ +3d wielded items [wield3d] +========================== + +This is a mod for Luanti/Minetest which makes hand wielded items visible +to other players. + +For engine version: 5.0.0 or later. + +![screenshot](screenshot.png) + +Settings: see [settingtypes.txt](settingtypes.txt) (or in the main menu) + +### Game Compatibility + +wield3d is generic and supports all games. However, certain items might not be +shown perfectly, thus this mod includes specific improvements for the following games: + + * Minetest Game + +### Known Issues + +Items occasionally disappear when viewing in 3rd person. This is a minetest engine bug and not the fault of the mod, turning 3rd person off then back on restores the view. + +Wield item switches direction at certain animation key-frames. I have yet to identify the true cause of this issue but a specially adapted version of the player model can be found [here](https://github.com/stujones11/minetest-models/tree/master/character/sam_viewer) that attempts to work around the problem. diff --git a/mods/wield3d/init.lua b/mods/wield3d/init.lua new file mode 100644 index 0000000..02320d3 --- /dev/null +++ b/mods/wield3d/init.lua @@ -0,0 +1,211 @@ +--[[ + +MIT License + +Copyright (c) 2019 stujones11, Stuart Jones + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +]]-- + +wield3d = {} + +dofile(core.get_modpath(core.get_current_modname()) .. "/location.lua") + +local player_wielding = {} +local has_wieldview = core.get_modpath("wieldview") +local update_time = core.settings:get("wield3d_update_time") +local verify_time = core.settings:get("wield3d_verify_time") +local wield_scale = core.settings:get("wield3d_scale") + +update_time = update_time and tonumber(update_time) or 1 +verify_time = verify_time and tonumber(verify_time) or 10 +wield_scale = wield_scale and tonumber(wield_scale) or 0.25 -- default scale + +local location = { + "Arm_Right", -- default bone + {x = 0, y = 5.5, z = 3}, -- default position + {x = -90, y = 225, z = 90}, -- default rotation + {x = wield_scale, y = wield_scale}, +} + +local function add_wield_entity(player) + if not player or not player:is_player() then + return + end + local name = player:get_player_name() + local pos = player:get_pos() + if name and pos and not player_wielding[name] then + pos.y = pos.y + 0.5 + local object = core.add_entity(pos, "wield3d:wield_entity", name) + if object then + object:set_attach(player, location[1], location[2], location[3]) + object:set_properties({ + textures = {"wield3d:hand"}, + visual_size = location[4], + }) + player_wielding[name] = {item = "", location = location} + end + end +end + +local function sq_dist(a, b) + local x = a.x - b.x + local y = a.y - b.y + local z = a.z - b.z + return x * x + y * y + z * z +end + +local wield_entity = { + initial_properties ={ + physical = false, + collide_with_objects = false, + pointable = false, + static_save = false, + collisionbox = {-0.125,-0.125,-0.125, 0.125,0.125,0.125}, + visual = "wielditem", + textures = {"wield3d:hand"} + }, + wielder = nil, + timer = 0 +} + +function wield_entity:on_activate(staticdata) + if staticdata and staticdata ~= "" then + self.wielder = staticdata + return + end + self.object:remove() +end + +function wield_entity:on_step(dtime) + if self.wielder == nil then + return + end + self.timer = self.timer + dtime + if self.timer < update_time then + return + end + local player = core.get_player_by_name(self.wielder) + if player == nil or not player:is_player() or + sq_dist(player:get_pos(), self.object:get_pos()) > 3 then + self.object:remove() + return + end + local wield = player_wielding[self.wielder] + local stack = player:get_wielded_item() + local item = stack:get_name() or "" + if wield and item ~= wield.item then + if has_wieldview then + local def = core.registered_items[item] or {} + if def.inventory_image ~= "" then + item = "" + end + end + wield.item = item + if item == "" then + item = "wield3d:hand" + end + local loc = wield3d.location[item] or location + if loc[1] ~= wield.location[1] or + not vector.equals(loc[2], wield.location[2]) or + not vector.equals(loc[3], wield.location[3]) then + self.object:set_attach(player, loc[1], loc[2], loc[3]) + wield.location = {loc[1], loc[2], loc[3]} + end + self.object:set_properties({ + textures = {item}, + visual_size = loc[4], + }) + end + self.timer = 0 +end + +local function table_iter(t) + local i = 0 + local n = table.getn(t) + return function () + i = i + 1 + if i <= n then + return t[i] + end + end +end + +local player_iter = nil + +local function verify_wielditems() + if player_iter == nil then + local names = {} + local tmp = {} + for player in table_iter(core.get_connected_players()) do + local name = player:get_player_name() + if name then + tmp[name] = true; + table.insert(names, name) + end + end + player_iter = table_iter(names) + -- clean-up player_wielding table + for name, wield in pairs(player_wielding) do + player_wielding[name] = tmp[name] and wield + end + end + -- only deal with one player per server step + local name = player_iter() + if name then + local player = core.get_player_by_name(name) + if player and player:is_player() then + local pos = player:get_pos() + pos.y = pos.y + 0.5 + local wielding = false + local objects = core.get_objects_inside_radius(pos, 1) + for _, object in pairs(objects) do + local entity = object:get_luaentity() + if entity and entity.wielder == name then + if wielding then + -- remove duplicates + object:remove() + end + wielding = true + end + end + if not wielding then + player_wielding[name] = nil + add_wield_entity(player) + end + end + return core.after(0, verify_wielditems) + end + player_iter = nil + core.after(verify_time, verify_wielditems) +end + +core.after(verify_time, verify_wielditems) + +core.register_entity("wield3d:wield_entity", wield_entity) + +core.register_item("wield3d:hand", { + type = "none", + wield_image = "blank.png" +}) + +core.register_on_joinplayer(function(player) + core.after(2, add_wield_entity, player) +end) diff --git a/mods/wield3d/location.lua b/mods/wield3d/location.lua new file mode 100644 index 0000000..d7765f3 --- /dev/null +++ b/mods/wield3d/location.lua @@ -0,0 +1,62 @@ +--[[ + +MIT License + +Copyright (c) 2019 stujones11, Stuart Jones + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +]]-- + +-- Wielded Item Location Overrides - [item_name] = {bone, position, rotation} + +local bone = "Arm_Right" +local pos = {x=0, y=5.5, z=3} +local scale = {x=0.25, y=0.25} +local rx = -90 +local rz = 90 + +wield3d.location = { + ["default:torch"] = {bone, pos, {x=rx, y=180, z=rz}, scale}, + ["default:sapling"] = {bone, pos, {x=rx, y=180, z=rz}, scale}, + ["flowers:dandelion_white"] = {bone, pos, {x=rx, y=180, z=rz}, scale}, + ["flowers:dandelion_yellow"] = {bone, pos, {x=rx, y=180, z=rz}, scale}, + ["flowers:geranium"] = {bone, pos, {x=rx, y=180, z=rz}, scale}, + ["flowers:rose"] = {bone, pos, {x=rx, y=180, z=rz}, scale}, + ["flowers:tulip"] = {bone, pos, {x=rx, y=180, z=rz}, scale}, + ["flowers:viola"] = {bone, pos, {x=rx, y=180, z=rz}, scale}, + ["default:shovel_wood"] = {bone, pos, {x=rx, y=135, z=rz}, scale}, + ["default:shovel_stone"] = {bone, pos, {x=rx, y=135, z=rz}, scale}, + ["default:shovel_steel"] = {bone, pos, {x=rx, y=135, z=rz}, scale}, + ["default:shovel_bronze"] = {bone, pos, {x=rx, y=135, z=rz}, scale}, + ["default:shovel_mese"] = {bone, pos, {x=rx, y=135, z=rz}, scale}, + ["default:shovel_diamond"] = {bone, pos, {x=rx, y=135, z=rz}, scale}, + ["bucket:bucket_empty"] = {bone, pos, {x=rx, y=135, z=rz}, scale}, + ["bucket:bucket_water"] = {bone, pos, {x=rx, y=135, z=rz}, scale}, + ["bucket:bucket_lava"] = {bone, pos, {x=rx, y=135, z=rz}, scale}, + ["screwdriver:screwdriver"] = {bone, pos, {x=rx, y=135, z=rz}, scale}, + ["screwdriver:screwdriver1"] = {bone, pos, {x=rx, y=135, z=rz}, scale}, + ["screwdriver:screwdriver2"] = {bone, pos, {x=rx, y=135, z=rz}, scale}, + ["screwdriver:screwdriver3"] = {bone, pos, {x=rx, y=135, z=rz}, scale}, + ["screwdriver:screwdriver4"] = {bone, pos, {x=rx, y=135, z=rz}, scale}, + ["vessels:glass_bottle"] = {bone, pos, {x=rx, y=135, z=rz}, scale}, + ["vessels:drinking_glass"] = {bone, pos, {x=rx, y=135, z=rz}, scale}, + ["vessels:steel_bottle"] = {bone, pos, {x=rx, y=135, z=rz}, scale}, +} + diff --git a/mods/wield3d/mod.conf b/mods/wield3d/mod.conf new file mode 100644 index 0000000..999bb79 --- /dev/null +++ b/mods/wield3d/mod.conf @@ -0,0 +1,3 @@ +name = wield3d +description = Adds 3d wield-items that are visible in third person view and to other players. +min_minetest_version = 5.0 diff --git a/mods/wield3d/screenshot.png b/mods/wield3d/screenshot.png new file mode 100644 index 0000000..8fb662a Binary files /dev/null and b/mods/wield3d/screenshot.png differ diff --git a/mods/wield3d/settingtypes.txt b/mods/wield3d/settingtypes.txt new file mode 100644 index 0000000..a147a3e --- /dev/null +++ b/mods/wield3d/settingtypes.txt @@ -0,0 +1,9 @@ +# Time interval (in seconds) for refreshing wielded objects. +wield3d_update_time (Wield item update time) float 1.0 0.0 5.0 + +# Time interval (in seconds) for performing sanity-checks on the wield item object. +# This restores vanished objects, or removes duplicates. +wield3d_verify_time (Wield item verify time) float 10.0 1.0 30.0 + +# How large the wield item should be. +wield3d_scale (Wield item scale) float 0.25 0.1 0.5 diff --git a/mods/xcompat/.github/workflows/farlands_reloaded.yml b/mods/xcompat/.github/workflows/farlands_reloaded.yml new file mode 100644 index 0000000..176f2d9 --- /dev/null +++ b/mods/xcompat/.github/workflows/farlands_reloaded.yml @@ -0,0 +1,23 @@ +name: farlands_reloaded +on: [push, pull_request] +jobs: + test: + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - name: Checkout + uses: actions/checkout@main + - uses: buckaroobanzay/mtt@main + with: + modname: xcompat + git_game_repo: https://github.com/TerraQuest-Studios/farlands_reloaded + git_dependencies: | + https://github.com/mt-mods/unifieddyes + https://github.com/mt-mods/basic_materials + https://github.com/OgelGames/fakelib + https://github.com/mt-mods/pipeworks + https://github.com/mt-mods/steel + https://github.com/mt-mods/display_modpack + https://github.com/mt-mods/homedecor_modpack + additional_config: | + mtt_nodelist = farlands_reloaded.txt \ No newline at end of file diff --git a/mods/xcompat/.github/workflows/hades_revisited.yml b/mods/xcompat/.github/workflows/hades_revisited.yml new file mode 100644 index 0000000..650e49b --- /dev/null +++ b/mods/xcompat/.github/workflows/hades_revisited.yml @@ -0,0 +1,23 @@ +name: hades_revisited +on: [push, pull_request] +jobs: + test: + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - name: Checkout + uses: actions/checkout@main + - uses: buckaroobanzay/mtt@main + with: + modname: xcompat + git_game_repo: https://codeberg.org/Wuzzy/Hades_Revisited + git_dependencies: | + https://github.com/mt-mods/unifieddyes + https://github.com/mt-mods/basic_materials + https://github.com/OgelGames/fakelib + https://github.com/mt-mods/pipeworks + https://github.com/mt-mods/steel + https://github.com/mt-mods/display_modpack + https://github.com/mt-mods/homedecor_modpack + additional_config: | + mtt_nodelist = hades_revisited.txt \ No newline at end of file diff --git a/mods/xcompat/.github/workflows/luacheck.yml b/mods/xcompat/.github/workflows/luacheck.yml new file mode 100644 index 0000000..18088bc --- /dev/null +++ b/mods/xcompat/.github/workflows/luacheck.yml @@ -0,0 +1,10 @@ +name: luacheck +on: [push, pull_request] +jobs: + luacheck: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@main + - name: Luacheck + uses: lunarmodules/luacheck@master diff --git a/mods/xcompat/.github/workflows/mineclonia.yml b/mods/xcompat/.github/workflows/mineclonia.yml new file mode 100644 index 0000000..d9ef820 --- /dev/null +++ b/mods/xcompat/.github/workflows/mineclonia.yml @@ -0,0 +1,23 @@ +name: mineclonia +on: [push, pull_request] +jobs: + test: + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - name: Checkout + uses: actions/checkout@main + - uses: buckaroobanzay/mtt@main + with: + modname: xcompat + git_game_repo: https://codeberg.org/mineclonia/mineclonia + git_dependencies: | + https://github.com/mt-mods/unifieddyes + https://github.com/mt-mods/basic_materials + https://github.com/OgelGames/fakelib + https://github.com/mt-mods/pipeworks + https://github.com/mt-mods/steel + https://github.com/mt-mods/display_modpack + https://github.com/mt-mods/homedecor_modpack + additional_config: | + mtt_nodelist = mineclonia.txt \ No newline at end of file diff --git a/mods/xcompat/.github/workflows/minetest_game.yml b/mods/xcompat/.github/workflows/minetest_game.yml new file mode 100644 index 0000000..6b887cd --- /dev/null +++ b/mods/xcompat/.github/workflows/minetest_game.yml @@ -0,0 +1,23 @@ +name: minetest_game +on: [push, pull_request] +jobs: + test: + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - name: Checkout + uses: actions/checkout@main + - uses: buckaroobanzay/mtt@main + with: + modname: xcompat + git_game_repo: https://github.com/minetest/minetest_game + git_dependencies: | + https://github.com/mt-mods/unifieddyes + https://github.com/mt-mods/basic_materials + https://github.com/OgelGames/fakelib + https://github.com/mt-mods/pipeworks + https://github.com/mt-mods/steel + https://github.com/mt-mods/display_modpack + https://github.com/mt-mods/homedecor_modpack + additional_config: | + mtt_nodelist = minetest.txt \ No newline at end of file diff --git a/mods/xcompat/.github/workflows/voxelibre.yml b/mods/xcompat/.github/workflows/voxelibre.yml new file mode 100644 index 0000000..9c2e93f --- /dev/null +++ b/mods/xcompat/.github/workflows/voxelibre.yml @@ -0,0 +1,23 @@ +name: voxelibre +on: [push, pull_request] +jobs: + test: + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - name: Checkout + uses: actions/checkout@main + - uses: buckaroobanzay/mtt@main + with: + modname: xcompat + git_game_repo: https://git.minetest.land/VoxeLibre/VoxeLibre/ + git_dependencies: | + https://github.com/mt-mods/unifieddyes + https://github.com/mt-mods/basic_materials + https://github.com/OgelGames/fakelib + https://github.com/mt-mods/pipeworks + https://github.com/mt-mods/steel + https://github.com/mt-mods/display_modpack + https://github.com/mt-mods/homedecor_modpack + additional_config: | + mtt_nodelist = voxelibre.txt \ No newline at end of file diff --git a/mods/xcompat/.luacheckrc b/mods/xcompat/.luacheckrc new file mode 100644 index 0000000..ad507bf --- /dev/null +++ b/mods/xcompat/.luacheckrc @@ -0,0 +1,26 @@ +globals = { + "minetest", + "core", + "xcompat", +} + +read_globals = { + string = {fields = {"split"}}, + table = {fields = {"copy", "getn"}}, + + "default", + "mcl_sounds", + "ks_sounds", + "nodes_nature", + "fl_stone", + "fl_topsoil", + "fl_trees", + "hades_sounds", + "rp_sounds", + "mtt", + "sounds", + "player_api", + "mcl_player", + "fl_player", + "stairs", +} diff --git a/mods/xcompat/LICENSE b/mods/xcompat/LICENSE new file mode 100644 index 0000000..c5bae1d --- /dev/null +++ b/mods/xcompat/LICENSE @@ -0,0 +1,19 @@ + +MIT Copyright 2021-2025 wsor4035, mt-mods and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/mods/xcompat/README.md b/mods/xcompat/README.md new file mode 100644 index 0000000..83f25bf --- /dev/null +++ b/mods/xcompat/README.md @@ -0,0 +1,34 @@ +# XCompat + +[![luacheck](https://github.com/mt-mods/xcompat/actions/workflows/luacheck.yml/badge.svg?branch=master)](https://github.com/mt-mods/xcompat/actions/workflows/luacheck.yml) +[![ContentDB](https://content.minetest.net/packages/mt-mods/xcompat/shields/downloads/)](https://content.minetest.net/packages/mt-mods/xcompat/) + +Provides cross compatibility between games and mods for sounds and crafting materials. + +Thanks to: +* MisterE, OgelGames, and Blockhead for naming advice/suggestion. +* luk3yx, Blockhead, BuckarooBanzai for bouncing ideas on the concept of this mod. + +## Usage + +See the respective sub apis doc file in /doc for detailed documentation. + +## Directly supported games and mods + +| Games | Sounds | Materials | Textures | Player | Stairs | +| ----------------- | --------- | --------- | --------- | ------ | ------ | +| Minetest Game | x | x | x | x | x | +| MineClone2 | x | x | | x | | +| Mineclonia | x | x | | x | | +| Hades Revisited | x | x | | | | +| Farlands Reloaded | x | x | x | x | x | +| Exile | x | | | | | +| KSurvive 2 | x | | | | | +| Forgotten Lands | x | | | | | + +For functions see /doc/functions.md for the specifics relating to the function + +**Mods** +* `basic_materials` +* `mesecons_materials` +* `moreores` diff --git a/mods/xcompat/doc/functions.md b/mods/xcompat/doc/functions.md new file mode 100644 index 0000000..d8fff91 --- /dev/null +++ b/mods/xcompat/doc/functions.md @@ -0,0 +1,16 @@ +# Functions API + +## `can_interact_with_node(player, pos)` + +returns `bool` + +checks for the ability to interact with a node via: + +* if a player +* owner metadata key +* `protection_bypass` + +supports + +* minetest game default if present +* else polyfill diff --git a/mods/xcompat/doc/gameid.md b/mods/xcompat/doc/gameid.md new file mode 100644 index 0000000..e56f870 --- /dev/null +++ b/mods/xcompat/doc/gameid.md @@ -0,0 +1,12 @@ +# GameId API + +## minetest versions >= 5.7 + +simply returns `minetest.get_game_info().id` + +## minetest versions < 5.7 + +approximates the gameid value via a hardcoded table of gameid =\> modname, +and then checks via `minetest.get_modpath()`. If it fails, it falls +back to using `xcompat_unknown_gameid` as the id. See the chart in the +readme for which games are supported diff --git a/mods/xcompat/doc/materials.md b/mods/xcompat/doc/materials.md new file mode 100644 index 0000000..faea8f0 --- /dev/null +++ b/mods/xcompat/doc/materials.md @@ -0,0 +1,26 @@ +# Materials API + +## Usage + +The materials can be accessed anywhere in your mod with `xcompat.materials.material_name`. + +Behind the scenes, xcompat automatically changes the `xcompat.materials` +variable to contain the correct materials for whichever game the mod is +launched in. + +## Game support + +See the [the support table in the readme](https://github.com/mt-mods/xcompat/tree/master?tab=readme-ov-file#directly-supported-games-and-mods) +for an overview of supported games, and see the contents of `/src/materials/` +for the supported materials and their names. + +## Examples + +Writing `xcompat.materials.steel_ingot` returns the string of whichever item +would closest represent the `steel_ingot` material in the current game. + +The `/src/materials/mineclonia.lua` file shows what the keys of +`xcompat.materials` resolve to when playing Mineclonia, such as +`xcompat.materials.steel_ingot` resolving to `mcl_core:iron_ingot`, and +`xcompat.materials.mesa_crystal` resolving to `mcl_redstone:redstone` if +supported. diff --git a/mods/xcompat/doc/player.md b/mods/xcompat/doc/player.md new file mode 100644 index 0000000..c44034a --- /dev/null +++ b/mods/xcompat/doc/player.md @@ -0,0 +1,21 @@ +# Player API + +## Usage + +The player api can be accessed in your script through `xcompat.player`. + +This object mimics the `player_api` from Minetest Game, and should be a drop-in +replacement in most cases. You should be able to simply replace instances +of `player_api` in your script with `xcompat.player`. + + +## Note on `xcompat.player.player_attached` + +Reading & writing to this object works, but because it's a proxy table it can't +be looped over. + +Looping over this object would require lua5.2 `__pairs`/`__ipairs` metamethod support. +It would be possible to implement support for this through polyfill, +using [this method](https://stackoverflow.com/a/77354254) +(luajit supports this via 5.2 extensions), but it's not implemented as of now. +Additionally see [this engine issue](https://github.com/minetest/minetest/issues/15133). diff --git a/mods/xcompat/doc/sounds.md b/mods/xcompat/doc/sounds.md new file mode 100644 index 0000000..24fcb15 --- /dev/null +++ b/mods/xcompat/doc/sounds.md @@ -0,0 +1,45 @@ +# Sound API + + +## Option 1: Agnostically depend + +You can do this by using a custom field in your node def instead of the `sounds` key. + +```lua +minetest.register_node(nodename, { + ... + _sound_def = { + key = "", + input = {}, + }, + ... +}) +``` + +where: + +* key: string name of the field from the sound api you want to use, for example `node_sound_stone_defaults` +* input: table input of fields you want passed to the key field, used to override specific sounds. + +## Option 2: Hard depend + +add this mod to your mod.confs depends and directly call the `sound_api` as follows + +```lua +minetest.register_node(nodename, { + ... + sounds = xcompat.sounds.node_sound_stone_defaults(input) + ... +}) +``` + +* input: optional table to override some or all of returned values + + +## Note + +In some instances, when sounds are defined by strings and the sound doesn't +belong to a block or anything mod-specific, xcompat may not be needed. E.g. +the sound `"default_dig_choppy"` is accessed in the same way in both Mineclonia +and Minetest Game, without xcompat. + diff --git a/mods/xcompat/doc/stairs.md b/mods/xcompat/doc/stairs.md new file mode 100644 index 0000000..1ff986b --- /dev/null +++ b/mods/xcompat/doc/stairs.md @@ -0,0 +1,30 @@ +you can use this via `xcompat.stairs.register(nodename, def)` + +an example would be: +```lua +xcompat.stairs.register( + "xcompat_stairs_test:fake_node", + core.registered_nodes["xcompat_stairs_test:fake_node"] +) +``` + +if the game you are running on isnt supported (see readme), +it falls back to using a polyfill. each backend adds aliases +to the polyfill, mainly so that if we add a future backend +that ran on polyfill, everything keeps working (yay) + +at this time stairsplus/moreblocks compatibility/upgrading +isnt supported, however should be added in the future. for +now, in your mod code do something like the following: + +```lua +if core.registered_modes("moreblocks") then + --call stairs plus +else + xcompat.stairs.register(node, def) +end +``` + +that way in the future nothing will break when support is +added and at your convince the first part of the if can be +removed \ No newline at end of file diff --git a/mods/xcompat/doc/textures.md b/mods/xcompat/doc/textures.md new file mode 100644 index 0000000..9cb3643 --- /dev/null +++ b/mods/xcompat/doc/textures.md @@ -0,0 +1,20 @@ +# Textures API + +## Usage + +To use a texture in your mod, find the texture you want by looking at one of +the files in `/src/texture`, and append its path to `xcompat.textures`. + +If a texture isn't supported for the current game, xcompat creates a solid +color texture using texture modifiers as a fallback, ensuring compatibility. + +## Example + +| Path | Result in Minetest Game | +| - | - | +| xcompat.textures.wool.white | `"wool_white.png"` | +| xcompat.textures.wood.apple.planks | `"default_wood.png"` | +| xcompat.textures.wood.jungle.leaves | `"default_jungleleaves.png"` | +| xcompat.textures.glass.pane | `"default_glass.png"` | + +For games like Minetest and Mineclonia, see the file `/src/textures/minetest.lua`. diff --git a/mods/xcompat/gitattributes b/mods/xcompat/gitattributes new file mode 100644 index 0000000..1a19d52 --- /dev/null +++ b/mods/xcompat/gitattributes @@ -0,0 +1,2 @@ +test export-ignore +.github export-ignore \ No newline at end of file diff --git a/mods/xcompat/init.lua b/mods/xcompat/init.lua new file mode 100644 index 0000000..2ef6558 --- /dev/null +++ b/mods/xcompat/init.lua @@ -0,0 +1,52 @@ +local modpath = minetest.get_modpath("xcompat") + +xcompat = { + modpath = modpath, +} + +xcompat.gameid = dofile(modpath .. "/src/gameid.lua") +xcompat.utilities = dofile(modpath .. "/src/utilities.lua") + +xcompat.sounds = dofile(modpath .. "/src/sounds.lua") +xcompat.materials = dofile(modpath .. "/src/materials.lua") +xcompat.textures = dofile(modpath .. "/src/textures.lua") +xcompat.functions = dofile(modpath .. "/src/functions.lua") +xcompat.player = dofile(modpath .. "/src/player.lua") +xcompat.stairs = dofile(modpath .. "/src/stairs.lua") + +local function validate_sound(key) + if key and xcompat.sounds[key] then + return true + elseif key then + minetest.log("warning", "attempted to call invalid sound: "..key) + else + minetest.log("warning", "sound_def is missing a sound_api key") + end + return false +end + +minetest.register_on_mods_loaded(function() + for name, def in pairs(minetest.registered_nodes) do + if def._sound_def and validate_sound(def._sound_def.key) then + minetest.override_item(name, { + sounds = xcompat.sounds[def._sound_def.key](def._sound_def.input) + }) + end + end + + local old_reg_node = minetest.register_node + function minetest.register_node(name, def) + if def._sound_def and validate_sound(def._sound_def.key) then + def.sounds = xcompat.sounds[def._sound_def.key](def._sound_def.input) + end + + old_reg_node(name, def) + end +end) + +dofile(modpath .. "/src/commands.lua") + +if minetest.get_modpath("mtt") and mtt.enabled then + -- register tests + dofile(modpath .. "/mtt.lua") +end diff --git a/mods/xcompat/mod.conf b/mods/xcompat/mod.conf new file mode 100644 index 0000000..1e7d1f1 --- /dev/null +++ b/mods/xcompat/mod.conf @@ -0,0 +1,3 @@ +name = xcompat +description = Provides cross compatibility between mods and games for sounds and crafting materials. +optional_depends = default, fl_stone, fl_trees, mcl_sounds, hades_sounds, ks_sounds, nodes_nature, fl_topsoil, fl_trees, mcl_core, farming, x_farming, sounds, mtt, player_api, mcl_player, fl_player, stairs diff --git a/mods/xcompat/mtt.lua b/mods/xcompat/mtt.lua new file mode 100644 index 0000000..e407cfe --- /dev/null +++ b/mods/xcompat/mtt.lua @@ -0,0 +1,10 @@ + +-- emerge a part of the world (basic smoketest) +mtt.emerge_area({ x=0, y=0, z=0 }, { x=10, y=10, z=10 }) + +-- check nodelist +local mtt_nodelist = minetest.settings:get("mtt_nodelist") +if mtt_nodelist then + -- nodelist specified, check if all the required nodes are present + mtt.validate_nodenames(minetest.get_modpath("xcompat") .. "/test/nodelist/" .. mtt_nodelist) +end \ No newline at end of file diff --git a/mods/xcompat/src/commands.lua b/mods/xcompat/src/commands.lua new file mode 100644 index 0000000..15bf4e7 --- /dev/null +++ b/mods/xcompat/src/commands.lua @@ -0,0 +1,76 @@ +local materials_list = minetest.get_dir_list(xcompat.modpath.."/src/materials", false) +local materials = {} +for _, material in ipairs(materials_list) do + local gameid = material:sub(1, -5) + materials[gameid] = dofile(xcompat.modpath.."/src/materials/"..material) +end + +local textures_list = minetest.get_dir_list(xcompat.modpath.."/src/textures", false) +local textures = {} +for _, texture in ipairs(textures_list) do + local gameid = texture:sub(1, -5) + textures[gameid] = dofile(xcompat.modpath.."/src/textures/"..texture) +end + +local sounds_list = minetest.get_dir_list(xcompat.modpath.."/src/sounds", false) +local sounds = {} +for _, sound in ipairs(sounds_list) do + local gameid = sound:sub(1, -5) + sounds[gameid] = dofile(xcompat.modpath.."/src/sounds/"..sound) +end + +minetest.register_chatcommand("xcompat_test_materials", { + description = "Test materials", + privs = {server=true}, + func = function(name, _) + local reference_materials = materials["minetest"] + + for gameid, game_materials in pairs(materials) do + for material, _ in pairs(reference_materials) do + if not game_materials[material] then + minetest.chat_send_player(name, "Missing material: "..material.." in game: "..gameid) + end + end + end + + minetest.chat_send_player(name, "Materials test complete") + end +}) + +--WARNING: only handles top level of table currently +--TODO: handle nested tables +minetest.register_chatcommand("xcompat_test_textures", { + description = "Test textures", + privs = {server=true}, + func = function(name, _) + local reference_textures = textures["xcompat_agnostic"] + + for gameid, game_textures in pairs(textures) do + for texture, _ in pairs(reference_textures) do + if not game_textures[texture] then + minetest.chat_send_player(name, "Missing texture: "..texture.." in game: "..gameid) + end + end + end + + minetest.chat_send_player(name, "Textures test complete") + end +}) + +minetest.register_chatcommand("xcompat_test_sounds", { + description = "Test sounds", + privs = {server=true}, + func = function(name, _) + local reference_sounds = sounds["xcompat_agnostic"] + + for gameid, game_sounds in pairs(sounds) do + for sound, _ in pairs(reference_sounds) do + if not game_sounds[sound] then + minetest.chat_send_player(name, "Missing sound: "..sound.." in game: "..gameid) + end + end + end + + minetest.chat_send_player(name, "Sounds test complete") + end +}) diff --git a/mods/xcompat/src/functions.lua b/mods/xcompat/src/functions.lua new file mode 100644 index 0000000..51700b9 --- /dev/null +++ b/mods/xcompat/src/functions.lua @@ -0,0 +1,55 @@ +local functions = {} + +function functions.can_interact_with_node(player, pos) + --if we have default, use it + if default then return default.can_interact_with_node(player, pos) end + + local owner = minetest.get_meta(pos):get_string("owner") or "" + + --check that we have a valid player + if not player or not player:is_player() then return false end + --check there privs for compat with areas + if minetest.check_player_privs(player, "protection_bypass") then return true end + --if a normal player, check if they are the owner + if owner == "" or owner == player:get_player_name() then return true end + + return false +end + +function functions.sapling_on_place( + itemstack, player, pointed_thing, sapling_name, minp_relative, maxp_relative, interval +) + if default then + return default.sapling_on_place( + itemstack, player, pointed_thing, sapling_name, minp_relative, maxp_relative, interval + ) + end + + local pos = pointed_thing.above + local pname = player and player:get_player_name() or "" + local below_node = minetest.get_node_or_nil(pointed_thing.under) + + if below_node and minetest.registered_items[below_node.name] and + minetest.registered_items[below_node.name].buildable_to then + + pos = pointed_thing.under + end + + --check protection + if minetest.is_protected(pos, pname) then + minetest.record_protection_violation(pos, pname) + return itemstack + end + + --actually place sapling + minetest.set_node(pos, {name = sapling_name}) + + --handle survival + if not minetest.is_creative_enabled(pname) then + itemstack:take_item() + end + + return itemstack +end + +return functions \ No newline at end of file diff --git a/mods/xcompat/src/gameid.lua b/mods/xcompat/src/gameid.lua new file mode 100644 index 0000000..b21b0b1 --- /dev/null +++ b/mods/xcompat/src/gameid.lua @@ -0,0 +1,33 @@ +local game_alias = { + mineclone2 = "mineclonia", +} + +local game_modnames = { + mineclonia = "mcl_core", + farlands_reloaded = "fl_core", + minetest = "default", + hades = "hades_core", + exile = "exile_env_sounds", + ksurvive2 = "ks_metals", +} + +local gameid = "xcompat_unknown_gameid" + +if type(minetest.get_game_info) == "function" then + gameid = minetest.get_game_info().id +else + for game, modname in pairs(game_modnames) do + if minetest.get_modpath(modname) then + gameid = game + break + end + end +end + +--for games that are similar/derviatives of other games +if game_alias[gameid] then gameid = game_alias[gameid] end + +--while minetest game derviates are not supported, we can still try to detect them +if minetest.get_modpath("default") then gameid = "minetest" end + +return gameid \ No newline at end of file diff --git a/mods/xcompat/src/materials.lua b/mods/xcompat/src/materials.lua new file mode 100644 index 0000000..0512eaf --- /dev/null +++ b/mods/xcompat/src/materials.lua @@ -0,0 +1,8 @@ +local filename = xcompat.gameid + +--if we dont have a materials file for the game, use minetest +if not xcompat.utilities.file_exists(xcompat.modpath .. "/src/materials/" .. filename .. ".lua") then + filename = "minetest" +end + +return dofile(xcompat.modpath .. "/src/materials/" .. filename .. ".lua") diff --git a/mods/xcompat/src/materials/farlands_reloaded.lua b/mods/xcompat/src/materials/farlands_reloaded.lua new file mode 100644 index 0000000..705ae3f --- /dev/null +++ b/mods/xcompat/src/materials/farlands_reloaded.lua @@ -0,0 +1,94 @@ +local materials = { + sand = "fl_stone:sand", + sandstone = "fl_stone:sandstone", + gravel = "fl_topsoil:gravel", + flint = "fl_topsoil:flint", + copper_ingot = "fl_ores:copper_ingot", + steel_ingot = "fl_ores:iron_ingot", + gold_ingot = "fl_ores:gold_ingot", + tin_ingot = "fl_ores:tin_ingot", + copper_block = "fl_ores:copper_block", + steel_block = "fl_ores:iron_block", + gold_block = "fl_ores:gold_block", + tin_block = "fl_ores:tin_block", + axe_steel = "fl_tools:steel_axe", + axe_diamond = "fl_tools:diamond_axe", + axe_bronze = "fl_tools:bronze_axe", + axe_stone = "fl_tools:stone_axe", + axe_wood = "fl_tools:wood_axe", + pick_steel = "fl_tools:steel_pick", + mese = "fl_ores:iron_ingot", + mese_crystal = "fl_ores:iron_ingot", + mese_crystal_fragment = "fl_ores:iron_ingot", + torch = "fl_light_sources:torch", + diamond = "fl_ores:diamond", + clay_lump = "fl_bricks:clay_lump", + water_bucket = "fl_bucket:bucket_water", + empty_bucket = "fl_bucket:bucket", + dye_dark_grey = "fl_dyes:dark_grey_dye", + dye_black = "fl_dyes:black_dye", + dye_white = "fl_dyes:white_dye", + dye_green = "fl_dyes:green_dye", + dye_red = "fl_dyes:red_dye", + dye_yellow = "fl_dyes:yellow_dye", + dye_brown = "fl_dyes:brown_dye", + dye_blue = "fl_dyes:blue_dye", + dye_violet = "fl_dyes:violet_dye", + dye_grey = "fl_dyes:grey_dye", + dye_dark_green = "fl_dyes:dark_green_dye", + dye_orange = "fl_dyes:orange_dye", + dye_pink = "fl_dyes:pink_dye", + dye_cyan = "fl_dyes:cyan_dye", + dye_magenta = "fl_dyes:magenta_dye", + silver_ingot = "fl_ores:iron_ingot", + silicon = "mesecons_materials:silicon", + string = "fl_plantlife:oxeye_daisy", + paper = "", + book = "", + iron_lump = "fl_ores:iron_ore", + wool_grey = "", + wool_green = "", + wool_dark_green = "", + wool_brown = "", + wool_black = "", + wool_white = "", + slab_stone = "fl_stone:stone_slab", + slab_wood = "fl_trees:apple_plank_slab", + glass = "fl_glass:framed_glass", + glass_block = "fl_glass:framed_glass", + glass_bottle = "fl_bottles:bottle", + coal_lump = "fl_ores:coal_ore", + stone = "fl_stone:stone", + desert_stone = "fl_stone:desert_stone", + desert_sand = "fl_stone:desert_sand", + chest = "fl_storage:wood_chest", + cobble = "fl_stone:stone_rubble", + brick = "", + obsidian_glass = "", + water_source = "fl_liquids:water_source", + water_flowing = "fl_liquids:water_flowing", + dirt = "fl_stone:dirt", + dirt_with_grass = "fl_topsoil:dirt_with_grass", + apple_leaves = "fl_trees:apple_leaves", + apple_log = "fl_trees:apple_trunk", + apple_planks = "fl_trees:apple_plank", + birch_leaves = "fl_trees:aspen_leaves", + birch_log = "fl_trees:aspen_trunk", + birch_planks = "fl_trees:aspen_plank", + jungle_leaves = "fl_trees:jungletree_leaves", + bowl = "", + stick = "fl_trees:stick", + obsidian = "", +} + +if minetest.get_modpath("basic_materials") then + materials.paper = "basic_materials:plastic_sheet" +end + +if minetest.registered_items["farming:bowl"] then + materials.bowl = "farming:bowl" +elseif minetest.get_modpath("x_farming") then + materials.bowl = "x_farming:bowl" +end + +return materials \ No newline at end of file diff --git a/mods/xcompat/src/materials/hades_revisited.lua b/mods/xcompat/src/materials/hades_revisited.lua new file mode 100644 index 0000000..2ca5a1d --- /dev/null +++ b/mods/xcompat/src/materials/hades_revisited.lua @@ -0,0 +1,108 @@ +local materials = { + sand = "hades_core:fertile_sand", + sandstone = "hades_core:sandstone", + gravel = "hades_core:gravel", + flint = "", + copper_ingot = "hades_core:copper_ingot", + steel_ingot = "hades_core:steel_ingot", + gold_ingot = "hades_core:gold_ingot", + tin_ingot = "hades_core:tin_ingot", + silver_ingot = "--unknown--", + copper_block = "hades_core:copperblock", + steel_block = "hades_core:steelblock", + gold_block = "hades_core:goldblock", + tin_block = "hades_core:tinblock", + axe_steel = "hades_core:axe_steel", + axe_diamond = "hades_core:axe_diamond", + axe_bronze = "hades_core:axe_bronze", + axe_stone = "hades_core:axe_stone", + axe_wood = "hades_core:axe_wood", + pick_steel = "hades_core:pick_steel", + mese = "hades_core:mese", + mese_crystal = "hades_core:mese_crystal", + mese_crystal_fragment = "hades_core:mese_crystal_fragment", + torch = "hades_torches:torch", + diamond = "hades_core:diamond", + clay_lump = "hades_core:clay_lump", + clay_brick = "hades_core:clay_brick", + + --[[ + Since hades doesnt have buckets or water for the user, + using dirt from near water to pull the water out + ]] + water_bucket = "hades_core:dirt", + empty_bucket = "hades_core:fertile_sand", + dye_dark_grey = "dye:dark_grey", + dye_black = "dye:black", + dye_white = "dye:white", + dye_green = "dye:green", + dye_red = "dye:red", + dye_yellow = "dye:yellow", + dye_brown = "dye:brown", + dye_blue = "dye:blue", + dye_violet = "dye:violet", + dye_grey = "dye:grey", + dye_dark_green = "dye:dark_green", + dye_orange = "dye:orange", + dye_pink = "dye:pink", + dye_cyan = "dye:cyan", + dye_magenta = "dye:magenta", + silicon = "hades_materials:silicon", + string = "hades_farming:string", + paper = "hades_core:paper", + book = "hades_core:book", + iron_lump = "hades_core:iron_lump", + wool_grey = "wool:grey", + wool_green = "wool:green", + wool_dark_green = "wool:dark_green", + wool_brown = "wool:brown", + wool_black = "wool:black", + wool_white = "wool:white", + slab_stone = "stairs:slab_stone", + slab_wood = "stairs:slab_wood", + glass = "hades_core:glass", + glass_block = "hades_core:glass", + glass_bottle = "vessels:glass_bottle", + obsidian_glass = "hades_core:obsidian_glass", + coal_lump = "hades_core:coal_lump", + stone = "hades_core:stone", + desert_stone = "hades_core:stone_baked", + desert_sand = "hades_core:volcanic_sand", + chest = "hades_chests:chest"; + cobble = "hades_core:cobble", + brick = "hades_core:brick", + water_source = "hades_core:water_source", + water_flowing = "hades_core:water_flowing", + dirt = "hades_core:dirt", + dirt_with_grass = "hades_core:dirt_with_grass", + apple_leaves = "hades_trees:leaves", + apple_log = "hades_trees:tree", + apple_planks = "hades_trees:wood", + birch_leaves = "hades_core:birch_leaves", + birch_log = "hades_trees:birch_tree", + birch_planks = "hades_trees:cream_wood", + jungle_leaves = "hades_trees:jungle_leaves", +--hades has no bowl but you get plate on eat so makes most sense? + bowl = "hades_food:plate", + stick = "hades_core:stick", + obsidian = "hades_core:obsidian", +} + +if minetest.get_modpath("hades_bucket") then + materials["water_bucket"] = "hades_bucket:bucket_water" + materials["empty_bucket"] = "hades_bucket:bucket_empty" +end +if minetest.get_modpath("hades_extraores") then + materials["silver_ingot"] = "hades_extraores:silver_ingot" + materials["aluminum_ingot"] = "hades_extraores:aluminum_ingot" +end +if minetest.get_modpath("hades_default") then + materials.desert_sand = "hades_default:desert_sand" +end +if minetest.get_modpath("hades_technic") then + materials.lead_ingot = "hades_technic:lead_ingot" + materials.carbon_steel_ingot = "hades_technic:carbon_steel_ingot" + materials.stainless_steel_ingot = "hades_technic:stainless_steel_ingot" +end + +return materials \ No newline at end of file diff --git a/mods/xcompat/src/materials/mineclonia.lua b/mods/xcompat/src/materials/mineclonia.lua new file mode 100644 index 0000000..f99fb84 --- /dev/null +++ b/mods/xcompat/src/materials/mineclonia.lua @@ -0,0 +1,118 @@ +--note this file handles mineclonia, mineclone2, and its rename voxelibre + +local mcl_dyes = minetest.get_modpath("mcl_dyes") +local mcl_dyes_name = mcl_dyes and "mcl_dyes" or "mcl_dye" + +local materials = { + sand = "mcl_core:sand", + sandstone = "mcl_core:sandstone", + gravel = "mcl_core:gravel", + flint = "mcl_core:flint", + copper_ingot = "mcl_copper:copper_ingot", + steel_ingot = "mcl_core:iron_ingot", + gold_ingot = "mcl_core:gold_ingot", + tin_ingot = "mcl_core:iron_ingot", + copper_block = "mcl_copper:block", + steel_block = "mcl_core:ironblock", + gold_block = "mcl_core:goldblock", + tin_block = "mcl_core:ironblock", + axe_steel = "mcl_core:axe_steel", + axe_diamond = "mcl_core:axe_diamond", + axe_bronze = "mcl_core:axe_bronze", + axe_stone = "mcl_core:axe_stone", + axe_wood = "mcl_core:axe_wood", + pick_steel = "mcl_core:pick_steel", + torch = "mcl_torches:torch", + diamond = "mcl_core:diamond", + clay_lump = "mcl_core:clay_lump", + water_bucket = "mcl_buckets:bucket_water", + empty_bucket = "mcl_buckets:bucket_empty", + dye_dark_grey = mcl_dyes_name .. ":dark_grey", + dye_black = mcl_dyes_name .. ":black", + dye_white = mcl_dyes_name .. ":white", + dye_green = mcl_dyes_name .. ":green", + dye_red = mcl_dyes_name .. ":red", + dye_yellow = mcl_dyes_name .. ":yellow", + dye_brown = mcl_dyes_name .. ":brown", + dye_blue = mcl_dyes_name .. ":blue", + dye_violet = mcl_dyes_name .. ":violet", + dye_grey = mcl_dyes_name .. ":grey", + dye_dark_green = mcl_dyes_name .. ":dark_green", + dye_orange = mcl_dyes_name .. ":orange", + dye_pink = mcl_dyes_name .. ":pink", + dye_cyan = mcl_dyes_name .. ":cyan", + dye_magenta = mcl_dyes_name .. ":magenta", + silicon = "mcl_core:iron_ingot", + string = "mcl_mobitems:string", + paper = "mcl_core:paper", + book = "mcl_books:book", + iron_lump = "mcl_raw_ores:raw_iron", + wool_grey = "mcl_wool:grey", + wool_green = "mcl_wool:green", + wool_dark_green = "mcl_wool:dark_green", + wool_brown = "mcl_wool:brown", + wool_black = "mcl_wool:black", + wool_white = "mcl_wool:white", + slab_stone = "mcl_stairs:slab_stone", + slab_wood = "mcl_stairs:slab_wood", + glass = "mcl_core:glass", + glass_block = "mcl_core:glass", + glass_bottle = "mcl_potions:glass_bottle", + coal_lump = "mcl_core:coal_lump", + stone = "mcl_core:stone", + desert_stone = "mcl_core:redsandstone", + desert_sand = "mcl_core:sand", + chest = "mcl_chests:chest", + cobble = "mcl_core:cobble", + brick = "mcl_core:brick", + obsidian_glass = "", + water_source = "mcl_core:water_source", + water_flowing = "mcl_core:water_flowing", + dirt = "mcl_core:dirt", + dirt_with_grass = "mcl_core:dirt_with_grass", + bowl = "mcl_core:bowl", + stick = "mcl_core:stick", + obsidian = "mcl_core:obsidian", +} + +if minetest.get_modpath("mcl_redstone") then + materials.mese = "mcl_redstone_torch:redstoneblock" + materials.mese_crystal = "mcl_redstone:redstone" + materials.mese_crystal_fragment = "mcl_core:iron_ingot" +else + materials.mese = "mesecons_torch:redstoneblock" + materials.mese_crystal = "mesecons:redstone" + materials.mese_crystal_fragment = "mcl_core:iron_ingot" +end + +if minetest.get_modpath("mcl_trees") then + materials.apple_leaves = "mcl_trees:leaves_oak" + materials.apple_log = "mcl_trees:tree_oak" + materials.apple_planks = "mcl_trees:wood_oak" + materials.birch_leaves = "mcl_trees:leaves_birch" + materials.birch_log = "mcl_trees:tree_birch" + materials.birch_planks = "mcl_trees:wood_birch" + materials.jungle_leaves = "mcl_trees:leaves_jungle" +else + materials.apple_leaves = "mcl_core:leaves" + materials.apple_log = "mcl_core:tree" + materials.apple_planks = "mcl_core:wood" + materials.birch_leaves = "mcl_core:birchleaves" + materials.birch_log = "mcl_core:birchtree" + materials.birch_planks = "mcl_core:birchwood" + materials.jungle_leaves = "mcl_core:jungleleaves" +end + +if minetest.get_modpath("moreores") then + materials.tin_ingot = "moreores:tin_ingot" + materials.tin_block = "moreores:tin_block" + materials.silver_ingot = "moreores:silver_ingot" +end + +if minetest.get_modpath("technic") then + materials.lead_ingot = "technic:lead_ingot" + materials.carbon_steel_ingot = "technic:carbon_steel_ingot" + materials.stainless_steel_ingot = "technic:stainless_steel_ingot" +end + +return materials diff --git a/mods/xcompat/src/materials/minetest.lua b/mods/xcompat/src/materials/minetest.lua new file mode 100644 index 0000000..1f9015e --- /dev/null +++ b/mods/xcompat/src/materials/minetest.lua @@ -0,0 +1,107 @@ +local materials = { + sand = "default:sand", + sandstone = "default:sandstone", + gravel = "default:gravel", + flint = "default:flint", + copper_ingot = "default:copper_ingot", + steel_ingot = "default:steel_ingot", + gold_ingot = "default:gold_ingot", + tin_ingot = "default:tin_ingot", + copper_block = "default:copperblock", + steel_block = "default:steelblock", + gold_block = "default:goldblock", + tin_block = "default:tinblock", + axe_steel = "default:axe_steel", + axe_diamond = "default:axe_diamond", + axe_bronze = "default:axe_bronze", + axe_stone = "default:axe_stone", + axe_wood = "default:axe_wood", + pick_steel = "default:pick_steel", + mese = "default:mese", + mese_crystal = "default:mese_crystal", + mese_crystal_fragment = "default:mese_crystal_fragment", + torch = "default:torch", + diamond = "default:diamond", + clay_lump = "default:clay_lump", + water_bucket = "bucket:bucket_water", + empty_bucket = "bucket:bucket_empty", + dye_dark_grey = "dye:dark_grey", + dye_black = "dye:black", + dye_white = "dye:white", + dye_green = "dye:green", + dye_red = "dye:red", + dye_yellow = "dye:yellow", + dye_brown = "dye:brown", + dye_blue = "dye:blue", + dye_violet = "dye:violet", + dye_grey = "dye:grey", + dye_dark_green = "dye:dark_green", + dye_orange = "dye:orange", + dye_pink = "dye:pink", + dye_cyan = "dye:cyan", + dye_magenta = "dye:magenta", + silicon = "mesecons_materials:silicon", + string = "farming:string", + paper = "default:paper", + book = "default:book", + iron_lump = "default:iron_lump", + wool_grey = "wool:grey", + wool_green = "wool:green", + wool_dark_green = "wool:dark_green", + wool_brown = "wool:brown", + wool_black = "wool:black", + wool_white = "wool:white", + slab_stone = "stairs:slab_stone", + slab_wood = "stairs:slab_wood", + glass = "default:glass", + glass_block = "default:glass", + glass_bottle = "vessels:glass_bottle", + coal_lump = "default:coal_lump", + stone = "default:stone", + desert_stone = "default:desert_stone", + desert_sand = "default:desert_sand", + chest = "default:chest", + cobble = "default:cobble", + brick = "default:brick", + obsidian_glass = "default:obsidian_glass", + water_source = "default:water_source", + water_flowing = "default:water_flowing", + dirt = "default:dirt", + dirt_with_grass = "default:dirt_with_grass", + apple_leaves = "default:leaves", + apple_log = "default:tree", + apple_planks = "default:wood", + birch_leaves = "default:aspen_leaves", + birch_log = "default:aspen_tree", + birch_planks = "default:aspen_wood", + jungle_leaves = "default:jungleleaves", + bowl = "", + stick = "default:stick", + obsidian = "default:obsidian", +} + +if minetest.registered_items["farming:bowl"] then + materials.bowl = "farming:bowl" +elseif minetest.get_modpath("x_farming") then + materials.bowl = "x_farming:bowl" +end + +if minetest.get_modpath("moreores") then + materials.silver_ingot = "moreores:silver_ingot" +end + +if minetest.get_modpath("technic") then + materials.lead_ingot = "technic:lead_ingot" + materials.carbon_steel_ingot = "technic:carbon_steel_ingot" + materials.stainless_steel_ingot = "technic:stainless_steel_ingot" +end + +if minetest.get_modpath("aloz") then + materials.aluminum_ingot = "aloz:aluminum_ingot" +end + +if minetest.get_modpath("techage") then + materials.aluminum_ingot = "techage:aluminum" +end + +return materials \ No newline at end of file diff --git a/mods/xcompat/src/player.lua b/mods/xcompat/src/player.lua new file mode 100644 index 0000000..fa03f41 --- /dev/null +++ b/mods/xcompat/src/player.lua @@ -0,0 +1,8 @@ +local filename = xcompat.gameid + +--if we dont have a player file for the game, use minetest +if not xcompat.utilities.file_exists(xcompat.modpath .. "/src/player/" .. filename .. ".lua") then + filename = "xcompat_agnostic" +end + +return dofile(xcompat.modpath .. "/src/player/" .. filename .. ".lua") \ No newline at end of file diff --git a/mods/xcompat/src/player/farlands_reloaded.lua b/mods/xcompat/src/player/farlands_reloaded.lua new file mode 100644 index 0000000..288d9ba --- /dev/null +++ b/mods/xcompat/src/player/farlands_reloaded.lua @@ -0,0 +1,51 @@ +local papi = {} + +local models = {} +function papi.register_model(name, def) + models[name] = def +end + +function papi.set_model(player, model_name) + local model = models[model_name] + + if not model then return end + + player:set_properties({ + mesh = model_name, + textures = model.textures, + visual = "mesh", + visual_size = model.visual_size, + stepheight = model.stepheight + }) +end + +function papi.get_animation(_) + --stub to keep from crashing +end + +function papi.get_textures(player) + return player:get_properties().textures +end + +function papi.set_textures(player, textures) + player:set_properties({textures = textures}) +end + +function papi.set_animation(player, anim_name, speed, loop) + player:set_animation(fl_player.animations[anim_name], speed, 0, loop) +end + +local metatable = { + __index = function (_, key) + return fl_player.ignore[key] + end, + __newindex = function (_, key, value) + rawset(fl_player.ignore, key, value) + end +} + +papi.player_attached = {} + +setmetatable(papi.player_attached, metatable) + +return papi \ No newline at end of file diff --git a/mods/xcompat/src/player/mineclonia.lua b/mods/xcompat/src/player/mineclonia.lua new file mode 100644 index 0000000..4758be9 --- /dev/null +++ b/mods/xcompat/src/player/mineclonia.lua @@ -0,0 +1,40 @@ +local papi = {} + +function papi.register_model(name, def) + return mcl_player.player_register_model(name, def) +end + +function papi.set_model(player, model) + return mcl_player.player_set_model(player, model) +end + +function papi.get_animation(player) + return mcl_player.player_get_animation(player) +end + +function papi.get_textures(player) + return player:get_properties().textures +end + +function papi.set_textures(player, textures) + player:set_properties({textures = textures}) +end + +function papi.set_animation(player, anim_name, speed, _) + return mcl_player.player_set_animation(player, anim_name, speed) +end + +local metatable = { + __index = function (_, key) + return mcl_player.player_attached[key] + end, + __newindex = function (_, key, value) + rawset(mcl_player.player_attached, key, value) + end +} + +papi.player_attached = {} + +setmetatable(papi.player_attached, metatable) + +return papi \ No newline at end of file diff --git a/mods/xcompat/src/player/minetest.lua b/mods/xcompat/src/player/minetest.lua new file mode 100644 index 0000000..75f4f08 --- /dev/null +++ b/mods/xcompat/src/player/minetest.lua @@ -0,0 +1,41 @@ +local papi = {} + +function papi.register_model(name, def) + return player_api.register_model(name, def) +end + +function papi.set_model(player, model) + return player_api.set_model(player, model) +end + +function papi.get_animation(player) + return player_api.get_animation(player) +end + +function papi.get_textures(player) + return player_api.get_textures(player) +end + +function papi.set_textures(player, texture) + return player_api.set_textures(player, texture) +end + +function papi.set_animation(player, anim_name, speed, loop) + return player_api.set_animation(player, anim_name, speed, loop) +end + + +local metatable = { + __index = function (_, key) + return player_api.player_attached[key] + end, + __newindex = function (_, key, value) + rawset(player_api.player_attached, key, value) + end +} + +papi.player_attached = {} + +setmetatable(papi.player_attached, metatable) + +return papi \ No newline at end of file diff --git a/mods/xcompat/src/player/xcompat_agnostic.lua b/mods/xcompat/src/player/xcompat_agnostic.lua new file mode 100644 index 0000000..3a5523e --- /dev/null +++ b/mods/xcompat/src/player/xcompat_agnostic.lua @@ -0,0 +1,41 @@ +local papi = {} + +local models = {} +function papi.register_model(name, def) + models[name] = def +end + +function papi.set_model(player, model_name) + local model = models[model_name] + + if not model then return end + + player:set_properties({ + mesh = model_name, + textures = model.textures, + visual = "mesh", + visual_size = model.visual_size, + stepheight = model.stepheight + }) +end + +function papi.get_animation(_) + --stub to keep from crashing +end + +function papi.get_textures(player) + return player:get_properties().textures +end + +function papi.set_textures(player, textures) + player:set_properties({textures = textures}) +end + +function papi.set_animation(_, _, _, _) + --stub to keep from crashing +end + +--nothing to do here as we have no globalstep .....that we know about anyways +papi.player_attached = {} + +return papi \ No newline at end of file diff --git a/mods/xcompat/src/sounds.lua b/mods/xcompat/src/sounds.lua new file mode 100644 index 0000000..a871259 --- /dev/null +++ b/mods/xcompat/src/sounds.lua @@ -0,0 +1,8 @@ +local filename = xcompat.gameid + +--if we dont have a materials file for the game, use minetest +if not xcompat.utilities.file_exists(xcompat.modpath .. "/src/sounds/" .. filename .. ".lua") then + filename = "xcompat_agnostic" +end + +return dofile(xcompat.modpath .. "/src/sounds/" .. filename .. ".lua") \ No newline at end of file diff --git a/mods/xcompat/src/sounds/exile.lua b/mods/xcompat/src/sounds/exile.lua new file mode 100644 index 0000000..c944ed6 --- /dev/null +++ b/mods/xcompat/src/sounds/exile.lua @@ -0,0 +1,67 @@ +local sound_api = {} + +function sound_api.node_sound_default(soundtable) + return nodes_nature.node_sound_default(soundtable) +end + +function sound_api.node_sound_stone_defaults(soundtable) + return nodes_nature.node_sound_stone_defaults(soundtable) +end + +function sound_api.node_sound_dirt_defaults(soundtable) + return nodes_nature.node_sound_dirt_defaults(soundtable) +end + +--return dirt as some games use dirt vs grass +function sound_api.node_sound_grass_defaults(soundtable) + return sound_api.node_sound_dirt_defaults(soundtable) +end + +function sound_api.node_sound_sand_defaults(soundtable) + return nodes_nature.node_sound_sand_defaults(soundtable) +end + +function sound_api.node_sound_gravel_defaults(soundtable) + return nodes_nature.node_sound_gravel_defaults(soundtable) +end + +function sound_api.node_sound_wood_defaults(soundtable) + return nodes_nature.node_sound_wood_defaults(soundtable) +end + +function sound_api.node_sound_leaves_defaults(soundtable) + return nodes_nature.node_sound_leaves_defaults(soundtable) +end + +function sound_api.node_sound_glass_defaults(soundtable) + return nodes_nature.node_sound_glass_defaults(soundtable) +end + + +function sound_api.node_sound_ice_defaults(soundtable) + --s/ice/glass + return nodes_nature.node_sound_glass_defaults(soundtable) +end + +function sound_api.node_sound_metal_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_water_defaults(soundtable) + return nodes_nature.node_sound_water_defaults(soundtable) +end + +function sound_api.node_sound_lava_defaults(soundtable) + --s/lava/water + return nodes_nature.node_sound_water_defaults(soundtable) +end + +function sound_api.node_sound_snow_defaults(soundtable) + return nodes_nature.node_sound_snow_defaults(soundtable) +end + +function sound_api.node_sound_wool_defaults(soundtable) + return soundtable +end + +return sound_api \ No newline at end of file diff --git a/mods/xcompat/src/sounds/farlands_reloaded.lua b/mods/xcompat/src/sounds/farlands_reloaded.lua new file mode 100644 index 0000000..e5be807 --- /dev/null +++ b/mods/xcompat/src/sounds/farlands_reloaded.lua @@ -0,0 +1,65 @@ +local sound_api = {} + +function sound_api.node_sound_default(soundtable) + return soundtable +end + +function sound_api.node_sound_stone_defaults(soundtable) + return fl_stone.sounds.stone(soundtable) +end + +function sound_api.node_sound_dirt_defaults(soundtable) + return fl_topsoil.sounds.grass(soundtable) +end + +--return dirt as some games use dirt vs grass +function sound_api.node_sound_grass_defaults(soundtable) + return sound_api.node_sound_dirt_defaults(soundtable) +end + +function sound_api.node_sound_sand_defaults(soundtable) + return fl_stone.sounds.sand(soundtable) +end + +function sound_api.node_sound_gravel_defaults(soundtable) + return fl_topsoil.sounds.gravel(soundtable) +end + +function sound_api.node_sound_wood_defaults(soundtable) + return fl_trees.sounds.wood(soundtable) +end + +function sound_api.node_sound_leaves_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_glass_defaults(soundtable) + return soundtable +end + + +function sound_api.node_sound_ice_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_metal_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_water_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_lava_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_snow_defaults(soundtable) + return fl_topsoil.sounds.snow(soundtable) +end + +function sound_api.node_sound_wool_defaults(soundtable) + return soundtable +end + +return sound_api \ No newline at end of file diff --git a/mods/xcompat/src/sounds/forgotten_lands.lua b/mods/xcompat/src/sounds/forgotten_lands.lua new file mode 100644 index 0000000..96eb7d9 --- /dev/null +++ b/mods/xcompat/src/sounds/forgotten_lands.lua @@ -0,0 +1,63 @@ +local sound_api = {} + +function sound_api.node_sound_default(soundtable) + return soundtable +end + +function sound_api.node_sound_stone_defaults(soundtable) + return sounds.stone(soundtable) +end + +function sound_api.node_sound_dirt_defaults(soundtable) + return sounds.dirt(soundtable) +end + +function sound_api.node_sound_grass_defaults(soundtable) + return sounds.grass(soundtable) +end + +function sound_api.node_sound_sand_defaults(soundtable) + return sounds.sand(soundtable) +end + +function sound_api.node_sound_gravel_defaults(soundtable) + return sounds.gravel(soundtable) +end + +function sound_api.node_sound_wood_defaults(soundtable) + return sounds.wood(soundtable) +end + +function sound_api.node_sound_leaves_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_glass_defaults(soundtable) + return sounds.glass(soundtable) +end + +function sound_api.node_sound_ice_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_metal_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_water_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_lava_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_snow_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_wool_defaults(soundtable) + return soundtable +end + +return sound_api \ No newline at end of file diff --git a/mods/xcompat/src/sounds/hades_revisited.lua b/mods/xcompat/src/sounds/hades_revisited.lua new file mode 100644 index 0000000..a8a2a04 --- /dev/null +++ b/mods/xcompat/src/sounds/hades_revisited.lua @@ -0,0 +1,66 @@ +local sound_api = {} + +function sound_api.node_sound_default(soundtable) + return hades_sounds.node_sound_defaults(soundtable) +end + +function sound_api.node_sound_stone_defaults(soundtable) + return hades_sounds.node_sound_stone_defaults(soundtable) +end + +function sound_api.node_sound_dirt_defaults(soundtable) + return hades_sounds.node_sound_dirt_defaults(soundtable) +end + +--return dirt as some games use dirt vs grass +function sound_api.node_sound_grass_defaults(soundtable) + return hades_sounds.node_sound_grass_defaults(soundtable) +end + +function sound_api.node_sound_sand_defaults(soundtable) + return hades_sounds.node_sound_sand_defaults(soundtable) +end + +function sound_api.node_sound_gravel_defaults(soundtable) + return hades_sounds.node_sound_gravel_defaults(soundtable) +end + +function sound_api.node_sound_wood_defaults(soundtable) + return hades_sounds.node_sound_wood_defaults(soundtable) +end + +function sound_api.node_sound_leaves_defaults(soundtable) + return hades_sounds.node_sound_leaves_defaults(soundtable) +end + +function sound_api.node_sound_glass_defaults(soundtable) + return hades_sounds.node_sound_glass_defaults(soundtable) +end + + +function sound_api.node_sound_ice_defaults(soundtable) + --s/ice/glass + return hades_sounds.node_sound_glass_defaults(soundtable) +end + +function sound_api.node_sound_metal_defaults(soundtable) + return hades_sounds.node_sound_metal_defaults(soundtable) +end + +function sound_api.node_sound_water_defaults(soundtable) + return hades_sounds.node_sound_water_defaults(soundtable) +end + +function sound_api.node_sound_lava_defaults(soundtable) + return hades_sounds.node_sound_lava_defaults(soundtable) +end + +function sound_api.node_sound_snow_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_wool_defaults(soundtable) + return soundtable +end + +return sound_api \ No newline at end of file diff --git a/mods/xcompat/src/sounds/ksurvive2.lua b/mods/xcompat/src/sounds/ksurvive2.lua new file mode 100644 index 0000000..70ae03b --- /dev/null +++ b/mods/xcompat/src/sounds/ksurvive2.lua @@ -0,0 +1,107 @@ +local sound_api = {} + +--ks_sounds conversion +--currently loggy and bedrock are ignored +local ks = {} + +function ks.node_sound_defaults(soundtable) + soundtable = soundtable or {} + soundtable.footstep = soundtable.footstep or ks_sounds.generalnode_sounds.footstep + soundtable.dug = soundtable.dug or ks_sounds.generalnode_sounds.dug + soundtable.dig = soundtable.dig or ks_sounds.generalnode_sounds.dig + soundtable.place = soundtable.place or ks_sounds.generalnode_sounds.place + return soundtable +end + +function ks.node_sound_wood_defaults(soundtable) + soundtable = soundtable or {} + soundtable.footstep = soundtable.footstep or ks_sounds.woodennode_sounds.footstep + soundtable.dug = soundtable.dug or ks_sounds.woodennode_sounds.dug + soundtable.dig = soundtable.dig or ks_sounds.woodennode_sounds.dig + soundtable.place = soundtable.place or ks_sounds.woodennode_sounds.place + ks.node_sound_defaults(soundtable) + return soundtable +end + +function ks.node_sound_leaves_defaults(soundtable) + soundtable = soundtable or {} + soundtable.footstep = soundtable.footstep or ks_sounds.leafynode_sounds.footstep + soundtable.dug = soundtable.dug or ks_sounds.leafynode_sounds.dug + soundtable.dig = soundtable.dig or ks_sounds.leafynode_sounds.dig + soundtable.place = soundtable.place or ks_sounds.leafynode_sounds.place + ks.node_sound_defaults(soundtable) + return soundtable +end + +function ks.node_sound_snow_defaults(soundtable) + soundtable = soundtable or {} + soundtable.footstep = soundtable.footstep or ks_sounds.snowynode_sounds.footstep + soundtable.dug = soundtable.dug or ks_sounds.snowynode_sounds.dug + soundtable.dig = soundtable.dig or ks_sounds.snowynode_sounds.dig + soundtable.place = soundtable.place or ks_sounds.snowynode_sounds.place + ks.node_sound_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_default(soundtable) + return ks.node_sound_default(soundtable) +end + +function sound_api.node_sound_stone_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_dirt_defaults(soundtable) + return soundtable +end + +--return dirt as some games use dirt vs grass +function sound_api.node_sound_grass_defaults(soundtable) + return sound_api.node_sound_dirt_defaults(soundtable) +end + +function sound_api.node_sound_sand_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_gravel_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_wood_defaults(soundtable) + return ks.node_sound_wood_default(soundtable) +end + +function sound_api.node_sound_leaves_defaults(soundtable) + return ks.node_sound_leaves_default(soundtable) +end + +function sound_api.node_sound_glass_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_ice_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_metal_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_water_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_lava_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_snow_defaults(soundtable) + return ks.node_sound_snow_default(soundtable) +end + +function sound_api.node_sound_wool_defaults(soundtable) + return soundtable +end + +return sound_api \ No newline at end of file diff --git a/mods/xcompat/src/sounds/mineclonia.lua b/mods/xcompat/src/sounds/mineclonia.lua new file mode 100644 index 0000000..5de0753 --- /dev/null +++ b/mods/xcompat/src/sounds/mineclonia.lua @@ -0,0 +1,67 @@ +--note this file handles mineclonia, mineclone2, and its rename voxelibre + +local sound_api = {} + +function sound_api.node_sound_default(soundtable) + return mcl_sounds.node_sound_defaults(soundtable) +end + +function sound_api.node_sound_stone_defaults(soundtable) + return mcl_sounds.node_sound_stone_defaults(soundtable) +end + +function sound_api.node_sound_dirt_defaults(soundtable) + return mcl_sounds.node_sound_dirt_defaults(soundtable) +end + +--return dirt as some games use dirt vs grass +function sound_api.node_sound_grass_defaults(soundtable) + return sound_api.node_sound_dirt_defaults(soundtable) +end + +function sound_api.node_sound_sand_defaults(soundtable) + return mcl_sounds.node_sound_sand_defaults(soundtable) +end + +function sound_api.node_sound_gravel_defaults(soundtable) + return mcl_sounds.node_sound_sand_defaults(soundtable) +end + +function sound_api.node_sound_wood_defaults(soundtable) + return mcl_sounds.node_sound_wood_defaults(soundtable) +end + +function sound_api.node_sound_leaves_defaults(soundtable) + return mcl_sounds.node_sound_leaves_defaults(soundtable) +end + +function sound_api.node_sound_glass_defaults(soundtable) + return mcl_sounds.node_sound_glass_defaults(soundtable) +end + + +function sound_api.node_sound_ice_defaults(soundtable) + return mcl_sounds.node_sound_glass_defaults(soundtable) +end + +function sound_api.node_sound_metal_defaults(soundtable) + return mcl_sounds.node_sound_metal_defaults(soundtable) +end + +function sound_api.node_sound_water_defaults(soundtable) + return mcl_sounds.node_sound_water_defaults(soundtable) +end + +function sound_api.node_sound_lava_defaults(soundtable) + return mcl_sounds.node_sound_lava_defaults(soundtable) +end + +function sound_api.node_sound_snow_defaults(soundtable) + return mcl_sounds.node_sound_snow_defaults(soundtable) +end + +function sound_api.node_sound_wool_defaults(soundtable) + return mcl_sounds.node_sound_wool_defaults(soundtable) +end + +return sound_api \ No newline at end of file diff --git a/mods/xcompat/src/sounds/minetest.lua b/mods/xcompat/src/sounds/minetest.lua new file mode 100644 index 0000000..3c2485e --- /dev/null +++ b/mods/xcompat/src/sounds/minetest.lua @@ -0,0 +1,67 @@ +local sound_api = {} + +function sound_api.node_sound_default(soundtable) + return default.node_sound_defaults(soundtable) +end + +function sound_api.node_sound_stone_defaults(soundtable) + return default.node_sound_stone_defaults(soundtable) +end + +function sound_api.node_sound_dirt_defaults(soundtable) + return default.node_sound_dirt_defaults(soundtable) +end + +--return dirt as some games use dirt vs grass +function sound_api.node_sound_grass_defaults(soundtable) + return sound_api.node_sound_dirt_defaults(soundtable) +end + +function sound_api.node_sound_sand_defaults(soundtable) + return default.node_sound_sand_defaults(soundtable) +end + +function sound_api.node_sound_gravel_defaults(soundtable) + return default.node_sound_gravel_defaults(soundtable) +end + +function sound_api.node_sound_wood_defaults(soundtable) + return default.node_sound_wood_defaults(soundtable) +end + +function sound_api.node_sound_leaves_defaults(soundtable) + return default.node_sound_leaves_defaults(soundtable) +end + +function sound_api.node_sound_glass_defaults(soundtable) + return default.node_sound_glass_defaults(soundtable) +end + + +function sound_api.node_sound_ice_defaults(soundtable) + return default.node_sound_ice_defaults(soundtable) +end + +function sound_api.node_sound_metal_defaults(soundtable) + return default.node_sound_metal_defaults(soundtable) +end + +function sound_api.node_sound_water_defaults(soundtable) + return default.node_sound_water_defaults(soundtable) +end + +function sound_api.node_sound_lava_defaults(soundtable) + --s/lava/water + return default.node_sound_water_defaults(soundtable) +end + +function sound_api.node_sound_snow_defaults(soundtable) + return default.node_sound_snow_defaults(soundtable) +end + +function sound_api.node_sound_wool_defaults(soundtable) + --s/wool/default + return default.node_sound_defaults(soundtable) +end + +return sound_api \ No newline at end of file diff --git a/mods/xcompat/src/sounds/xcompat_agnostic.lua b/mods/xcompat/src/sounds/xcompat_agnostic.lua new file mode 100644 index 0000000..2dbdf30 --- /dev/null +++ b/mods/xcompat/src/sounds/xcompat_agnostic.lua @@ -0,0 +1,63 @@ +local sound_api = {} + +function sound_api.node_sound_default(soundtable) + return soundtable +end + +function sound_api.node_sound_stone_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_dirt_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_grass_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_sand_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_gravel_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_wood_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_leaves_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_glass_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_ice_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_metal_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_water_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_lava_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_snow_defaults(soundtable) + return soundtable +end + +function sound_api.node_sound_wool_defaults(soundtable) + return soundtable +end + +return sound_api \ No newline at end of file diff --git a/mods/xcompat/src/stairs.lua b/mods/xcompat/src/stairs.lua new file mode 100644 index 0000000..6f8e59e --- /dev/null +++ b/mods/xcompat/src/stairs.lua @@ -0,0 +1,8 @@ +local filename = xcompat.gameid + +--if we dont have a stairs file for the game, use xcompat_agnostic +if not xcompat.utilities.file_exists(xcompat.modpath .. "/src/stairs/" .. filename .. ".lua") then + filename = "xcompat_agnostic" +end + +return dofile(xcompat.modpath .. "/src/stairs/" .. filename .. ".lua") \ No newline at end of file diff --git a/mods/xcompat/src/stairs/farlands_reloaded.lua b/mods/xcompat/src/stairs/farlands_reloaded.lua new file mode 100644 index 0000000..91605a3 --- /dev/null +++ b/mods/xcompat/src/stairs/farlands_reloaded.lua @@ -0,0 +1,25 @@ +local function register(name, _) + local splitName = name:split(":") + local sName = splitName[2] + + local groups = core.registered_nodes[name].groups + groups.stairable = 1 + + core.override_item(name, {groups = groups}) + + local flStairNameOverrides = { + ["stair_inner"] = "inner_stair", + ["stair_outer"] = "outer_stair" + } + + for _, type in pairs({"slab", "stair", "stair_inner", "stair_outer"}) do + + + minetest.register_alias( + splitName[1] .. ":" .. type .. "_" .. sName, + splitName[1] .. ":" .. sName .. "_" .. (flStairNameOverrides[type] or type) + ) + end +end + +return {register = register} \ No newline at end of file diff --git a/mods/xcompat/src/stairs/minetest.lua b/mods/xcompat/src/stairs/minetest.lua new file mode 100644 index 0000000..ebfc5bc --- /dev/null +++ b/mods/xcompat/src/stairs/minetest.lua @@ -0,0 +1,19 @@ +local function register(name, def) + local splitName = name:split(":") + local sName = splitName[2] + + stairs.register_stair_and_slab( + sName, + nil, + def.groups, + def.tiles, + def.description, + def.sounds + ) + + for _, type in pairs({"slab", "stair", "stair_inner", "stair_outer"}) do + minetest.register_alias(splitName[1] .. ":" .. type .. "_" .. sName, "stairs:" .. type .. "_" .. sName) + end +end + +return {register = register} \ No newline at end of file diff --git a/mods/xcompat/src/stairs/xcompat_agnostic.lua b/mods/xcompat/src/stairs/xcompat_agnostic.lua new file mode 100644 index 0000000..eb96394 --- /dev/null +++ b/mods/xcompat/src/stairs/xcompat_agnostic.lua @@ -0,0 +1,48 @@ +local stairtable = { + { + "slab", + {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, + }, + { + "stair", + { + {-0.5, -0.5, -0.5, 0.5, 0.0, 0.5}, + {-0.5, 0.0, 0.0, 0.5, 0.5, 0.5}, + }, + }, + { + "stair_inner", + { + {-0.5, -0.5, -0.5, 0.5, 0.0, 0.5}, + {-0.5, 0.0, 0.0, 0.5, 0.5, 0.5}, + {-0.5, 0.0, -0.5, 0.0, 0.5, 0.0}, + }, + }, + { + "stair_outer", + { + {-0.5, -0.5, -0.5, 0.5, 0.0, 0.5}, + {-0.5, 0.0, 0.0, 0.0, 0.5, 0.5}, + }, + }, +} + +local function register(name, def) + for _, sdef in pairs(stairtable) do + local split = name:split(":") + local ndef = table.copy(def) + local item_name = ":" .. sdef[1] .. "_" .. split[2] + + ndef.description = def.description .. " " .. string.gsub(sdef[1], "_", " ") + ndef.paramtype, ndef.paramtype2 = "light", "facedir" + ndef.drawtype = "nodebox" + ndef.node_box = { + type = "fixed", + fixed = sdef[2], + } + + minetest.register_node(":" .. split[1] .. item_name, ndef) + end +end + +return {register = register} \ No newline at end of file diff --git a/mods/xcompat/src/textures.lua b/mods/xcompat/src/textures.lua new file mode 100644 index 0000000..ceb7736 --- /dev/null +++ b/mods/xcompat/src/textures.lua @@ -0,0 +1,8 @@ +local filename = xcompat.gameid + +--if we dont have a materials file for the game, use minetest +if not xcompat.utilities.file_exists(xcompat.modpath .. "/src/textures/" .. filename .. ".lua") then + filename = "xcompat_agnostic" +end + +return dofile(xcompat.modpath .. "/src/textures/" .. filename .. ".lua") \ No newline at end of file diff --git a/mods/xcompat/src/textures/farlands_reloaded.lua b/mods/xcompat/src/textures/farlands_reloaded.lua new file mode 100644 index 0000000..eb06cd6 --- /dev/null +++ b/mods/xcompat/src/textures/farlands_reloaded.lua @@ -0,0 +1,57 @@ +local textures = { + gravel = "farlands_gravel.png", + brick = "farlands_brick.png", + + metal = { + steel = { + ore = "farlands_iron_ingot.png", + ingot = "farlands_iron_ingot.png", + block = "farlands_iron_block.png", + }, + gold = { + ore = "farlands_gold_ore.png", + ingot = "farlands_gold_ingot.png", + block = "farlands_gold_block.png", + }, + }, + glass = { + pane = "farlands_glass.png", + detail = "farlands_glass_detail.png", + }, + wood = { + apple = { + sapling = "farlands_apple_sapling.png", + planks = "farlands_apple_planks.png", + trunk_side = "farlands_apple_trunk.png", + trunk_top = "farlands_apple_trunk_top.png", + leaves = "farlands_apple_leaves.png", + }, + jungle = { + sapling = "farlands_jungletree_sapling.png", + planks = "farlands_jungletree_planks.png", + trunk_side = "farlands_jungletree_trunk.png", + trunk_top = "farlands_jungletree_trunk_top.png", + leaves = "farlands_jungletree_leaves.png", + }, + }, + water = { + tile = "farlands_water.png", + animated = { + source = "farlands_water_source_animated.png", + flowing = "farlands_water_flowing_animated.png", + }, + }, + wool = { + white = "farlands_wool.png", + black = "farlands_wool.png", + grey = "farlands_wool.png", + dark_grey = "farlands_wool.png", + }, + grass = { + top = "farlands_grass.png", + side = "farlands_dirt.png^farlands_grass_side.png", + dirt = "farlands_dirt.png", + }, +} + +return textures \ No newline at end of file diff --git a/mods/xcompat/src/textures/minetest.lua b/mods/xcompat/src/textures/minetest.lua new file mode 100644 index 0000000..2216922 --- /dev/null +++ b/mods/xcompat/src/textures/minetest.lua @@ -0,0 +1,57 @@ +local textures = { + gravel = "default_gravel.png", + brick = "default_brick.png", + + metal = { + steel = { + ore = "default_iron_lump.png", + ingot = "default_steel_ingot.png", + block = "default_steel_block.png", + }, + gold = { + ore = "default_gold_lump.png", + ingot = "default_gold_ingot.png", + block = "default_gold_block.png", + }, + }, + glass = { + pane = "default_glass.png", + detail = "default_glass_detail.png", + }, + wood = { + apple = { + sapling = "default_sapling.png", + planks = "default_wood.png", + trunk_side = "default_tree.png", + trunk_top = "default_tree_top.png", + leaves = "default_leaves.png", + }, + jungle = { + sapling = "default_junglesapling.png", + planks = "default_junglewood.png", + trunk_side = "default_jungletree.png", + trunk_top = "default_jungletree_top.png", + leaves = "default_jungleleaves.png", + }, + }, + water = { + tile = "default_water.png", + animated = { + source = "default_water_source_animated.png", + flowing = "default_water_flowing_animated.png", + }, + }, + wool = { + white = "wool_white.png", + black = "wool_black.png", + grey = "wool_grey.png", + dark_grey = "wool_dark_grey.png", + }, + grass = { + top = "default_grass.png", + side = "default_dirt.png^default_grass_side.png", + dirt = "default_dirt.png", + }, +} + +return textures \ No newline at end of file diff --git a/mods/xcompat/src/textures/xcompat_agnostic.lua b/mods/xcompat/src/textures/xcompat_agnostic.lua new file mode 100644 index 0000000..ae26238 --- /dev/null +++ b/mods/xcompat/src/textures/xcompat_agnostic.lua @@ -0,0 +1,65 @@ +local textures = { + gravel = "[combine:16x16^[noalpha^[colorize:#3a3b3c", + brick = "[combine:16x16^[noalpha^[colorize:#AA4A44", + + metal = { + steel = { + ore = "[combine:16x16^[noalpha^[colorize:#D3D3D3", + ingot = "[combine:16x16^[noalpha^[colorize:#D3D3D3", + block = "[combine:16x16^[noalpha^[colorize:#D3D3D3", + }, + gold = { + ore = "[combine:16x16^[noalpha^[colorize:#FFD700", + ingot = "[combine:16x16^[noalpha^[colorize:#FFD700", + block = "[combine:16x16^[noalpha^[colorize:#FFD700", + }, + }, + glass = { + pane = "[combine:16x16:" .. + "0,0=\\[combine\\:1x16\\^[noalpha\\^[colorize\\:#ffffff:" .. + "0,0=\\[combine\\:16x1\\^[noalpha\\^[colorize\\:#ffffff:" .. + "0,15=\\[combine\\:16x1\\^[noalpha\\^[colorize\\:#ffffff:" .. + "15,0=\\[combine\\:1x16\\^[noalpha\\^[colorize\\:#ffffff", + detail = "[combine:16x16:" .. + "0,0=\\[combine\\:1x16\\^[noalpha\\^[colorize\\:#ffffff:" .. + "0,0=\\[combine\\:16x1\\^[noalpha\\^[colorize\\:#ffffff:" .. + "0,15=\\[combine\\:16x1\\^[noalpha\\^[colorize\\:#ffffff:" .. + "15,0=\\[combine\\:1x16\\^[noalpha\\^[colorize\\:#ffffff", + }, + wood = { + apple = { + sapling = "[combine:16x16^[noalpha^[colorize:#654321", + planks = "[combine:16x16^[noalpha^[colorize:#654321", + trunk_side = "[combine:16x16^[noalpha^[colorize:#654321", + trunk_top = "[combine:16x16^[noalpha^[colorize:#654321", + leaves = "[combine:16x16^[noalpha^[colorize:#654321", + }, + jungle = { + sapling = "[combine:16x16^[noalpha^[colorize:#563d2d", + planks = "[combine:16x16^[noalpha^[colorize:#563d2d", + trunk_side = "[combine:16x16^[noalpha^[colorize:#563d2d", + trunk_top = "[combine:16x16^[noalpha^[colorize:#563d2d", + leaves = "[combine:16x16^[noalpha^[colorize:#563d2d", + }, + }, + water = { + tile = "[combine:16x16^[noalpha^[colorize:#00008b", + animated = { + source = "[combine:16x16^[noalpha^[colorize:#00008b", + flowing = "[combine:16x16^[noalpha^[colorize:#00008b", + }, + }, + wool = { + white = "[combine:16x16^[noalpha^[colorize:#ffffff", + black = "[combine:16x16^[noalpha^[colorize:#000000", + grey = "[combine:16x16^[noalpha^[colorize:#313b3c", + dark_grey = "[combine:16x16^[noalpha^[colorize:#313b3c", + }, + grass = { + top = "[combine:16x16^[noalpha^[colorize:#006400", + side = "[combine:16x16^[noalpha^[colorize:#006400", + dirt = "[combine:16x16^[noalpha^[colorize:#563d2d", + }, +} + +return textures \ No newline at end of file diff --git a/mods/xcompat/src/utilities.lua b/mods/xcompat/src/utilities.lua new file mode 100644 index 0000000..61a7411 --- /dev/null +++ b/mods/xcompat/src/utilities.lua @@ -0,0 +1,8 @@ +local utilities = {} + +function utilities.file_exists(name) + local f=io.open(name,"r") + if f~=nil then io.close(f) return true else return false end +end + +return utilities \ No newline at end of file diff --git a/mods/xcompat/test/nodelist/farlands_reloaded.txt b/mods/xcompat/test/nodelist/farlands_reloaded.txt new file mode 100644 index 0000000..29833c7 --- /dev/null +++ b/mods/xcompat/test/nodelist/farlands_reloaded.txt @@ -0,0 +1,356 @@ +fl_furniture:yellow_ipe_table +fl_trees:palm_trunk +fl_stone:mossy_stone +fl_trees:acacia_sapling +fl_doors:copper_door_a +fl_trees:jungletree_plank +fl_workshop:furnace_active +fl_topsoil:wet_farmland +fl_trees:spruce_leaves +fl_stone:stone_brick +fl_light_sources:lantern +fl_plantlife:red_mushroom_leaves +fl_stone:basalt +fl_topsoil:condensed_ice +fl_doors:apple_door_b +fl_beds:bed_pink +fl_plantlife:petunia_blue +fl_trees:acacia_leaves +fl_stone:basalt_block +fl_ores:coal_in_tuff +fl_topsoil:sea_grass_3 +fl_agriculture:carrot_2 +fl_beds:bed_violet +fl_stone:basalt_rubble +fl_furniture:spruce_bench +fl_ores:copper_in_tuff +fl_trees:willow_plank +fl_trees:yellow_ipe_plank_fence +fl_storage:spruce_vessel_shelf +fl_beds:bed_blue +fl_stone:stone_block +fl_stone:tuff_rubble +fl_ores:mithite_in_stone +fl_topsoil:savannah_dirt_with_grass +fl_furniture:pine_table +fl_trees:pine_plank_fence +fl_furniture:baobab_chair +fl_plantlife:grass_2 +fl_trees:pine_sapling +fl_beds:bed_dark_green +fl_plantlife:cactus +fl_storage:spruce_book_shelf +fl_signs:sign_wood +fl_plantlife:pink_ground_flower +fl_doors:steel_door_b +fl_topsoil:sea_grass_1 +fl_trees:aspen_leaves +fl_stone:ors_brick +fl_doors:jungletree_door_a +fl_paintings:forest +fl_storage:spruce_multi_shelf +fl_beds:bed_red +fl_tnt:tnt +fl_beds:bed_brown +fl_storage:pine_multi_shelf +fl_ores:mithite_block +fl_beds:bed_orange +fl_ores:coal_in_desert_stone +fl_plantlife:red_ground_flower +fl_ores:gold_in_desert_stone +fl_stone:silver_sandstone_block +fl_storage:wood_chest +fl_furniture:aspen_table +fl_doors:aspen_door_a +fl_stone:ors +fl_stone:sandstone_brick +fl_doors:pine_door_b +fl_furniture:acacia_table +fl_trees:acacia_trunk +fl_stone:mossy_stone_block +fl_doors:baobab_door_b +fl_plantlife:pansy_purple +fl_industrial:conveyor_funnel +fl_stone:savannah_rubble +fl_trains:straight_rise_track +fl_storage:baobab_book_shelf +fl_plantlife:purple_allium +fl_ores:diamond_block +fl_topsoil:dirt_with_grass +fl_plantlife:ground_waterlily +fl_plantlife:flowerpot +fl_plantlife:grass_4 +fl_storage:pine_book_shelf +fl_doors:palm_door_a +fl_furniture:willow_table +fl_trains:straight_45_track +fl_trees:palm_leaves +fl_glass:framed_glass_panes +fl_storage:yellow_ipe_vessel_shelf +fl_ores:coal_block +fl_plantlife:dandelion_yellow +fl_beds:bed_cyan +fl_topsoil:gravel +fl_storage:acacia_book_shelf +fl_furniture:baobab_bench +fl_furniture:willow_bench +fl_plantlife:savannah_grass_1 +fl_industrial:conveyor +fl_storage:acacia_vessel_shelf +fl_light_sources:chain +fl_trees:spruce_plank +fl_trees:apple_leaves +fl_trees:baobab_leaves +fl_stone:silver_sand +fl_stone:desert_stone +fl_furniture:spruce_chair +fl_ores:copper_in_desert_stone +fl_topsoil:snow_block +fl_ores:mithite_in_savannah +fl_trees:acacia_plank +fl_topsoil:dirt +fl_fire:fire +fl_stone:gneiss_rubble +fl_furniture:acacia_bench +fl_storage:willow_vessel_shelf +fl_plantlife:lantana +fl_stone:sandstone +fl_furniture:jungletree_chair +fl_workshop:furnace +fl_stone:gneiss +fl_agriculture:potato_4 +fl_topsoil:permafrost_with_stones +fl_topsoil:snow +fl_trees:baobab_plank +fl_stone:tuff_brick +fl_stone:desert_sandstone_block +fl_bones:bone_block +fl_stone:basalt_brick +fl_doors:steel_door_a +fl_furniture:aspen_bench +fl_ores:tin_in_savannah +fl_trees:palm_plank_fence +fl_doors:apple_door_a +fl_wool:wool +fl_furniture:spruce_table +fl_agriculture:carrot_1 +fl_ores:iron_in_stone +fl_stone:desert_sandstone_brick +fl_storage:apple_empty_shelf +fl_stone:gneiss_block +fl_stone:mossy_stone_rubble +fl_agriculture:carrot_3 +fl_trees:willow_trunk +fl_trees:pine_leaves +fl_trains:curve_right_track +fl_doors:copper_door_b +fl_doors:jungletree_door_b +fl_furniture:jungletree_bench +fl_doors:willow_door_b +fl_topsoil:sea_grass_2 +fl_ores:gold_in_ors +fl_doors:willow_door_a +fl_trains:switch_right_track +fl_doors:aspen_door_b +fl_doors:palm_door_b +fl_stone:stone +fl_plantlife:rose +fl_doors:yellow_ipe_door_b +fl_doors:yellow_ipe_door_a +fl_plantlife:grass_3 +fl_storage:apple_vessel_shelf +fl_plantlife:tulip +fl_light_sources:torch +fl_trees:palm_sapling +fl_doors:blocker_top +fl_bricks:terracotta +fl_bricks:clay_block +fl_bricks:brick +fl_agriculture:carrot_4 +fl_paintings:cthulhu +fl_trees:aspen_trunk +fl_furniture:willow_chair +fl_glass:tinted_framed_glass_panes +fl_stone:sandstone_block +fl_glass:tinted_framed_glass +fl_ores:gold_block +fl_furniture:apple_chair +fl_glass:framed_glass +fl_storage:pine_vessel_shelf +fl_beds:bed_yellow +fl_beds:bed_black +fl_stone:silver_sandstone +fl_beds:bed_dark_grey +fl_beds:bed_green +fl_ores:tin_in_tuff +fl_beds:bed_grey +fl_beds:bed_magenta +fl_beds:bed_white +fl_wildlife:spawner +fl_wool:wool_carpet +fl_paintings:dragon +fl_topsoil:dirt_with_snow +fl_ores:tin_block +fl_furniture:baobab_table +fl_dyes:demo_node +fl_plantlife:viola +fl_ores:diamond_in_ors +fl_plantlife:savannah_grass_4 +fl_plantlife:oxeye_daisy +fl_plantlife:geranium +fl_plantlife:mushroom_trunk +fl_stone:ors_rubble +fl_doors:baobab_door_a +fl_light_sources:lantern_c +fl_doors:acacia_door_b +fl_plantlife:petunia_white +fl_storage:spruce_empty_shelf +fl_plantlife:petunia_pink +fl_ores:tin_in_stone +fl_ores:mithite_in_desert_stone +fl_stone:desert_sand +fl_plantlife:pansy_blue +fl_plantlife:frozen_rose +fl_ores:gold_in_tuff +fl_stone:savannah_brick +fl_ores:coal_in_savannah +fl_plantlife:blue_ground_flower +fl_ores:iron_in_desert_stone +fl_industrial:injector +fl_trees:aspen_plank_fence +fl_plantlife:savannah_grass_2 +fl_plantlife:dandelion_white +fl_plantlife:flame_lily +fl_plantlife:brown_mushroom +fl_plantlife:red_mushroom +fl_trees:jungletree_plank_fence +fl_plantlife:brown_mushroom_leaves +fl_plantlife:raw_mushroom_leaves +fl_plantlife:savannah_grass_5 +fl_stone:tuff_block +fl_plantlife:savannah_grass_3 +fl_trees:acacia_plank_fence +fl_trees:jungletree_sapling +fl_furniture:pine_bench +fl_plantlife:grass_1 +fl_plantlife:lavender_flower +fl_ores:coal_in_stone +fl_plantlife:grass_5 +fl_ores:bronze_block +fl_trees:yellow_ipe_plank +fl_stone:gneiss_brick +fl_ores:diamond_in_savannah +fl_trees:pine_plank +fl_ores:diamond_in_desert_stone +fl_ores:diamond_in_tuff +fl_storage:baobab_empty_shelf +fl_storage:yellow_ipe_empty_shelf +fl_paintings:landscape +fl_stairs:tablesaw +fl_furniture:yellow_ipe_chair +fl_ores:copper_in_ors +fl_trees:apple_trunk +fl_trees:yellow_ipe_leaves +fl_trees:dead_aspen_leaves +fl_liquids:water_flowing +fl_furniture:aspen_chair +fl_plantlife:lobelia +fl_topsoil:dry_farmland +fl_trees:apple_plank +ignore +fl_trains:switch_left_track +fl_storage:willow_empty_shelf +fl_trees:spruce_plank_fence +fl_ores:copper_in_savannah +fl_stone:sand +fl_furniture:pine_chair +fl_storage:aspen_empty_shelf +fl_topsoil:coarse_dirt +fl_storage:acacia_multi_shelf +fl_ores:mithite_in_ors +fl_paintings:waterlilie +fl_stone:tuff +fl_stone:savannah_block +fl_trees:willow_plank_fence +fl_storage:baobab_vessel_shelf +fl_furniture:apple_table +fl_paintings:rose +fl_liquids:river_water_source +fl_trees:pine_trunk +fl_storage:aspen_vessel_shelf +fl_topsoil:ice +fl_storage:aspen_book_shelf +fl_liquids:lava_source +fl_agriculture:potato_2 +fl_storage:aspen_multi_shelf +fl_storage:willow_book_shelf +fl_furniture:acacia_chair +fl_trains:crossing_track +fl_trees:apple_plank_fence +fl_liquids:river_water_flowing +fl_trees:baobab_sapling +fl_ores:gold_in_stone +fl_trains:curve_left_track +fl_trains:straight_track +fl_doors:acacia_door_a +fl_storage:apple_multi_shelf +fl_trees:aspen_plank +fl_trees:spruce_trunk +fl_stone:desert_stone_rubble +fl_trees:baobab_trunk +fl_ores:copper_in_stone +fl_industrial:conveyor_left +fl_storage:acacia_empty_shelf +fl_trees:palm_plank +fl_agriculture:potato_1 +fl_trees:apple_sapling +fl_trees:baobab_plank_fence +fl_furniture:yellow_ipe_bench +fl_ores:tin_in_desert_stone +fl_furniture:palm_bench +fl_storage:yellow_ipe_book_shelf +fl_stone:savannah +fl_furniture:apple_bench +fl_ores:iron_block +fl_furniture:palm_chair +fl_glass:tinted_connected_glass +fl_agriculture:potato_3 +fl_trees:aspen_sapling +fl_storage:baobab_multi_shelf +fl_storage:willow_multi_shelf +fl_furniture:palm_table +fl_furniture:jungletree_table +fl_trees:jungletree_trunk +fl_stone:stone_rubble +fl_doors:pine_door_a +fl_storage:pine_empty_shelf +fl_stone:mossy_stone_brick +fl_stone:ors_block +fl_paintings:possessedwoman +fl_storage:apple_book_shelf +fl_storage:yellow_ipe_multi_shelf +fl_stone:desert_stone_block +fl_stone:desert_stone_brick +fl_trees:jungletree_leaves +fl_liquids:water_source +fl_stone:desert_sandstone +fl_trees:willow_leaves +fl_workshop:anvil +fl_paintings:mistiriusgirl +fl_trees:yellow_ipe_trunk +fl_topsoil:savannah_dirt +fl_ores:coal_in_ors +fl_topsoil:permafrost +fl_liquids:lava_flowing +fl_ores:iron_in_ors +fl_industrial:conveyor_right +fl_ores:iron_in_tuff +fl_ores:iron_in_savannah +fl_ores:copper_block +fl_stone:silver_sandstone_brick +air +fl_ores:gold_in_savannah +fl_ores:tin_in_ors +fl_ores:mithite_in_tuff +fl_stone:bedrock +fl_ores:diamond_in_stone diff --git a/mods/xcompat/test/nodelist/hades_revisited.txt b/mods/xcompat/test/nodelist/hades_revisited.txt new file mode 100644 index 0000000..0d219dc --- /dev/null +++ b/mods/xcompat/test/nodelist/hades_revisited.txt @@ -0,0 +1,2966 @@ +columnia:column_linktee_hades_core_tuff_baked +gluncarp:white +hades_bedrock:bedrock +columnia:column_stairsubpillar_hades_trees_colwood_dark_green +columnia:column_bottom_hades_trees_colwood_dark_grey +hades_core:brick_dark_grey +hades_doors:door_stone_e +columnia:column_crosslink_hades_core_essexite +hades_core:apolline_brick +columnia:column_linkcross_hades_core_orangite +hades_stairs:stair_cream_wood +hades_furniture:table_lamp_med +columnia:column_top_hades_core_orangite +columnia:column_mid_hades_core_brick_pink +columnia:column_linktee_hades_core_tuff +hades_chests:chest_green +hades_stairs:slab_marble +hades_stairs:stair_out_colwood_dark_grey +hades_stairs:stair_tuff_baked +columnia:column_stairsubpillar_hades_core_mossycobble +hades_flowers:violet +hades_refruit:bud_orange +hades_stairs:stair_in_floor_marble_marble +columnia:column_linktee_down_hades_trees_colwood_red +columnia:column_stairsubpillar_hades_trees_birch_bark +hades_doors:door_chondrite_d +hades_glowcrystals:window_glow +hades_stairs:stair_birch_bark +columnia:column_bottom_hades_core_orangite +columnia:column_linkangle_down_hades_core_chondrite_brick +hades_doors:door_steel_white_d +hades_doors:door_stone_baked_b +hades_core:water_flowing +hades_doors:gate_jungle_wood_closed +columnia:column_linktee_columnia_rusty_block +columnia:column_linkangle_hades_trees_colwood_yellow +columnia:column_linkangle_hades_trees_pale_bark +hades_stairs:slab_tuff_baked +hades_stairs:stair_in_brick_pink +columnia:column_mid_hades_trees_colwood_magenta +hades_doors:door_steel_green_a +hades_stairs:step_brick_dark_green +hades_doors:door_steel_red_a +hades_stairs:stair_in_pale_bark +columnia:column_bottom_hades_trees_colwood_uncolored +columnia:column_linkvertical_hades_core_apolline +columnia:column_linkangle_down_hades_core_azurite +hades_stairs:slab_colwood_pink +hades_stairs:slab_jungle_bark +columnia:column_bottom_hades_core_brick_magenta +columnia:column_linkdown_hades_trees_jungle_wood +hades_trees:wood +hades_torches:torch +hades_trees:cocoa_pod +hades_fences:fence_rusty +hades_stairs:step_out_colwood_green +columnia:column_linktee_hades_core_essexite +columnia:column_linkangle_down_hades_trees_colwood_white +gluncarp:blackgold +hades_core:stone_with_emerald +hades_stairs:slab_copperblock +columnia:column_linkcross_hades_trees_wood +columnia:column_mid_hades_core_brick_dark_grey +hades_tiles:floor_stone_tuffbaked +columnia:column_linktee_hades_core_brick_dark_grey +columnia:column_linkangle_down_hades_core_brick_violet +hades_stairs:step_out_cinnabar +hades_stairs:stair_out_floor_cream_cream +hades_core:brick_black +hades_trees:leaves +hades_bushes:orange +hades_stairs:stair_out_orangite +columnia:column_linktee_down_hades_trees_colwood_grey +hades_core:emerald_block +hades_trees:jungle_sapling +columnia:column_link_hades_trees_colwood_red +hades_stairs:slab_cyan +hades_farming:soil +hades_cloth:green +hades_doors:door_steel_black_b +hades_trees:birch_tree +hades_doors:door_sandstone_volcanic_e +columnia:column_linkangle_hades_core_marble +hades_doors:door_glass_b +hades_doors:door_chondrite_e +hades_stairs:stair_floor_stonebaked_stonebaked +hades_stairs:stair_out_sandstone_volcanic_brick +columnia:column_linkangle_down_hades_core_brick_red +columnia:column_stairsubpillar_hades_core_tuff_baked +columnia:column_stairsub_hades_trees_colwood_violet +hades_doors:door_dungeon1_c +hades_core:chondrite_brick +columnia:column_linkangle_down_hades_trees_colwood_violet +hades_windows:paperwall +hades_torches:torch_wall +columnia:column_stairsubpillar_hades_core_brick_blue +hades_stairs:stair_blue +hades_stairs:slab_floor_cream_cream +columnia:column_stairsub_hades_trees_canvas_bark +hades_doors:door_steel_red_b +hades_core:tinblock +hades_stairs:stair_in_stone +columnia:column_crosslink_hades_core_brick_black +hades_tiles:floor_tuffbaked_tuff +hades_doors:door_dungeon2_a +columnia:column_linkdown_hades_core_cobble_baked +columnia:column_linkangle_down_hades_core_cobble_sandstone +hades_core:stone +columnia:column_stairsubpillar_hades_trees_colwood_dark_grey +hades_stairs:slab_chondrite_brick +hades_windows:window_cream_wood +hades_stairs:step_colwood_uncolored +columnia:column_linktee_hades_trees_colwood_black +columnia:column_crosslink_hades_core_lillite +hades_walls:cobble_baked +hades_core:copperblock +hades_stairs:stair_in_white +columnia:column_linkvertical_hades_core_brick_white +columnia:column_linktee_down_hades_core_cobble_sandstone +hades_trees:banana_leaves +columnia:column_linkangle_hades_core_sandstone_volcanic +columnia:column_linkvertical_hades_trees_pale_bark +hades_refruit:flower_orange +hades_doors:door_steel_green_b +hades_stairs:stair_out_stone +hades_stairs:stair_out_brick_orange +columnia:column_linkvertical_hades_core_stone +columnia:column_linktee_down_hades_core_stone_baked +hades_stairs:stair_out_white +columnia:column_stairsubpillar_hades_core_basalt +hades_refruit:bud_olive +hades_stairs:slab_essexite +hades_stairs:step_in_colwood_uncolored +hades_waterplants:seaweed +gluncarp:cloth_blackgold +hades_stairs:slab_cream_wood +hades_doors:door_steel_pink_a +hades_farming:seed_tomato +hades_doors:door_steel_brown_a +hades_stairs:step_in_stonebrick_baked +hades_stairs:slab_brick_violet +hades_stairs:slab_charred_bark +hades_doors:door_steel_white_e +columnia:column_stairsubpillar_hades_core_brick_dark_grey +columnia:column_link_hades_core_sandstone_volcanic +signs_lib:sign_wall_white_red +hades_stairs:step_brick_brown +columnia:column_stairsubpillar_hades_core_essexite +columnia:column_linkangle_down_hades_core_stone +columnia:column_bottom_hades_trees_wood +columnia:column_link_hades_core_olivine +columnia:column_linkangle_hades_trees_cream_wood +hades_stairs:slab_green +columnia:column_linkangle_hades_core_olivine_brick +hades_fences:fence_cream_wood +columnia:column_stairsubpillar_hades_core_obsidian +hades_stairs:slab_double_steelblock +columnia:column_stairsubpillar_hades_core_stonebrick_baked +columnia:column_bottom_hades_core_tuff_baked_brick +hades_trees:canvas_sapling +hades_stairs:slab_cobble_sandstone_volcanic +columnia:column_bottom_hades_trees_colwood_dark_green +hades_stairs:slab_pink +columnia:column_linkdown_hades_trees_lush_wood +hades_stairs:stair_stone_baked +hades_doors:door_rusty_c +columnia:column_mid_hades_trees_colwood_red +columnia:column_stairsub_hades_core_chondrite_brick +columnia:column_bottom_hades_core_cobble_sandstone_volcanic +columnia:column_stairsub_hades_trees_colwood_grey +columnia:column_crosslink_hades_core_cobble_sandstone +hades_doors:door_steel_darkgreen_b +columnia:column_linkangle_down_hades_core_obsidian +hades_stairs:step_in_olivine +hades_stairs:slab_double_copperblock +hades_core:floor_chondrite_stone +hades_doors:door_steel_black_c +hades_tiles:floor_tuffbaked_tuffbaked +columnia:column_linktee_hades_trees_colwood_violet +columnia:column_linkcrossdown_hades_core_tuff +hades_trees:colwood_green +hades_doors:door_stone_baked_c +hades_doors:door_obsidian_glass_b +hades_chests:chest_green_locked +columnia:column_linkangle_hades_core_olivine +hades_doors:door_glass_e +columnia:column_linkangle_hades_core_brick_cyan +hades_stairs:stair_in_floor_pale_pale +hades_stairs:step_in_essexite +columnia:column_linkcrossdown_hades_trees_birch_bark +hades_stairs:stair_brick_cyan +columnia:column_linkdown_hades_trees_colwood_white +hades_stairs:stair_azurite +columnia:column_linkcrossdown_hades_core_cinnabar +hades_stairs:step_brick_red +columnia:column_link_hades_trees_pale_bark +hades_tiles:floor_lush_pale +hades_trees:charred_tree +hades_stairs:stair_in_brick_brown +columnia:column_linkvertical_hades_core_tuff_baked_brick +hades_stairs:stair_in_red +hades_doors:door_steel_red_c +hades_stairs:slab_pale_bark +columnia:column_link_hades_core_brick_yellow +hades_doors:door_rusty_a +hades_stairs:stair_out_orange +columnia:column_linkvertical_hades_trees_jungle_wood +columnia:column_linkvertical_hades_trees_colwood_uncolored +columnia:column_link_hades_core_cobble_sandstone +hades_furnaces:furnace +hades_stairs:step_in_jungle_wood +hades_flowerpots:flower_pot_cultivated_jungle_leaves +columnia:column_linkangle_down_hades_core_brick_magenta +hades_doors:door_wood_e +air +columnia:column_linkcrossdown_hades_core_brick +columnia:column_linkangle_down_hades_trees_colwood_orange +columnia:column_linkangle_down_hades_trees_wood +hades_stairs:step_tinblock +hades_farming:straw +columnia:column_linkvertical_columnia_rusty_block +hades_grass:dead_grass_5 +hades_trees:colwood_dark_green +columnia:column_mid_hades_trees_pale_wood +hades_core:volcanic_sand +hades_stairs:slab_brick_dark_green +hades_doors:door_steel_pink_b +hades_doors:door_steel_green_c +hades_stairs:step_in_tuff_baked_brick +columnia:column_linktee_down_hades_trees_wood +columnia:column_stairsubpillar_hades_core_brick +hades_trees:colwood_pink +hades_trees:orange_sapling +hades_waterplants:seaweed_4 +columnia:column_bottom_hades_core_brick_orange +columnia:column_bottom_hades_core_turquosite +hades_stairs:stair_out_floor_tuff_tuff +columnia:column_mid_hades_core_sandstone_volcanic_brick +columnia:column_linkcross_hades_core_apolline +columnia:column_linkangle_hades_core_tuff_brick +hades_stairs:step_out_colwood_uncolored +columnia:column_linkcrossdown_hades_trees_colwood_brown +hades_itemshow:pedestal_cinnabar +hades_stairs:slab_brick_cyan +columnia:column_crosslink_hades_trees_jungle_wood +columnia:column_linktee_down_hades_core_tuff_brick +hades_doors:door_steel_darkgreen_e +columnia:column_linktee_hades_core_brick_red +columnia:column_linkdown_hades_core_brick_orange +hades_stairs:stair_in_colwood_dark_green +hades_stairs:step_in_floor_wood_wood +columnia:column_linkcross_hades_core_brick_brown +columnia:column_bottom_hades_core_basalt_brick +columnia:column_crosslink_hades_core_chondrite_brick +columnia:column_linkcross_hades_core_tuff +columnia:column_linkangle_hades_core_tuff_baked_brick +hades_stairs:stair_out_grey +hades_refruit:flower_banana +columnia:column_linkvertical_hades_core_brick_red +columnia:column_crosslink_hades_core_obsidian +columnia:column_link_hades_trees_colwood_green +hades_stairs:stair_colwood_red +hades_tiles:floor_sandstonevolcanic_sandstone +hades_stairs:stair_in_violet +hades_stairs:stair_in_sandstone_volcanic +columnia:machine +columnia:column_linkcrossdown_hades_core_tuff_brick +hades_core:cactus_brick +columnia:column_linkdown_hades_core_stonebrick_baked +hades_core:papyrus +columnia:column_linkangle_hades_core_chondrite +columnia:column_top_hades_core_brick_yellow +hades_chests:chest_red_locked +hades_stairs:slab_yellow +hades_doors:door_sandstone_d +columnia:column_linkcrossdown_hades_core_brick_brown +hades_doors:door_essexite_d +gluncarp:brown +hades_windows:window_jungle_wood +hades_furniture:table_lamp_hi +columnia:column_stairsub_hades_core_tuff_brick +columnia:column_linkangle_hades_core_brick_brown +columnia:column_linktee_hades_core_tuff_baked_brick +hades_trees:cultivated_jungle_leaves +columnia:column_stairsubpillar_hades_core_cobble_sandstone +columnia:column_linkvertical_hades_core_essexite_brick +hades_doors:door_wood_jungle_a +hades_itemshow:pedestal_azurite +hades_core:ladder_bronze +columnia:column_stairsubpillar_hades_core_brick_pink +hades_doors:door_obsidian_glass_a +columnia:column_linkvertical_hades_trees_colwood_grey +hades_bushes:blue +hades_stairs:stair_in_brick_dark_green +columnia:column_linktee_down_hades_core_tuff +columnia:column_bottom_hades_trees_colwood_pink +columnia:column_link_hades_trees_colwood_dark_grey +columnia:column_stairsub_hades_trees_lush_wood +columnia:column_top_hades_core_stone +columnia:column_crosslink_hades_trees_colwood_green +hades_core:cactus +hades_windows:window_wood_green +hades_core:basalt_block +columnia:column_linkcrossdown_hades_core_essexite +columnia:column_linkvertical_hades_core_sandstone +hades_trees:burned_branches +columnia:column_bottom_hades_core_sandstone_volcanic_brick +hades_core:sandstone_volcanic_brick +hades_stairs:slab_colwood_dark_green +columnia:column_link_hades_core_chondrite_brick +columnia:column_top_hades_core_brick_orange +columnia:column_linkvertical_hades_trees_colwood_pink +hades_stairs:stair_in_straw +hades_doors:door_steel_brown_c +hades_stairs:slab_colwood_violet +hades_doors:door_steel_magenta_d +hades_doors:door_marble_d +columnia:column_link_hades_core_brick_violet +hades_stairs:stair_in_colwood_magenta +hades_stairs:slab_brick_black +hades_trees:charred_bark +columnia:column_linkcross_hades_core_brick_dark_green +columnia:column_crosslink_hades_core_brick_grey +hades_fences:fence_wood_black +hades_stairs:step_out_floor_pale_pale +columnia:column_linkcrossdown_hades_core_brick_pink +columnia:column_linkvertical_hades_core_olivine +columnia:column_crosslink_hades_core_stone +columnia:column_mid_hades_core_tuff +columnia:column_stairsubpillar_hades_core_chondrite +columnia:column_linkvertical_hades_core_basalt +columnia:column_mid_hades_trees_colwood_uncolored +hades_glowcrystals:glowcrystal_ore +columnia:column_linktee_down_hades_core_mossycobble +columnia:column_stairsub_hades_core_brick_violet +hades_doors:door_wood_lush_a +columnia:column_linktee_hades_core_essexite_brick +columnia:column_linkcrossdown_hades_core_brick_blue +hades_stairs:step_out_colwood_blue +hades_core:lava_source +hades_doors:door_steel_pink_c +columnia:column_linktee_down_hades_core_basalt_brick +columnia:column_stairsubpillar_hades_core_brick_black +hades_doors:door_wood_jungle_b +hades_stairs:slab_orange +columnia:column_mid_hades_trees_colwood_white +hades_stairs:stair_out_chondrite +columnia:column_linkangle_down_hades_core_brick_orange +columnia:column_linkangle_down_hades_core_basalt +hades_doors:door_steel_darkgreen_d +columnia:column_top_hades_trees_birch_bark +hades_flowerpots:flower_pot_canvas_leaves +hades_tiles:floor_essexitegold_essexitegold +columnia:column_linkcross_hades_core_brick_magenta +columnia:column_linktee_down_hades_core_essexite +hades_stairs:step_out_essexite +columnia:column_stairsub_hades_trees_colwood_orange +columnia:column_crosslink_hades_core_stone_baked +hades_stairs:stair_out_floor_stonebaked_stonebaked +hades_fences:fence_wood_pink +columnia:column_stairsub_hades_core_essexite +hades_stairs:step_in_floor_marble_marble +hades_stairs:step_brick_violet +columnia:column_crosslink_hades_core_mossycobble +hades_stairs:step_steelblock +hades_flowers:orange +columnia:column_linkdown_hades_core_marble +hades_tiles:floor_tuffbaked_stone +columnia:column_linkdown_hades_core_tuff +hades_stairs:stair_out_marble +columnia:column_mid_hades_core_basalt +hades_doors:gate_pale_wood_closed +columnia:column_linktee_hades_core_brick_white +hades_waterplants:waterlily_s4 +columnia:column_linkvertical_hades_core_orangite +columnia:column_crosslink_hades_core_brick_dark_grey +columnia:column_linktee_hades_core_brick_pink +columnia:column_crosslink_hades_trees_colwood_white +columnia:column_crosslink_hades_core_cobble_sandstone_volcanic +columnia:column_bottom_hades_core_tuff_baked +hades_flowerpots:flower_pot_yellow +hades_trees:sapling +hades_windows:window_wood_blue +columnia:column_linkdown_hades_core_brick_blue +columnia:column_linkdown_hades_trees_colwood_dark_green +hades_core:brick_red +columnia:column_top_hades_core_tuff_brick +columnia:column_stairsubpillar_hades_trees_colwood_cyan +columnia:column_top_hades_trees_bark +hades_doors:door_marble_c +hades_chests:chest_blue +hades_bushes:red +hades_tiles:floor_tuff_chondrite +columnia:column_linkdown_hades_trees_bark +columnia:column_linkangle_hades_trees_colwood_green +columnia:column_stairsubpillar_columnia_rusty_block +hades_doors:door_sandstone_volcanic_d +columnia:column_linkangle_down_hades_core_tuff_brick +hades_doors:gate_cream_wood_closed +columnia:column_linkdown_hades_core_tuff_brick +columnia:column_linktee_down_hades_core_chondrite_brick +hades_refruit:bud_coconut +hades_stairs:step_glowcrystal_block +hades_stairs:slab_white +hades_doors:hidden +columnia:column_linkangle_hades_trees_bark +columnia:column_linkdown_hades_trees_canvas_bark +columnia:column_linkcross_hades_core_brick_orange +columnia:column_linktee_down_hades_core_brick_violet +hades_stairs:stair_out_brick_brown +columnia:column_linkvertical_hades_core_basalt_brick +hades_stairs:stair_out_stone_baked +hades_stairs:stair_in_tuff +columnia:column_top_hades_core_basalt_brick +columnia:column_link_hades_core_brick_black +hades_waterplants:waterlily_225 +columnia:column_linkangle_hades_trees_birch_bark +columnia:column_linkdown_hades_core_brick_dark_grey +columnia:column_link_hades_trees_colwood_black +columnia:column_link_hades_core_brick_white +columnia:column_linktee_hades_core_cinnabar +hades_core:brick_yellow +hades_stairs:stair_out_brick_dark_grey +columnia:column_linktee_down_hades_core_brick_grey +columnia:column_stairsub_hades_core_cinnabar +columnia:column_crosslink_hades_trees_colwood_grey +columnia:column_crosslink_hades_core_olivine_brick +gluncarp:blue +hades_core:brick_magenta +hades_stairs:stair_in_floor_stonebaked_stonebaked +hades_doors:door_wood_lush_b +hades_stairs:step_in_basalt_brick +columnia:column_stairsub_hades_core_obsidianbrick +hades_stairs:stair_floor_essexitegold_essexitegold +columnia:column_stairsubpillar_hades_core_brick_orange +hades_stairs:step_in_brick_dark_grey +columnia:column_linkdown_hades_core_sandstone +hades_stairs:step_out_floor_essexitegold_essexitegold +columnia:column_crosslink_hades_trees_colwood_red +columnia:column_stairsub_hades_core_brick_grey +columnia:column_linkangle_down_hades_core_tuff_baked_brick +hades_furniture:binding_rusty_bars +columnia:column_linktee_hades_trees_canvas_bark +columnia:column_link_hades_trees_colwood_pink +hades_stairs:step_out_basalt +columnia:column_mid_hades_trees_colwood_green +hades_vines:cave +columnia:column_linkangle_down_columnia_rusty_block +columnia:column_link_hades_core_brick_brown +hades_stairs:step_apolline +hades_doors:trapdoor +columnia:column_bottom_hades_core_sandstone_volcanic +columnia:column_link_hades_trees_pale_wood +columnia:column_linkangle_down_hades_trees_pale_bark +hades_tiles:floor_stone_sandstonevolcanic +hades_stairs:stair_colwood_violet +hades_doors:trapdoor_pale +columnia:column_mid_hades_core_tuff_baked +hades_fences:fence_wood_yellow +hades_stairs:step_in_colwood_white +hades_stairs:slab_floor_pale_pale +columnia:column_stairsubpillar_hades_core_tuff_brick +hades_trees:colwood_grey +columnia:column_crosslink_hades_core_orangite +hades_stairs:stair_out_charred_bark +hades_core:obsidian_glass +columnia:column_linkangle_down_hades_core_cobble_sandstone_volcanic +hades_doors:door_wood_jungle_c +hades_itemshow:pedestal_orangite +hades_stairs:stair_brick_white +hades_core:olivine +columnia:column_linkvertical_hades_core_turquosite +hades_stairs:slab_bark +hades_stairs:stair_in_basalt_brick +columnia:column_linkangle_down_hades_core_brick_brown +hades_farming:spice_2 +columnia:column_bottom_hades_trees_colwood_orange +hades_stairs:stair_essexite +columnia:column_bottom_hades_trees_pale_bark +hades_core:brick_orange +hades_torches:torch_low_ceiling +hades_core:water_source +hades_doors:door_wood_pale_b +columnia:column_crosslink_hades_core_stonebrick_baked +columnia:column_linktee_down_hades_core_tuff_baked_brick +hades_trees:cream_wood +columnia:column_stairsub_hades_core_tuff_baked +hades_stairs:step_in_cobble_sandstone_volcanic +columnia:column_link_hades_core_chondrite +hades_refruit:flower_olive +columnia:column_linkangle_down_hades_core_basalt_brick +columnia:column_linkcrossdown_hades_core_chondrite +hades_wardrobes:wardrobe +hades_stairs:stair_out_black +hades_stairs:step_in_colwood_dark_grey +hades_tiles:floor_tuff_tuff +columnia:column_linkcross_hades_trees_jungle_wood +hades_stairs:step_in_jungle_bark +hades_windows:window_obsidian +columnia:column_linktee_hades_core_stone +hades_doors:door_steel_brown_b +hades_doors:door_rusty_d +hades_core:goldblock +hades_stairs:stair_in_brown +hades_tiles:floor_sandstone_stonebaked +hades_chests:chest +columnia:column_crosslink_hades_core_brick_green +hades_fences:fence_wood_magenta +columnia:column_mid_hades_core_cobble_sandstone_volcanic +columnia:column_linkcrossdown_hades_trees_colwood_pink +hades_furnaces:prism_furnace +hades_stairs:stair_brick_black +hades_doors:door_essexite_a +hades_stairs:step_colwood_brown +columnia:column_linktee_hades_core_cobble_sandstone +hades_doors:door_dungeon2_e +columnia:column_stairsubpillar_hades_core_cobble_baked +hades_stairs:step_out_brick_pink +hades_doors:door_steel_violet_d +hades_stairs:step_out_floor_essexite_essexite +hades_stairs:stair_in_colwood_red +columnia:column_linktee_down_hades_trees_colwood_yellow +columnia:column_stairsub_hades_core_brick_cyan +hades_flowerpots:flower_pot_coconut_sapling +columnia:column_linkangle_hades_core_brick_green +hades_stairs:slab_red +columnia:column_stairsub_hades_core_brick +columnia:column_linkvertical_hades_core_tuff_baked +hades_stairs:stair_grey +columnia:column_bottom_hades_core_sandstone +columnia:column_linktee_down_hades_trees_colwood_brown +columnia:column_stairsubpillar_hades_core_marble +columnia:column_bottom_hades_trees_colwood_grey +hades_tiles:floor_tuff_stone +hades_doors:door_sandstone_volcanic_a +columnia:column_crosslink_hades_core_tuff_baked +hades_stairs:step_in_colwood_brown +hades_core:cobble_sandstone +hades_doors:door_steel_magenta_b +hades_tiles:floor_stonebaked_sandstone +columnia:column_link_hades_trees_colwood_violet +hades_doors:door_rusty_b +columnia:column_stairsubpillar_hades_trees_colwood_violet +columnia:column_linkcrossdown_hades_core_brick_white +hades_doors:door_wood_b +hades_fences:fence_wood_violet +hades_windows:window_wood_cyan +columnia:column_linkcross_hades_core_brick +columnia:column_bottom_columnia_rusty_block +hades_farming:tomato_2 +hades_farming:wheat_3 +columnia:column_bottom_hades_trees_bark +columnia:column_linkangle_hades_trees_colwood_grey +columnia:column_linktee_down_hades_core_stone +columnia:column_crosslink_hades_core_sandstone_volcanic_brick +columnia:column_linkvertical_hades_core_brick_pink +columnia:column_linkcrossdown_hades_core_cobble_sandstone_volcanic +hades_stairs:stair_in_yellow +hades_trees:pale_leaves +hades_doors:door_steel_darkgrey_e +columnia:column_link_hades_core_obsidian +hades_itemshow:pedestal_essexite +columnia:column_stairsub_hades_core_sandstone_volcanic +hades_stairs:stair_in_pink +columnia:column_linkdown_hades_trees_colwood_pink +columnia:column_linkangle_down_hades_core_brick_yellow +columnia:column_stairsubpillar_hades_core_brick_white +hades_stairs:step_in_colwood_blue +columnia:column_linkangle_down_hades_core_brick_cyan +columnia:column_crosslink_hades_core_apolline +columnia:column_link_hades_trees_wood +columnia:column_linkdown_hades_core_chondrite_brick +hades_doors:door_steel_orange_d +columnia:column_linkvertical_hades_trees_colwood_violet +columnia:column_linkangle_down_hades_trees_colwood_blue +hades_stairs:slab_colwood_black +columnia:column_top_hades_trees_colwood_blue +columnia:column_linkdown_hades_trees_colwood_green +hades_stairs:stair_out_cobble_sandstone_volcanic +columnia:column_top_hades_trees_colwood_orange +hades_core:cobble_baked +hades_doors:door_steel_cyan_b +hades_stairs:slab_colwood_brown +columnia:column_linkcross_hades_core_azurite +hades_stairs:step_in_floor_sandstone_sandstone +hades_core:cactus_block +hades_stairs:stair_colwood_green +columnia:column_linktee_hades_trees_colwood_uncolored +hades_stairs:step_out_brick_dark_green +hades_core:stone_with_sapphire +hades_core:marble_brick +hades_doors:door_wood_pale_c +columnia:column_stairsubpillar_hades_core_brick_violet +hades_core:gravel +columnia:column_linkcrossdown_hades_core_tuff_baked_brick +hades_doors:door_steel_cyan_c +hades_stairs:step_out_brick_yellow +hades_stairs:step_in_obsidianbrick +columnia:column_linkcrossdown_hades_trees_cream_wood +hades_stairs:step_in_stone_baked +columnia:column_linkangle_down_hades_core_tuff +hades_doors:gate_wood_open +hades_stairs:step_out_magenta +columnia:column_stairsubpillar_hades_trees_lush_wood +hades_farming:spice_1 +hades_stairs:slab_dark_grey +hades_tiles:floor_chondrite_chondrite +columnia:column_linktee_down_hades_core_brick_dark_grey +hades_flowerpots:flower_pot_sapling +columnia:column_linkvertical_hades_core_brick_magenta +hades_stairs:stair_out_brick_grey +columnia:column_linkdown_hades_trees_colwood_red +columnia:column_crosslink_hades_core_brick_orange +columnia:column_linkcrossdown_hades_core_basalt +columnia:column_linkvertical_hades_core_brick +columnia:column_crosslink_hades_trees_lush_wood +hades_stairs:slab_glowcrystal_block +columnia:column_linkangle_hades_core_tuff +columnia:column_linkangle_hades_core_brick_white +columnia:column_stairsubpillar_hades_core_tuff_baked_brick +columnia:column_linktee_down_hades_trees_colwood_blue +hades_doors:door_steel_yellow_d +columnia:column_linktee_down_hades_core_brick_red +columnia:column_stairsub_hades_core_basalt +columnia:column_linkdown_hades_trees_birch_bark +columnia:column_link_hades_core_brick_dark_grey +columnia:column_linkcross_hades_trees_colwood_white +columnia:column_linkvertical_hades_core_tuff_brick +columnia:column_linkdown_hades_core_brick_pink +hades_doors:door_marble_a +columnia:column_crosslink_hades_trees_colwood_black +hades_walls:cobble +columnia:column_linkdown_hades_core_cinnabar +hades_stairs:slab_brick_green +columnia:column_top_hades_core_cinnabar +hades_trees:colwood_magenta +hades_doors:door_steel_violet_e +hades_core:stone_block_baked +columnia:column_stairsubpillar_hades_core_cobble +columnia:column_linkangle_down_hades_core_orangite +columnia:column_stairsubpillar_hades_core_sandstone +columnia:column_bottom_hades_core_brick_grey +hades_doors:door_dungeon2_d +signs_lib:sign_wall_locked +hades_fences:fence_wood +hades_farming:wheat_2 +hades_doors:door_chondrite_b +hades_furniture:L_binding_bars +columnia:column_linkvertical_hades_trees_colwood_dark_green +hades_doors:door_wood_a +hades_stairs:step_in_pale_bark +hades_stairs:step_out_orangite +hades_doors:door_basalt_c +hades_stairs:stair_in_tuff_baked_brick +columnia:column_linkvertical_hades_core_cobble_baked +columnia:column_top_hades_core_brick_violet +hades_stairs:stair_in_colwood_black +hades_stairs:stair_out_straw +columnia:column_link_hades_core_stonebrick_baked +hades_stairs:slab_floorblock_chondrite_stone +hades_trees:coconut +columnia:column_top_hades_core_marble +columnia:column_linkangle_hades_trees_jungle_wood +hades_stairs:step_out_colwood_magenta +hades_core:apolline +hades_flowerpots:flower_pot_blue +hades_stairs:step_colwood_grey +hades_farming:strawberry_3 +columnia:column_link_hades_trees_colwood_dark_green +gluncarp:green +columnia:column_top_hades_core_brick_pink +hades_stairs:step_out_colwood_black +columnia:column_crosslink_hades_trees_colwood_yellow +hades_tiles:floor_cream_pale +columnia:column_linkangle_hades_core_brick_magenta +columnia:column_linkvertical_hades_trees_colwood_white +hades_doors:door_steel_white_b +columnia:column_bottom_hades_core_chondrite_brick +columnia:column_bottom_hades_trees_canvas_bark +columnia:column_linktee_down_hades_trees_colwood_black +hades_stairs:stair_in_sandstonebrick +hades_doors:door_steel_darkgrey_d +hades_waterplants:waterlily_675 +columnia:column_linkcross_hades_trees_colwood_green +columnia:column_linkangle_hades_core_basalt +hades_stairs:stair_in_colwood_blue +hades_fences:fence_jungle_wood +columnia:column_linktee_down_hades_core_sandstone_volcanic_brick +hades_doors:door_wood_cream_e +columnia:column_crosslink_hades_core_brick_brown +columnia:column_link_hades_core_tuff +hades_core:brick_dark_green +columnia:column_bottom_hades_core_olivine +hades_stairs:slab_colwood_grey +hades_farming:tomato_1 +hades_stairs:slab_birch_bark +columnia:column_linkdown_hades_core_cobble_sandstone +hades_doors:door_steel_c +columnia:column_top_hades_core_essexite +columnia:column_linkdown_hades_core_orangite +hades_core:mese +gluncarp:yellow +hades_flowers:white +hades_core:ladder_jungle_wood +columnia:column_bottom_hades_core_stone +columnia:column_bottom_hades_core_lillite +hades_stairs:step_floor_essexitegold_essexitegold +columnia:column_linkcrossdown_hades_trees_colwood_dark_grey +columnia:column_linkcross_hades_core_marble +hades_trees:colwood_white +hades_stairs:step_in_colwood_dark_green +columnia:column_stairsub_hades_core_brick_red +hades_trees:coconut_sapling +hades_core:azurite_block +columnia:column_stairsub_hades_trees_birch_bark +columnia:column_linkvertical_hades_core_obsidian +hades_stairs:slab_stone_baked +columnia:column_linkdown_hades_core_cobble_sandstone_volcanic +columnia:column_linkcrossdown_hades_core_stone_baked +hades_stairs:step_out_lush_wood +hades_itemshow:pedestal_lillite +hades_stairs:stair_pale_bark +hades_itemshow:pedestal_turquosite +hades_itemshow:pedestal_olivine +hades_itemshow:pedestal_apolline +hades_itemshow:pedestal_basalt +hades_stairs:step_brick_magenta +gluncarp:red +hades_stairs:step_in_cinnabar_brick +columnia:column_linkdown_hades_core_brick_green +hades_itemshow:pedestal_obsidian +hades_itemshow:pedestal_sandstone_volcanic +hades_stairs:step_out_yellow +hades_itemshow:pedestal_sandstone +hades_itemshow:pedestal_marble +columnia:column_stairsubpillar_hades_core_brick_green +hades_itemshow:pedestal_stone_baked +hades_tiles:floor_tuff_tuffbaked +hades_stairs:stair_in_brick_black +columnia:column_linkcrossdown_hades_core_brick_red +hades_itemshow:pedestal_stone +hades_core:stone_with_tin +columnia:column_link_hades_core_brick +hades_walls:mossycobble +hades_stairs:step_out_sandstone +hades_stairs:step_floor_cream_cream +hades_stairs:stair_pink +columnia:column_linktee_hades_trees_colwood_yellow +columnia:column_linkcrossdown_hades_core_brick_dark_grey +mobs_hades:cobweb +columnia:column_linkvertical_hades_core_brick_cyan +hades_stairs:stair_out_azurite +columnia:column_linktee_down_hades_core_sandstone +mobs:spawner +hades_trees:orange_tree +hades_meshhand:hand +gluncarp:machine +columnia:column_linktee_hades_core_brick_dark_green +hades_bushes:yellow +columnia:column_linkcross_hades_core_essexite_brick +hades_stairs:step_floor_jungle_jungle +columnia:column_top_hades_trees_cream_wood +hades_food:tomatosalad +columnia:column_linkangle_hades_core_brick_grey +hades_stairs:stair_lillite +columnia:column_link_hades_trees_canvas_bark +hades_doors:door_steel_yellow_e +hades_stairs:slab_turquosite +hades_food:bottle_olive_oil +hades_stairs:step_in_pink +columnia:column_linkcrossdown_hades_core_brick_violet +hades_stairs:step_out_colwood_orange +hades_doors:door_dungeon2_c +hades_core:chondrite +hades_food:plate +hades_stairs:slab_double_floorblock_chondrite_stone +hades_stairs:stair_in_cactus_brick +hades_stairs:stair_colwood_orange +hades_stairs:slab_floorblock_bstone_sandstone +hades_stairs:slab_double_floorblock_marble_essexite2 +hades_stairs:slab_floorblock_marble_essexite2 +columnia:column_linkdown_hades_trees_colwood_blue +columnia:column_linkcross_hades_core_obsidianbrick +hades_stairs:slab_floorblock_essexite_gold_block +hades_stairs:step_in_lillite_brick +hades_stairs:step_out_lillite_brick +hades_stairs:step_lillite_brick +hades_stairs:slab_lillite_brick +columnia:column_stairsub_hades_trees_colwood_pink +hades_stairs:stair_in_lillite_brick +hades_stairs:stair_out_lillite_brick +columnia:column_linkvertical_hades_core_brick_dark_grey +columnia:column_linktee_down_hades_trees_birch_bark +hades_stairs:stair_lillite_brick +hades_stairs:step_in_turquosite_brick +hades_stairs:step_out_turquosite_brick +hades_tiles:floor_sandstone_sandstonevolcanic +hades_stairs:step_turquosite_brick +hades_doors:door_sandstone_volcanic_c +columnia:column_linktee_down_hades_core_brick_cyan +hades_stairs:slab_turquosite_brick +hades_stairs:stair_in_turquosite_brick +hades_stairs:stair_out_turquosite_brick +hades_stairs:stair_turquosite_brick +columnia:column_linkcross_hades_core_brick_black +hades_stairs:step_in_azurite_brick +hades_stairs:slab_floor_lush_lush +hades_stairs:step_out_azurite_brick +columnia:column_bottom_hades_core_cobble +hades_stairs:step_azurite_brick +columnia:column_stairsubpillar_hades_core_sandstone_volcanic +hades_stairs:stair_out_brick_dark_green +columnia:column_linkangle_down_hades_trees_colwood_pink +hades_stairs:slab_azurite_brick +hades_stairs:stair_in_azurite_brick +hades_stairs:stair_out_azurite_brick +columnia:column_mid_hades_core_cinnabar +hades_stairs:stair_azurite_brick +columnia:column_top_hades_core_brick_red +hades_furniture:table_white +hades_stairs:step_in_olivine_brick +columnia:column_linkangle_down_hades_core_mossycobble +columnia:column_link_hades_trees_colwood_white +columnia:column_bottom_hades_core_chondrite +columnia:column_link_hades_core_brick_magenta +columnia:column_linkvertical_hades_trees_colwood_red +hades_stairs:step_out_olivine_brick +hades_stairs:step_olivine_brick +hades_stairs:slab_olivine_brick +hades_stairs:stair_in_olivine_brick +columnia:column_linkcross_hades_trees_colwood_grey +hades_tiles:floor_cream_cream +hades_windows:window_wood_darkgrey +hades_stairs:stair_out_olivine_brick +hades_stairs:stair_olivine_brick +columnia:column_linktee_down_hades_core_sandstone_volcanic +hades_itemshow:pedestal_chondrite +hades_core:cobble_block +hades_doors:door_steel_white_c +hades_stairs:step_out_cinnabar_brick +hades_tiles:floor_sandstone_tuffbaked +hades_stairs:step_cinnabar_brick +hades_stairs:slab_cinnabar_brick +hades_stairs:stair_in_olivine +hades_stairs:stair_in_cinnabar_brick +hades_stairs:stair_out_cinnabar_brick +hades_core:steelblock +hades_stairs:stair_cinnabar_brick +hades_stairs:step_in_orangite_brick +hades_stairs:step_out_orangite_brick +hades_stairs:stair_in_brick_dark_grey +columnia:column_linkcrossdown_hades_trees_colwood_red +hades_refruit:bud_apple +hades_stairs:step_orangite_brick +hades_stairs:slab_orangite_brick +hades_stairs:stair_in_orangite_brick +hades_stairs:stair_out_orangite_brick +hades_stairs:stair_orangite_brick +hades_stairs:step_in_apolline_brick +hades_stairs:step_out_apolline_brick +columnia:column_linkcrossdown_hades_trees_colwood_black +hades_stairs:step_apolline_brick +hades_stairs:slab_apolline_brick +hades_stairs:stair_in_apolline_brick +columnia:column_linkangle_down_hades_core_lillite +hades_grass:dead_grass_4 +hades_stairs:stair_out_apolline_brick +hades_trees:pale_sapling +hades_stairs:stair_apolline_brick +columnia:column_bottom_hades_trees_colwood_cyan +hades_stairs:step_out_apolline +columnia:column_link_hades_core_olivine_brick +columnia:column_mid_hades_trees_bark +hades_stairs:step_lillite +columnia:column_linkdown_hades_core_mossycobble +hades_farming:cotton_2 +hades_stairs:slab_basalt_brick +hades_stairs:stair_in_lillite +signs_lib:sign_wall_yellow +columnia:column_linktee_hades_core_brick_orange +columnia:column_stairsub_hades_trees_colwood_black +columnia:column_linktee_hades_core_olivine +hades_stairs:step_in_turquosite +hades_stairs:slab_sandstonebrick +hades_stairs:step_out_turquosite +columnia:column_link_hades_core_brick_green +columnia:column_top_hades_core_obsidian +columnia:column_linktee_down_hades_trees_colwood_orange +hades_stairs:step_turquosite +hades_chests:chest_dark_grey_locked +hades_stairs:step_out_colwood_yellow +hades_stairs:stair_in_turquosite +hades_stairs:stair_out_turquosite +columnia:column_linkvertical_hades_trees_birch_bark +hades_stairs:stair_turquosite +columnia:column_linkvertical_hades_core_marble +hades_stairs:step_in_azurite +columnia:column_bottom_hades_core_tuff +hades_stairs:step_azurite +hades_stairs:slab_tuff +hades_stairs:stair_in_azurite +hades_core:marble_block +hades_stairs:step_out_olivine +hades_vines:root +hades_stairs:step_olivine +hades_tiles:floor_tuff_stonebaked +columnia:column_linkdown_hades_trees_colwood_cyan +hades_stairs:step_in_lush_wood +hades_stairs:step_in_cinnabar +hades_stairs:step_cinnabar +hades_core:gravel_volcanic_block +hades_stairs:step_brick_orange +hades_stairs:stair_in_cinnabar +columnia:column_stairsub_hades_core_cactus_brick +hades_stairs:stair_out_wood +hades_stairs:stair_cinnabar +hades_stairs:step_goldblock +hades_stairs:step_orangite +columnia:column_stairsub_hades_core_stone_baked +hades_stairs:slab_stonebrick_baked +hades_stairs:slab_orangite +hades_stairs:stair_out_essexite +hades_core:brick_brown +hades_stairs:slab_jungle_wood +columnia:column_linkdown_hades_core_brick_yellow +columnia:column_stairsubpillar_hades_trees_colwood_yellow +hades_stairs:stair_in_orangite +hades_stairs:stair_orangite +hades_stairs:step_in_apolline +hades_doors:gate_pale_wood_open +hades_stairs:step_out_lillite +columnia:column_top_hades_trees_colwood_grey +columnia:column_linkvertical_hades_core_brick_blue +hades_stairs:step_out_tuff_baked_brick +hades_core:stone_with_diamond +hades_stairs:step_chondrite +hades_stairs:stair_tuff_baked_brick +hades_core:brick_grey +hades_flowerpots:flower_pot_red +hades_chests:chest_magenta +hades_stairs:stair_apolline +hades_stairs:step_out_floor_marble_marble +hades_stairs:step_floor_marble_marble +columnia:column_linkcross_hades_core_cobble +hades_windows:window_wood +columnia:column_crosslink_hades_trees_canvas_bark +columnia:column_crosslink_hades_trees_colwood_cyan +hades_stairs:slab_floor_marble_marble +hades_stairs:stair_out_floor_marble_marble +columnia:column_linkvertical_hades_trees_colwood_dark_grey +hades_chests:chest_violet_locked +hades_core:bronzeblock +columnia:column_stairsub_hades_core_mossycobble +hades_stairs:slab_floor_essexitegold_essexitegold +hades_stairs:step_dark_grey +hades_stairs:stair_sandstone_volcanic +columnia:column_linkcross_hades_core_brick_dark_grey +hades_stairs:step_in_colwood_orange +columnia:column_linktee_hades_trees_colwood_magenta +columnia:column_linkangle_down_hades_trees_lush_wood +hades_stairs:stair_out_floor_essexitegold_essexitegold +hades_stairs:step_in_floor_essexite_essexite +columnia:column_stairsub_hades_core_apolline +columnia:column_linkdown_hades_trees_cream_wood +hades_stairs:step_floor_essexite_essexite +hades_stairs:stair_in_floor_essexite_essexite +hades_stairs:stair_out_floor_essexite_essexite +hades_trees:colwood_cyan +columnia:column_linktee_hades_core_cobble_sandstone_volcanic +hades_core:dirt_with_grass_l1 +hades_stairs:step_in_floor_chondrite_chondrite +columnia:column_stairsubpillar_hades_trees_colwood_orange +hades_stairs:step_out_floor_chondrite_chondrite +hades_core:ruby_block +hades_stairs:step_in_stonebrick +hades_stairs:step_floor_chondrite_chondrite +hades_doors:door_rusty_e +columnia:column_stairsub_hades_core_brick_pink +hades_cloth:pink +columnia:column_top_hades_core_brick_dark_grey +hades_stairs:stair_glowcrystal_block +hades_stairs:slab_charred_wood +hades_stairs:stair_out_floor_chondrite_chondrite +hades_doors:door_obsidian_glass_d +hades_stairs:stair_floor_chondrite_chondrite +hades_stairs:step_in_floor_sandstonevolcanic_sandstonevolcanic +columnia:column_crosslink_hades_core_sandstonebrick +hades_stairs:step_floor_sandstonevolcanic_sandstonevolcanic +hades_stairs:stair_in_brick_orange +columnia:column_stairsubpillar_hades_trees_colwood_uncolored +hades_stairs:slab_tuff_brick +hades_stairs:stair_in_floor_sandstonevolcanic_sandstonevolcanic +hades_stairs:stair_in_jungle_wood +hades_stairs:step_canvas_bark +hades_stairs:step_cobble_sandstone_volcanic +hades_doors:trapdoor_lush_open +hades_stairs:step_out_floor_sandstone_sandstone +columnia:column_linkangle_hades_core_essexite_brick +columnia:column_bottom_hades_core_brick_violet +hades_stairs:step_floor_sandstone_sandstone +hades_stairs:slab_floor_sandstone_sandstone +hades_stairs:stair_in_floor_sandstone_sandstone +hades_stairs:stair_out_floor_sandstone_sandstone +hades_stairs:stair_floor_sandstone_sandstone +hades_stairs:step_in_floor_tuffbaked_tuffbaked +hades_stairs:step_out_floor_tuffbaked_tuffbaked +hades_stairs:step_floor_tuffbaked_tuffbaked +hades_stairs:step_in_tuff_baked +columnia:column_linkangle_down_hades_trees_colwood_brown +hades_stairs:stair_in_floor_tuffbaked_tuffbaked +hades_chests:chest_pink_locked +hades_stairs:stair_out_floor_tuffbaked_tuffbaked +columnia:column_top_hades_core_brick_cyan +hades_stairs:stair_floor_tuffbaked_tuffbaked +hades_stairs:step_in_floor_tuff_tuff +columnia:column_crosslink_hades_trees_jungle_bark +hades_stairs:step_floor_tuff_tuff +hades_stairs:slab_floor_tuff_tuff +hades_stairs:stair_in_floor_tuff_tuff +hades_trees:orange_leaves +hades_trees:jungle_tree +columnia:column_linkdown_hades_core_tuff_baked +hades_stairs:step_in_floor_stonebaked_stonebaked +hades_stairs:step_out_floor_stonebaked_stonebaked +hades_stairs:step_floor_stonebaked_stonebaked +hades_chests:chest_dark_green +columnia:column_linkcrossdown_hades_trees_bark +columnia:column_stairsub_hades_trees_colwood_dark_grey +hades_furniture:armchair_white +hades_stairs:step_in_tuff +columnia:column_stairsubpillar_hades_core_apolline +hades_stairs:step_in_floor_stone_stone +hades_stairs:stair_out_stonebrick_baked +hades_stairs:step_floor_stone_stone +columnia:column_linktee_down_hades_trees_colwood_white +columnia:column_linkdown_hades_core_brick_red +columnia:column_linkcrossdown_hades_core_olivine +columnia:column_crosslink_hades_trees_wood +columnia:column_crosslink_hades_core_obsidianbrick +hades_stairs:step_cobble_baked +hades_stairs:stair_in_floor_stone_stone +columnia:column_linktee_hades_core_mossycobble +hades_stairs:stair_floor_stone_stone +hades_stairs:step_in_floor_jungle_jungle +hades_stairs:step_out_floor_jungle_jungle +hades_flowerpots:flower_pot_pale_sapling +columnia:column_top_hades_trees_colwood_dark_grey +columnia:column_linktee_hades_core_sandstonebrick +columnia:column_linkvertical_hades_trees_colwood_green +hades_stairs:stair_floor_jungle_jungle +columnia:column_linkangle_hades_trees_colwood_red +hades_stairs:step_in_floor_cream_cream +hades_stairs:step_out_floor_cream_cream +hades_itemshow:frame +hades_stairs:stair_in_floor_cream_cream +hades_core:lillite_brick +columnia:column_linktee_down_hades_core_brick_green +hades_stairs:stair_floor_cream_cream +hades_stairs:step_out_jungle_wood +hades_stairs:stair_tinblock +columnia:column_stairsub_hades_trees_colwood_yellow +columnia:column_linkcross_hades_core_tuff_brick +columnia:column_bottom_hades_trees_colwood_brown +hades_stairs:step_in_floor_pale_pale +columnia:column_linkcross_hades_trees_canvas_bark +hades_flowers:blue +hades_stairs:step_floor_pale_pale +hades_stairs:stair_out_floor_pale_pale +hades_stairs:stair_floor_pale_pale +hades_stairs:stair_out_red +hades_stairs:stair_out_charred_wood +columnia:column_linkangle_down_hades_trees_colwood_magenta +hades_stairs:stair_out_bronzeblock +columnia:column_linkvertical_hades_core_cobble +hades_stairs:step_out_floor_lush_lush +hades_stairs:slab_grey +columnia:column_linkangle_down_hades_core_sandstonebrick +hades_stairs:stair_colwood_uncolored +hades_core:basalt_brick +hades_stairs:stair_floor_lush_lush +hades_stairs:step_out_floor_wood_wood +hades_stairs:step_floor_wood_wood +columnia:column_stairsub_hades_core_brick_magenta +columnia:column_top_hades_core_brick_dark_green +columnia:column_link_hades_core_sandstone +hades_stairs:stair_marble +hades_core:azurite +hades_stairs:stair_out_floor_wood_wood +hades_stairs:stair_floor_wood_wood +hades_stairs:step_in_glowcrystal_block +hades_doors:door_wood_c +columnia:column_linktee_hades_core_cactus_brick +columnia:column_crosslink_hades_core_cobble_baked +hades_stairs:step_out_glowcrystal_block +hades_stairs:stair_in_glowcrystal_block +hades_trees:colwood_yellow +hades_core:lillite_block +hades_doors:door_basalt_a +hades_stairs:stair_in_floor_chondrite_chondrite +hades_stairs:step_in_dark_green +hades_stairs:step_out_dark_green +hades_stairs:step_dark_green +columnia:column_linktee_hades_core_turquosite +hades_stairs:stair_in_dark_green +hades_stairs:stair_out_dark_green +hades_flowers:yellow +columnia:column_linkangle_hades_trees_colwood_white +hades_stairs:stair_dark_green +hades_stairs:step_in_dark_grey +columnia:column_linkcrossdown_hades_core_olivine_brick +hades_stairs:step_out_dark_grey +hades_stairs:stair_in_floor_essexitegold_essexitegold +hades_stairs:stair_in_dark_grey +hades_vines:vines_block +hades_stairs:stair_out_dark_grey +hades_stairs:stair_dark_grey +columnia:column_linktee_hades_core_cobble_baked +hades_stairs:step_out_pink +hades_stairs:step_pink +columnia:column_linkcrossdown_hades_trees_orange_bark +columnia:column_linkangle_down_hades_trees_jungle_wood +hades_stairs:step_out_brown +hades_stairs:step_brown +hades_stairs:slab_brown +hades_stairs:stair_out_brown +hades_stairs:stair_brown +hades_stairs:step_in_violet +hades_stairs:step_out_violet +columnia:column_linktee_down_hades_core_brick_pink +hades_doors:door_steel_bar_d +columnia:column_bottom_hades_trees_jungle_wood +columnia:column_stairsub_hades_trees_wood +hades_stairs:step_violet +hades_stairs:slab_violet +columnia:column_linkangle_hades_core_stone +hades_stairs:stair_out_violet +hades_stairs:stair_violet +hades_stairs:step_in_orange +columnia:column_linktee_hades_trees_colwood_brown +columnia:column_crosslink_hades_trees_pale_bark +hades_doors:door_steel_a +columnia:column_bottom_hades_core_marble +hades_windows:window_wood_violet +hades_stairs:step_orange +columnia:column_mid_hades_core_azurite +columnia:column_stairsub_hades_core_orangite +hades_stairs:step_sandstonebrick +columnia:column_bottom_hades_trees_orange_bark +hades_stairs:step_magenta +hades_stairs:step_out_colwood_cyan +hades_stairs:slab_magenta +hades_stairs:stair_in_magenta +columnia:column_linkdown_hades_trees_colwood_brown +hades_refruit:flower_apple +columnia:column_stairsub_hades_core_brick_white +hades_stairs:step_out_marble +hades_stairs:step_in_blue +hades_stairs:step_out_blue +hades_stairs:step_blue +columnia:column_linkcrossdown_hades_core_obsidian +hades_stairs:stair_out_blue +hades_chests:chest_black +hades_stairs:step_out_cyan +hades_stairs:step_cyan +hades_cloth:black +columnia:column_crosslink_hades_trees_colwood_pink +columnia:column_crosslink_hades_trees_bark +hades_stairs:stair_out_cyan +hades_chests:chest_cyan +hades_stairs:stair_out_colwood_blue +hades_stairs:step_in_green +columnia:column_linkcrossdown_hades_core_brick_yellow +hades_stairs:step_out_green +hades_stairs:step_green +gluncarp:pink +columnia:column_linkvertical_hades_core_brick_grey +hades_core:tuff +columnia:column_link_hades_trees_colwood_orange +hades_stairs:stair_in_green +hades_stairs:stair_out_green +hades_stairs:stair_in_marble_brick +hades_stairs:step_in_yellow +hades_stairs:step_yellow +columnia:column_linkvertical_hades_core_cactus_brick +columnia:column_linkangle_hades_core_chondrite_brick +hades_fences:fence_wood_green +hades_doors:door_steel_darkgreen_c +hades_stairs:step_in_red +columnia:column_linkdown_hades_core_olivine_brick +hades_tiles:floor_cream_jungle +hades_stairs:stair_out_brick_green +columnia:column_linkcross_hades_core_tuff_baked_brick +hades_stairs:step_out_red +hades_stairs:step_red +hades_stairs:step_in_black +hades_core:chondrite_block +hades_stairs:step_out_black +hades_stairs:step_black +columnia:column_mid_hades_core_lillite_brick +columnia:column_bottom_hades_core_cobble_baked +hades_core:sapphire_block +hades_stairs:stair_in_black +hades_stairs:step_out_charred_wood +hades_stairs:stair_in_charred_wood +columnia:column_mid_hades_trees_colwood_dark_grey +hades_stairs:step_colwood_white +columnia:column_bottom_hades_trees_colwood_white +hades_stairs:step_out_grey +hades_stairs:step_grey +signs_lib:sign_wall_green +hades_stairs:step_floor_lush_lush +hades_stairs:step_out_cobble +hades_stairs:stair_in_grey +hades_stairs:step_in_white +columnia:column_top_hades_core_azurite +hades_core:stonebrick_baked +hades_stairs:step_out_white +hades_stairs:step_white +hades_stairs:stair_white +hades_stairs:step_in_straw +hades_tiles:floor_marble_marble +columnia:column_mid_hades_core_mossycobble +columnia:column_stairsub_hades_trees_colwood_blue +hades_stairs:step_out_straw +hades_stairs:step_straw +hades_stairs:slab_straw +hades_stairs:stair_straw +hades_stairs:step_out_obsidianbrick +hades_doors:door_obsidian_glass_c +columnia:column_linkdown_hades_core_cactus_brick +hades_stairs:step_obsidianbrick +hades_tiles:floor_lush_wood +hades_flowerpots:flower_pot_violet +hades_doors:door_steel_darkgrey_a +hades_stairs:stair_in_obsidianbrick +hades_tiles:floor_stone_stonebaked +hades_stairs:stair_obsidianbrick +columnia:column_stairsub_hades_core_basalt_brick +columnia:column_linkcross_hades_trees_lush_wood +hades_stairs:step_in_cactus_brick +hades_stairs:step_out_cactus_brick +hades_stairs:stair_cobble +hades_stairs:step_cactus_brick +hades_doors:door_stone_d +hades_stairs:slab_cactus_brick +columnia:column_linkangle_down_hades_core_marble +hades_stairs:slab_double_floorblock_bstone_sandstone +columnia:column_linkangle_hades_core_essexite +columnia:column_linkcross_hades_core_chondrite +columnia:column_linkangle_hades_core_brick_dark_grey +hades_vines:willow_rotten +hades_stairs:stair_out_cactus_brick +hades_stairs:stair_cactus_brick +hades_stairs:step_in_rusty_block +hades_stairs:step_out_rusty_block +hades_stairs:step_rusty_block +hades_stairs:slab_rusty_block +hades_stairs:stair_in_rusty_block +hades_stairs:stair_out_rusty_block +columnia:column_linktee_hades_core_chondrite_brick +columnia:column_linktee_down_hades_core_brick_dark_green +hades_stairs:stair_rusty_block +columnia:column_linkcrossdown_hades_core_stonebrick_baked +hades_stairs:stair_in_essexite +hades_stairs:step_in_essexite_brick +columnia:column_linktee_hades_core_olivine_brick +hades_stairs:step_out_essexite_brick +columnia:column_top_hades_core_chondrite +hades_stairs:step_essexite_brick +hades_stairs:slab_essexite_brick +hades_stairs:stair_in_essexite_brick +hades_stairs:stair_out_essexite_brick +hades_stairs:stair_essexite_brick +hades_stairs:slab_floor_tuffbaked_tuffbaked +hades_stairs:step_out_tuff_baked +hades_stairs:stair_brick_dark_green +hades_core:clay +columnia:column_linkcrossdown_hades_core_brick_magenta +hades_stairs:stair_in_tuff_baked +columnia:column_linktee_down_hades_core_marble +hades_stairs:stair_out_tuff_baked +hades_doors:door_basalt_d +hades_stairs:step_tuff_baked_brick +columnia:column_linktee_down_hades_core_chondrite +hades_stairs:slab_tuff_baked_brick +hades_stairs:stair_out_tuff_baked_brick +hades_doors:door_steel_grey_d +columnia:column_linkvertical_hades_core_brick_violet +columnia:column_stairsubpillar_hades_core_brick_yellow +hades_stairs:stair_in_apolline +hades_stairs:step_out_tuff +hades_stairs:step_tuff +hades_stairs:slab_azurite +columnia:column_linkdown_hades_core_marble_brick +hades_stairs:stair_tuff +hades_stairs:step_in_tuff_brick +hades_stairs:step_out_tuff_brick +gluncarp:cyan +columnia:column_linktee_down_hades_core_brick_yellow +columnia:column_linktee_down_hades_core_obsidian +hades_stairs:stair_out_brick_white +hades_tiles:floor_stonebaked_stonebaked +hades_stairs:step_tuff_brick +hades_stairs:slab_floor_sandstonevolcanic_sandstonevolcanic +hades_stairs:stair_in_tuff_brick +hades_furniture:armchair_red +hades_stairs:stair_out_tuff_brick +hades_stairs:stair_tuff_brick +hades_stairs:step_in_marble +columnia:column_mid_hades_core_essexite +hades_tiles:floor_tuffbaked_chondrite +columnia:column_linkdown_hades_core_brick_grey +columnia:column_linkangle_down_hades_trees_colwood_black +hades_stairs:step_in_chondrite_brick +columnia:column_top_hades_trees_colwood_brown +hades_stairs:step_marble +hades_stairs:step_in_brick_grey +hades_stairs:slab_floor_wood_wood +hades_stairs:step_in_marble_brick +hades_stairs:step_out_marble_brick +hades_stairs:step_marble_brick +hades_stairs:slab_marble_brick +hades_stairs:stair_green +hades_stairs:stair_out_marble_brick +hades_stairs:stair_marble_brick +hades_stairs:step_in_chondrite +columnia:column_linkcrossdown_hades_trees_jungle_wood +columnia:column_stairsub_hades_core_brick_yellow +hades_stairs:slab_apolline +hades_doors:trapdoor_rusty_bar +hades_stairs:stair_out_colwood_cyan +hades_stairs:step_out_brick_black +columnia:column_linkcross_hades_core_brick_green +hades_core:tuff_block +hades_stairs:stair_in_chondrite +columnia:column_linkangle_down_hades_core_brick_blue +hades_chests:chest_orange_locked +hades_stairs:step_out_chondrite_brick +hades_stairs:stair_in_steelblock +hades_stairs:step_chondrite_brick +columnia:column_linktee_down_hades_core_olivine_brick +columnia:column_stairsubpillar_hades_core_lillite +columnia:column_linkvertical_hades_core_azurite_brick +hades_stairs:stair_chondrite_brick +hades_core:gravel_block +hades_stairs:step_in_basalt +hades_cloth:violet +hades_stairs:step_basalt +hades_stairs:slab_basalt +hades_stairs:stair_in_basalt +columnia:column_linkcrossdown_hades_core_marble +hades_stairs:stair_out_basalt +columnia:column_linktee_hades_core_brick_black +hades_furniture:armchair_dark_green +columnia:column_linktee_down_hades_trees_colwood_dark_green +hades_furniture:chair_uncolored +hades_core:essexite +columnia:column_top_hades_core_olivine_brick +hades_stairs:step_out_basalt_brick +hades_stairs:step_basalt_brick +hades_stairs:step_out_colwood_white +columnia:column_stairsub_hades_core_turquosite +hades_stairs:step_out_stonebrick +hades_stairs:step_stonebrick +hades_tiles:floor_pale_lush +hades_stairs:step_out_tinblock +hades_stairs:stair_out_stonebrick +hades_stairs:stair_stonebrick +columnia:column_linktee_hades_core_azurite_brick +hades_stairs:step_out_sandstone_volcanic_brick +hades_stairs:step_sandstone_volcanic_brick +columnia:column_bottom_hades_core_apolline +hades_doors:door_steel_d +columnia:column_linkdown_hades_trees_colwood_yellow +hades_stairs:stair_out_cobble_baked +columnia:column_linkdown_hades_core_obsidian +hades_stairs:step_brick_dark_grey +hades_stairs:stair_out_olivine +hades_stairs:step_out_cobble_sandstone_volcanic +hades_core:brick_blue +hades_stairs:stair_floor_sandstonevolcanic_sandstonevolcanic +hades_stairs:stair_in_cobble_sandstone_volcanic +hades_stairs:stair_in_cyan +hades_stairs:step_in_sandstone_volcanic +columnia:column_linktee_down_hades_core_obsidianbrick +hades_grass:grass_3 +hades_stairs:step_out_sandstone_volcanic +columnia:column_link_hades_core_marble_brick +hades_stairs:step_brick_grey +hades_trees:colwood_blue +hades_core:dirt_with_grass_l3 +columnia:column_linkdown_hades_trees_pale_wood +columnia:column_mid_hades_core_lillite +columnia:column_top_hades_trees_jungle_wood +hades_stairs:stair_orange +hades_stairs:stair_out_sandstonebrick +columnia:column_linkdown_hades_core_apolline +hades_chests:chest_yellow +hades_stairs:stair_sandstonebrick +columnia:column_linkangle_hades_core_mossycobble +hades_stairs:step_in_cobble_sandstone +hades_stairs:step_out_cobble_sandstone +columnia:column_linkcross_hades_core_brick_red +hades_stairs:step_cobble_sandstone +columnia:column_linktee_down_hades_trees_pale_wood +hades_vines:jungle_rotten +hades_stairs:stair_in_cobble_sandstone +hades_stairs:stair_out_cobble_sandstone +columnia:column_linkcross_hades_core_obsidian +hades_stairs:stair_cobble_sandstone +hades_doors:door_sandstone_e +hades_itemshow:pedestal_top +hades_stairs:step_sandstone +columnia:column_top_hades_core_lillite +gluncarp:dark_grey +hades_doors:door_sandstone_c +hades_stairs:stair_out_brick +hades_stairs:stair_sandstone +hades_stairs:step_in_brick_yellow +columnia:column_linkangle_down_hades_trees_colwood_yellow +hades_doors:gate_wood_closed +hades_stairs:stair_out_brick_magenta +hades_stairs:step_in_brick_cyan +hades_stairs:slab_brick_yellow +hades_stairs:stair_in_brick_yellow +hades_bushes:violet +columnia:column_linkcross_hades_core_brick_pink +hades_stairs:stair_out_brick_yellow +hades_stairs:stair_brick_yellow +hades_tiles:floor_sandstone_chondrite +hades_stairs:step_out_brick_white +hades_stairs:step_brick_white +hades_cloth:brown +columnia:column_linkvertical_hades_core_marble_brick +hades_stairs:step_in_brick_violet +hades_stairs:step_out_brick_violet +hades_stairs:stair_in_brick_violet +hades_stairs:stair_out_brick_violet +hades_flowerpots:flower_pot_olive_sapling +hades_stairs:step_in_brick_red +columnia:column_top_hades_trees_colwood_green +columnia:column_linkangle_down_hades_trees_orange_bark +columnia:column_stairsubpillar_hades_core_sandstone_volcanic_brick +columnia:column_crosslink_hades_core_brick_red +hades_trees:charred_wood +hades_bushes:green +hades_stairs:stair_out_brick_red +columnia:column_stairsub_hades_trees_cream_wood +hades_windows:window_wood_grey +hades_stairs:stair_brick_red +hades_stairs:step_in_brick_pink +signs_lib:sign_hanging +hades_stairs:step_brick_pink +columnia:column_linkangle_down_hades_core_sandstone_volcanic_brick +hades_stairs:slab_brick_pink +columnia:column_bottom_hades_core_cactus_brick +hades_trees:canvas_leaves +hades_stairs:stair_brick_pink +hades_core:diamondblock +hades_stairs:step_in_brick_orange +hades_stairs:step_out_brick_orange +columnia:column_link_hades_core_sandstone_volcanic_brick +hades_stairs:slab_brick_orange +hades_stairs:stair_brick_orange +hades_stairs:step_in_brick_magenta +hades_doors:door_chondrite_a +hades_core:lava_flowing +hades_farming:tomato_3 +hades_core:brick +columnia:column_bottom_hades_core_stone_baked +hades_stairs:stair_in_brick_magenta +hades_stairs:step_brick_yellow +hades_stairs:stair_brick_magenta +hades_stairs:stair_in_marble +hades_fences:fence_wood_cyan +hades_stairs:step_out_brick_grey +hades_tiles:floor_stone_chondrite +hades_stairs:stair_out_colwood_yellow +columnia:column_linkangle_down_hades_core_brick_white +hades_core:olivine_block +columnia:column_linktee_down_hades_core_stonebrick +columnia:column_linkangle_hades_core_obsidian +columnia:column_stairsubpillar_hades_core_turquosite_brick +columnia:column_linktee_down_hades_trees_colwood_dark_grey +hades_stairs:step_out_brick_green +columnia:column_crosslink_hades_core_chondrite +hades_stairs:stair_in_brick_green +columnia:column_top_hades_core_brick_magenta +columnia:column_top_hades_core_cobble_sandstone +hades_stairs:stair_in_sandstone_volcanic_brick +columnia:column_linktee_down_hades_core_brick_white +columnia:column_bottom_hades_trees_colwood_magenta +hades_stairs:slab_brick_dark_grey +hades_stairs:stair_brick_dark_grey +columnia:column_linkvertical_hades_core_tuff +hades_stairs:step_tuff_baked +hades_stairs:step_out_brick_cyan +hades_core:turquosite_brick +hades_stairs:stair_in_brick_cyan +hades_stairs:stair_out_brick_cyan +signs_lib:sign_yard +columnia:column_linktee_hades_core_tuff_brick +hades_stairs:step_in_brick_brown +columnia:column_linkangle_down_hades_core_obsidianbrick +hades_stairs:slab_brick_brown +hades_core:floor_marble_essexite2 +columnia:column_linkangle_hades_core_sandstone +hades_stairs:step_in_brick_blue +hades_tiles:floor_cream_wood +hades_core:stone_with_ruby +hades_stairs:stair_in_colwood_orange +hades_core:turquosite_block +hades_cloth:cyan +hades_stairs:step_brick_blue +hades_stairs:slab_brick_blue +columnia:column_top_hades_core_tuff_baked_brick +hades_stairs:stair_in_brick_blue +columnia:column_link_hades_core_brick_dark_green +hades_stairs:stair_brick_blue +hades_doors:door_stone_c +columnia:column_linkvertical_hades_trees_wood +hades_stairs:step_in_brick_black +columnia:column_stairsubpillar_hades_trees_colwood_red +hades_doors:door_essexite_c +hades_doors:door_steel_orange_a +hades_stairs:stair_out_tuff +columnia:column_mid_hades_trees_colwood_brown +hades_stairs:step_in_brick +columnia:column_linkcrossdown_hades_core_cobble +columnia:column_linkcross_hades_core_olivine +hades_stairs:stair_in_colwood_pink +hades_stairs:step_out_brick +hades_waterplants:waterlily +hades_stairs:step_brick +hades_lamps:lantern_rusty +columnia:column_linkcrossdown_hades_core_brick_orange +columnia:column_linktee_hades_trees_lush_wood +columnia:column_linktee_hades_trees_bark +columnia:column_linkcrossdown_hades_trees_jungle_bark +hades_stairs:stair_brick +columnia:column_crosslink_hades_trees_colwood_orange +hades_stairs:step_in_cobble_baked +columnia:column_link_hades_trees_cream_wood +hades_stairs:stair_pale_wood +hades_stairs:step_out_cobble_baked +hades_stairs:slab_cobble_baked +hades_core:mossystone +hades_stairs:stair_in_cobble_baked +columnia:column_top_hades_trees_wood +hades_stairs:slab_sandstone_volcanic_brick +columnia:column_linkvertical_hades_core_orangite_brick +columnia:column_top_hades_trees_jungle_bark +hades_stairs:step_cobble +hades_doors:door_steel_blue_a +hades_stairs:stair_in_cobble +columnia:column_crosslink_columnia_rusty_block +hades_tiles:floor_sandstonevolcanic_sandstonevolcanic +hades_stairs:stair_out_cobble +columnia:column_crosslink_hades_core_essexite_brick +columnia:column_stairsub_hades_core_lillite_brick +hades_stairs:step_stone_baked +columnia:column_linkangle_down_hades_trees_jungle_bark +hades_stairs:slab_lush_wood +columnia:column_crosslink_hades_core_cobble +hades_stairs:step_stonebrick_baked +hades_cloth:dark_green +hades_stairs:step_out_pale_bark +hades_stairs:stair_in_stonebrick_baked +hades_stairs:step_out_floor_stone_stone +hades_tiles:floor_chondrite_stonebaked +hades_core:brick_green +hades_doors:door_steel_grey_a +hades_stairs:step_in_charred_wood +hades_stairs:step_out_stone +columnia:column_linktee_down_hades_core_essexite_brick +hades_stairs:step_stone +hades_stairs:slab_stone +hades_stairs:stair_stone +hades_stairs:step_in_goldblock +hades_stairs:step_out_goldblock +columnia:column_mid_hades_core_stonebrick_baked +columnia:column_linkvertical_hades_core_cinnabar +hades_stairs:step_in_orangite +columnia:column_stairsub_hades_core_cinnabar_brick +hades_core:sandstone_volcanic +hades_stairs:slab_goldblock +hades_stairs:stair_in_goldblock +hades_stairs:stair_out_goldblock +hades_core:fertile_sand +hades_farming:seed_spice +hades_stairs:stair_goldblock +hades_doors:door_marble_e +hades_stairs:step_in_tinblock +columnia:column_stairsubpillar_hades_trees_pale_bark +hades_stairs:stair_in_stonebrick +hades_tiles:floor_stone_tuff +columnia:column_link_hades_core_brick_orange +hades_stairs:slab_double_tinblock +hades_stairs:step_pale_wood +hades_stairs:stair_in_tinblock +hades_stairs:stair_out_tinblock +columnia:column_bottom_hades_core_brick_black +hades_stairs:step_in_bronzeblock +hades_doors:door_steel_yellow_a +hades_stairs:step_out_bronzeblock +hades_farming:cotton_3 +hades_stairs:stair_out_colwood_uncolored +columnia:column_linkangle_down_hades_core_brick_grey +hades_core:stone_with_coal +hades_stairs:step_bronzeblock +hades_stairs:slab_double_bronzeblock +columnia:column_crosslink_hades_core_brick_white +hades_core:cinnabar +hades_stairs:slab_bronzeblock +hades_furniture:armchair_blue +columnia:column_link_hades_core_tuff_baked_brick +hades_stairs:stair_in_bronzeblock +columnia:column_stairsubpillar_hades_trees_colwood_white +hades_stairs:step_in_floor_lush_lush +hades_stairs:stair_bronzeblock +columnia:column_link_columnia_rusty_block +hades_stairs:step_in_copperblock +columnia:column_linkangle_hades_trees_colwood_magenta +columnia:column_mid_hades_core_brick_blue +hades_stairs:step_copperblock +hades_stairs:stair_in_copperblock +columnia:column_mid_hades_core_cobble_sandstone +hades_stairs:stair_copperblock +hades_vessels:glass_bottle +columnia:column_linkcross_hades_core_sandstonebrick +hades_stairs:step_out_steelblock +hades_stairs:slab_steelblock +hades_stairs:stair_out_steelblock +columnia:column_linkcrossdown_hades_core_cinnabar_brick +hades_stairs:stair_out_bark +hades_stairs:step_colwood_yellow +hades_stairs:slab_colwood_yellow +columnia:column_linkangle_hades_trees_pale_wood +hades_doors:door_steel_violet_b +hades_stairs:slab_brick_grey +columnia:column_bottom_hades_core_azurite +columnia:column_top_hades_core_sandstone +hades_stairs:stair_colwood_yellow +hades_stairs:stair_bark +hades_stairs:stair_out_basalt_brick +columnia:column_linkvertical_hades_trees_colwood_yellow +hades_chests:chest_dark_grey +hades_furniture:armchair +columnia:column_linkcross_hades_trees_colwood_dark_grey +hades_stairs:stair_out_colwood_white +hades_stairs:stair_colwood_white +columnia:column_linkvertical_hades_trees_orange_bark +hades_stairs:stair_in_colwood_yellow +hades_stairs:step_colwood_violet +hades_stairs:stair_out_brick_pink +columnia:column_linktee_hades_trees_birch_bark +columnia:column_linkdown_hades_trees_colwood_black +columnia:column_linktee_down_hades_core_turquosite_brick +hades_stairs:step_in_colwood_red +hades_stairs:step_out_colwood_red +columnia:column_stairsub_hades_core_stone +columnia:column_linkcross_columnia_rusty_block +hades_stairs:stair_colwood_dark_green +columnia:column_linkangle_hades_core_lillite_brick +hades_beds:fancy_bed_top +hades_stairs:slab_colwood_red +hades_trees:apple +hades_windows:window_wood_white +columnia:column_linkcross_hades_core_stonebrick_baked +hades_core:stonebrick +hades_stairs:stair_out_colwood_red +columnia:column_stairsub_hades_trees_orange_bark +hades_stairs:step_out_colwood_pink +hades_stairs:step_colwood_pink +columnia:column_linkvertical_hades_core_brick_brown +hades_fences:fence_wood_white +hades_stairs:stair_colwood_pink +hades_stairs:step_charred_bark +columnia:column_link_hades_core_sandstonebrick +hades_stairs:stair_out_colwood_orange +columnia:column_linkcrossdown_hades_trees_lush_wood +hades_stairs:step_colwood_magenta +columnia:column_linkcross_hades_core_lillite +columnia:column_linktee_down_hades_core_brick_blue +columnia:column_linkdown_hades_core_brick_magenta +columnia:column_top_hades_trees_pale_bark +hades_stairs:stair_out_floor_sandstonevolcanic_sandstonevolcanic +columnia:column_stairsubpillar_hades_core_brick_dark_green +hades_core:obsidian +hades_doors:door_steel_cyan_d +hades_stairs:step_in_colwood_grey +columnia:column_linktee_down_hades_core_olivine +hades_stairs:step_out_colwood_grey +hades_glowcrystals:glowcrystal_block +hades_stairs:stair_in_colwood_grey +columnia:column_linkangle_hades_trees_jungle_bark +columnia:column_link_hades_core_azurite +hades_doors:trapdoor_steel_open +columnia:column_linkdown_hades_core_sandstone_volcanic +hades_stairs:step_colwood_green +hades_stairs:slab_colwood_green +hades_doors:trapdoor_lush +hades_stairs:stair_out_colwood_green +columnia:column_linkcrossdown_hades_core_sandstone +columnia:column_bottom_hades_core_brick_dark_grey +hades_trees:colwood_red +hades_stairs:step_out_colwood_dark_grey +hades_stairs:step_colwood_dark_grey +hades_stairs:slab_colwood_dark_grey +columnia:column_linkcrossdown_hades_trees_colwood_grey +hades_stairs:stair_in_colwood_dark_grey +hades_stairs:stair_colwood_dark_grey +hades_stairs:stair_in_blue +hades_stairs:step_colwood_dark_green +columnia:column_linkcrossdown_hades_core_basalt_brick +hades_stairs:step_in_colwood_cyan +hades_core:glass +columnia:column_crosslink_hades_core_lillite_brick +hades_fences:fence_lush_wood +hades_stairs:slab_chondrite +hades_stairs:stair_out_glowcrystal_block +hades_doors:door_basalt_b +hades_stairs:step_out_colwood_brown +hades_stairs:stair_in_colwood_brown +hades_trees:colwood_uncolored +hades_stairs:stair_out_colwood_brown +hades_stairs:stair_jungle_wood +hades_stairs:stair_colwood_brown +hades_stairs:step_colwood_blue +columnia:column_linkvertical_hades_core_essexite +hades_stairs:stair_cyan +hades_stairs:stair_colwood_blue +columnia:column_linktee_hades_core_brick_yellow +hades_windows:window_wood_red +hades_stairs:step_in_colwood_black +hades_stairs:step_colwood_black +hades_stairs:stair_out_colwood_black +hades_stairs:stair_colwood_black +hades_stairs:slab_colwood_uncolored +hades_stairs:step_lush_wood +hades_stairs:stair_out_floor_lush_lush +hades_trees:pale_bark +hades_stairs:step_in_charred_bark +hades_doors:door_steel_blue_d +hades_stairs:step_colwood_orange +hades_stairs:stair_in_charred_bark +columnia:column_crosslink_hades_core_marble +columnia:column_linktee_down_hades_core_brick_orange +columnia:column_linktee_down_hades_trees_orange_bark +hades_stairs:stair_charred_bark +columnia:column_linkcross_hades_core_sandstone +columnia:column_linkdown_hades_trees_colwood_dark_grey +hades_stairs:step_in_canvas_bark +hades_stairs:step_out_canvas_bark +hades_stairs:stair_out_colwood_magenta +columnia:column_link_hades_core_brick_grey +hades_stairs:slab_canvas_bark +hades_stairs:stair_in_canvas_bark +hades_stairs:stair_out_canvas_bark +hades_stairs:stair_canvas_bark +hades_stairs:step_in_orange_bark +hades_stairs:step_out_orange_bark +hades_stairs:step_orange_bark +hades_stairs:slab_orange_bark +hades_stairs:stair_in_orange_bark +hades_stairs:stair_out_orange_bark +hades_stairs:stair_orange_bark +hades_stairs:step_in_birch_bark +hades_stairs:step_out_birch_bark +hades_stairs:step_birch_bark +columnia:column_stairsub_columnia_rusty_block +hades_stairs:stair_in_birch_bark +hades_stairs:stair_out_birch_bark +columnia:column_linktee_hades_core_basalt +hades_stairs:step_pale_bark +hades_stairs:stair_out_pale_bark +hades_stairs:step_out_jungle_bark +hades_stairs:step_jungle_bark +hades_stairs:slab_blue +hades_doors:door_sandstone_volcanic_b +columnia:column_linkcross_hades_core_essexite +hades_stairs:stair_jungle_bark +columnia:column_linktee_hades_core_turquosite_brick +columnia:column_crosslink_hades_core_sandstone +hades_stairs:step_out_bark +columnia:column_linkangle_hades_core_brick_red +hades_trees:birch_leaves +columnia:column_linktee_hades_trees_colwood_dark_green +hades_stairs:step_bark +hades_stairs:stair_in_bark +hades_stairs:step_in_colwood_yellow +hades_stairs:step_in_stone +hades_stairs:step_charred_wood +columnia:column_linkcross_hades_core_stone_baked +hades_stairs:stair_black +hades_stairs:stair_charred_wood +hades_stairs:step_in_cream_wood +hades_trees:colwood_brown +hades_stairs:step_out_cream_wood +columnia:column_top_hades_core_apolline_brick +hades_fences:fence_wood_orange +columnia:column_linktee_hades_core_obsidian +hades_windows:window_lush_wood +hades_stairs:stair_in_cream_wood +hades_stairs:stair_out_cream_wood +columnia:column_linkangle_columnia_rusty_block +hades_stairs:stair_olivine +hades_itemshow:showcase +hades_stairs:stair_in_colwood_uncolored +columnia:column_link_hades_core_orangite +hades_stairs:step_out_stonebrick_baked +hades_stairs:stair_in_lush_wood +hades_stairs:stair_out_lush_wood +hades_stairs:stair_lush_wood +hades_stairs:step_jungle_wood +columnia:column_linkdown_hades_trees_jungle_bark +hades_stairs:step_out_pale_wood +hades_stairs:slab_tinblock +columnia:column_stairsubpillar_hades_core_brick_brown +hades_stairs:stair_in_pale_wood +columnia:column_linkdown_hades_core_olivine +columnia:column_linkangle_hades_core_stonebrick_baked +hades_stairs:stair_out_pale_wood +hades_core:stone_block +hades_stairs:step_out_wood +hades_stairs:step_wood +hades_core:orangite_block +hades_stairs:slab_wood +columnia:column_linkangle_hades_core_tuff_baked +hades_trees:orange_bark +hades_stairs:stair_in_wood +columnia:column_linkcross_hades_core_cinnabar_brick +hades_farming:spice_3 +hades_core:ladder_lush_wood +hades_farming:strawberry_2 +hades_windows:window_wood_black +hades_farming:strawberry_1 +hades_farming:seed_strawberry +hades_doors:door_steel_green_d +hades_farming:potato_3 +columnia:column_linkangle_down_hades_core_essexite_brick +hades_farming:potato_2 +hades_farming:potato_1 +hades_vines:jungle +hades_doors:door_steel_b +hades_farming:seed_potato +hades_stairs:slab_brick_magenta +hades_flowerpots:flower_pot_branch_bush +hades_stairs:slab_lillite +columnia:column_linktee_hades_core_sandstone_volcanic_brick +columnia:column_linkangle_down_hades_trees_colwood_grey +hades_farming:cotton_1 +hades_farming:seed_cotton +columnia:column_linkcross_hades_trees_colwood_blue +hades_farming:wheat_1 +hades_stairs:stair_colwood_cyan +hades_farming:soil_wet +hades_stairs:stair_out_pink +hades_doors:door_steel_grey_c +hades_doors:door_steel_cyan_e +hades_grass:junglegrass +hades_grass:seed_grass +hades_stairs:slab_cobble_sandstone +hades_grass:grass_4 +hades_grass:grass_2 +hades_grass:grass_1 +hades_bones:bones +hades_beds:bed_top +hades_doors:door_sandstone_b +columnia:column_stairsub_hades_core_azurite +hades_cloth:dark_grey +columnia:column_linkcrossdown_hades_core_tuff_baked +hades_stairs:slab_brick_white +hades_cloth:orange +hades_cloth:magenta +hades_doors:door_steel_red_d +hades_cloth:blue +columnia:column_linkvertical_hades_core_brick_yellow +hades_stairs:step_out_brick_blue +columnia:column_stairsubpillar_hades_trees_colwood_black +columnia:column_mid_hades_trees_pale_bark +hades_doors:door_steel_yellow_b +columnia:column_top_hades_core_olivine +hades_cloth:red +hades_cloth:grey +hades_cloth:white +columnia:column_linktee_down_columnia_rusty_block +hades_trees:jungle_bark +columnia:column_linkcrossdown_columnia_rusty_block +columnia:column_linkdown_columnia_rusty_block +columnia:column_stairsub_hades_core_tuff_baked_brick +columnia:column_linkvertical_hades_core_obsidianbrick +hades_doors:door_wood_cream_b +columnia:column_mid_columnia_rusty_block +columnia:column_stairsubpillar_hades_core_lillite_brick +hades_stairs:step_out_stone_baked +columnia:column_linktee_down_hades_core_lillite_brick +columnia:column_linktee_hades_core_lillite_brick +columnia:column_linkangle_down_hades_core_lillite_brick +columnia:column_link_hades_core_essexite +hades_stairs:step_colwood_red +columnia:column_linkvertical_hades_core_lillite_brick +columnia:column_linkcrossdown_hades_core_lillite_brick +hades_doors:door_steel_black_d +columnia:column_crosslink_hades_core_brick_violet +hades_core:brick_white +columnia:column_stairsub_hades_core_cobble_sandstone_volcanic +columnia:column_linkcross_hades_core_lillite_brick +columnia:lamp_ceiling +columnia:column_linkdown_hades_core_lillite_brick +columnia:column_link_hades_core_lillite_brick +columnia:column_linktee_down_hades_core_brick_magenta +hades_stairs:slab_colwood_cyan +columnia:column_bottom_hades_core_lillite_brick +hades_doors:door_wood_cream_c +columnia:column_top_hades_core_lillite_brick +hades_stairs:slab_black +hades_fences:fence_wood_blue +columnia:column_linktee_hades_core_stonebrick_baked +columnia:column_linkcrossdown_hades_trees_pale_bark +columnia:column_stairsub_hades_core_lillite +columnia:column_linktee_down_hades_core_lillite +hades_stairs:stair_cobble_sandstone_volcanic +hades_doors:trapdoor_cream +columnia:column_linkdown_hades_core_brick +hades_fences:fence_pale_wood +columnia:column_linkvertical_hades_core_lillite +columnia:column_mid_hades_core_tuff_brick +columnia:column_linkcrossdown_hades_core_lillite +hades_stairs:slab_colwood_magenta +columnia:column_crosslink_hades_core_turquosite +columnia:column_link_hades_core_lillite +hades_core:tuff_brick +hades_stairs:stair_in_sandstone +hades_stairs:step_in_sandstonebrick +columnia:column_linkcrossdown_hades_core_chondrite_brick +columnia:column_linkdown_hades_core_brick_brown +hades_chests:chest_orange +hades_core:stone_with_gold +columnia:column_stairsubpillar_hades_core_azurite_brick +columnia:column_stairsub_hades_core_azurite_brick +columnia:column_linktee_down_hades_core_azurite_brick +hades_stairs:step_in_sandstone_volcanic_brick +hades_refruit:flower_cocoa +columnia:column_top_hades_core_tuff +columnia:column_linkcrossdown_hades_core_brick_green +columnia:column_linkangle_down_hades_core_azurite_brick +columnia:column_top_hades_core_brick_brown +columnia:column_link_hades_core_stone +columnia:column_linkangle_hades_core_azurite_brick +hades_stairs:stair_out_chondrite_brick +columnia:column_linkangle_hades_core_brick_black +columnia:column_linkcrossdown_hades_core_azurite_brick +columnia:column_linkvertical_hades_core_chondrite +columnia:column_linkcross_hades_core_azurite_brick +columnia:column_linkdown_hades_core_azurite_brick +columnia:column_linkcross_hades_trees_colwood_orange +columnia:column_linkangle_hades_core_brick_orange +columnia:column_link_hades_core_azurite_brick +columnia:column_crosslink_hades_core_azurite_brick +columnia:column_bottom_hades_core_azurite_brick +columnia:column_top_hades_core_azurite_brick +columnia:column_mid_hades_core_azurite_brick +hades_beds:fancy_bed_bottom +columnia:column_linktee_down_hades_core_azurite +columnia:column_bottom_hades_trees_colwood_violet +columnia:column_linktee_hades_core_azurite +hades_core:brick_pink +hades_doors:trapdoor_jungle +columnia:column_stairsubpillar_hades_core_brick_cyan +hades_doors:door_glass_c +gluncarp:grey +columnia:column_linkangle_down_hades_trees_colwood_green +columnia:column_linkdown_hades_core_chondrite +columnia:column_linkvertical_hades_core_azurite +columnia:column_link_hades_core_brick_red +columnia:column_linkcrossdown_hades_core_azurite +columnia:column_linkdown_hades_core_azurite +columnia:column_link_hades_trees_birch_bark +columnia:column_linkdown_hades_trees_pale_bark +hades_core:dirt_with_grass +columnia:column_mid_hades_core_marble +hades_stairs:stair_in_orange +hades_doors:door_stone_baked_e +hades_stairs:stair_brick_grey +columnia:column_stairsub_hades_core_turquosite_brick +hades_trash:trash_can_plastic +hades_stairs:stair_out_colwood_violet +columnia:column_stairsub_hades_core_brick_green +columnia:column_stairsubpillar_hades_core_turquosite +hades_stairs:step_in_bark +columnia:column_linkangle_down_hades_core_turquosite_brick +columnia:column_linkangle_hades_core_turquosite_brick +columnia:column_linkvertical_hades_core_turquosite_brick +columnia:column_linkcrossdown_hades_core_turquosite_brick +columnia:column_linkcross_hades_core_turquosite_brick +columnia:column_linkdown_hades_core_turquosite_brick +columnia:column_link_hades_core_turquosite_brick +columnia:column_crosslink_hades_core_turquosite_brick +columnia:column_linktee_hades_trees_colwood_cyan +columnia:column_bottom_hades_core_turquosite_brick +columnia:column_top_hades_core_turquosite_brick +columnia:column_mid_hades_core_turquosite_brick +columnia:column_top_hades_core_tuff_baked +hades_stairs:stair_basalt_brick +columnia:column_linktee_down_hades_core_turquosite +columnia:column_link_hades_core_cinnabar +columnia:column_crosslink_hades_core_brick_magenta +hades_stairs:slab_dark_green +columnia:column_linkangle_down_hades_core_turquosite +columnia:column_linkangle_hades_core_turquosite +columnia:column_linkcrossdown_hades_core_turquosite +columnia:column_linkcross_hades_core_turquosite +columnia:column_linkdown_hades_core_turquosite +columnia:column_link_hades_core_turquosite +columnia:column_linkdown_hades_core_lillite +hades_vines:cave_rotten +columnia:column_linktee_hades_core_brick_green +columnia:column_top_hades_core_turquosite +columnia:column_mid_hades_core_turquosite +columnia:column_stairsubpillar_hades_core_cinnabar_brick +columnia:column_stairsub_hades_trees_jungle_wood +hades_stairs:slab_double_goldblock +hades_waterplants:seaweed_2 +columnia:column_linktee_down_hades_core_cinnabar_brick +columnia:column_linktee_hades_core_cinnabar_brick +columnia:column_linkangle_down_hades_core_cinnabar_brick +columnia:column_linkangle_hades_core_cinnabar_brick +hades_doors:door_steel_orange_c +columnia:column_linkvertical_hades_core_cinnabar_brick +columnia:column_linkvertical_hades_core_brick_orange +hades_stairs:stair_steelblock +hades_stairs:stair_wood +columnia:column_mid_hades_core_cobble_baked +columnia:column_linkdown_hades_core_cinnabar_brick +columnia:column_link_hades_core_cinnabar_brick +columnia:column_crosslink_hades_core_cinnabar_brick +columnia:column_bottom_hades_core_cinnabar_brick +columnia:column_top_hades_core_cinnabar_brick +hades_doors:door_steel_magenta_c +columnia:column_mid_hades_core_cinnabar_brick +columnia:column_stairsubpillar_hades_core_cinnabar +columnia:column_linktee_down_hades_core_cinnabar +columnia:column_stairsub_hades_core_stonebrick +columnia:column_linkangle_hades_core_cinnabar +hades_stairs:stair_in_colwood_cyan +hades_doors:door_basalt_e +columnia:column_crosslink_hades_core_cinnabar +columnia:column_stairsub_hades_core_essexite_brick +hades_tiles:floor_jungle_lush +columnia:bracket +columnia:column_stairsubpillar_hades_core_orangite_brick +columnia:column_stairsub_hades_core_orangite_brick +columnia:column_linktee_down_hades_core_orangite_brick +columnia:column_linktee_hades_core_orangite_brick +columnia:column_linkangle_down_hades_core_orangite_brick +columnia:column_linkangle_hades_core_orangite_brick +hades_stairs:stair_cobble_baked +columnia:column_linkcrossdown_hades_core_orangite_brick +columnia:column_linkcross_hades_core_orangite_brick +columnia:column_linkdown_hades_core_orangite_brick +columnia:column_link_hades_core_orangite_brick +hades_core:cobble +columnia:column_crosslink_hades_core_orangite_brick +columnia:column_bottom_hades_core_orangite_brick +columnia:column_top_hades_core_orangite_brick +columnia:column_mid_hades_core_orangite_brick +columnia:column_stairsubpillar_hades_core_orangite +columnia:column_linktee_down_hades_core_orangite +columnia:column_linktee_hades_core_orangite +columnia:column_linkangle_hades_core_orangite +columnia:column_linktee_down_hades_core_cobble +columnia:column_linkcrossdown_hades_core_orangite +columnia:column_linkdown_hades_core_apolline_brick +columnia:column_crosslink_hades_trees_birch_bark +columnia:column_stairsubpillar_hades_core_apolline_brick +columnia:column_stairsub_hades_core_apolline_brick +columnia:column_linktee_down_hades_core_apolline_brick +columnia:column_linktee_hades_core_apolline_brick +hades_doors:trapdoor_steel_bar_open +columnia:column_linkangle_down_hades_core_apolline_brick +columnia:column_linkangle_hades_core_apolline_brick +columnia:column_linkvertical_hades_core_apolline_brick +hades_bushes:white +columnia:column_linkcrossdown_hades_core_apolline_brick +columnia:column_linkcross_hades_core_apolline_brick +columnia:column_mid_hades_core_orangite +columnia:column_link_hades_core_apolline_brick +columnia:column_crosslink_hades_core_apolline_brick +columnia:column_bottom_hades_core_apolline_brick +hades_stairs:step_cream_wood +columnia:column_linkangle_down_hades_core_olivine +columnia:column_mid_hades_core_apolline_brick +columnia:column_crosslink_hades_trees_colwood_blue +columnia:column_linktee_down_hades_core_apolline +columnia:column_linktee_hades_core_apolline +columnia:column_linktee_down_hades_core_basalt +columnia:column_linkvertical_hades_trees_lush_wood +hades_core:cobble_block_baked +columnia:column_linkvertical_hades_trees_cream_wood +hades_core:ash +hades_trees:banana +hades_stairs:stair_out_cinnabar +columnia:column_linkcrossdown_hades_core_apolline +columnia:column_link_hades_core_apolline +columnia:column_top_hades_core_apolline +columnia:column_mid_hades_core_apolline +columnia:column_stairsubpillar_hades_core_olivine_brick +columnia:column_stairsub_hades_core_olivine_brick +hades_core:glowing_cactus_block +hades_stairs:stair_in_chondrite_brick +columnia:column_mid_hades_core_olivine_brick +columnia:column_crosslink_hades_core_olivine +hades_core:lillite +hades_stairs:slab_colwood_white +columnia:column_stairsub_hades_trees_colwood_cyan +hades_doors:door_steel_violet_a +columnia:column_linkangle_hades_core_sandstonebrick +hades_stairs:slab_olivine +columnia:column_stairsub_hades_trees_colwood_magenta +columnia:column_mid_hades_core_brick_white +hades_flowerpots:flower_pot_white +columnia:column_link_hades_core_tuff_baked +hades_tiles:floor_chondrite_tuffbaked +columnia:column_linkcrossdown_hades_trees_colwood_yellow +gluncarp:black +hades_stairs:step_brick_cyan +hades_lamps:lantern +hades_fences:fence_wood_red +hades_doors:door_steel_red_e +hades_tiles:floor_pale_cream +columnia:column_crosslink_hades_trees_cream_wood +hades_doors:door_stone_baked_a +hades_doors:trapdoor_steel_bar +hades_core:azurite_brick +hades_core:apolline_block +columnia:column_linkcross_hades_trees_jungle_bark +columnia:column_linktee_hades_core_brick_grey +hades_doors:door_steel_yellow_c +hades_doors:trapdoor_pale_open +columnia:column_linkcross_hades_core_stonebrick +hades_walls:sandstone_volcanic +columnia:column_linkdown_hades_core_essexite +hades_stairs:step_in_colwood_green +hades_core:tuff_baked_brick +columnia:column_bottom_hades_core_olivine_brick +hades_doors:door_dungeon2_b +hades_doors:door_marble_b +hades_stairs:stair_in_brick_red +columnia:column_linkangle_hades_core_obsidianbrick +columnia:column_stairsubpillar_hades_core_marble_brick +columnia:column_stairsubpillar_hades_core_basalt_brick +hades_flowerpots:flower_pot_olive_leaves +columnia:column_linkcrossdown_hades_core_brick_grey +hades_core:ladder_cream_wood +hades_doors:door_steel_pink_d +columnia:column_stairsubpillar_hades_trees_bark +columnia:column_link_hades_core_brick_cyan +columnia:column_linktee_down_hades_core_marble_brick +columnia:column_linktee_hades_core_marble_brick +hades_doors:door_steel_black_e +hades_core:basalt +columnia:column_bottom_hades_trees_colwood_yellow +hades_stairs:step_out_brick_magenta +hades_doors:trapdoor_rusty_bar_open +columnia:column_stairsub_hades_core_marble +columnia:column_mid_hades_core_brick_red +hades_grass:dead_grass_2 +hades_tiles:floor_wood_lush +hades_doors:door_rusty_bar_e +hades_doors:door_rusty_bar_d +hades_doors:door_rusty_bar_a +hades_doors:door_steel_brown_d +hades_stairs:stair_out_lillite +columnia:column_linkangle_hades_core_basalt_brick +hades_waterplants:waterlily_45 +hades_core:cinnabar_block +columnia:column_stairsubpillar_hades_core_azurite +columnia:column_stairsub_hades_trees_colwood_red +hades_stairs:stair_out_brick_blue +hades_doors:door_essexite_b +columnia:column_mid_hades_core_chondrite_brick +hades_stairs:stair_basalt +hades_stairs:step_out_floor_sandstonevolcanic_sandstonevolcanic +columnia:column_linkangle_hades_trees_colwood_dark_green +hades_stairs:stair_yellow +hades_doors:door_steel_darkgrey_b +hades_tiles:floor_tuffbaked_sandstone +columnia:column_linkcrossdown_hades_trees_colwood_magenta +hades_doors:door_steel_blue_e +columnia:column_linkcross_hades_core_cobble_sandstone_volcanic +hades_flowerpots:flower_pot_burned_branches +hades_core:obsidian_block +hades_stairs:step_out_charred_bark +hades_doors:door_steel_blue_c +hades_doors:door_steel_blue_b +columnia:column_linkcrossdown_hades_core_brick_dark_green +columnia:column_stairsub_hades_trees_bark +hades_doors:gate_jungle_wood_open +hades_windows:window_wood_brown +hades_tiles:floor_jungle_pale +hades_torches:torch_ceiling +hades_doors:door_steel_grey_e +hades_doors:door_steel_green_e +columnia:column_stairsub_hades_core_cobble_baked +hades_trees:birch_bark +columnia:column_bottom_hades_core_essexite_brick +hades_doors:door_rusty_bar_c +columnia:column_linkcross_hades_core_olivine_brick +hades_stairs:stair_in_floor_wood_wood +columnia:column_linkcrossdown_hades_core_stonebrick +hades_doors:door_wood_lush_d +hades_doors:door_wood_cream_d +columnia:column_crosslink_hades_core_brick_blue +hades_doors:door_wood_lush_c +hades_tiles:floor_lush_cream +columnia:column_crosslink_hades_core_tuff_baked_brick +hades_doors:door_wood_cream_a +hades_chests:chest_white_locked +columnia:column_linkangle_down_hades_core_cinnabar +columnia:column_mid_hades_trees_colwood_cyan +hades_windows:window_wood_pink +hades_core:turquosite +hades_doors:door_wood_d +hades_doors:door_stone_baked_d +columnia:column_stairsubpillar_hades_core_brick_red +columnia:column_linkdown_hades_core_brick_black +hades_core:ladder +columnia:column_linkdown_hades_core_brick_dark_green +hades_windows:window_wood_orange +hades_stairs:step_out_azurite +columnia:column_mid_hades_core_brick_dark_green +columnia:column_linkcross_hades_core_cinnabar +columnia:column_linkvertical_hades_core_brick_dark_green +hades_flowerpots:flower_pot_banana_leaves +hades_flowerpots:flower_pot_orange_leaves +hades_core:ash_block +hades_flowerpots:flower_pot_birch_sapling +hades_tiles:floor_pale_pale +columnia:column_linktee_down_hades_trees_pale_bark +columnia:column_linkvertical_hades_core_chondrite_brick +columnia:column_link_hades_trees_colwood_magenta +hades_windows:window_pale_wood +columnia:column_linkcross_hades_trees_colwood_yellow +columnia:column_link_hades_core_brick_blue +columnia:column_linkangle_down_hades_trees_pale_wood +hades_core:tuff_baked_block +hades_trees:olive_leaves +columnia:column_mid_hades_core_brick_grey +columnia:column_linkcross_hades_trees_bark +columnia:column_bottom_hades_core_basalt +hades_doors:gate_lush_wood_closed +columnia:column_mid_hades_core_cobble +hades_flowerpots:flower_pot_cultivated_jungle_sapling +hades_stairs:stair_floor_tuff_tuff +hades_doors:door_sandstone_a +hades_stairs:stair_chondrite +hades_stairs:slab_sandstone +hades_stairs:stair_out_floor_jungle_jungle +columnia:column_linktee_down_hades_trees_lush_wood +hades_tiles:floor_jungle_jungle +hades_chests:chest_red +columnia:column_linkangle_hades_core_brick +columnia:column_mid_hades_trees_orange_bark +hades_core:obsidianbrick +columnia:column_linkcross_hades_trees_colwood_black +hades_fences:fence_wood_dark_grey +hades_doors:door_steel_violet_c +columnia:column_linktee_down_hades_trees_canvas_bark +columnia:column_link_hades_core_essexite_brick +hades_core:stone_with_copper +hades_furniture:table_lamp_off +hades_doors:door_dungeon1_a +columnia:rusty_block +columnia:column_mid_hades_trees_colwood_grey +hades_doors:gate_lush_wood_open +columnia:column_linkangle_down_hades_core_chondrite +columnia:column_mid_hades_trees_canvas_bark +hades_core:essexite_brick +columnia:column_linktee_hades_core_brick_cyan +hades_stairs:step_out_colwood_dark_green +columnia:column_linkdown_hades_trees_orange_bark +columnia:column_linktee_hades_core_cobble +columnia:column_stairsub_hades_trees_colwood_brown +columnia:column_stairsub_hades_core_sandstone +columnia:column_linkvertical_hades_core_brick_green +columnia:column_bottom_hades_core_brick_blue +gluncarp:dark_green +hades_stairs:stair_out_sandstone_volcanic +columnia:column_top_hades_core_sandstone_volcanic +hades_core:marble +hades_stairs:step_brick_green +hades_flowerpots:flower_pot_leaves +hades_core:mossycobble +columnia:column_linkdown_hades_core_sandstonebrick +columnia:column_bottom_hades_trees_colwood_red +columnia:column_linkvertical_hades_core_cobble_sandstone_volcanic +hades_torches:torch_low +hades_waterplants:seaweed_3 +columnia:column_top_hades_core_stonebrick +columnia:column_mid_hades_core_brick +columnia:column_linkangle_down_hades_trees_cream_wood +hades_chests:chest_violet +columnia:column_stairsub_hades_core_brick_brown +columnia:column_mid_hades_core_chondrite +hades_core:floor_bstone_sandstone +hades_furniture:bars +hades_refruit:bud_cocoa +columnia:column_linktee_hades_trees_jungle_bark +hades_stairs:stair_in_stone_baked +hades_doors:trapdoor_open +hades_core:sugarcane +columnia:column_bottom_hades_trees_pale_wood +hades_doors:door_glass_a +hades_tiles:floor_stonebaked_tuff +columnia:column_linkcross_hades_core_basalt +hades_tiles:floor_wood_wood +columnia:column_link_hades_core_basalt_brick +hades_stairs:step_out_copperblock +hades_windows:window_wood_uncolored +hades_stairs:step_out_colwood_violet +hades_flowerpots:flower_pot_jungle_sapling +columnia:column_linkangle_down_hades_trees_bark +columnia:column_link_hades_core_cobble_sandstone_volcanic +hades_core:dirt_with_grass_l2 +columnia:column_linkangle_hades_core_cobble_sandstone +columnia:column_crosslink_hades_trees_colwood_dark_grey +hades_core:ladder_pale_wood +columnia:column_linkdown_hades_trees_colwood_orange +hades_bushes:branch_bush +columnia:column_bottom_hades_core_essexite +hades_windows:window_wood_magenta +columnia:column_link_hades_core_obsidianbrick +columnia:column_linkcrossdown_hades_trees_canvas_bark +columnia:column_stairsubpillar_hades_trees_colwood_grey +hades_flowerpots:flower_pot_pale_leaves +hades_walls:sandstone +hades_stairs:step_in_floor_essexitegold_essexitegold +hades_fences:fence_wood_uncolored +columnia:column_crosslink_hades_core_brick_dark_green +hades_tiles:floor_essexite_essexitegold +columnia:column_mid_hades_trees_wood +hades_tiles:floor_basalt_marble +columnia:column_top_hades_core_sandstonebrick +hades_core:stone_baked +columnia:column_linkdown_hades_core_stonebrick +hades_tiles:floor_marble_essexite +hades_trees:cultivated_jungle_sapling +hades_tiles:floor_pale_wood +hades_trees:banana_sapling +hades_flowerpots:flower_pot_birch_leaves +hades_stairs:slab_obsidianbrick +columnia:column_stairsub_hades_trees_pale_bark +hades_tiles:floor_lush_jungle +columnia:column_top_hades_trees_lush_wood +columnia:column_linkcross_hades_core_cobble_sandstone +columnia:column_linkcrossdown_hades_core_cobble_sandstone +columnia:column_top_hades_trees_canvas_bark +columnia:column_linkdown_hades_trees_colwood_grey +columnia:column_linkvertical_hades_trees_colwood_orange +columnia:column_stairsubpillar_hades_trees_colwood_blue +hades_core:coalblock +columnia:column_stairsub_hades_core_sandstone_volcanic_brick +columnia:column_linkvertical_hades_trees_colwood_blue +columnia:column_linkangle_hades_core_azurite +columnia:column_linkangle_hades_core_lillite +hades_chests:chest_magenta_locked +columnia:column_stairsub_hades_core_tuff +hades_fences:fence_wood_grey +hades_stairs:slab_sandstone_volcanic +columnia:column_linkangle_down_hades_core_stonebrick_baked +columnia:column_stairsubpillar_hades_trees_colwood_green +columnia:column_stairsubpillar_hades_trees_orange_bark +columnia:column_mid_hades_core_brick_black +hades_tiles:floor_wood_jungle +columnia:column_mid_hades_core_sandstonebrick +hades_furniture:chair_white +columnia:column_linkcross_hades_trees_colwood_dark_green +columnia:column_linkvertical_hades_trees_pale_wood +hades_chests:chest_grey_locked +hades_trees:cocoa_sapling +hades_trees:colwood_violet +columnia:column_bottom_hades_core_brick_dark_green +hades_furniture:plant_pot +hades_stairs:step_in_brick_green +hades_tiles:floor_essexite_marble +hades_flowers:red +hades_walls:cobble_sandstone_volcanic +hades_furniture:table_lamp_low +gluncarp:violet +hades_tiles:floor_wood_pale +hades_flowerpots:flower_pot_cactus +columnia:column_stairsub_hades_core_chondrite +columnia:column_crosslink_hades_trees_colwood_violet +columnia:column_stairsubpillar_hades_trees_jungle_wood +hades_doors:trapdoor_steel +columnia:column_linktee_down_hades_trees_colwood_cyan +columnia:column_linkcrossdown_hades_trees_colwood_cyan +columnia:column_crosslink_hades_trees_colwood_dark_green +hades_stairs:step_in_wood +hades_torches:torch_low_wall +columnia:column_linkangle_down_hades_trees_colwood_cyan +hades_stairs:step_in_lillite +columnia:column_linkcross_hades_trees_pale_bark +hades_stairs:stair_out_apolline +hades_tiles:floor_lush_lush +columnia:column_stairsub_hades_core_brick_blue +hades_chests:chest_cyan_locked +hades_doors:door_steel_brown_e +columnia:column_mid_hades_core_brick_green +hades_chests:chest_yellow_locked +hades_trees:bark +columnia:column_stairsubpillar_hades_core_brick_magenta +hades_grass:grass_5 +columnia:column_stairsubpillar_hades_trees_colwood_magenta +columnia:column_crosslink_hades_core_azurite +hades_tiles:floor_sandstone_tuff +hades_doors:door_essexite_e +hades_flowerpots:flower_pot_orange_sapling +columnia:column_link_hades_trees_colwood_uncolored +hades_core:cinnabar_brick +hades_grass:dead_grass_1 +hades_flowerpots:flower_pot_banana_sapling +columnia:column_bottom_hades_core_obsidianbrick +hades_refruit:bud_banana +hades_trees:orange +columnia:column_linktee_hades_trees_colwood_pink +hades_tiles:floor_basalt_basalt +gluncarp:orange +columnia:column_stairsubpillar_hades_core_obsidianbrick +columnia:column_crosslink_hades_core_tuff +columnia:column_linkcross_hades_core_brick_yellow +columnia:column_mid_hades_core_obsidian +columnia:column_mid_hades_trees_cream_wood +hades_glowcrystals:glowglass +hades_core:gravel_volcanic +columnia:column_top_hades_core_brick +hades_stairs:step_in_steelblock +hades_stairs:stair_colwood_magenta +columnia:column_linkcross_hades_trees_colwood_uncolored +hades_stairs:step_out_brick_brown +hades_fences:fence_wood_dark_green +hades_doors:door_steel_orange_e +columnia:column_mid_hades_trees_lush_wood +hades_tiles:floor_sandstone_sandstone +hades_glowcrystals:glowcrystal_torch +columnia:column_bottom_hades_trees_cream_wood +hades_stairs:stair_in_colwood_green +columnia:column_linktee_hades_trees_pale_wood +hades_stairs:slab_stonebrick +columnia:column_mid_hades_core_brick_yellow +hades_core:dirt +columnia:column_stairsubpillar_hades_trees_wood +hades_doors:door_steel_e +columnia:column_linkcrossdown_hades_core_mossycobble +columnia:column_linktee_down_hades_core_stonebrick_baked +hades_trees:tree +columnia:column_linkdown_hades_core_stone_baked +hades_doors:door_steel_magenta_e +hades_trees:lush_wood +columnia:column_linkangle_down_hades_core_sandstone_volcanic +columnia:column_linktee_hades_trees_wood +hades_doors:door_wood_jungle_d +hades_furniture:table_black +columnia:column_mid_hades_trees_colwood_dark_green +hades_fences:fence_wood_brown +hades_furnaces:prism_furnace_active +columnia:column_link_hades_core_stonebrick +hades_trees:olive_sapling +columnia:column_mid_hades_trees_colwood_yellow +hades_furniture:armchair_brown +hades_stairs:step_in_cyan +hades_stairs:slab_floor_stone_stone +ignore +hades_stairs:slab_brick_red +hades_core:sandstone +hades_doors:trapdoor_cream_open +hades_core:olivine_brick +hades_doors:door_steel_bar_b +hades_furniture:table_uncolored +columnia:column_link_hades_core_mossycobble +hades_stairs:stair_out_colwood_dark_green +hades_chests:chest_black_locked +columnia:column_linkangle_hades_trees_colwood_orange +signs_lib:sign_wall_white_black +hades_chests:chest_blue_locked +hades_stairs:step_out_brick_red +columnia:column_bottom_hades_core_stonebrick_baked +hades_doors:door_steel_bar_a +hades_waterplants:waterlily_s1 +hades_core:brick_cyan +columnia:column_linkvertical_hades_core_olivine_brick +hades_stairs:stair_stonebrick_baked +hades_doors:door_steel_bar_e +hades_doors:gate_cream_wood_open +columnia:column_link_hades_core_stone_baked +columnia:column_linkcross_hades_core_marble_brick +hades_stairs:stair_red +hades_stairs:step_in_brick_white +columnia:column_linkcross_hades_trees_birch_bark +hades_doors:door_steel_pink_e +columnia:column_top_hades_trees_colwood_black +hades_stairs:stair_out_jungle_wood +columnia:column_link_hades_core_basalt +columnia:column_mid_hades_core_stone_baked +hades_stairs:stair_out_colwood_grey +columnia:column_linktee_down_hades_core_cobble_baked +columnia:column_bottom_hades_core_brick_white +columnia:column_linkangle_down_hades_core_cobble_baked +hades_tiles:floor_tuffbaked_stonebaked +columnia:column_stairsub_hades_core_cobble_sandstone +hades_stairs:step_in_sandstone +hades_trees:birch_sapling +hades_stairs:stair_out_jungle_bark +columnia:column_linkcross_hades_core_cobble_baked +columnia:column_link_hades_core_cobble_baked +columnia:column_linkangle_hades_core_sandstone_volcanic_brick +columnia:column_linkangle_down_hades_core_sandstone +columnia:column_stairsubpillar_hades_core_chondrite_brick +hades_tiles:floor_tuff_sandstone +columnia:column_linkvertical_hades_trees_jungle_bark +columnia:column_linkvertical_hades_core_sandstone_volcanic_brick +columnia:column_linkcross_hades_core_brick_cyan +columnia:column_linkcrossdown_hades_core_essexite_brick +columnia:column_stairsub_hades_core_brick_dark_grey +hades_refruit:flower_coconut +columnia:column_linkcross_hades_core_sandstone_volcanic_brick +columnia:column_top_hades_core_sandstone_volcanic_brick +columnia:column_crosslink_hades_core_sandstone_volcanic +hades_stairs:stair_floor_essexite_essexite +columnia:column_bottom_hades_trees_jungle_bark +columnia:column_linkvertical_hades_trees_colwood_brown +columnia:column_linktee_hades_core_brick_brown +hades_stairs:stair_brick_brown +columnia:column_linkangle_hades_core_cobble_sandstone_volcanic +columnia:column_linkcrossdown_hades_core_sandstonebrick +hades_trees:colwood_dark_grey +columnia:column_linktee_hades_core_marble +hades_chests:chest_dark_green_locked +columnia:column_linkvertical_hades_core_sandstone_volcanic +columnia:column_linkdown_hades_core_sandstone_volcanic_brick +hades_tiles:floor_cream_lush +hades_stairs:step_out_orange +columnia:column_linktee_down_hades_trees_colwood_violet +columnia:column_linkvertical_hades_trees_canvas_bark +columnia:column_mid_hades_core_olivine +columnia:column_crosslink_hades_core_cactus_brick +columnia:column_linkangle_down_hades_core_tuff_baked +columnia:column_linkangle_hades_core_cobble +columnia:column_linkangle_down_hades_core_cobble +columnia:column_mid_hades_core_brick_violet +gluncarp:magenta +columnia:column_mid_hades_trees_colwood_black +columnia:column_stairsub_hades_core_cobble +columnia:column_linkangle_down_hades_core_brick_dark_green +hades_doors:door_wood_pale_d +columnia:column_linkcrossdown_hades_core_cobble_baked +columnia:column_top_hades_core_cobble_baked +columnia:column_linkangle_hades_core_cobble_baked +hades_doors:door_steel_magenta_a +columnia:column_linkangle_down_hades_trees_birch_bark +columnia:column_link_hades_core_tuff_brick +hades_chests:chest_locked +columnia:column_linkangle_down_hades_core_brick_pink +columnia:column_linkangle_hades_trees_orange_bark +columnia:column_linkcrossdown_hades_core_stone +columnia:column_stairsubpillar_hades_core_stone +hades_doors:door_rusty_bar_b +columnia:column_mid_hades_core_cactus_brick +hades_stairs:stair_colwood_grey +columnia:column_top_hades_core_cactus_brick +hades_stairs:stair_in_colwood_violet +columnia:column_link_hades_core_cobble +columnia:column_linkcrossdown_hades_core_cactus_brick +columnia:column_linkangle_hades_core_cactus_brick +columnia:column_linkangle_hades_core_apolline +columnia:column_mid_hades_core_stone +columnia:column_top_hades_core_stone_baked +columnia:column_bottom_hades_core_brick_green +hades_tiles:floor_chondrite_stone +columnia:column_bottom_hades_trees_birch_bark +columnia:column_linkangle_hades_core_stone_baked +columnia:column_linkangle_down_hades_core_stone_baked +hades_doors:door_steel_darkgreen_a +columnia:column_stairsubpillar_hades_core_stone_baked +columnia:column_top_hades_core_stonebrick_baked +hades_stairs:step_essexite +columnia:column_linkvertical_hades_core_stonebrick_baked +hades_lamps:lamp_wall +hades_waterplants:waterlily_s2 +columnia:column_stairsub_hades_core_stonebrick_baked +columnia:column_bottom_hades_core_mossycobble +hades_chests:chest_pink +hades_stairs:stair_magenta +columnia:column_link_hades_trees_bark +hades_stairs:stair_out_floor_stone_stone +hades_trees:jungle_wood +columnia:column_bottom_hades_core_obsidian +columnia:column_bottom_hades_core_brick +hades_stairs:stair_in_jungle_bark +columnia:column_stairsub_hades_core_obsidian +columnia:column_crosslink_hades_core_brick_pink +signs_lib:sign_wall +columnia:column_linkcrossdown_hades_core_obsidianbrick +hades_stairs:stair_brick_violet +columnia:column_top_hades_trees_colwood_yellow +columnia:column_bottom_hades_core_stonebrick +hades_vines:willow +columnia:column_linkangle_hades_core_stonebrick +columnia:column_linkangle_down_hades_core_stonebrick +columnia:column_stairsubpillar_hades_trees_pale_wood +columnia:column_top_hades_trees_colwood_dark_green +hades_tiles:floor_sandstonevolcanic_stone +columnia:column_linkangle_hades_trees_wood +columnia:column_linkcross_hades_trees_cream_wood +hades_stairs:step_out_sandstonebrick +hades_stairs:slab_floor_jungle_jungle +hades_stairs:step_out_chondrite +hades_doors:door_obsidian_glass_e +columnia:column_bottom_hades_core_brick_yellow +hades_stairs:step_in_brown +columnia:column_linktee_down_hades_trees_jungle_wood +columnia:column_bottom_hades_core_brick_pink +columnia:column_linktee_hades_core_brick_violet +columnia:column_top_hades_trees_pale_wood +columnia:column_crosslink_hades_trees_pale_wood +hades_core:sandstonebrick +columnia:column_linkcrossdown_hades_trees_pale_wood +columnia:column_bottom_hades_core_cobble_sandstone +columnia:column_mid_hades_trees_jungle_bark +columnia:column_linktee_hades_trees_colwood_white +columnia:column_linkcross_hades_core_chondrite_brick +hades_tiles:floor_chondrite_sandstone +columnia:column_linkcrossdown_hades_trees_wood +columnia:column_linktee_hades_trees_cream_wood +columnia:column_crosslink_hades_core_basalt_brick +columnia:column_linktee_down_hades_trees_cream_wood +hades_core:orangite_brick +columnia:column_bottom_hades_trees_lush_wood +columnia:column_linkangle_hades_trees_colwood_blue +columnia:column_link_hades_trees_lush_wood +hades_stairs:step_in_colwood_magenta +columnia:column_linkangle_down_hades_core_apolline +columnia:column_linkangle_down_hades_core_olivine_brick +hades_stairs:slab_brick +columnia:column_top_hades_trees_colwood_uncolored +columnia:column_bottom_hades_trees_colwood_black +columnia:column_linkangle_hades_trees_colwood_uncolored +columnia:column_link_hades_core_cactus_brick +columnia:column_linktee_hades_trees_jungle_wood +columnia:column_linktee_down_hades_trees_colwood_uncolored +columnia:column_linkcrossdown_hades_trees_colwood_white +columnia:column_top_hades_core_mossycobble +hades_trees:pale_tree +columnia:column_linkangle_down_hades_trees_colwood_red +columnia:column_linkdown_hades_core_stone +columnia:column_linkvertical_hades_trees_colwood_black +columnia:column_linkangle_hades_trees_colwood_black +hades_core:stone_with_mese +hades_windows:window_wood_yellow +columnia:column_linkcrossdown_hades_trees_colwood_uncolored +hades_stairs:slab_cobble +columnia:column_mid_hades_trees_colwood_blue +hades_core:stone_with_iron +hades_stairs:slab_cinnabar +hades_flowerpots:flower_pot_orange +hades_doors:door_wood_jungle_e +columnia:column_linkcross_hades_trees_pale_wood +hades_stairs:slab_colwood_orange +hades_flowerpots:flower_pot_jungle_leaves +hades_core:brick_violet +hades_doors:door_glass_d +columnia:column_crosslink_hades_trees_colwood_brown +columnia:column_link_hades_trees_colwood_brown +columnia:column_top_hades_core_brick_green +hades_stairs:stair_out_magenta +hades_walls:cobble_sandstone +columnia:column_linktee_hades_core_sandstone_volcanic +hades_doors:door_steel_white_a +hades_furnaces:furnace_active +columnia:column_stairsubpillar_hades_trees_colwood_brown +columnia:column_top_hades_trees_colwood_cyan +columnia:column_linkvertical_hades_core_stone_baked +hades_food:tomato_potato_salad +hades_doors:hidden_center +columnia:column_mid_hades_core_obsidianbrick +columnia:column_linkangle_hades_trees_colwood_cyan +hades_tiles:floor_stone_stone +hades_doors:door_dungeon1_e +columnia:column_crosslink_hades_core_basalt +columnia:column_linkvertical_hades_core_stonebrick +columnia:column_linkcrossdown_hades_trees_colwood_dark_green +columnia:column_stairsub_hades_trees_colwood_dark_green +hades_stairs:stair_in_floor_jungle_jungle +hades_stairs:step_in_colwood_violet +hades_tiles:floor_marble_basalt +hades_stairs:stair_in_colwood_white +hades_stairs:stair_floor_marble_marble +columnia:column_linkangle_hades_trees_colwood_dark_grey +columnia:column_linkangle_down_hades_trees_colwood_dark_grey +columnia:column_bottom_hades_core_sandstonebrick +hades_trees:canvas_tree +columnia:column_linktee_hades_trees_colwood_dark_grey +hades_doors:door_wood_lush_e +hades_stairs:slab_floor_stonebaked_stonebaked +columnia:column_mid_hades_trees_jungle_wood +hades_doors:door_chondrite_c +columnia:column_linkcross_hades_core_mossycobble +hades_tiles:floor_stonebaked_stone +columnia:column_linkangle_down_hades_core_cactus_brick +columnia:column_linktee_hades_trees_colwood_grey +columnia:column_linkcrossdown_hades_trees_colwood_green +hades_tiles:floor_pale_jungle +columnia:column_bottom_hades_trees_colwood_green +columnia:column_linkcross_hades_core_cactus_brick +columnia:column_stairsubpillar_hades_core_tuff +columnia:column_linktee_hades_core_stonebrick +columnia:column_bottom_hades_trees_colwood_blue +columnia:column_stairsub_hades_trees_colwood_green +hades_furniture:table_lamp_max +columnia:column_top_hades_trees_colwood_magenta +columnia:column_linktee_down_hades_trees_colwood_magenta +columnia:column_linkcross_hades_trees_colwood_magenta +columnia:column_stairsubpillar_hades_core_cactus_brick +columnia:column_link_hades_trees_colwood_grey +hades_doors:door_steel_bar_c +columnia:column_linktee_hades_core_sandstone +columnia:column_linkdown_hades_trees_colwood_magenta +hades_flowerpots:flower_pot_canvas_sapling +hades_tiles:floor_stonebaked_tuffbaked +columnia:column_top_hades_core_basalt +columnia:column_mid_hades_trees_colwood_orange +columnia:column_linktee_down_hades_trees_colwood_green +hades_stairs:slab_floor_essexite_essexite +columnia:column_linkcrossdown_hades_trees_colwood_orange +columnia:column_linkvertical_hades_trees_colwood_magenta +columnia:column_linktee_hades_trees_colwood_orange +columnia:column_linktee_hades_trees_colwood_red +columnia:column_top_hades_trees_colwood_pink +columnia:column_linkdown_hades_trees_colwood_uncolored +hades_stairs:stair_out_obsidianbrick +columnia:column_linkangle_down_hades_trees_colwood_dark_green +columnia:column_linkangle_hades_trees_colwood_pink +columnia:column_top_hades_trees_colwood_red +hades_stairs:slab_double_floorblock_essexite_gold_block +columnia:column_linkcross_hades_trees_colwood_red +signs_lib:sign_wall_red +hades_trees:canvas_bark +columnia:column_top_hades_core_essexite_brick +columnia:column_mid_hades_trees_colwood_violet +columnia:column_top_hades_trees_colwood_violet +columnia:column_linkdown_hades_trees_colwood_violet +columnia:column_linkcross_hades_trees_colwood_violet +hades_furniture:rusty_bars +columnia:column_top_hades_core_cobble +columnia:column_linkcrossdown_hades_trees_colwood_blue +columnia:column_top_hades_trees_colwood_white +columnia:column_link_hades_trees_colwood_yellow +hades_doors:door_steel_cyan_a +columnia:column_stairsub_hades_core_sandstonebrick +hades_tiles:floor_stone_sandstone +columnia:column_crosslink_hades_trees_colwood_uncolored +columnia:column_stairsub_hades_trees_colwood_white +hades_tiles:floor_jungle_cream +hades_doors:door_dungeon1_b +columnia:column_crosslink_hades_trees_colwood_magenta +columnia:column_mid_hades_core_stonebrick +hades_stairs:stair_out_yellow +hades_core:tuff_baked +columnia:column_linkdown_hades_core_tuff_baked_brick +hades_stairs:stair_out_colwood_pink +columnia:column_linktee_hades_core_lillite +columnia:column_linkcross_hades_trees_colwood_pink +hades_stairs:step_in_pale_wood +columnia:column_linkdown_hades_trees_wood +columnia:column_linkangle_hades_core_brick_pink +hades_stairs:stair_sandstone_volcanic_brick +columnia:column_stairsubpillar_hades_core_sandstonebrick +columnia:column_linkangle_hades_core_brick_violet +hades_stairs:step_out_floor_tuff_tuff +columnia:column_link_hades_trees_jungle_bark +hades_stairs:stair_in_brick +hades_core:cobble_sandstone_volcanic +hades_doors:door_wood_pale_e +columnia:column_linkangle_down_hades_trees_colwood_uncolored +columnia:column_stairsub_hades_trees_jungle_bark +columnia:column_linkcrossdown_hades_core_sandstone_volcanic +columnia:column_crosslink_hades_core_stonebrick +hades_doors:door_stone_a +columnia:column_linktee_hades_trees_pale_bark +columnia:column_linkangle_hades_trees_colwood_violet +columnia:column_mid_hades_core_brick_brown +columnia:column_linktee_hades_trees_colwood_blue +columnia:column_linkvertical_hades_core_cobble_sandstone +columnia:column_linktee_down_hades_core_cobble_sandstone_volcanic +columnia:column_linkdown_hades_core_essexite_brick +hades_doors:door_wood_pale_a +columnia:column_link_hades_trees_colwood_blue +hades_stairs:step_out_brick_dark_grey +columnia:column_mid_hades_core_sandstone_volcanic +columnia:column_top_hades_trees_orange_bark +columnia:column_linkcross_hades_core_brick_violet +hades_stairs:step_in_magenta +columnia:column_crosslink_hades_trees_orange_bark +columnia:column_link_hades_trees_orange_bark +columnia:column_link_hades_core_marble +columnia:column_mid_hades_core_sandstone +columnia:column_linkcross_hades_trees_orange_bark +hades_grass:dead_grass_3 +hades_tiles:floor_sandstone_stone +columnia:column_linktee_hades_trees_orange_bark +hades_stairs:step_in_colwood_pink +columnia:column_linktee_hades_trees_colwood_green +columnia:column_bottom_hades_core_brick_brown +hades_core:orangite +columnia:column_link_hades_trees_jungle_wood +columnia:column_linkangle_hades_trees_canvas_bark +columnia:column_linkangle_down_hades_trees_canvas_bark +columnia:column_linkangle_hades_core_brick_blue +hades_stairs:stair_out_sandstone +columnia:column_stairsubpillar_hades_core_brick_grey +columnia:column_linkangle_down_hades_core_brick_black +columnia:column_linktee_down_hades_core_brick_brown +columnia:column_mid_hades_trees_birch_bark +columnia:column_stairsubpillar_hades_trees_canvas_bark +hades_windows:window_wood_darkgreen +columnia:column_link_hades_trees_colwood_cyan +columnia:column_stairsubpillar_hades_trees_cream_wood +columnia:column_crosslink_hades_core_brick +hades_core:floor_essexite_gold +hades_doors:door_steel_grey_b +columnia:column_linkangle_down_hades_core_brick +columnia:column_linktee_down_hades_core_cactus_brick +columnia:column_linktee_down_hades_core_brick +hades_trees:colwood_black +hades_core:essexite_block +hades_stairs:stair_in_floor_lush_lush +hades_trees:pale_wood +columnia:column_linkcross_hades_core_brick_white +columnia:column_linkcrossdown_hades_core_brick_black +hades_cloth:yellow +hades_stairs:step_colwood_cyan +columnia:column_stairsub_hades_trees_colwood_uncolored +hades_core:bookshelf +columnia:column_stairsubpillar_hades_trees_colwood_pink +hades_tiles:floor_essexitegold_essexite +hades_doors:door_steel_darkgrey_c +columnia:column_mid_hades_core_brick_orange +hades_stairs:slab_pale_wood +hades_flowerpots:flower_pot_cocoa_sapling +columnia:column_bottom_hades_core_brick_cyan +columnia:column_linkdown_hades_core_brick_cyan +hades_furniture:chair_black +hades_tiles:floor_chondrite_tuff +columnia:column_stairsub_hades_trees_pale_wood +columnia:column_linkangle_hades_trees_lush_wood +hades_trees:olive +hades_doors:door_steel_orange_b +hades_doors:trapdoor_jungle_open +columnia:column_top_columnia_rusty_block +columnia:column_linktee_down_hades_trees_jungle_bark +hades_doors:door_stone_b +columnia:column_linkcross_hades_core_stone +columnia:column_crosslink_hades_core_brick_cyan +columnia:column_linkangle_hades_core_brick_dark_green +columnia:column_stairsub_hades_core_brick_dark_green +columnia:column_stairsubpillar_hades_trees_jungle_bark +hades_stairs:slab_floor_chondrite_chondrite +columnia:column_mid_hades_trees_colwood_pink +columnia:column_linkvertical_hades_core_sandstonebrick +hades_core:mossytuff +columnia:column_linktee_down_hades_trees_colwood_pink +columnia:column_linkangle_hades_core_brick_yellow +columnia:column_linkangle_down_hades_core_brick_dark_grey +hades_tiles:floor_wood_cream +columnia:column_mid_hades_core_brick_cyan +columnia:column_linkangle_down_hades_core_brick_green +hades_trees:colwood_orange +columnia:column_linkcross_hades_core_brick_blue +hades_doors:door_steel_black_a +columnia:column_crosslink_hades_core_tuff_brick +columnia:column_linktee_hades_core_brick_blue +columnia:column_linkcross_hades_core_brick_grey +hades_stairs:step_in_grey +columnia:column_linkdown_hades_core_cobble +columnia:column_mid_hades_core_brick_magenta +hades_stairs:stair_brick_green +columnia:column_linktee_down_hades_trees_bark +columnia:column_top_hades_core_cobble_sandstone_volcanic +columnia:column_linktee_hades_core_brick_magenta +hades_chests:chest_white +columnia:column_linkdown_hades_core_obsidianbrick +columnia:column_bottom_hades_core_cinnabar +hades_stairs:stair_in_brick_grey +columnia:column_linkvertical_hades_trees_bark +hades_tiles:floor_stonebaked_chondrite +columnia:column_linktee_down_hades_core_brick_black +columnia:column_stairsub_hades_core_brick_orange +columnia:column_stairsubpillar_hades_core_cobble_sandstone_volcanic +columnia:column_link_hades_core_brick_pink +hades_stairs:step_in_brick_dark_green +columnia:column_linkcrossdown_hades_core_sandstone_volcanic_brick +columnia:column_linktee_down_hades_core_sandstonebrick +hades_tiles:floor_essexite_essexite +columnia:column_linkvertical_hades_core_brick_black +hades_doors:door_dungeon1_d +columnia:column_linkdown_hades_core_brick_violet +hades_stairs:stair_out_copperblock +columnia:column_top_hades_core_chondrite_brick +columnia:column_linktee_hades_core_stone_baked +columnia:column_top_hades_core_brick_black +columnia:column_stairsubpillar_hades_core_olivine +columnia:column_linktee_hades_core_brick +columnia:column_linkdown_hades_core_brick_white +hades_flowerpots:flower_pot +columnia:column_crosslink_hades_core_brick_yellow +columnia:column_mid_hades_core_marble_brick +columnia:column_top_hades_core_marble_brick +columnia:column_crosslink_hades_core_marble_brick +hades_stairs:step_sandstone_volcanic +hades_stairs:step_brick_black +hades_tiles:floor_jungle_wood +columnia:column_linkcrossdown_hades_core_marble_brick +hades_stairs:stair_in_brick_white +columnia:column_linkangle_hades_core_marble_brick +columnia:column_linkangle_down_hades_core_marble_brick +columnia:column_linkvertical_hades_core_mossycobble +columnia:column_stairsub_hades_core_marble_brick +columnia:column_linkcross_hades_trees_colwood_brown +hades_waterplants:waterlily_s3 +columnia:column_linktee_hades_core_chondrite +columnia:column_stairsubpillar_hades_core_stonebrick +columnia:column_bottom_hades_core_brick_red +columnia:column_linkcross_hades_trees_colwood_cyan +hades_stairs:step_in_cobble +columnia:column_bottom_hades_core_marble_brick +columnia:column_linkcross_hades_core_sandstone_volcanic +columnia:column_top_hades_core_obsidianbrick +columnia:column_stairsub_hades_core_brick_black +columnia:column_linkvertical_hades_trees_colwood_cyan +columnia:column_mid_hades_core_basalt_brick +columnia:column_linkdown_hades_core_basalt_brick +columnia:column_linkcross_hades_core_basalt_brick +columnia:column_linkcrossdown_hades_core_brick_cyan +columnia:column_linktee_hades_core_basalt_brick +columnia:column_top_hades_core_brick_blue +columnia:column_stairsub_hades_core_olivine +hades_stairs:stair_out_brick_black +columnia:column_linkcrossdown_hades_trees_colwood_violet +hades_chests:chest_grey +columnia:column_bottom_hades_core_tuff_brick +columnia:column_top_hades_core_brick_grey +columnia:column_linktee_hades_core_obsidianbrick +columnia:column_linkcross_hades_core_tuff_baked +columnia:column_top_hades_core_brick_white +columnia:column_linktee_down_hades_core_tuff_baked +columnia:column_mid_hades_core_tuff_baked_brick +hades_trees:jungle_leaves +hades_stairs:slab_colwood_blue +hades_farming:seed_wheat +columnia:column_linkangle_down_hades_core_essexite +columnia:column_mid_hades_core_essexite_brick +hades_beds:bed_bottom +columnia:column_stairsubpillar_hades_core_essexite_brick +columnia:column_linkdown_hades_core_basalt +columnia:column_linkangle_hades_trees_colwood_brown diff --git a/mods/xcompat/test/nodelist/mineclonia.txt b/mods/xcompat/test/nodelist/mineclonia.txt new file mode 100644 index 0000000..1ab4d6d --- /dev/null +++ b/mods/xcompat/test/nodelist/mineclonia.txt @@ -0,0 +1,3406 @@ +mcl_walls:brick_5 +mcl_walls:brick_6 +pipeworks:storage_tank_6 +mesecons:wire_10111010_on +mesecons:wire_10111010_off +mcl_walls:brick_8 +mesecons:wire_01110001_on +mesecons:wire_01110001_off +mcl_walls:brick_10 +mcl_stairs:slab_jungle_bark +mcl_stairs:slab_jungle_bark_top +mcl_walls:brick_12 +mesecons:wire_11111010_on +mesecons:wire_11111010_off +mesecons:wire_11110001_on +mesecons:wire_11110001_off +mcl_walls:brick_15 +mcl_walls:brick_16 +pipeworks:expansion_tank_8 +mcl_walls:brick_21 +mesecons:wire_01100110_on +mesecons:wire_01100110_off +mesecons:wire_10011001_on +mesecons:wire_10011001_off +mcl_walls:sandstone_1 +mcl_walls:sandstone_2 +mcl_walls:sandstone_3 +pipeworks:expansion_tank_9 +mesecons:wire_11100110_on +mesecons:wire_11100110_off +mesecons_pressureplates:pressure_plate_jungle_on +mesecons:wire_11011001_on +mesecons:wire_11011001_off +pipeworks:storage_tank_9 +mesecons_button:button_jungle_off +mcl_ocean:tube_coral +mcl_stairs:slab_deepslate_cobbled_top +mcl_stairs:slab_deepslate_cobbled_double +mesecons:wire_01110110_on +mesecons:wire_01110110_off +mesecons:wire_10111001_on +mesecons:wire_10111001_off +mcl_ocean:dead_tube_coral_fan +mcl_walls:sandstone_13 +mcl_deepslate:deepslatecobbledwall_0 +mcl_walls:sandstone_14 +mcl_deepslate:deepslatecobbledwall_1 +mesecons:wire_11110110_on +mesecons:wire_11110110_off +mcl_walls:sandstone_16 +mesecons:wire_11111001_on +mesecons:wire_11111001_off +mcl_ocean:dead_brain_coral +mcl_walls:redsandstone_0 +mcl_stairs:slab_deepslate_tiles_cracked_top +mcl_walls:redsandstone_1 +mesecons:wire_11101110_on +mesecons:wire_11101110_off +mesecons:wire_01010101_on +mcl_ocean:bubble_coral_block +homedecor:painting_15 +mcl_ocean:dead_bubble_coral_block +homedecor:banister_wood_diagonal_right_grey +mesecons:wire_11111110_on +mesecons:wire_11111110_off +mcl_ocean:dead_bubble_coral +homedecor:banister_wood_diagonal_right_red +homedecor:banister_wood_diagonal_right_vermilion +mcl_ocean:bubble_coral_fan +homedecor:banister_wood_diagonal_right_orange +mcl_ocean:dead_bubble_coral_fan +homedecor:banister_wood_diagonal_right_amber +mesecons:wire_00010001_on +mcl_ocean:fire_coral_block +homedecor:banister_wood_diagonal_right_lime +mcl_ocean:dead_fire_coral_block +homedecor:banister_wood_diagonal_right_chartreuse +mcl_trees:stripped_spruce +homedecor:banister_wood_diagonal_right_harlequin +mcl_ocean:fire_coral +homedecor:banister_wood_diagonal_right_green +mcl_ocean:dead_fire_coral +mcl_trees:wood_spruce +homedecor:banister_wood_diagonal_right_spring +mcl_ocean:fire_coral_fan +mcl_fences:red_nether_brick_fence +mcl_trees:bark_stripped_spruce +mcl_trees:bark_spruce +mcl_monster_eggs:monster_egg_stonebrickcarved +homedecor:banister_wood_diagonal_right_cerulean +mcl_ocean:horn_coral_block +homedecor:banister_wood_diagonal_right_azure +mcl_fences:nether_brick_fence_gate +mcl_fences:nether_brick_fence_gate_open +mcl_ocean:horn_coral +mcl_ocean:dead_horn_coral +mcl_ocean:horn_coral_fan +mcl_ocean:dead_horn_coral_fan +mcl_trees:leaves_spruce +air +mcl_ocean:seagrass_dirt +mcl_ocean:seagrass_sand +mcl_ocean:seagrass_redsand +mcl_ocean:seagrass_gravel +mesecons_pressureplates:pressure_plate_crimson_off +mesecons_pressureplates:pressure_plate_crimson_on +mesecons_button:button_crimson_off +mcl_walls:cobble +mcl_walls:mossycobble +mcl_walls:andesite +mcl_walls:granite +mesecons_button:button_crimson_on +mcl_walls:diorite +mcl_walls:brick +mcl_walls:sandstone +mcl_walls:redsandstone +mcl_walls:stonebrick +mcl_walls:stonebrickmossy +mcl_walls:prismarine +mcl_walls:endbricks +mcl_walls:netherbrick +mcl_walls:rednetherbrick +mcl_walls:mudbrick +mcl_walls:cobble_0 +mcl_walls:cobble_1 +mcl_walls:cobble_2 +mcl_walls:cobble_3 +mcl_walls:cobble_4 +mcl_walls:cobble_5 +mcl_walls:cobble_6 +mcl_walls:cobble_7 +mcl_walls:cobble_8 +mcl_walls:cobble_9 +mcl_walls:cobble_10 +mcl_walls:cobble_11 +mcl_walls:cobble_12 +mcl_walls:cobble_13 +pipeworks:accelerator_tube_9 +mcl_walls:cobble_14 +pipeworks:tube_1 +mcl_walls:cobble_15 +mcl_walls:cobble_16 +mcl_walls:cobble_21 +mcl_walls:mossycobble_0 +mcl_walls:mossycobble_1 +mcl_walls:mossycobble_2 +mcl_walls:mossycobble_3 +mcl_walls:mossycobble_4 +mcl_walls:mossycobble_5 +pipeworks:mese_sand_tube_2 +mcl_walls:mossycobble_6 +mcl_flowerpots:flower_pot_warped_fungus +mcl_walls:mossycobble_7 +mcl_walls:mossycobble_8 +pipeworks:mese_sand_tube_4 +mcl_walls:mossycobble_9 +mcl_walls:mossycobble_10 +homedecor:microwave_oven_active +mcl_walls:mossycobble_11 +pipeworks:mese_sand_tube_6 +mcl_walls:mossycobble_12 +mcl_walls:mossycobble_13 +pipeworks:one_way_tube +mcl_walls:mossycobble_14 +pipeworks:mese_sand_tube_8 +mcl_walls:mossycobble_15 +mcl_walls:mossycobble_16 +mcl_walls:mossycobble_21 +pipeworks:mese_sand_tube_10 +homedecor:microwave_oven_active_locked +pipeworks:tube_2 +mcl_walls:andesite_0 +mcl_walls:andesite_1 +pipeworks:tube_3 +mcl_walls:andesite_2 +mcl_walls:andesite_3 +mcl_walls:andesite_4 +mcl_stairs:stair_lapisblock_inner +mcl_walls:andesite_5 +mcl_walls:andesite_6 +pipeworks:tube_5 +mcl_walls:andesite_7 +mcl_walls:andesite_8 +mcl_stairs:slab_lapisblock_top +mcl_walls:andesite_9 +mcl_walls:andesite_10 +mcl_walls:andesite_11 +pipeworks:tube_7 +mcl_walls:andesite_12 +pipeworks:crossing_tube_2 +mcl_walls:andesite_13 +mcl_walls:andesite_14 +mcl_walls:andesite_15 +pipeworks:crossing_tube_4 +pipeworks:tube_9 +pipeworks:crossing_tube_5 +pipeworks:crossing_tube_6 +pipeworks:crossing_tube_7 +homedecor:kitchen_cabinet_colorable_locked +pipeworks:crossing_tube_8 +mcl_signs:wall_sign_cherry_blossom +pipeworks:crossing_tube_9 +homedecor:kitchen_cabinet_colored_locked +pipeworks:crossing_tube_10 +pipeworks:crossing_tube_compatibility +homedecor:kitchen_cabinet_colorable_with_drawers_locked +mesecons_pressureplates:pressure_plate_cherry_blossom_off +mesecons_pressureplates:pressure_plate_cherry_blossom_on +mesecons_button:button_cherry_blossom_off +homedecor:kitchen_cabinet_colored_granite +homedecor:kitchen_cabinet_colorable_granite_locked +mesecons_button:button_cherry_blossom_on +mcl_flowerpots:flower_pot_sapling_cherry_blossom +homedecor:kitchen_cabinet_colored_with_drawers_granite +mcl_heads:zombie_ceiling +homedecor:kitchen_cabinet_colorable_with_drawers_granite +mcl_heads:zombie_wall +homedecor:kitchen_cabinet_colored_with_drawers_granite_locked +mcl_heads:creeper_ceiling +mcl_heads:creeper_wall +homedecor:kitchen_cabinet_colorable_marble_locked +homedecor:kitchen_cabinet_colorable_marble +homedecor:banister_wood_diagonal_right_sapphire +homedecor:banister_wood_diagonal_right_blue +mcl_heads:steve_wall +homedecor:banister_wood_diagonal_right_violet +homedecor:kitchen_cabinet_colored_with_drawers_marble +homedecor:banister_wood_diagonal_right_mulberry +homedecor:banister_wood_diagonal_right_magenta +homedecor:banister_wood_diagonal_right_fuchsia +homedecor:kitchen_cabinet_colorable_with_drawers_marble_locked +homedecor:banister_wood_diagonal_right_rose +mcl_bamboo:bamboo_mosaic +homedecor:banister_wood_diagonal_right_crimson +homedecor:banister_white_dark_diagonal_right +homedecor:banister_brass_diagonal_right +mcl_bamboo:scaffolding_horizontal +homedecor:banister_wrought_iron_diagonal_right +mcl_flowerpots:flower_pot_bamboo +mcl_stairs:slab_bamboo +mcl_stairs:slab_bamboo_top +mcl_stairs:slab_bamboo_double +mcl_trees:tree_bamboo +mcl_trees:wood_bamboo +mcl_stairs:slab_bamboo_bark +mcl_stairs:slab_bamboo_bark_top +mcl_stairs:slab_bamboo_bark_double +mcl_flowerpots:flower_pot_allium +mcl_flowerpots:flower_pot_azure_bluet +mcl_flowerpots:flower_pot_blue_orchid +mcl_flowerpots:flower_pot_dandelion +mcl_flowerpots:flower_pot_fern +mcl_flowerpots:flower_pot_oxeye_daisy +mcl_trees:stripped_bamboo +mcl_flowerpots:flower_pot_tulip_orange +mcl_flowerpots:flower_pot_tulip_pink +mcl_flowerpots:flower_pot_tulip_red +mcl_flowerpots:flower_pot_tulip_white +mcl_signs:wall_sign_bamboo +mcl_flowers:allium +mcl_signs:standing_sign_bamboo +mcl_flowers:blue_orchid +mcl_trees:bark_stripped_bamboo +mcl_trees:bark_bamboo +mcl_flowers:double_fern_top +mcl_flowers:fern +mcl_flowers:lilac +mcl_flowers:lilac_top +mcl_flowers:oxeye_daisy +mcl_flowers:peony +mesecons_pressureplates:pressure_plate_bamboo_off +mcl_flowers:poppy +mesecons_pressureplates:pressure_plate_bamboo_on +mcl_flowers:rose_bush_top +mcl_flowers:sunflower +mcl_flowers:sunflower_top +mesecons_button:button_bamboo_off +mcl_bells:bell +mcl_flowers:double_grass_top +mcl_flowers:tulip_orange +mesecons_button:button_bamboo_on +mcl_flowers:tulip_red +mcl_flowers:tulip_white +mcl_flowers:waterlily +mcl_heads:creeper +mcl_heads:skeleton +mcl_fences:bamboo_fence +mcl_heads:wither_skeleton +mcl_fences:bamboo_fence_gate +mcl_fences:bamboo_fence_gate_open +mcl_core:ladder +mcl_core:lava_source +mcl_core:lava_flowing +mcl_core:water_source +mcl_core:water_flowing +mclx_core:river_water_source +mclx_core:river_water_flowing +mcl_maps:filled_map_mcl_skins_base_1B47A57FF_male_crea +mcl_maps:filled_map_mcl_skins_base_18D471DFF_female_crea +mcl_maps:filled_map_mcl_skins_base_18D471DFF_male_crea +mcl_maps:filled_map_character_male_crea +mcl_doors:door_bamboo_b_1 +mcl_nether:nether_wart_1 +mcl_nether:nether_wart_2 +mcl_nether:nether_wart +mcl_amethyst:amethyst_cluster +mcl_amethyst:budding_amethyst_block +mcl_maps:filled_map_mcl_skins_base_1B47A57FF_female_surv +mcl_doors:door_bamboo_b_2 +mcl_maps:filled_map_mcl_skins_base_1B47A57FF_male_surv +mcl_doors:door_bamboo_t_2 +mcl_maps:filled_map_mcl_skins_base_18D471DFF_female_surv +mcl_doors:trapdoor_bamboo +mcl_maps:filled_map_mcl_skins_base_18D471DFF_male_surv +mcl_maps:filled_map_character_male_surv +mcl_maps:filled_map_mcl_skins_character_1_female_surv +mcl_comparators:comparator_on_sub +mcl_comparators:comparator_off_sub +mcl_comparators:comparator_on_comp +mcl_comparators:comparator_off_comp +mesecons_delayer:delayer_off_1 +mcl_doors:trapdoor_bamboo_open +mesecons_delayer:delayer_off_3 +mesecons_delayer:delayer_off_4 +mesecons_delayer:delayer_on_1 +mesecons_delayer:delayer_on_2 +mcl_stairs:stair_bamboo +mcl_mushrooms:brown_mushroom_block_cap_101110 +mcl_amethyst:tinted_glass +mcl_stairs:stair_bamboo_inner +mesecons_torch:mesecon_torch_on_wall +mcl_mushrooms:brown_mushroom_block_cap_110000 +mcl_ocean:sea_pickle_1_dead_brain_coral_block +mcl_mushrooms:brown_mushroom_block_cap_110001 +mcl_ocean:sea_pickle_3_dead_brain_coral_block +mcl_mushrooms:brown_mushroom_block_cap_110010 +mcl_amethyst:medium_amethyst_bud +mcl_mushrooms:brown_mushroom_block_cap_110011 +mcl_stairs:stair_bamboo_bark_outer +mcl_amethyst:large_amethyst_bud +mcl_chests:dark_green_shulker_box_small +mcl_mushrooms:brown_mushroom_block_cap_110101 +mcl_chests:lightblue_shulker_box_small +mcl_mushrooms:brown_mushroom_block_cap_110110 +mcl_chests:orange_shulker_box_small +mcl_mushrooms:brown_mushroom_block_cap_110111 +mcl_chests:pink_shulker_box_small +mcl_mushrooms:brown_mushroom_block_cap_111000 +mcl_chests:red_shulker_box_small +mcl_mushrooms:brown_mushroom_block_cap_111001 +mcl_chests:white_shulker_box_small +mcl_mushrooms:brown_mushroom_block_cap_111010 +mcl_core:snow +mcl_mushrooms:brown_mushroom_block_cap_111011 +mcl_core:snow_3 +mcl_core:snow_4 +mesecons:wire_11010101_on +mesecons:wire_11010101_off +mcl_core:snow_7 +mcl_mushrooms:brown_mushroom_block_cap_111110 +mcl_torches:torch +mcl_torches:torch_wall +mcl_farming:wheat +mcl_farming:wheat_2 +mcl_farming:wheat_3 +mcl_farming:wheat_4 +mcl_farming:wheat_5 +mcl_farming:wheat_6 +mcl_farming:wheat_7 +mcl_deepslate:deepslate_bricks_cracked +pipeworks:tag_tube_110100 +homedecor:wood_table_large_square +pipeworks:tag_tube_110101 +mcl_stairs:slab_andesite_smooth +mcl_stairs:slab_andesite_smooth_top +mcl_stairs:slab_andesite_smooth_double +mesecons:wire_11110101_on +mcl_amethyst:small_amethyst_bud +pipeworks:tag_tube_110111 +pipeworks:tag_tube_111000 +mcl_stairs:slab_deepslate_bricks +mcl_stairs:slab_deepslate_bricks_top +mcl_stairs:slab_deepslate_bricks_double +mcl_stairs:stair_granite_smooth +homedecor:banister_wood_diagonal_left_grey +mcl_stairs:stair_granite_smooth_outer +mcl_stairs:stair_granite_smooth_inner +mcl_deepslate:deepslatebrickswall +mcl_copper:block_raw +homedecor:banister_wood_diagonal_left_red +mcl_stairs:slab_granite_smooth +mcl_stairs:slab_granite_smooth_top +mcl_stairs:slab_granite_smooth_double +mesecons:wire_11111101_on +mesecons:wire_11111101_off +homedecor:banister_wood_diagonal_left_vermilion +mcl_deepslate:deepslatebrickswall_4 +mcl_deepslate:deepslatebrickswall_5 +mcl_deepslate:deepslatebrickswall_6 +mcl_deepslate:deepslatebrickswall_7 +mcl_stairs:stair_diorite_smooth +mesecons:wire_00110011_on +mcl_stairs:stair_diorite_smooth_outer +mcl_stairs:stair_diorite_smooth_inner +mcl_deepslate:deepslatebrickswall_10 +homedecor:banister_wood_horizontal_yellow +mcl_deepslate:deepslatebrickswall_11 +homedecor:banister_wood_diagonal_left_yellow +mcl_deepslate:deepslatebrickswall_12 +mcl_stairs:slab_diorite_smooth +mcl_stairs:slab_diorite_smooth_top +mcl_stairs:slab_diorite_smooth_double +mesecons:wire_10110011_off +homedecor:banister_wood_diagonal_left_lime +mcl_deepslate:deepslatebrickswall_15 +building_blocks:Tar +mcl_deepslate:deepslatebrickswall_16 +homedecor:banister_wood_horizontal_chartreuse +mcl_deepslate:deepslatebrickswall_21 +homedecor:banister_wood_diagonal_left_chartreuse +mcl_stairs:stair_stonebrickmossy +mesecons:wire_01110011_off +mcl_stairs:stair_stonebrickmossy_outer +mcl_stairs:stair_stonebrickmossy_inner +building_blocks:fakegrass +homedecor:banister_wood_horizontal_green +building_blocks:hardwood +homedecor:simple_bench +mcl_stairs:slab_stonebrickmossy +mcl_stairs:slab_stonebrickmossy_top +mcl_stairs:slab_stonebrickmossy_double +mesecons:wire_11110011_off +homedecor:kitchen_chair_wood +homedecor:office_chair_basic +homedecor:office_chair_upscale +homedecor:banister_wood_horizontal_spring +homedecor:banister_wood_diagonal_left_spring +mesecons:wire_10111011_on +mesecons:wire_10111011_off +pipeworks:spigot_pouring +mcl_villages:crop_flower_2 +mcl_wool:white +mcl_stairs:stair_copper_cut +pipeworks:fountainhead +pipeworks:fountainhead_pouring +mcl_stairs:stair_copper_cut_outer +mcl_stairs:stair_copper_cut_inner +homedecor:banister_wood_diagonal_left_cyan +mesecons:wire_11111011_on +mesecons:wire_11111011_off +mcl_wool:yellow_carpet +homedecor:banister_wood_horizontal_cerulean +mcl_stairs:slab_copper_cut +mcl_stairs:slab_copper_cut_top +mcl_stairs:slab_copper_cut_double +building_blocks:woodglass +homedecor:banister_wood_horizontal_azure +homedecor:banister_wood_diagonal_left_azure +mesecons:wire_01110111_on +mesecons:wire_01110111_off +homedecor:banister_wood_horizontal_sapphire +mcl_stairs:stair_copper_exposed_cut +homedecor:banister_wood_diagonal_left_sapphire +mcl_stairs:stair_copper_exposed_cut_outer +mcl_stairs:stair_copper_exposed_cut_inner +homedecor:banister_wood_horizontal_blue +mcl_lanterns:lantern_ceiling +mesecons:wire_11110111_on +mesecons:wire_11110111_off +mcl_stairs:slab_copper_exposed_cut +mcl_stairs:slab_copper_exposed_cut_top +mcl_stairs:slab_copper_exposed_cut_double +homedecor:banister_wood_diagonal_left_indigo +mcl_lanterns:soul_lantern_ceiling +mcl_wool:magenta +mesecons:wire_11111111_on +mesecons:wire_11111111_off +building_blocks:BWtile +mcl_wool:magenta_carpet +homedecor:banister_wood_horizontal_mulberry +building_blocks:Fireplace +mcl_wool:blue +homedecor:banister_wood_horizontal_magenta +homedecor:banister_wood_diagonal_left_magenta +mcl_flowerpots:flower_pot_deadbush +mesecons_walllever:wall_lever_off +mcl_wool:green +mcl_core:light_0 +mcl_wool:green_carpet +mesecons_walllever:wall_lever_on +mcl_core:light_1 +mcl_wool:brown +mcl_core:light_2 +mcl_core:light_3 +mcl_fletching_table:fletching_table +mcl_core:light_4 +mcl_core:light_5 +mcl_core:light_6 +mcl_core:light_7 +mcl_core:light_8 +mesecons_solarpanel:solar_panel_on +mcl_core:light_9 +mcl_cartography_table:cartography_table +mcl_core:light_10 +mesecons_solarpanel:solar_panel_inverted_off +mcl_core:light_11 +mcl_core:light_12 +mcl_core:light_13 +mcl_core:light_14 +homedecor:shingle_side_glass +homedecor:skylight +homedecor:shingle_outer_corner_terracotta +homedecor:shingle_inner_corner_terracotta +homedecor:shingle_side_terracotta +homedecor:shingle_inner_corner_wood +homedecor:shingle_outer_corner_wood +homedecor:shingle_side_wood +homedecor:fence_picket_white +mcl_chests:yellow_shulker_box +homedecor:fence_privacy_corner +mcl_chests:white_shulker_box +mcl_chests:dark_grey_shulker_box +homedecor:fence_privacy +mcl_chests:blue_shulker_box +pipeworks:filter +pipeworks:mese_filter +mcl_chests:green_shulker_box +mcl_chests:magenta_shulker_box +homedecor:fence_barbed_wire +mcl_chests:black_shulker_box +mcl_chests:red_shulker_box +mcl_chests:pink_shulker_box +mcl_chests:brown_shulker_box +mcl_chests:dark_green_shulker_box +mcl_chests:orange_shulker_box +mcl_chests:cyan_shulker_box +mcl_chests:lightblue_shulker_box +mcl_chests:grey_shulker_box +mcl_blackstone:blackstone_chiseled_polished +mcl_blackstone:blackstone_brick_polished +mcl_stairs:slab_blackstone_polished +mcl_blackstone:nether_gold +mcl_blackstone:blackstone_gilded +homedecor:digital_clock +homedecor:analog_clock_wood +homedecor:grandfather_clock +homedecor:analog_clock_plastic +mcl_walls:endbricks_12 +mcl_walls:endbricks_13 +mcl_composters:composter +mcl_walls:endbricks_15 +mcl_walls:endbricks_16 +mcl_walls:endbricks_21 +mcl_composters:composter_ready +mcl_cauldrons:cauldron +mcl_walls:netherbrick_0 +mcl_walls:netherbrick_1 +mcl_composters:composter_1 +mcl_composters:composter_2 +mcl_composters:composter_3 +mcl_composters:composter_4 +mcl_composters:composter_5 +mcl_composters:composter_6 +mcl_composters:composter_7 +mcl_walls:netherbrick_5 +mcl_walls:netherbrick_6 +mcl_walls:netherbrick_7 +mcl_walls:netherbrick_8 +mcl_walls:netherbrick_9 +mcl_walls:netherbrick_10 +mcl_trees:bark_oak +mcl_walls:netherbrick_11 +mcl_walls:netherbrick_12 +mcl_walls:netherbrick_13 +mesecons:wire_00000000_off +mcl_walls:netherbrick_14 +mcl_walls:netherbrick_15 +mcl_brewing:stand_000 +mcl_walls:netherbrick_16 +mcl_walls:netherbrick_21 +homedecor:desk_fan +mcl_walls:rednetherbrick_0 +mcl_monster_eggs:monster_egg_stonebrickcracked +mcl_monster_eggs:monster_egg_stonebrick +mcl_walls:rednetherbrick_2 +mcl_trees:leaves_oak +mcl_walls:rednetherbrick_3 +mcl_walls:rednetherbrick_4 +mcl_walls:rednetherbrick_5 +mcl_walls:rednetherbrick_6 +mcl_walls:rednetherbrick_7 +mcl_walls:rednetherbrick_8 +mesecons:wire_10000000_on +mesecons:wire_10000000_off +mcl_walls:rednetherbrick_10 +mcl_walls:rednetherbrick_11 +mcl_walls:rednetherbrick_12 +mcl_walls:rednetherbrick_13 +mcl_walls:rednetherbrick_14 +mcl_fences:oak_fence_gate +mcl_walls:rednetherbrick_15 +mcl_walls:rednetherbrick_16 +mcl_walls:rednetherbrick_21 +homedecor:medicine_cabinet_open +mcl_trees:leaves_acacia +mcl_panes:pane_white_flat +mcl_walls:mudbrick_1 +mcl_nether:magma +mcl_walls:mudbrick_2 +ontime_clocks:green_digital +mcl_walls:mudbrick_4 +mcl_fences:acacia_fence +mcl_walls:mudbrick_5 +mcl_fences:acacia_fence_gate +mcl_doors:door_oak_b_1 +ontime_clocks:red_digital +mcl_walls:mudbrick_7 +mcl_walls:mudbrick_8 +mcl_doors:door_oak_t_1 +ontime_clocks:white +mcl_doors:door_oak_b_2 +ontime_clocks:frameless_black +mcl_tnt:tnt +mcl_walls:mudbrick_12 +mcl_doors:trapdoor_oak +ontime_clocks:frameless_gold +mcl_stairs:slab_prismarine_dark +mcl_doors:door_acacia_b_1 +mcl_amethyst:amethyst_block +ontime_clocks:frameless_white +mcl_walls:mudbrick_16 +mcl_doors:door_acacia_t_1 +mcl_amethyst:calcite +mcl_blackstone:basalt_smooth +mcl_doors:door_acacia_b_2 +mcl_doors:door_acacia_t_2 +mcl_doors:trapdoor_acacia +mcl_raw_ores:raw_iron_block +mcl_anvils:anvil_damage_2 +mcl_stairs:stair_oak_outer +mcl_stairs:stair_oak_inner +mcl_panes:pane_magenta_flat +mcl_stairs:stair_oak_bark +mcl_raw_ores:raw_gold_block +mcl_stairs:stair_oak_bark_outer +mcl_stairs:stair_oak_bark_inner +mcl_stairs:stair_acacia +homedecor:shingle_outer_corner_asphalt +mcl_stairs:stair_acacia_outer +mcl_stairs:stair_acacia_inner +mcl_farming:soil +mcl_farming:soil_wet +mcl_stairs:slab_oak_top +mcl_stairs:slab_oak_double +homedecor:plasma_lamp_6 +mcl_panes:pane_magenta +homedecor:ground_lantern_6 +mcl_stairs:stair_acacia_bark_outer +mcl_mangrove:propagule +mcl_mangrove:mangrove_roots +homedecor:ceiling_lantern_6 +mcl_panes:pane_blue_flat +mcl_stairs:slab_oak_bark +mcl_sponges:sponge +mcl_stairs:slab_oak_bark_double +homedecor:lattice_lantern_small_6 +homedecor:desk_lamp_6 +mcl_stairs:stair_concrete_magenta +homedecor:ceiling_lamp_6 +mcl_mangrove:hanging_propagule_1 +mcl_end:purpur_block +mcl_signs:wall_sign_oak +mcl_panes:pane_blue +mcl_itemframes:frame +mcl_stairs:slab_concrete_magenta_double +homedecor:glowlight_half_7 +mcl_mangrove:water_logged_roots +mcl_mangrove:river_water_logged_roots +homedecor:chimney +mcl_panes:pane_green_flat +homedecor:doghouse +steel:plate_soft +steel:plate_rusted +homedecor:plasma_lamp_7 +mesecons_pressureplates:pressure_plate_oak_off +mcl_signs:wall_sign_dark_oak +mesecons_pressureplates:pressure_plate_oak_on +mcl_stairs:stair_concrete_blue +homedecor:hanging_lantern_7 +mcl_stairs:stair_concrete_blue_inner +mesecons_button:button_oak_off +homedecor:ceiling_lantern_7 +mcl_pottery_sherds:pot +mcl_panes:pane_green +mcl_stairs:slab_concrete_blue_top +mesecons_pressureplates:pressure_plate_dark_oak_on +steel:grate_hard +homedecor:desk_lamp_7 +mesecons_button:button_dark_oak_off +mcl_trees:stripped_mangrove +mcl_trees:tree_mangrove +mcl_panes:pane_brown_flat +mesecons_button:button_dark_oak_on +signs_road:black_left_sign +mcl_trees:wood_mangrove +mcl_flowerpots:flower_pot_sapling_dark_oak +signs_road:black_right_sign +homedecor:swing +mcl_trees:bark_stripped_mangrove +mcl_trees:bark_mangrove +mcl_stairs:stair_concrete_green_inner +signs_road:white_left_sign +steel:strut_mount +signs_road:white_right_sign +mcl_panes:pane_brown +mcl_stairs:slab_concrete_green_top +homedecor:plasma_lamp_8 +signs_road:blue_left_sign +homedecor:ground_lantern_8 +signs_road:blue_right_sign +mcl_farming:potato_1 +homedecor:hanging_lantern_8 +mcl_panes:pane_black_flat +mcl_farming:potato +homedecor:ceiling_lantern_8 +homedecor:lattice_lantern_large_8 +steel:shingle_side_roofing +homedecor:lattice_lantern_small_8 +mcl_stairs:stair_concrete_brown_outer +homedecor:desk_lamp_8 +steel:shingle_outer_corner_roofing +steel:shingle_inner_corner_roofing +homedecor:ceiling_lamp_8 +mcl_farming:potato_2 +mcl_farming:potato_3 +mcl_farming:potato_4 +mcl_farming:potato_5 +mcl_farming:potato_6 +mcl_farming:potato_7 +homedecor:standing_lamp_8 +mcl_trees:wood_jungle +homedecor:glowlight_half_9 +homedecor:glowlight_quarter_9 +mcl_trees:bark_stripped_jungle +mcl_trees:bark_jungle +mcl_beds:respawn_anchor +mcl_stairs:stair_concrete_black_outer +mesecons_torch:mesecon_torch_overheated +mesecons_torch:mesecon_torch_overheated_wall +homedecor:stonepath +homedecor:hanging_lantern_9 +mcl_fences:crimson_fence +pipeworks:tag_tube_000000 +homedecor:ceiling_lantern_9 +mcl_stairs:slab_concrete_black_top +pipeworks:tag_tube_000001 +homedecor:lattice_lantern_large_9 +pipeworks:tag_tube_000010 +homedecor:lattice_lantern_small_9 +homedecor:lattice_wood +pipeworks:tag_tube_000011 +homedecor:desk_lamp_9 +pipeworks:tag_tube_000100 +mcl_books:bookshelf +homedecor:television +pipeworks:tag_tube_000101 +homedecor:table_lamp_9 +pipeworks:tag_tube_000110 +homedecor:tv +homedecor:standing_lamp_9 +pipeworks:tag_tube_000111 +homedecor:curtain_open +pipeworks:tag_tube_001000 +mcl_doors:door_crimson_b_1 +mcl_farming:beetroot_0 +pipeworks:tag_tube_001001 +homedecor:glowlight_small_cube_10 +homedecor:lattice_white_wood_vegetal +mcl_farming:beetroot_1 +mcl_farming:beetroot_2 +pipeworks:tag_tube_001011 +mcl_farming:beetroot +pipeworks:tag_tube_001100 +pipeworks:tag_tube_001101 +pipeworks:tag_tube_001110 +homedecor:shrubbery_yellow +mcl_stairs:stair_concrete_silver +pipeworks:tag_tube_001111 +mcl_stairs:stair_concrete_silver_outer +mcl_stairs:stair_concrete_silver_inner +pipeworks:tag_tube_010000 +homedecor:shutter_colored +pipeworks:tag_tube_010001 +mcl_stairs:slab_concrete_silver +pipeworks:tag_tube_010010 +mcl_stairs:slab_concrete_silver_double +homedecor:shrubbery_red +pipeworks:tag_tube_010011 +homedecor:table_lamp_10 +pipeworks:tag_tube_010100 +homedecor:standing_lamp_10 +pipeworks:tag_tube_010101 +homedecor:glowlight_half_11 +pipeworks:tag_tube_010110 +homedecor:glowlight_quarter_11 +pipeworks:tag_tube_010111 +mcl_stairs:stair_concrete_light_blue +pipeworks:tag_tube_011000 +mcl_stairs:stair_concrete_light_blue_inner +homedecor:plasma_lamp_11 +pipeworks:tag_tube_011001 +homedecor:window_plain +homedecor:blinds_thin +pipeworks:tag_tube_011010 +mcl_farming:sweet_berry_bush_1 +mesecons_pistons:piston_down_pusher_normal +pipeworks:tag_tube_011011 +mcl_core:snowblock +pipeworks:tag_tube_011100 +mcl_farming:sweet_berry_bush_0 +mesecons_pistons:piston_down_pusher_sticky +mcl_farming:sweet_berry_bush_3 +mcl_farming:sweet_berry_bush_2 +mcl_stairs:slab_crimson_bark +pipeworks:tag_tube_011110 +mcl_stairs:slab_crimson_bark_double +pipeworks:tag_tube_011111 +pipeworks:tag_tube_100000 +mcl_stairs:stair_concrete_orange_outer +pipeworks:tag_tube_100001 +pipeworks:tag_tube_100010 +mcl_signs:wall_sign_crimson +pipeworks:tag_tube_100011 +mcl_stairs:slab_concrete_orange_top +mcl_stairs:slab_concrete_orange_double +pipeworks:tag_tube_100100 +pipeworks:tag_tube_100101 +homedecor:curtainrod_brass +pipeworks:tag_tube_100110 +mcl_lectern:lectern +pipeworks:tag_tube_100111 +homedecor:curtainrod_wrought_iron +pipeworks:tag_tube_101000 +ignore +pipeworks:tag_tube_101001 +pipeworks:tag_tube_101010 +homedecor:desk_locked +pipeworks:tag_tube_101011 +homedecor:stained_glass +mcl_stairs:slab_stone_rough_top +mcl_stairs:slab_stone_rough_double +pipeworks:tag_tube_101101 +mcl_stairs:stair_concrete_lime_inner +pipeworks:tag_tube_101110 +homedecor:calendar +pipeworks:tag_tube_101111 +mcl_stairs:slab_concrete_lime +mcl_stairs:slab_concrete_lime_top +pipeworks:tag_tube_110000 +mcl_stairs:slab_stone +mcl_stairs:slab_stone_top +mcl_stairs:slab_stone_double +mcl_blackstone:soul_torch +mcl_stairs:stair_andesite +mcl_stairs:stair_concrete_purple +mcl_stairs:stair_andesite_outer +mcl_stairs:stair_andesite_inner +mcl_stairs:stair_concrete_purple_inner +pipeworks:sand_tube_2 +mcl_stairs:slab_andesite +mcl_stairs:slab_andesite_top +mcl_stairs:slab_andesite_double +pipeworks:sand_tube_4 +pipeworks:sand_tube_5 +pipeworks:sand_tube_6 +mcl_mushrooms:red_mushroom_block_stem_full +pipeworks:sand_tube_7 +mcl_stairs:stair_granite +mcl_stairs:stair_granite_outer +mcl_stairs:stair_granite_inner +mcl_mushrooms:red_mushroom_block_cap_111111 +mcl_mushrooms:red_mushroom_block_cap_000000 +mcl_stairs:stair_concrete_grey_outer +pipeworks:sand_tube_10 +mcl_stairs:slab_granite +mcl_stairs:slab_granite_top +mcl_stairs:slab_granite_double +mcl_mushrooms:red_mushroom_block_cap_000001 +mcl_stairs:slab_concrete_grey +mcl_stairs:slab_concrete_grey_top +mcl_stairs:slab_concrete_grey_double +mcl_deepslate:deepslatecobbledwall_3 +mcl_deepslate:deepslatecobbledwall_4 +mcl_deepslate:deepslatecobbledwall_5 +mcl_deepslate:deepslatecobbledwall_6 +mcl_deepslate:deepslatecobbledwall_7 +mcl_deepslate:deepslatecobbledwall_8 +mcl_deepslate:deepslatecobbledwall_9 +mcl_deepslate:deepslatecobbledwall_10 +mcl_stairs:stair_concrete_cyan_inner +mcl_deepslate:deepslatecobbledwall_11 +mcl_mushrooms:red_mushroom_block_cap_000101 +mcl_colorblocks:concrete_powder_green +mcl_deepslate:deepslatecobbledwall_13 +mcl_colorblocks:concrete_green +mcl_deepslate:deepslatecobbledwall_14 +mcl_stairs:slab_concrete_cyan_double +mcl_mushrooms:red_mushroom_block_cap_000110 +mcl_deepslate:deepslatecobbledwall_16 +mcl_deepslate:deepslatecobbledwall_21 +mcl_mushrooms:red_mushroom_block_cap_000111 +mcl_mushrooms:red_mushroom_block_cap_001000 +mcl_mushrooms:red_mushroom_block_cap_001001 +mcl_colorblocks:hardened_clay_brown +mcl_stairs:stair_deepslate_polished_outer +mcl_stairs:stair_deepslate_polished_inner +mcl_colorblocks:concrete_powder_brown +mcl_mushrooms:red_mushroom_block_cap_001010 +mcl_colorblocks:concrete_brown +mcl_stairs:slab_deepslate_polished +mcl_stairs:slab_deepslate_polished_top +mcl_mushrooms:red_mushroom_block_cap_001011 +mcl_blackstone:soul_fire +mcl_mushrooms:red_mushroom_block_cap_001100 +mcl_deepslate:deepslatepolishedwall +mcl_mushrooms:red_mushroom_block_cap_001101 +mcl_deepslate:deepslatepolishedwall_1 +mcl_deepslate:deepslatepolishedwall_2 +mcl_mushrooms:red_mushroom_block_cap_001110 +mcl_colorblocks:hardened_clay_black +mcl_deepslate:deepslatepolishedwall_4 +mcl_colorblocks:concrete_powder_black +mcl_mushrooms:red_mushroom_block_cap_001111 +mcl_colorblocks:concrete_black +pipeworks:tag_tube_111100 +mcl_mushrooms:red_mushroom_block_cap_010000 +mcl_stairs:stair_blackstone_polished_outer +pipeworks:tag_tube_111101 +mcl_mushrooms:red_mushroom_block_cap_010001 +pipeworks:tag_tube_111110 +pipeworks:tag_tube_111111 +mcl_stairs:slab_end_stone_top +mcl_stairs:slab_end_stone_double +mcl_colorblocks:hardened_clay_red +mcl_colorblocks:concrete_powder_red +mcl_colorblocks:concrete_red +mcl_stairs:stair_stone_inner +mcl_farming:carrot +mcl_farming:carrot_7 +mcl_farming:carrot_6 +mcl_farming:carrot_5 +mcl_farming:carrot_4 +mcl_farming:carrot_3 +mcl_farming:carrot_2 +mcl_farming:carrot_1 +mcl_colorblocks:hardened_clay_silver +mcl_stairs:slab_concrete_yellow_top +mcl_stairs:slab_concrete_yellow_double +mcl_colorblocks:concrete_powder_silver +mcl_colorblocks:concrete_silver +mcl_stairs:stair_concrete_white +mcl_stairs:stair_concrete_white_outer +mcl_stairs:stair_concrete_white_inner +mcl_colorblocks:hardened_clay_light_blue +mcl_colorblocks:concrete_powder_cyan +mcl_wool:black_carpet +mcl_colorblocks:concrete_light_blue +mcl_heads:skeleton_ceiling +mcl_heads:skeleton_wall +mcl_wool:red +mcl_doors:door_mangrove_t_1 +mcl_wool:red_carpet +mcl_doors:door_mangrove_b_2 +mcl_doors:door_mangrove_t_2 +mcl_heads:wither_skeleton_ceiling +mcl_doors:trapdoor_mangrove +mcl_heads:wither_skeleton_wall +mcl_wool:silver_carpet +mcl_colorblocks:concrete_powder_orange +mcl_colorblocks:concrete_orange +mcl_wool:light_blue +mcl_doors:trapdoor_mangrove_open +mcl_wool:light_blue_carpet +mcl_stairs:stair_mangrove +mcl_stairs:stair_mangrove_outer +mcl_armor_stand:armor_stand +mcl_wool:orange_carpet +mcl_stairs:stair_mangrove_bark +mcl_stairs:stair_mangrove_bark_outer +mcl_stairs:stair_mangrove_bark_inner +mcl_colorblocks:concrete_powder_lime +mcl_colorblocks:concrete_lime +mcl_wool:lime_carpet +mesecons_delayer:delayer_on_locked +mcl_wool:purple +mcl_crimson:crimson_nylium +mcl_wool:purple_carpet +mcl_flowerpots:flower_pot_crimson_roots +homedecor:banister_brass_horizontal +mcl_flowerpots:flower_pot_crimson_fungus +mcl_crimson:crimson_fungus +mcl_wool:grey +homedecor:painting_4 +mcl_crimson:shroomlight +mcl_beds:respawn_anchor_charged_1 +mcl_wool:grey_carpet +mcl_crimson:warped_wart_block +mcl_beds:respawn_anchor_charged_2 +mcl_flowerpots:flower_pot_warped_roots +mcl_colorblocks:concrete_purple +mcl_beds:respawn_anchor_charged_3 +mcl_wool:cyan +homedecor:bathtub_clawfoot_brass_taps +mcl_beds:respawn_anchor_charged_4 +mcl_stairs:stair_goldblock +mcl_wool:cyan_carpet +pipeworks:tag_tube_101100 +mcl_crimson:twisting_vines +mcl_crimson:warped_fungus +mcl_stairs:slab_acacia +mcl_walls:stonebrickmossy_0 +mcl_doors:door_spruce_b_2 +mesecons:wire_11011101_on +mcl_walls:endbricks_9 +mcl_walls:prismarine_14 +mcl_stairs:slab_redsandstonesmooth2_top +mcl_stairs:slab_brick_block +mcl_panes:pane_pink_flat +mcl_stairs:slab_warped_double +mcl_colorblocks:hardened_clay_grey +mcl_stairs:slab_warped_top +mcl_stairs:slab_sandstone_top +mcl_colorblocks:concrete_powder_grey +mcl_stairs:stair_warped_bark_inner +mcl_colorblocks:concrete_grey +mcl_stairs:stair_warped_bark_outer +mcl_villages:crop_flower_1 +mcl_villages:crop_flower_7 +mcl_villages:crop_flower_8 +mcl_stairs:stair_lapisblock_outer +mcl_doors:trapdoor_warped_open +mcl_stairs:slab_ironblock_top +mcl_doors:door_warped_t_2 +mcl_stairs:stair_stonebrickcracked +mcl_doors:door_warped_t_1 +mcl_doors:door_warped_b_1 +mcl_fences:warped_fence_gate +mcl_fences:warped_fence_gate_open +mcl_minecarts:activator_rail_on +mcl_fences:warped_fence +mcl_trees:bark_stripped_warped +mcl_loom:loom +mcl_trees:stripped_warped +mcl_trees:bark_warped +mcl_minecarts:detector_rail_on +mcl_minecarts:detector_rail +mcl_trees:wood_warped +mcl_trees:tree_warped +pipeworks:pipe_1_empty +mesecons_button:button_jungle_on +mcl_stairs:slab_crimson_bark_top +mcl_stairs:slab_crimson_double +mcl_stairs:slab_crimson_top +mcl_stairs:slab_crimson +mcl_droppers:dropper_up +mcl_droppers:dropper_down +mcl_stairs:stair_crimson_bark_inner +pipeworks:pipe_compatibility_loaded +mcl_droppers:dropper +mcl_stairs:stair_crimson_bark_outer +mcl_minecarts:golden_rail_on +mcl_stairs:stair_crimson_bark +pipeworks:valve_on_empty +mcl_stairs:stair_crimson_inner +pipeworks:valve_off_empty +mcl_stairs:stair_crimson_outer +pipeworks:entry_panel_empty +mcl_stairs:stair_crimson +pipeworks:flow_sensor_empty +mcl_doors:trapdoor_crimson_open +pipeworks:straight_pipe_empty +mcl_doors:trapdoor_crimson +pipeworks:valve_on_loaded +mcl_doors:door_crimson_t_2 +pipeworks:entry_panel_loaded +mcl_doors:door_crimson_b_2 +pipeworks:flow_sensor_loaded +mcl_doors:door_crimson_t_1 +pipeworks:straight_pipe_loaded +mcl_fences:crimson_fence_gate +mcl_fences:crimson_fence_gate_open +homedecor:medicine_cabinet +homedecor:shower_head +homedecor:banister_wood_diagonal_left_malachite +mcl_observers:observer_up_off +mcl_observers:observer_up_on +mcl_observers:observer_down_off +mcl_observers:observer_down_on +pipeworks:pipe_2_empty +homedecor:banister_wood_horizontal_lime +pipeworks:pipe_2_loaded +mcl_doors:door_cherry_blossom_t_2 +homedecor:shower_tray +mcl_doors:trapdoor_cherry_blossom +mcl_observers:observer_on +pipeworks:pipe_3_loaded +mcl_stairs:slab_deepslate_bricks_cracked_double +mcl_stairs:slab_deepslate_bricks_cracked_top +mcl_stairs:slab_deepslate_bricks_cracked +pipeworks:pipe_4_empty +mcl_cake:cake_4 +pipeworks:pipe_4_loaded +mcl_cake:cake_5 +mcl_cake:cake_6 +mcl_cake:cake +mcl_doors:trapdoor_cherry_blossom_open +mcl_trees:bark_stripped_oak +pipeworks:pipe_5_loaded +mcl_blackstone:wall +mcl_blackstone:wall_21 +mcl_stairs:stair_cherry_blossom +pipeworks:pipe_6_empty +mcl_stairs:stair_cherry_blossom_outer +mcl_stairs:stair_cherry_blossom_inner +mcl_core:cobble +mcl_stairs:stair_end_bricks_inner +mcl_stairs:slab_end_bricks +pipeworks:pipe_7_empty +pipeworks:mese_tube_000000 +pipeworks:pipe_7_loaded +mcl_stairs:stair_cherry_blossom_bark +mcl_signs:wall_sign_jungle +mcl_stairs:stair_cherry_blossom_bark_outer +mcl_stairs:stair_cherry_blossom_bark_inner +mcl_blackstone:wall_13 +pipeworks:pipe_8_loaded +pipeworks:mese_tube_000010 +mcl_blackstone:wall_12 +mcl_blackstone:wall_11 +pipeworks:pipe_9_empty +mcl_panes:pane_pink +mcl_stairs:slab_cherry_blossom +mcl_stairs:slab_cherry_blossom_top +mcl_stairs:slab_cherry_blossom_double +mcl_blackstone:wall_9 +pipeworks:mese_tube_000100 +mcl_blackstone:wall_8 +pipeworks:pipe_10_loaded +mcl_blackstone:wall_7 +mcl_stairs:stair_acacia_bark_inner +pipeworks:mese_tube_000101 +mcl_walls:mudbrick_11 +mcl_walls:mudbrick_9 +mcl_walls:mudbrick_3 +mcl_walls:rednetherbrick_9 +pipeworks:mese_tube_000110 +mcl_stairs:slab_cherry_blossom_bark +mcl_stairs:slab_cherry_blossom_bark_top +mcl_stairs:slab_cherry_blossom_bark_double +mcl_blackstone:wall_1 +pipeworks:mese_tube_000111 +mcl_blackstone:wall_0 +mcl_stairs:slab_blackstone_brick_polished_double +mcl_stairs:slab_blackstone_brick_polished_top +pipeworks:mese_tube_001000 +mcl_stairs:slab_blackstone_brick_polished +mcl_stairs:stair_oak +mcl_stairs:stair_blackstone_brick_polished_outer +mcl_stairs:stair_blackstone_brick_polished +pipeworks:mese_tube_001001 +mcl_stairs:slab_blackstone_polished_double +mcl_stairs:slab_blackstone_polished_top +mcl_stairs:stair_blackstone_polished_inner +mcl_stairs:stair_blackstone_polished +pipeworks:mese_tube_001010 +mcl_stairs:slab_blackstone_double +homedecor:skylight_frosted +mcl_stairs:slab_blackstone_top +mcl_stairs:slab_blackstone +pipeworks:mese_tube_001011 +mcl_stairs:stair_blackstone_inner +mcl_stairs:stair_blackstone_outer +mcl_stairs:stair_andesite_smooth_outer +mcl_sponges:sponge_wet +pipeworks:mese_tube_001100 +mcl_blackstone:quartz_brick +mcl_blackstone:blackstone_polished +mcl_blackstone:basalt +mcl_blackstone:basalt_polished +pipeworks:mese_tube_001101 +mcl_blackstone:blackstone +mcl_stairs:slab_concrete_cyan_top +mcl_stairs:slab_concrete_cyan +mcl_stairs:stair_concrete_cyan_outer +pipeworks:mese_tube_001110 +mcl_stairs:stair_concrete_cyan +mcl_stairs:stair_concrete_grey_inner +mcl_stairs:stair_concrete_grey +homedecor:shingles_wood +pipeworks:mese_tube_001111 +mcl_villages:crop_gourd_2 +mcl_villages:crop_gourd_1 +mcl_stairs:slab_concrete_purple_double +pipeworks:mese_tube_010000 +mcl_stairs:slab_concrete_purple_top +mcl_stairs:slab_concrete_purple +mcl_stairs:stair_concrete_purple_outer +mcl_stairs:slab_concrete_lime_double +pipeworks:mese_tube_010001 +mcl_stairs:stair_concrete_lime_outer +lavalamp:lavalamp +mcl_stairs:stair_concrete_lime +mcl_stairs:slab_concrete_orange +pipeworks:mese_tube_010010 +mcl_stairs:stair_concrete_orange_inner +mcl_stairs:stair_concrete_orange +mcl_stairs:slab_concrete_light_blue_double +lavalamp:lavalamp_off +pipeworks:mese_tube_010011 +mcl_stairs:slab_concrete_light_blue_top +mcl_stairs:slab_concrete_light_blue +mcl_stairs:stair_concrete_light_blue_outer +mcl_stairs:slab_concrete_silver_top +pipeworks:mese_tube_010100 +mcl_stairs:slab_concrete_red_double +mcl_stairs:slab_concrete_red_top +mcl_stairs:slab_concrete_red +mcl_stairs:stair_concrete_red_inner +pipeworks:mese_tube_010101 +homedecor:plasma_ball_off +mcl_stairs:stair_concrete_red_outer +mcl_stairs:stair_concrete_red +mcl_stairs:slab_concrete_black_double +pipeworks:mese_tube_010110 +mcl_stairs:slab_concrete_black +mesecons_pressureplates:pressure_plate_stone_off +mcl_stairs:stair_concrete_black_inner +mesecons_pressureplates:pressure_plate_stone_on +pipeworks:mese_tube_010111 +mcl_stairs:stair_concrete_black +mcl_stairs:slab_concrete_brown_double +mcl_stairs:slab_concrete_brown_top +mesecons_pressureplates:pressure_plate_polished_blackstone_off +pipeworks:mese_tube_011000 +mesecons_pressureplates:pressure_plate_polished_blackstone_on +mcl_stairs:slab_concrete_brown +pipeworks:tube_compatibility +mcl_stairs:stair_concrete_brown_inner +pipeworks:mese_tube_011001 +mcl_stairs:stair_concrete_brown +mcl_stairs:slab_concrete_green_double +mcl_stairs:slab_concrete_green +mcl_stairs:stair_concrete_green_outer +pipeworks:mese_tube_011010 +mcl_stairs:stair_concrete_green +mcl_stairs:slab_concrete_blue_double +mcl_stairs:slab_concrete_blue +mcl_stairs:stair_concrete_blue_outer +pipeworks:mese_tube_011011 +mcl_stairs:slab_concrete_magenta_top +mcl_stairs:slab_concrete_magenta +homedecor:wall_sconce +mcl_walls:redsandstone_2 +pipeworks:mese_tube_011100 +mcl_walls:redsandstone_3 +mcl_stairs:stair_concrete_magenta_inner +mcl_walls:redsandstone_4 +mcl_stairs:stair_concrete_magenta_outer +mcl_walls:redsandstone_5 +mcl_stairs:slab_concrete_pink_double +mcl_walls:redsandstone_6 +mcl_stairs:slab_concrete_pink_top +mcl_walls:redsandstone_7 +mcl_stairs:stair_redsandstone_outer +mcl_walls:redsandstone_8 +pipeworks:steel_block_embedded_tube +mcl_walls:redsandstone_9 +mcl_stairs:slab_concrete_pink +mcl_walls:redsandstone_10 +mcl_stairs:stair_concrete_pink_inner +mcl_walls:redsandstone_11 +mcl_stairs:slab_redsandstone_top +mcl_walls:redsandstone_12 +mcl_stairs:stair_concrete_pink_outer +mcl_walls:redsandstone_13 +mcl_stairs:stair_concrete_pink +mcl_walls:redsandstone_14 +mcl_stairs:slab_concrete_white_double +mcl_walls:redsandstone_15 +mcl_stairs:slab_concrete_white_top +mcl_walls:redsandstone_16 +pipeworks:mese_tube_100010 +mcl_walls:redsandstone_21 +mcl_stairs:stair_redsandstonesmooth2 +mcl_stairs:slab_concrete_white +mcl_stairs:stair_redsandstonesmooth2_outer +mcl_stairs:stair_redsandstonesmooth2_inner +mcl_walls:stonebrick_0 +mcl_stairs:slab_concrete_yellow +mcl_walls:stonebrick_1 +mcl_stairs:stair_concrete_yellow_inner +mcl_walls:stonebrick_2 +mcl_stairs:slab_redsandstonesmooth2 +mcl_walls:stonebrick_3 +mcl_stairs:slab_redsandstonesmooth2_double +mcl_walls:stonebrick_4 +homedecor:welcome_mat_green +mcl_walls:stonebrick_5 +mcl_stairs:stair_concrete_yellow_outer +mcl_walls:stonebrick_6 +homedecor:welcome_mat_brown +mcl_walls:stonebrick_7 +mcl_stairs:stair_concrete_yellow +mcl_walls:stonebrick_8 +homedecor:welcome_mat_grey +mcl_walls:stonebrick_9 +mcl_walls:stonebrick_10 +mcl_stairs:stair_redsandstonesmooth_inner +mcl_walls:stonebrick_11 +mcl_stairs:stair_stone_outer +mcl_walls:stonebrick_12 +mcl_core:slimeblock +mcl_walls:stonebrick_13 +mcl_stairs:slab_redsandstonesmooth +mcl_walls:stonebrick_14 +mcl_stairs:slab_redsandstonesmooth_double +mcl_walls:stonebrick_15 +mcl_chests:ender_chest +mcl_walls:stonebrick_16 +mesecons_commandblock:commandblock_off +mcl_walls:stonebrick_21 +mcl_portals:portal +mcl_portals:end_portal_frame +mcl_enchanting:table +mcl_jukebox:jukebox +mcl_banners:hanging_banner +mcl_banners:standing_banner +mcl_beehives:bee_nest +mcl_walls:stonebrickmossy_2 +mcl_compass:lodestone +mcl_walls:stonebrickmossy_3 +mcl_sculk:catalyst +mcl_furnaces:furnace_active +mcl_blast_furnace:blast_furnace +mcl_blast_furnace:blast_furnace_active +mcl_smoker:smoker +mcl_smoker:smoker_active +mcl_stairs:slab_stonebrick_double +mcl_walls:stonebrickmossy_7 +mcl_stairs:stair_stone +mcl_walls:stonebrickmossy_8 +mcl_walls:stonebrickmossy_9 +mcl_stairs:slab_end_stone +mcl_walls:stonebrickmossy_10 +mcl_barrels:barrel_open +mcl_walls:stonebrickmossy_11 +mcl_stairs:stair_end_stone_inner +mcl_walls:stonebrickmossy_12 +mcl_stairs:stair_end_stone_outer +mcl_walls:stonebrickmossy_13 +mcl_chests:chest_small +mcl_walls:stonebrickmossy_14 +mcl_chests:chest_right +mcl_walls:stonebrickmossy_15 +mcl_chests:trapped_chest_small +mcl_walls:stonebrickmossy_16 +mcl_chests:trapped_chest_right +mcl_walls:stonebrickmossy_21 +mcl_stairs:stair_end_stone +mcl_stairs:slab_deepslate_tiles_cracked_double +mcl_stairs:slab_deepslate_tiles_cracked +mcl_trees:leaves_mangrove +mcl_campfires:campfire +mcl_campfires:campfire_lit +mcl_walls:prismarine_1 +mcl_campfires:soul_campfire_lit +mcl_walls:prismarine_2 +mcl_stairs:stair_deepslate_tiles_cracked_inner +mcl_walls:prismarine_3 +pipeworks:broken_tube_3 +mcl_fences:mangrove_fence +mcl_stairs:stair_deepslate_tiles_cracked_outer +mcl_fences:mangrove_fence_gate +mcl_fences:mangrove_fence_gate_open +mcl_walls:prismarine_6 +mcl_colorblocks:glazed_terracotta_orange +mcl_walls:prismarine_7 +mcl_colorblocks:glazed_terracotta_green +mcl_walls:prismarine_8 +mcl_colorblocks:glazed_terracotta_purple +mcl_walls:prismarine_9 +mcl_colorblocks:glazed_terracotta_blue +mcl_walls:prismarine_10 +mcl_colorblocks:glazed_terracotta_white +mcl_walls:prismarine_11 +mcl_colorblocks:glazed_terracotta_silver +mcl_walls:prismarine_12 +mcl_colorblocks:glazed_terracotta_brown +mcl_walls:prismarine_13 +mcl_colorblocks:glazed_terracotta_pink +mcl_bamboo:bamboo +mcl_bamboo:bamboo_endcap +mcl_bamboo:bamboo_1 +mcl_bamboo:bamboo_2 +mcl_bamboo:bamboo_3 +mcl_stairs:stair_deepslate_tiles_cracked +mcl_bamboo:scaffolding +mcl_beds:bed_black_top +mcl_beds:bed_black_bottom +mcl_beds:bed_blue_top +mcl_beds:bed_blue_bottom +mcl_beds:bed_brown_top +mcl_beds:bed_brown_bottom +mcl_beds:bed_cyan_top +mcl_beds:bed_cyan_bottom +mcl_beds:bed_green_top +mcl_beds:bed_green_bottom +mcl_beds:bed_grey_top +mcl_walls:endbricks_4 +mcl_beds:bed_light_blue_top +mcl_walls:endbricks_5 +mcl_beds:bed_lime_top +mcl_beds:bed_lime_bottom +mcl_beds:bed_magenta_top +mcl_walls:endbricks_7 +mcl_beds:bed_orange_top +mcl_beds:bed_orange_bottom +mcl_beds:bed_pink_top +mcl_beds:bed_pink_bottom +mcl_beds:bed_purple_top +mcl_beds:bed_purple_bottom +mcl_beds:bed_red_top +mcl_beds:bed_red_bottom +mcl_beds:bed_silver_top +mcl_beds:bed_silver_bottom +mcl_deepslate:tuff +mcl_beds:bed_white_bottom +mcl_beds:bed_yellow_top +mcl_beds:bed_yellow_bottom +mcl_core:cactus +mcl_core:reeds +mcl_core:vine +mcl_cake:cake_1 +mcl_cake:cake_2 +mcl_cake:cake_3 +mesecons:wire_01010001_on +mesecons:wire_01010001_off +pipeworks:digiline_filter +mcl_farming:pumpkin_face +mcl_farming:pumpkin_face_light +mcl_farming:pumpkin +mcl_farming:melon +mcl_end:chorus_plant +mcl_core:cobweb +mcl_cocoas:cocoa_1 +mcl_cocoas:cocoa_2 +mesecons:wire_11010001_on +mesecons:wire_11010001_off +mcl_stairs:stair_deepslate_bricks_cracked_inner +mcl_stairs:stair_deepslate_bricks_cracked_outer +mcl_stairs:stair_deepslate_bricks_cracked +mcl_doors:iron_door_t_1 +mcl_doors:iron_door_b_1 +mcl_doors:iron_door_t_2 +mcl_doors:iron_door_b_2 +mcl_stairs:slab_stonebrickcracked_double +mesecons:wire_00110001_on +mesecons:wire_00110001_off +mcl_stairs:slab_stonebrickcracked_top +mcl_stairs:slab_stonebrickcracked +mcl_stairs:stair_stonebrickcracked_inner +mcl_stairs:slab_jungle +mcl_doors:door_warped_b_2 +mesecons:wire_10110001_on +mesecons:wire_10110001_off +mcl_stairs:slab_ironblock_double +mcl_doors:trapdoor_warped +mesecons:wire_11111000_on +mesecons:wire_11111000_off +mcl_stairs:slab_ironblock +mcl_stairs:stair_ironblock_inner +mcl_stairs:stair_ironblock_outer +mcl_stairs:stair_ironblock +mcl_stairs:stair_bamboo_bark_inner +mcl_stairs:slab_goldblock_top +mcl_stairs:stair_bamboo_bark +mcl_stairs:stair_goldblock_inner +mcl_stairs:stair_goldblock_outer +mesecons:wire_01000100_on +mesecons:wire_01000100_off +mcl_crimson:nether_sprouts +mcl_stairs:slab_lapisblock_double +mcl_stairs:slab_lapisblock +mcl_stairs:stair_warped +mcl_stairs:stair_lapisblock +mcl_stairs:stair_warped_outer +mcl_stairs:stair_warped_inner +mcl_villages:crop_flower_5 +mesecons:wire_11000100_on +mesecons:wire_11000100_off +mcl_villages:crop_flower_3 +mcl_stairs:stair_warped_bark +mcl_villages:crop_tree_8 +mcl_villages:crop_tree_6 +mcl_villages:crop_tree_5 +mesecons:wire_01100100_on +mesecons:wire_01100100_off +pipeworks:steel_pane_embedded_tube +mcl_crimson:weeping_vines +mcl_villages:crop_bush_7 +pipeworks:nodebreaker_off +mcl_villages:crop_bush_6 +mcl_ocean:dried_kelp_block +pipeworks:nodebreaker_on +mcl_villages:crop_bush_5 +mesecons:wire_11100100_on +mesecons:wire_11100100_off +mcl_villages:crop_bush_4 +mcl_villages:crop_bush_3 +mcl_villages:crop_bush_2 +mcl_villages:crop_bush_1 +pipeworks:teleport_tube_9 +mcl_deepslate:deepslatetileswall_3 +mcl_villages:crop_gourd_6 +mesecons:wire_01010100_on +mesecons:wire_01010100_off +pipeworks:deployer_on +mcl_villages:crop_root_8 +mcl_villages:crop_root_6 +pipeworks:dispenser_off +mcl_villages:crop_root_5 +mcl_villages:crop_root_3 +mesecons:wire_11010100_on +mesecons:wire_11010100_off +mcl_villages:crop_root_2 +mcl_villages:crop_root_1 +mcl_villages:crop_grain_7 +mcl_villages:crop_grain_6 +pipeworks:sand_tube_1 +mcl_villages:crop_grain_3 +mcl_villages:crop_grain_2 +mesecons:wire_01110100_on +mesecons:wire_01110100_off +mcl_villages:crop_grain_1 +mcl_villages:path_endpoint +mcl_villages:no_paths +mcl_villages:building_block +homedecor:pole_brass +mcl_crimson:crimson_roots +mcl_crimson:warped_roots +mcl_trees:stripped_crimson +mcl_trees:tree_crimson +mesecons:wire_11110100_on +mesecons:wire_11110100_off +homedecor:taps_brass +homedecor:taps +mcl_trees:wood_crimson +mcl_walls:stonebrickmossy_6 +homedecor:toilet_open +mcl_trees:leaves_spruce_orphan +homedecor:toilet +mcl_trees:bark_stripped_crimson +mcl_trees:bark_crimson +mesecons:wire_11001100_on +mesecons:wire_11001100_off +homedecor:banister_wood_diagonal_left_rose +homedecor:desk_lamp_11 +homedecor:banister_wood_diagonal_left_fuchsia +mcl_fences:spruce_fence +homedecor:ceiling_lamp_11 +mcl_fences:spruce_fence_gate +mcl_fences:spruce_fence_gate_open +homedecor:bathroom_tiles_dark +homedecor:table_lamp_11 +mesecons:wire_11101100_on +mesecons:wire_11101100_off +homedecor:standing_lamp_11 +homedecor:radiator +homedecor:space_heater +homedecor:ceiling_fan +homedecor:glowlight_half_12 +homedecor:air_conditioner +homedecor:glowlight_quarter_12 +homedecor:alarm_clock +homedecor:glowlight_small_cube_12 +mesecons:wire_11011100_on +mesecons:wire_11011100_off +homedecor:shrubbery_green +mcl_doors:door_spruce_b_1 +homedecor:plasma_lamp_12 +homedecor:shrubbery_large_green +homedecor:shrubbery_large_red +homedecor:ground_lantern_12 +mcl_doors:door_spruce_t_1 +homedecor:shrubbery_large_yellow +homedecor:hanging_lantern_12 +mesecons:wire_11111100_on +mesecons:wire_11111100_off +homedecor:ceiling_lantern_12 +mcl_doors:door_spruce_t_2 +homedecor:well +mcl_doors:trapdoor_spruce +homedecor:swing_rope +homedecor:lattice_wood_vegetal +homedecor:lattice_lantern_small_12 +homedecor:lattice_white_wood +homedecor:barbecue +mesecons:wire_00100010_on +mesecons:wire_00100010_off +homedecor:paper_towel +homedecor:ceiling_lamp_12 +mcl_flowerpots:flower_pot_sapling_oak +homedecor:copper_pans +mcl_doors:trapdoor_spruce_open +homedecor:table_lamp_12 +homedecor:kitchen_cabinet_colored_with_sink +homedecor:kitchen_cabinet_colored_with_sink_locked +homedecor:standing_lamp_12 +mesecons:wire_10100010_on +mesecons:wire_10100010_off +mcl_stairs:stair_spruce_outer +mcl_stairs:stair_spruce_inner +mcl_walls:sandstone_11 +homedecor:glowlight_quarter_13 +homedecor:kitchen_cabinet_colorable_with_sink_locked +homedecor:glowlight_small_cube_13 +homedecor:kitchen_cabinet_colored_half +homedecor:kitchen_cabinet_colored_half_locked +mcl_stairs:stair_spruce_bark +mesecons:wire_01100010_on +mesecons:wire_01100010_off +mcl_stairs:stair_spruce_bark_inner +homedecor:kitchen_cabinet_colorable_half +homedecor:ground_lantern_13 +homedecor:kitchen_cabinet_colorable_half_locked +mcl_lightning_rods:rod +homedecor:hanging_lantern_13 +homedecor:kitchen_cabinet_colored_with_drawers_steel +mcl_lightning_rods:rod_powered +mcl_stairs:slab_spruce +mesecons:wire_11100010_on +mesecons:wire_11100010_off +homedecor:lattice_lantern_large_13 +homedecor:kitchen_cabinet_colored_with_drawers_steel_locked +mcl_farming:melontige_1 +homedecor:lattice_lantern_small_13 +homedecor:kitchen_cabinet_colorable_with_drawers_steel +homedecor:kitchen_cabinet_colorable_with_drawers_steel_locked +homedecor:desk_lamp_13 +homedecor:kitchen_cabinet_colored_steel +homedecor:kitchen_cabinet_colored_steel_locked +mesecons:wire_00110010_on +mesecons:wire_00110010_off +homedecor:kitchen_cabinet_colorable_steel +mcl_stairs:slab_spruce_bark +mcl_stairs:slab_spruce_bark_top +mcl_stairs:slab_spruce_bark_double +homedecor:kitchen_cabinet_colorable_steel_locked +homedecor:standing_lamp_13 +homedecor:kitchen_cabinet_colored_with_drawers_marble_locked +homedecor:kitchen_cabinet_colorable_with_drawers_marble +homedecor:kitchen_cabinet_colored_marble +homedecor:kitchen_cabinet_colored_marble_locked +homedecor:kitchen_cabinet_colorable_with_drawers_granite_locked +homedecor:kitchen_cabinet_colored_granite_locked +mcl_farming:melontige_unconnect +mcl_farming:melontige_2 +mcl_farming:melontige_3 +mcl_farming:melontige_4 +mcl_farming:melontige_5 +mcl_farming:melontige_6 +mcl_farming:melontige_7 +homedecor:wood_table_large_square_with_wrought_iron_legs +homedecor:kitchen_cabinet_colorable_granite +homedecor:kitchen_cabinet_colored_with_drawers +homedecor:kitchen_cabinet_colored_with_drawers_locked +homedecor:wood_table_large_square_with_wood_legs +homedecor:kitchen_cabinet_colorable_with_drawers +homedecor:kitchen_cabinet_colored +mesecons:wire_01110010_on +mesecons:wire_01110010_off +mesecons_pressureplates:pressure_plate_spruce_on +mesecons_button:button_spruce_off +mcl_fences:oak_fence +homedecor:dishwasher_wood +mesecons_button:button_spruce_on +mesecons:wire_11110010_on +mesecons:wire_11110010_off +mcl_wool:pink_carpet +homedecor:wood_table_small_square_with_wood_legs +mcl_flowerpots:flower_pot_sapling_spruce +homedecor:dishwasher_steel +mcl_walls:sandstone_12 +homedecor:microwave_oven +homedecor:microwave_oven_locked +mcl_stairs:stair_mangrove_inner +homedecor:oven_steel_active_locked +mesecons:wire_10101010_on +mesecons:wire_10101010_off +homedecor:lattice_lantern_small_14 +homedecor:desk_lamp_14 +homedecor:ceiling_lamp_14 +homedecor:wood_table_small_round_with_wrought_iron_legs +homedecor:standing_lamp_14 +homedecor:oven_steel +mcl_mangrove:propagule_mud +homedecor:wood_table_small_round_with_wood_legs +mcl_walls:mudbrick_0 +mcl_chests:yellow_shulker_box_small +homedecor:oven +mcl_farming:melontige_linked_r +mcl_farming:melontige_linked_l +mcl_farming:melontige_linked_t +mcl_farming:melontige_linked_b +homedecor:oven_locked +homedecor:refrigerator_white +mcl_heads:zombie +homedecor:refrigerator_steel +mcl_flowers:peony_top +homedecor:torch_wall +lrfurn:endtable +homedecor:chandelier_brass +mcl_cocoas:cocoa_3 +mcl_dispensers:dispenser_up +mcl_dispensers:dispenser_down +mcl_doors:trapdoor_oak_open +mcl_dispensers:dispenser +homedecor:chain_steel_top +mcl_trees:stripped_acacia +homedecor:oil_lamp_tabletop +mcl_walls:brick_9 +mcl_walls:brick_7 +homedecor:candlestick_wrought_iron +mcl_trees:wood_acacia +lrfurn:coffeetable +homedecor:candle_thin +mcl_deepslate:deepslate_with_lapis +homedecor:glowlight_half_0 +mcl_trees:bark_stripped_acacia +mcl_trees:bark_acacia +homedecor:wall_lamp_on +homedecor:glowlight_quarter_0 +mcl_colorblocks:hardened_clay_purple +mcl_signs:standing_sign_acacia +homedecor:plasma_ball_on +homedecor:wall_lamp_off +homedecor:glowlight_small_cube_0 +mcl_trees:leaves_birch_orphan +homedecor:rope_light_on_floor_off +homedecor:table_lamp_14 +homedecor:plasma_lamp_0 +mcl_walls:endbricks_3 +mcl_walls:endbricks_2 +homedecor:hanging_lantern_14 +homedecor:ground_lantern_0 +mcl_walls:prismarine_15 +homedecor:plasma_lamp_14 +mcl_panes:pane_black +mcl_anvils:anvil +mcl_anvils:anvil_damage_1 +mcl_trees:stripped_jungle +mcl_stairs:stair_spruce +homedecor:ceiling_lantern_0 +homedecor:table_lamp_13 +homedecor:ceiling_lamp_13 +homedecor:ceiling_lantern_13 +homedecor:plasma_lamp_13 +homedecor:lattice_lantern_large_0 +lrfurn:longsofa +homedecor:glowlight_half_13 +homedecor:desk_lamp_12 +homedecor:lattice_lantern_large_12 +homedecor:lattice_lantern_small_11 +homedecor:lattice_lantern_small_0 +homedecor:lattice_lantern_large_11 +homedecor:ceiling_lantern_11 +homedecor:hanging_lantern_11 +homedecor:desk_lamp_0 +homedecor:ground_lantern_11 +homedecor:glowlight_small_cube_11 +homedecor:ceiling_lamp_10 +homedecor:ceiling_lamp_0 +homedecor:desk_lamp_10 +homedecor:lattice_lantern_small_10 +homedecor:lattice_lantern_large_10 +homedecor:ceiling_lantern_10 +homedecor:table_lamp_0 +homedecor:hanging_lantern_10 +homedecor:ground_lantern_10 +homedecor:plasma_lamp_10 +homedecor:painting_16 +homedecor:standing_lamp_0 +homedecor:glowlight_quarter_10 +homedecor:glowlight_half_10 +homedecor:ceiling_lamp_9 +homedecor:ground_lantern_9 +fake_fire:ice_fire +homedecor:painting_17 +homedecor:plasma_lamp_9 +homedecor:glowlight_small_cube_9 +homedecor:glowlight_quarter_1 +homedecor:table_lamp_8 +homedecor:glowlight_small_cube_8 +homedecor:glowlight_quarter_8 +homedecor:painting_18 +homedecor:glowlight_half_8 +homedecor:standing_lamp_7 +homedecor:table_lamp_7 +homedecor:ceiling_lamp_7 +homedecor:lattice_lantern_small_7 +fake_fire:embers +homedecor:painting_19 +homedecor:lattice_lantern_large_7 +homedecor:ground_lantern_1 +homedecor:ground_lantern_7 +homedecor:glowlight_small_cube_7 +homedecor:hanging_lantern_1 +homedecor:painting_20 +homedecor:glowlight_quarter_7 +homedecor:ceiling_lantern_1 +homedecor:standing_lamp_6 +homedecor:table_lamp_6 +homedecor:lattice_lantern_large_6 +homedecor:lattice_lantern_large_1 +homedecor:hanging_lantern_6 +homedecor:glowlight_small_cube_6 +homedecor:glowlight_quarter_6 +homedecor:glowlight_half_6 +mcl_cherry_blossom:pink_petals +mcl_colorblocks:glazed_terracotta_yellow +mcl_walls:sandstone_5 +homedecor:desk_lamp_1 +fake_fire:chimney_top_stone +homedecor:ceiling_lamp_5 +mcl_trees:leaves_cherry_blossom +homedecor:desk_lamp_5 +homedecor:lattice_lantern_small_5 +homedecor:lattice_lantern_large_5 +homedecor:table_lamp_1 +homedecor:ceiling_lantern_5 +mesecons_delayer:delayer_on_3 +homedecor:standing_lamp_1 +mcl_doors:door_jungle_t_2 +mcl_doors:trapdoor_jungle +mcl_flowers:azure_bluet +homedecor:glowlight_half_2 +homedecor:washing_machine +homedecor:glowlight_quarter_2 +mcl_fire:eternal_fire +homedecor:dryer +homedecor:glowlight_half_5 +homedecor:standing_lamp_4 +homedecor:ironing_board +mcl_beds:bed_white_top +mcl_trees:stripped_cherry_blossom +mcl_trees:tree_cherry_blossom +mcl_trees:tree_birch +mcl_trees:tree_jungle +homedecor:hanging_lantern_2 +mcl_stairs:stair_bamboo_outer +mcl_trees:wood_cherry_blossom +homedecor:ceiling_lantern_2 +mcl_chests:trapped_chest_on_small +mcl_monster_eggs:monster_egg_cobble +homedecor:lattice_lantern_large_2 +mcl_trees:bark_stripped_cherry_blossom +mcl_trees:bark_cherry_blossom +mcl_chests:trapped_chest_on_right +homedecor:inbox +mcl_stairs:stair_jungle_bark_inner +homedecor:desk_lamp_2 +mcl_stairs:stair_deepslate_cobbled +homedecor:ground_lantern_4 +homedecor:ceiling_lamp_2 +homedecor:plasma_lamp_4 +homedecor:glowlight_small_cube_4 +homedecor:glowlight_quarter_4 +homedecor:table_lamp_2 +homedecor:banister_wood_horizontal_fuchsia +homedecor:standing_lamp_3 +homedecor:standing_lamp_2 +homedecor:table_lamp_3 +pipeworks:tube_4 +homedecor:pole_wrought_iron +homedecor:glowlight_half_3 +mesecons:wire_11101010_off +homedecor:lattice_lantern_small_3 +homedecor:bars +homedecor:lattice_lantern_large_3 +homedecor:glowlight_quarter_3 +mcl_trees:leaves_cherry_blossom_orphan +homedecor:glowlight_small_cube_3 +homedecor:ceiling_lamp_1 +homedecor:ground_lantern_2 +homedecor:plasma_lamp_3 +homedecor:lattice_lantern_small_2 +homedecor:L_binding_bars +homedecor:ground_lantern_3 +homedecor:chains +mcl_fences:cherry_blossom_fence +homedecor:hanging_lantern_3 +homedecor:plasma_lamp_2 +homedecor:glowlight_small_cube_2 +homedecor:ceiling_lantern_3 +homedecor:lattice_lantern_small_1 +homedecor:plasma_lamp_1 +mesecons_noteblock:noteblock +homedecor:glowlight_small_cube_1 +homedecor:glowlight_half_1 +mcl_fences:cherry_blossom_fence_gate +mcl_fences:cherry_blossom_fence_gate_open +homedecor:hanging_lantern_0 +homedecor:desk_lamp_3 +mesecons:wire_10010001_on +homedecor:japanese_wall_top +homedecor:ceiling_lamp_3 +homedecor:tatami_mat +homedecor:spiral_staircase +homedecor:banister_wrought_iron_horizontal +mcl_deepslate:deepslate +homedecor:bathtub_clawfoot_chrome_taps +homedecor:banister_white_dark_horizontal +homedecor:wall_shelf +homedecor:banister_wood_horizontal_grey +homedecor:banister_wood_horizontal_crimson +homedecor:banister_wood_horizontal_rose +homedecor:glowlight_half_4 +homedecor:toaster_loaf +mcl_doors:door_cherry_blossom_b_1 +homedecor:banister_wood_horizontal_violet +homedecor:toaster +homedecor:bottle_green +homedecor:bottle_brown +mcl_doors:door_cherry_blossom_t_1 +homedecor:4_bottles_green +homedecor:4_bottles_multi +mcl_doors:door_cherry_blossom_b_2 +homedecor:banister_wood_horizontal_indigo +homedecor:coffee_maker +homedecor:banister_wood_horizontal_cyan +homedecor:banister_wood_horizontal_turquoise +homedecor:banister_wood_horizontal_malachite +homedecor:cutlery_set +homedecor:banister_wood_horizontal_harlequin +homedecor:sink +homedecor:banister_wood_horizontal_amber +homedecor:banister_wood_horizontal_orange +homedecor:banister_wood_horizontal_vermilion +homedecor:banister_wood_horizontal_red +pipeworks:mese_tube_110011 +mcl_farming:pumpkin_1 +homedecor:banister_wood_diagonal_right_indigo +homedecor:banister_wood_diagonal_right_cyan +homedecor:banister_wood_diagonal_right_turquoise +homedecor:banister_wood_diagonal_right_malachite +homedecor:banister_wood_diagonal_right_yellow +homedecor:banister_wood_diagonal_right +homedecor:banister_wrought_iron_diagonal_left +homedecor:banister_brass_diagonal_left +homedecor:banister_white_dark_diagonal_left +homedecor:banister_wood_diagonal_left_crimson +homedecor:bathroom_tiles_light +homedecor:bathroom_tiles_medium +mcl_core:goldblock +homedecor:banister_wood_diagonal_left_mulberry +mcl_core:clay +homedecor:banister_wood_diagonal_left_violet +mcl_core:packed_ice +homedecor:banister_wood_diagonal_left_blue +mcl_core:bone_block +homedecor:banister_wood_diagonal_left_cerulean +mcl_core:ironblock +homedecor:banister_wood_diagonal_left_turquoise +homedecor:towel_rod +mcl_core:emeraldblock +homedecor:banister_wood_diagonal_left_green +homedecor:banister_wood_diagonal_left_harlequin +homedecor:banister_wood_diagonal_left_amber +mcl_farming:pumpkintige_unconnect +mcl_farming:pumpkin_2 +mcl_farming:pumpkin_3 +mcl_farming:pumpkin_4 +mcl_farming:pumpkin_5 +mcl_farming:pumpkin_6 +mcl_farming:pumpkin_7 +homedecor:banister_wood_diagonal_left_orange +mcl_itemframes:glow_frame +homedecor:banister_wood_diagonal_left +pipeworks:priority_tube_8 +pipeworks:broken_tube_6 +homedecor:trophy +pipeworks:teleport_tube_3 +homedecor:pool_table +homedecor:dvd_cd_cabinet +homedecor:cardboard_box +homedecor:cardboard_box_big +homedecor:fishtank_lighted +homedecor:fishtank +homedecor:bathroom_set +mcl_trees:tree_acacia +homedecor:rug_small +homedecor:ceiling_tile +homedecor:ceiling_paint +homedecor:desk_globe +homedecor:desk +homedecor:filing_cabinet +homedecor:filing_cabinet_locked +homedecor:shutter +homedecor:window_flowerbox +homedecor:curtainrod_wood +homedecor:curtain_closed +homedecor:blinds_thick +homedecor:window_quartered +building_blocks:terrycloth_towel +building_blocks:Tarmac_spread +building_blocks:gravel_spread +building_blocks:brobble_spread +building_blocks:Marble +mcl_hoppers:hopper_side +mcl_hoppers:hopper +mcl_hoppers:hopper_disabled +building_blocks:Roofing +building_blocks:Adobe +building_blocks:smoothglass +building_blocks:grate +technic:granite +mcl_hoppers:hopper_side_disabled +fake_fire:chimney_top_sandstone +fake_fire:fancy_fire +mcl_mushrooms:red_mushroom_block_cap_100011 +homedecor:nightstand_mahogany_two_drawers_locked +mcl_core:brick_block +homedecor:nightstand_mahogany_one_drawer_locked +homedecor:nightstand_oak_two_drawers +mcl_doors:door_oak_t_2 +mcl_doors:door_birch_b_2 +mcl_flowerpots:flower_pot_sapling_jungle +mcl_chests:black_shulker_box_small +homedecor:bed_extended +homedecor:table_legs_wrought_iron +mcl_copper:block_preserved +mcl_copper:block_cut_preserved +mcl_copper:block_exposed_preserved +mcl_copper:block_exposed_cut_preserved +mcl_copper:block_weathered_preserved +mcl_copper:block_weathered_cut_preserved +mcl_copper:block_oxidized_preserved +mcl_copper:block_oxidized_cut_preserved +homedecor:book_open_brown +homedecor:book_brown +mcl_deepslate:deepslate_tiles_cracked +mcl_core:glass_black +homedecor:book_grey +homedecor:book_open_violet +mcl_colorblocks:glazed_terracotta_black +mcl_trees:wood_oak +mcl_mushrooms:mushroom_brown +mcl_trees:sapling_oak +mcl_trees:sapling_spruce +mcl_trees:sapling_birch +mcl_trees:sapling_dark_oak +homedecor:book_open_blue +mesecons_torch:mesecon_torch_on +mcl_signs:standing_sign_spruce +homedecor:book_green +mcl_stairs:slab_deepslate_tiles +mcl_stairs:slab_deepslate_tiles_top +mcl_stairs:slab_deepslate_tiles_double +homedecor:book_open_red +mcl_chests:trapped_chest_on_left +mcl_core:redsandstone +mcl_stairs:stair_stonebrick_outer +mcl_sculk:sculk +mcl_stairs:stair_sandstonesmooth2_inner +mesecons:wire_00010001_off +mcl_deepslate:deepslatetileswall +mcl_deepslate:deepslatetileswall_0 +homedecor:light_switch_off +mcl_deepslate:deepslatetileswall_1 +mcl_core:frosted_ice_1 +mcl_deepslate:deepslatetileswall_2 +mcl_chests:trapped_chest_left +mcl_core:frosted_ice_2 +homedecor:power_outlet +mcl_deepslate:deepslatetileswall_4 +mcl_core:frosted_ice_3 +mcl_deepslate:deepslatetileswall_5 +homedecor:telephone +mcl_deepslate:deepslatetileswall_6 +mcl_stairs:stair_redsandstonesmooth +mcl_deepslate:deepslatetileswall_7 +mcl_walls:endbricks_0 +mcl_deepslate:deepslatetileswall_8 +mcl_nether:red_nether_brick +mcl_deepslate:deepslatetileswall_9 +mcl_minecarts:rail +mcl_deepslate:deepslatetileswall_10 +mcl_stairs:stair_copper_cut_preserved +mcl_deepslate:deepslatetileswall_11 +mcl_minecarts:golden_rail +mcl_deepslate:deepslatetileswall_12 +mcl_walls:stonebrickmossy_4 +mcl_deepslate:deepslatetileswall_13 +mcl_stairs:stair_copper_exposed_cut_preserved +mcl_minecarts:activator_rail +mcl_stairs:stair_sandstonesmooth_outer +mcl_deepslate:deepslatetileswall_15 +mcl_barrels:barrel_closed +mcl_meshhand:mcl_skins_base_1EEB592FF_female_crea +mcl_stairs:stair_copper_weathered_cut_preserved +mcl_meshhand:mcl_skins_base_1EEB592FF_male_crea +mcl_meshhand:mcl_skins_base_1B47A57FF_female_crea +mcl_meshhand:mcl_skins_base_1B47A57FF_male_crea +mcl_meshhand:mcl_skins_base_18D471DFF_female_crea +mcl_meshhand:mcl_skins_base_18D471DFF_male_crea +mcl_stairs:stair_copper_oxidized_cut_preserved +mcl_meshhand:mcl_skins_character_1_female_crea +mcl_meshhand:mcl_skins_base_1EEB592FF_female_surv +mcl_meshhand:mcl_skins_base_1EEB592FF_male_surv +mcl_meshhand:mcl_skins_base_1B47A57FF_female_surv +mcl_meshhand:mcl_skins_base_1B47A57FF_male_surv +mcl_meshhand:mcl_skins_base_18D471DFF_female_surv +mcl_stairs:slab_copper_cut_preserved +mcl_meshhand:character_male_surv +mcl_meshhand:mcl_skins_character_1_female_surv +homedecor:fence_wrought_iron_2_corner +homedecor:fence_wrought_iron_2 +mcl_stairs:slab_copper_exposed_cut_preserved +mcl_flowers:double_fern +homedecor:fence_chainlink +homedecor:fence_barbed_wire_corner +homedecor:fence_picket_corner_white +mcl_stairs:slab_copper_weathered_cut_preserved +homedecor:fence_picket_corner +mcl_mushrooms:red_mushroom_block_cap_010010 +homedecor:fence_picket +mcl_mud:mud_bricks +mcl_stairs:slab_copper_oxidized_cut_preserved +mcl_doors:door_jungle_b_1 +mcl_mushrooms:red_mushroom_block_cap_010011 +homedecor:coat_tree +homedecor:coatrack_wallmount +mcl_stairs:stair_copper_cut_inner_preserved +mcl_mushrooms:red_mushroom_block_cap_010100 +homedecor:openframe_bookshelf +mcl_stairs:stair_copper_exposed_cut_inner_preserved +homedecor:wine_rack +mcl_mushrooms:red_mushroom_block_cap_010101 +mcl_stairs:stair_copper_weathered_cut_inner_preserved +homedecor:4_bottles_brown +homedecor:painting_14 +mcl_stairs:stair_copper_oxidized_cut_inner_preserved +homedecor:painting_13 +homedecor:painting_12 +homedecor:painting_11 +homedecor:painting_10 +mcl_stairs:stair_copper_cut_outer_preserved +homedecor:painting_9 +mcl_cauldrons:cauldron_1 +mcl_stairs:stair_copper_exposed_cut_outer_preserved +mcl_mushrooms:red_mushroom_block_cap_011000 +mcl_cauldrons:cauldron_1r +mcl_stairs:stair_copper_weathered_cut_outer_preserved +mcl_stairs:slab_acacia_top +mcl_stairs:slab_acacia_double +mcl_stairs:stair_copper_oxidized_cut_outer_preserved +homedecor:painting_8 +mcl_mushrooms:red_mushroom_block_cap_011010 +homedecor:painting_7 +homedecor:painting_6 +homedecor:painting_5 +mcl_end:end_stone +mcl_nether:netherrack +mcl_stairs:slab_copper_cut_top_preserved +mcl_crimson:warped_nylium +mcl_mushrooms:red_mushroom_block_cap_011100 +homedecor:painting_3 +homedecor:painting_2 +mcl_mushrooms:red_mushroom_block_cap_011101 +mcl_stairs:slab_copper_exposed_cut_top_preserved +homedecor:painting_1 +homedecor:picture_frame2 +mcl_mushrooms:red_mushroom_block_cap_011110 +homedecor:picture_frame1 +homedecor:tv_off +mcl_stairs:slab_copper_weathered_cut_top_preserved +mcl_mushrooms:red_mushroom_block_cap_011111 +homedecor:tv_stand +steel:strut +mcl_mushrooms:red_mushroom_block_cap_100000 +steel:roofing_wall +mcl_stairs:slab_copper_oxidized_cut_top_preserved +mcl_mushrooms:red_mushroom_block_cap_100001 +steel:roofing +steel:grate_soft +mcl_mushrooms:red_mushroom_block_cap_100010 +steel:plate_hard +homedecor:shingle_side_asphalt +homedecor:shingle_inner_corner_asphalt +mcl_stairs:slab_copper_cut_double_preserved +homedecor:shingles_terracotta +homedecor:shingles_asphalt +mcl_mushrooms:red_mushroom_block_cap_100100 +homedecor:kitchen_chair_padded +homedecor:bench_large_2 +mcl_stairs:slab_copper_exposed_cut_double_preserved +mcl_mushrooms:red_mushroom_block_cap_100101 +homedecor:bench_large_1 +homedecor:deckchair_striped_blue +mcl_mushrooms:red_mushroom_block_cap_100110 +homedecor:deckchair +mcl_stairs:slab_copper_weathered_cut_double_preserved +homedecor:armchair +mcl_mushrooms:red_mushroom_block_cap_100111 +lrfurn:armchair +mcl_deepslate:deepslatepolishedwall_9 +mcl_mushrooms:red_mushroom_block_cap_101000 +mcl_stairs:slab_copper_oxidized_cut_double_preserved +mcl_mushrooms:red_mushroom_block_cap_101001 +mcl_stairs:stair_copper_weathered_cut_outer +mcl_stairs:stair_copper_weathered_cut_inner +mcl_mushrooms:red_mushroom_block_cap_101010 +homedecor:table_white +homedecor:table_mahogany +homedecor:table +mcl_mushrooms:red_mushroom_block_cap_101011 +mcl_stairs:slab_copper_weathered_cut +mcl_stairs:slab_copper_weathered_cut_top +mcl_stairs:slab_copper_weathered_cut_double +homedecor:wood_table_small_round_with_brass_legs +homedecor:wood_table_small_round +mcl_mushrooms:red_mushroom_block_cap_101101 +basic_materials:cement_block +homedecor:wood_table_small_square_with_wrought_iron_legs +mesecons:wire_01000000_on +mesecons:wire_01000000_off +homedecor:wood_table_small_square_with_brass_legs +basic_materials:concrete_block +mcl_mushrooms:red_mushroom_block_cap_101111 +mcl_stairs:stair_copper_oxidized_cut_outer +basic_materials:chain_steel +mcl_mushrooms:red_mushroom_block_cap_110000 +mcl_cauldrons:cauldron_3_lava +mcl_mushrooms:red_mushroom_block_cap_110001 +homedecor:wood_table_small_square +basic_materials:chain_brass +mcl_stairs:slab_copper_oxidized_cut +mcl_stairs:slab_copper_oxidized_cut_top +mcl_stairs:slab_copper_oxidized_cut_double +basic_materials:brass_block +homedecor:wood_table_large_square_with_brass_legs +homedecor:glass_table_small_round_with_wood_legs +mcl_mushrooms:red_mushroom_block_cap_110100 +homedecor:glass_table_small_round_with_wrought_iron_legs +mcl_mushrooms:red_mushroom_block_cap_110101 +homedecor:glass_table_small_round_with_brass_legs +mesecons:wire_00100000_on +mesecons:wire_00100000_off +homedecor:glass_table_small_round +homedecor:glass_table_small_square_with_wood_legs +homedecor:glass_table_small_square_with_wrought_iron_legs +mcl_mushrooms:red_mushroom_block_cap_110111 +homedecor:glass_table_small_square_with_brass_legs +homedecor:glass_table_small_square +mcl_mushrooms:red_mushroom_block_cap_111000 +homedecor:glass_table_large_square_with_wood_legs +mcl_mushrooms:red_mushroom_block_cap_111001 +mesecons:wire_10100000_on +mesecons:wire_10100000_off +mcl_mushrooms:red_mushroom_block_cap_111010 +homedecor:glass_table_large_square_with_wrought_iron_legs +mcl_stairs:slab_dark_oak +mcl_stairs:slab_dark_oak_top +mcl_stairs:slab_dark_oak_double +mcl_mushrooms:red_mushroom_block_cap_111100 +homedecor:glass_table_large_square_with_brass_legs +mcl_mushrooms:red_mushroom_block_cap_111101 +homedecor:glass_table_large_square +mcl_cauldrons:cauldron_1_lava +mcl_mushrooms:red_mushroom_block_cap_111110 +mcl_panes:pane_silver_flat +homedecor:table_legs_wood +homedecor:bed_regular +homedecor:table_legs_brass +homedecor:trash_can +homedecor:trash_can_green_open +mcl_stairs:slab_dark_oak_bark +mcl_stairs:slab_dark_oak_bark_top +mcl_stairs:slab_dark_oak_bark_double +mesecons:wire_11100000_on +mesecons:wire_11100000_off +mcl_cauldrons:cauldron_2_lava +homedecor:trash_can_green +mcl_brewing:stand_100 +mcl_brewing:stand_010 +mcl_brewing:stand_001 +mcl_brewing:stand_110 +mcl_brewing:stand_101 +mcl_brewing:stand_011 +mcl_brewing:stand_111 +mesecons:wire_00010000_on +mesecons:wire_00010000_off +itemframes:pedestal +mcl_mushrooms:brown_mushroom_block_cap_000100 +itemframes:frame +mcl_mushrooms:brown_mushroom_block_cap_000101 +mcl_panes:pane_light_blue_flat +mcl_mushrooms:brown_mushroom_block_cap_000110 +pipeworks:autocrafter +mcl_mushrooms:brown_mushroom_block_cap_000111 +pipeworks:storage_tank_10 +mcl_mushrooms:brown_mushroom_block_cap_001000 +mesecons:wire_10010000_off +mcl_mushrooms:brown_mushroom_block_cap_001001 +pipeworks:expansion_tank_10 +mcl_mushrooms:brown_mushroom_block_cap_001010 +pipeworks:mese_tube_100011 +mcl_mushrooms:brown_mushroom_block_cap_001011 +pipeworks:storage_tank_8 +mcl_mushrooms:brown_mushroom_block_cap_001100 +pipeworks:storage_tank_7 +mcl_mushrooms:brown_mushroom_block_cap_001101 +mesecons:wire_01010000_on +mesecons:wire_01010000_off +pipeworks:expansion_tank_7 +mcl_mushrooms:brown_mushroom_block_cap_001111 +pipeworks:mese_tube_100101 +mcl_mushrooms:brown_mushroom_block_cap_010000 +pipeworks:expansion_tank_6 +mcl_mushrooms:brown_mushroom_block_cap_010001 +pipeworks:storage_tank_5 +mcl_mushrooms:brown_mushroom_block_cap_010010 +mcl_panes:pane_orange_flat +mcl_mushrooms:brown_mushroom_block_cap_010011 +mesecons:wire_11010000_off +mcl_mushrooms:brown_mushroom_block_cap_010100 +pipeworks:mese_tube_100111 +mcl_mushrooms:brown_mushroom_block_cap_010101 +pipeworks:expansion_tank_5 +mcl_mushrooms:brown_mushroom_block_cap_010110 +mcl_nether:nether_lava_source +pipeworks:storage_tank_4 +pipeworks:expansion_tank_4 +pipeworks:storage_tank_3 +mesecons:wire_00110000_on +mesecons:wire_00110000_off +mcl_end:end_bricks +pipeworks:mese_tube_101010 +pipeworks:expansion_tank_3 +mcl_panes:pane_orange +pipeworks:storage_tank_2 +pipeworks:expansion_tank_2 +mcl_end:purpur_pillar +mcl_stairs:stair_copper_oxidized_cut +mcl_copper:block_weathered_cut +mesecons:wire_10110000_on +mesecons:wire_10110000_off +pipeworks:storage_tank_0 +mcl_core:stone_with_coal +pipeworks:expansion_tank_0 +mcl_signs:wall_sign_birch +pipeworks:spigot +pipeworks:grating +pipeworks:pump_off +mcl_core:stone_with_iron +pipeworks:pump_on +pipeworks:pipe_compatibility_empty +pipeworks:pipe_10_empty +pipeworks:pipe_9_loaded +mcl_core:stone_with_gold +mesecons:wire_01110000_on +mesecons:wire_01110000_off +pipeworks:pipe_8_empty +mesecons_pressureplates:pressure_plate_birch_on +pipeworks:pipe_6_loaded +mcl_panes:pane_lime +pipeworks:pipe_5_empty +mesecons_button:button_birch_off +mcl_ocean:kelp_redsand +pipeworks:pipe_3_empty +pipeworks:pipe_1_loaded +mesecons_button:button_birch_on +mesecons:wire_11110000_off +mcl_core:stone_with_redstone_lit +mcl_panes:pane_purple_flat +pipeworks:mese_sand_tube_compatibility +mcl_flowerpots:flower_pot_sapling_birch +pipeworks:priority_tube_2 +pipeworks:mese_sand_tube_9 +pipeworks:mese_sand_tube_7 +pipeworks:priority_tube_3 +pipeworks:mese_sand_tube_5 +mesecons:wire_10001000_on +mesecons:wire_10001000_off +pipeworks:mese_sand_tube_3 +mcl_stairs:stair_end_bricks +pipeworks:priority_tube_5 +mcl_stairs:stair_end_bricks_outer +mcl_beacons:beacon +pipeworks:priority_tube_6 +pipeworks:mese_sand_tube_1 +mcl_panes:pane_purple +pipeworks:priority_tube_7 +mesecons:wire_11001000_on +mesecons:wire_11001000_off +mcl_sus_nodes:sand_1 +mcl_stairs:slab_end_bricks_double +pipeworks:sand_tube_compatibility +pipeworks:priority_tube_9 +mcl_sus_nodes:sand_2 +pipeworks:sand_tube_9 +mcl_panes:pane_grey_flat +pipeworks:sand_tube_8 +mcl_sus_nodes:sand_3 +mesecons:wire_10101000_on +mesecons:wire_10101000_off +pipeworks:sand_tube_3 +mcl_villages:crop_grain_4 +mcl_sus_nodes:gravel +mcl_villages:crop_grain_5 +mcl_sus_nodes:gravel_1 +mesecons:wire_11101000_on +mcl_sus_nodes:gravel_2 +mcl_panes:pane_grey +mcl_villages:crop_grain_8 +mesecons:wire_10011000_on +mcl_nether:ancient_debris +mcl_villages:crop_root_4 +mcl_flowerpots:flower_pot_cactus +mesecons:wire_11011000_on +mesecons:wire_11011000_off +mcl_villages:crop_root_7 +mcl_core:glass +mcl_panes:pane_cyan +mesecons:wire_10111000_on +mesecons:wire_10111000_off +mcl_villages:crop_gourd_3 +mcl_villages:crop_gourd_4 +homedecor:kitchen_cabinet_colorable +mcl_villages:crop_gourd_5 +mcl_core:glass_grey +mcl_villages:crop_gourd_7 +pipeworks:teleport_tube_10 +mcl_core:glass_yellow +mcl_villages:crop_gourd_8 +mcl_deepslate:deepslatetileswall_16 +pipeworks:trashcan +pipeworks:accelerator_tube_1 +pipeworks:teleport_tube_6 +pipeworks:teleport_tube_5 +mcl_core:glass_white +pipeworks:teleport_tube_4 +homedecor:piano +pipeworks:accelerator_tube_3 +pipeworks:teleport_tube_2 +pipeworks:teleport_tube_1 +pipeworks:accelerator_tube_4 +mcl_core:glass_pink +pipeworks:tag_tube_111011 +pipeworks:accelerator_tube_5 +pipeworks:tag_tube_111010 +mcl_portals:portal_end +pipeworks:accelerator_tube_6 +pipeworks:tag_tube_111001 +pipeworks:tag_tube_110110 +pipeworks:accelerator_tube_7 +pipeworks:tag_tube_110011 +pipeworks:tag_tube_110010 +mesecons_pistons:piston_normal_on +mesecons_pistons:piston_pusher_normal +pipeworks:tag_tube_110001 +mcl_villages:crop_bush_8 +pipeworks:tag_tube_011101 +pipeworks:tag_tube_001010 +mcl_villages:crop_tree_1 +mesecons_torch:redstoneblock +mcl_villages:crop_tree_2 +mcl_villages:crop_tree_3 +signs_road:green_left_sign +mcl_villages:crop_tree_4 +signs_road:green_right_sign +mesecons_pistons:piston_sticky_on +mesecons_pistons:piston_pusher_sticky +signs_road:yellow_left_sign +signs_road:yellow_right_sign +mcl_villages:crop_tree_7 +mcl_deepslate:deepslatebrickswall_0 +mesecons_pistons:piston_up_normal_on +mesecons_pistons:piston_up_pusher_normal +mcl_copper:block +signs_road:red_right_sign +mesecons_pistons:piston_up_sticky_on +mesecons_pistons:piston_up_pusher_sticky +mcl_walls:sandstone_4 +pipeworks:mese_tube_101011 +mcl_villages:crop_flower_4 +homedecor:flower_pot_terracotta +homedecor:flower_pot_green +homedecor:flower_pot_black +pipeworks:mese_tube_101100 +mcl_villages:crop_flower_6 +mcl_doors:trapdoor_jungle_open +signs_road:large_street_sign +pipeworks:mese_tube_101101 +signs_road:red_street_sign +signs_road:blue_sign +signs_road:yellow_sign +signs_road:green_sign +signs:wooden_long_sign +signs_road:red_sign +signs_road:white_sign +homedecor:rug_large +homedecor:rug_persian +pipeworks:mese_tube_101111 +mcl_stairs:stair_jungle_inner +mcl_walls:diorite_16 +pipeworks:mese_tube_110000 +homedecor:japanese_wall_middle +homedecor:japanese_wall_bottom +mcl_flowerpots:flower_pot_wither_rose +mcl_stairs:stair_stonebrickcracked_outer +pipeworks:mese_tube_110001 +mcl_deepslate:deepslatecobbledwall_12 +pipeworks:mese_tube_111111 +homedecor:dartboard +mcl_flowerpots:flower_pot_lily_of_the_valley +pipeworks:mese_tube_110010 +pipeworks:tube_10 +homedecor:sportbench +pipeworks:broken_tube_9 +homedecor:skateboard +mcl_flowerpots:flower_pot_cornflower +pipeworks:accelerator_tube_2 +pipeworks:crossing_tube_3 +pipeworks:mese_tube_110111 +pipeworks:mese_tube_100001 +pipeworks:mese_tube_110100 +pipeworks:mese_tube_101000 +homedecor:banister_wood_horizontal +pipeworks:mese_tube_101110 +pipeworks:mese_tube_101001 +pipeworks:mese_tube_110101 +boards:black_board +pipeworks:mese_tube_100110 +boards:green_board +pipeworks:mese_tube_100100 +pipeworks:mese_tube_110110 +pipeworks:mese_tube_100000 +pipeworks:mese_tube_011111 +pipeworks:mese_tube_011110 +pipeworks:mese_tube_011101 +mcl_nether:netheriteblock +pipeworks:mese_tube_000011 +pipeworks:mese_tube_000001 +pipeworks:mese_tube_111000 +pipeworks:crossing_tube_1 +pipeworks:accelerator_tube_compatibility +pipeworks:accelerator_tube_10 +pipeworks:accelerator_tube_8 +pipeworks:mese_tube_111001 +pipeworks:priority_tube_compatibility +pipeworks:priority_tube_10 +pipeworks:mese_tube_111010 +pipeworks:priority_tube_4 +pipeworks:priority_tube_1 +pipeworks:broken_tube_compatibility +pipeworks:broken_tube_10 +pipeworks:mese_tube_111011 +pipeworks:broken_tube_8 +pipeworks:broken_tube_7 +pipeworks:mese_tube_111100 +pipeworks:broken_tube_5 +pipeworks:broken_tube_4 +pipeworks:broken_tube_2 +pipeworks:broken_tube_1 +pipeworks:mese_tube_111101 +pipeworks:tube_8 +pipeworks:tube_6 +pipeworks:mese_tube_111110 +mcl_core:coarse_dirt +mcl_nether:soul_sand +mcl_mobspawners:spawner +mcl_core:barrier +mcl_end:chorus_flower +mcl_end:chorus_flower_dead +mcl_end:end_rod +mcl_end:dragon_egg +mcl_portals:end_portal_frame_eye +mcl_lanterns:chain +pipeworks:dispenser_on +pipeworks:deployer_off +mcl_nether:cracked_nether_brick +mcl_nether:nether_wart_block +signs:wooden_left_sign +mcl_core:grass_path +signs:wooden_right_sign +mcl_nether:quartz_block +pipeworks:teleport_tube_7 +mcl_deepslate:deepslate_chiseled +mcl_deepslate:deepslatetileswall_21 +pipeworks:teleport_tube_8 +mcl_beehives:bee_nest_1 +mcl_nether:quartz_chiseled +mcl_beehives:bee_nest_2 +mcl_deepslate:deepslatetileswall_14 +mcl_beehives:bee_nest_3 +mcl_nether:quartz_pillar +mcl_beehives:bee_nest_4 +pipeworks:teleport_tube_compatibility +mcl_stairs:stair_deepslate_tiles_inner +mcl_nether:quartz_smooth +mcl_stairs:stair_deepslate_tiles_outer +mcl_stairs:stair_deepslate_tiles +mcl_deepslate:deepslate_tiles +mcl_deepslate:deepslatebrickswall_14 +signs:wooden_sign +mcl_deepslate:deepslatebrickswall_13 +signs:label_medium +signs:paper_poster +mcl_deepslate:deepslatebrickswall_9 +mcl_deepslate:deepslatebrickswall_8 +mcl_deepslate:deepslatebrickswall_3 +mcl_deepslate:deepslatebrickswall_2 +mcl_deepslate:deepslatebrickswall_1 +mcl_stairs:stair_deepslate_bricks_inner +mcl_stairs:stair_deepslate_bricks_outer +mcl_stairs:stair_deepslate_bricks +mcl_deepslate:deepslate_bricks +mcl_deepslate:deepslatepolishedwall_21 +mcl_deepslate:deepslatepolishedwall_16 +mcl_deepslate:deepslatepolishedwall_15 +mcl_deepslate:deepslatepolishedwall_14 +mcl_deepslate:deepslatepolishedwall_13 +mcl_deepslate:deepslatepolishedwall_12 +mcl_deepslate:deepslatepolishedwall_11 +mcl_deepslate:deepslatepolishedwall_10 +mcl_trees:stripped_dark_oak +lrfurn:sofa +mcl_deepslate:deepslatepolishedwall_8 +mcl_deepslate:deepslatepolishedwall_7 +mcl_deepslate:deepslatepolishedwall_6 +mcl_trees:wood_dark_oak +mcl_deepslate:deepslatepolishedwall_5 +mcl_deepslate:deepslatepolishedwall_3 +mcl_deepslate:deepslatepolishedwall_0 +mcl_stairs:slab_deepslate_polished_double +mcl_trees:bark_stripped_dark_oak +mcl_trees:bark_dark_oak +mcl_stairs:stair_deepslate_polished +mcl_deepslate:deepslate_polished +mcl_deepslate:deepslatecobbledwall +mcl_deepslate:deepslatecobbledwall_15 +mcl_deepslate:deepslatecobbledwall_2 +mcl_stairs:slab_jungle_top +homedecor:hanging_lantern_4 +mesecons:wire_10110010_off +homedecor:ceiling_lantern_4 +mcl_farming:wheat_1 +homedecor:lattice_lantern_large_4 +mcl_monster_eggs:monster_egg_stone +homedecor:lattice_lantern_small_4 +mcl_doors:door_bamboo_t_1 +homedecor:desk_lamp_4 +mcl_trees:leaves_dark_oak +mcl_trees:leaves_dark_oak_orphan +homedecor:ceiling_lamp_4 +mcl_stairs:stair_jungle +mcl_trees:sapling_jungle +homedecor:table_lamp_4 +homedecor:book_red +mcl_fences:dark_oak_fence +mcl_sus_nodes:gravel_3 +mcl_fences:dark_oak_fence_gate +mcl_fences:dark_oak_fence_gate_open +mcl_walls:diorite_9 +homedecor:glowlight_quarter_5 +mcl_flowerpots:flower_pot_poppy +homedecor:glowlight_small_cube_5 +homedecor:fence_chainlink_corner +mcl_flowers:rose_bush +homedecor:plasma_lamp_5 +homedecor:book_open_green +mcl_lush_caves:spore_blossom +homedecor:ground_lantern_5 +mcl_lush_caves:moss_carpet +mesecons_delayer:delayer_off_2 +homedecor:hanging_lantern_5 +homedecor:book_blue +mcl_stairs:slab_stone_rough +mcl_lush_caves:hanging_roots +mcl_doors:door_dark_oak_b_1 +mcl_lush_caves:rooted_dirt +mcl_stairs:stair_quartzblock_outer +mcl_stairs:stair_quartzblock_inner +mcl_doors:door_jungle_t_1 +mcl_doors:door_dark_oak_t_1 +homedecor:book_violet +mcl_colorblocks:glazed_terracotta_grey +mcl_doors:door_dark_oak_b_2 +mcl_stairs:slab_quartzblock +mcl_stairs:slab_quartzblock_top +mcl_doors:door_dark_oak_t_2 +homedecor:fence_brass +mcl_doors:trapdoor_dark_oak +mcl_stairs:stair_andesite_smooth_inner +homedecor:table_lamp_5 +homedecor:fence_wrought_iron +mcl_colorblocks:glazed_terracotta_lime +homedecor:standing_lamp_5 +mcl_colorblocks:glazed_terracotta_red +mcl_stairs:stair_redsandstone +mcl_walls:prismarine_5 +mcl_stairs:stair_quartz_smooth +mcl_lush_caves:cave_vines_lit +mcl_lush_caves:cave_vines +mcl_doors:trapdoor_dark_oak_open +mcl_core:lapisblock +mcl_walls:prismarine_4 +mcl_copper:block_exposed_cut +mcl_copper:block_cut +mcl_stairs:stair_dark_oak +mcl_stairs:slab_quartz_smooth +mcl_stairs:stair_dark_oak_outer +mcl_stairs:stair_dark_oak_inner +mcl_lush_caves:azalea +mcl_colorblocks:concrete_pink +mcl_farming:pumpkintige_linked_r +mcl_farming:pumpkintige_linked_l +mcl_farming:pumpkintige_linked_t +mcl_farming:pumpkintige_linked_b +mcl_stairs:stair_dark_oak_bark +mcl_core:diamondblock +mcl_stairs:stair_dark_oak_bark_outer +mcl_stairs:stair_dark_oak_bark_inner +mcl_stairs:stair_nether_brick +mcl_copper:block_weathered +mcl_stairs:stair_nether_brick_outer +mcl_stairs:stair_nether_brick_inner +mcl_fences:jungle_fence_gate +mcl_campfires:soul_campfire +mcl_fences:jungle_fence +mcl_maps:filled_map_mcl_skins_base_1EEB592FF_female_surv +mcl_stairs:slab_sandstonesmooth_top +mcl_stairs:slab_nether_brick +mcl_stairs:slab_nether_brick_top +mcl_colorblocks:hardened_clay_magenta +mcl_maps:filled_map_mcl_skins_base_1B47A57FF_female_crea +mcl_maps:filled_map_mcl_skins_base_1EEB592FF_male_crea +mcl_colorblocks:concrete_powder_magenta +mcl_maps:filled_map_mcl_skins_base_1EEB592FF_female_crea +mcl_colorblocks:concrete_magenta +mcl_core:coalblock +homedecor:light_switch_on +mcl_stairs:stair_sandstonesmooth_inner +homedecor:speaker_open +mcl_stairs:stair_sandstonesmooth +mcl_stairs:stair_red_nether_brick +mcl_chests:chest +mcl_stairs:stair_red_nether_brick_outer +mcl_stairs:stair_red_nether_brick_inner +homedecor:bed_kingsize +homedecor:nightstand_oak_one_drawer +homedecor:speaker +homedecor:nightstand_mahogany_one_drawer +homedecor:nightstand_mahogany_two_drawers +mcl_stairs:slab_red_nether_brick +mcl_stairs:slab_red_nether_brick_top +mcl_stairs:slab_red_nether_brick_double +mcl_mushrooms:red_mushroom_block_cap_101100 +homedecor:doorbell +mcl_colorblocks:hardened_clay_blue +mesecons:wire_11000000_on +mcl_stairs:slab_stonebrick_top +mcl_colorblocks:concrete_powder_blue +mcl_stairs:slab_stonebrick +mcl_colorblocks:concrete_blue +mcl_walls:stonebrickmossy_5 +homedecor:cobweb_corner +mcl_cauldrons:cauldron_2 +mcl_fences:nether_brick_fence +homedecor:cobweb_centered +mcl_stairs:stair_stonebrick_inner +homedecor:cobweb_flat +mcl_stairs:stair_stonebrick +mcl_mushrooms:brown_mushroom_block_cap_111111 +homedecor:cobweb_plantlike +mesecons_commandblock:commandblock_on +mcl_stairs:slab_sandstone_double +mcl_stairs:slab_warped +mcl_mangrove:mangrove_mud_roots +homedecor:nightstand_oak_one_drawer_locked +mcl_core:crying_obsidian +mcl_core:obsidian +mcl_stairs:slab_redsandstonesmooth_top +mcl_core:void +mcl_core:realm_barrier +mesecons:wire_00000000_on +mesecons_pressureplates:pressure_plate_birch_off +mcl_walls:rednetherbrick_1 +mcl_stairs:stair_redsandstonesmooth_outer +homedecor:dvd_vcr +mcl_panes:pane_white +homedecor:nightstand_oak_two_drawers_locked +mcl_stairs:slab_warped_bark +mcl_stairs:slab_warped_bark_top +mcl_stairs:slab_warped_bark_double +mcl_walls:endbricks_10 +mcl_walls:endbricks_14 +mcl_stairs:slab_oak +mcl_walls:mudbrick_21 +mcl_walls:mudbrick_14 +mcl_walls:mudbrick_6 +mcl_observers:observer_off +signs_road:red_left_sign +mcl_lush_caves:azalea_leaves +mesecons_button:button_oak_on +mcl_signs:wall_sign_warped +mcl_walls:endbricks_8 +mcl_lush_caves:azalea_leaves_flowering +mcl_stairs:slab_redsandstone_double +mcl_stairs:slab_redsandstone +mcl_trees:tree_oak +homedecor:projection_screen +mcl_walls:prismarine_21 +mcl_stairs:stair_mossycobble +mcl_stairs:stair_redsandstone_inner +mesecons_pressureplates:pressure_plate_warped_off +mcl_core:snow_5 +mesecons_pressureplates:pressure_plate_warped_on +mcl_core:snow_2 +homedecor:speaker_small +mcl_walls:stonebrickmossy_1 +mesecons_button:button_warped_off +homedecor:stereo +mcl_flowerpots:flower_pot_azalea +homedecor:book_open_grey +mesecons_button:button_warped_on +mcl_mushrooms:red_mushroom_block_cap_011001 +mesecons_solarpanel:solar_panel_inverted_on +mcl_core:snow_8 +mcl_flowerpots:flower_pot_azalea_flowering +mcl_core:snow_6 +mcl_core:frosted_ice_0 +mcl_core:glass_brown +mcl_stairs:stair_cobble +mcl_mushrooms:red_mushroom_block_cap_011011 +mcl_mushrooms:red_mushroom_block_cap_110011 +mesecons_solarpanel:solar_panel_off +mcl_walls:sandstone_8 +mcl_flowerpots:flower_pot_mushroom_brown +mesecons:wire_00110011_off +mesecons_pistons:piston_down_sticky_on +mcl_walls:sandstone_0 +mcl_walls:brick_14 +mcl_walls:brick_13 +mcl_stairs:slab_acacia_bark +mcl_stairs:slab_acacia_bark_top +mcl_stairs:slab_acacia_bark_double +mcl_stairs:slab_diorite +mesecons:wire_01110101_on +mcl_core:stone_with_lapis +mcl_sculk:vein +mcl_stairs:stair_diorite_inner +mcl_stairs:stair_diorite_outer +mcl_core:ice +mesecons:wire_01110101_off +mcl_honey:honeycomb_block +mcl_stairs:stair_spruce_bark_outer +mcl_nether:chiseled_nether_brick +mcl_signs:wall_sign_acacia +mcl_walls:brick_0 +mcl_stairs:slab_oak_bark_top +mesecons:wire_10110010_on +signs:label_small +mcl_flowers:tulip_pink +mcl_honey:honey_block +mcl_grindstone:grindstone +mcl_stairs:stair_acacia_bark +mcl_doors:trapdoor_acacia_open +mcl_doors:iron_trapdoor_open +mesecons_pressureplates:pressure_plate_acacia_off +mcl_walls:granite_21 +mesecons_pressureplates:pressure_plate_acacia_on +mesecons:wire_11110011_on +mesecons:wire_11110101_off +mcl_wool:brown_carpet +mesecons_pistons:piston_sticky_off +mesecons_pistons:piston_normal_off +mesecons_pistons:piston_up_sticky_off +mesecons_pistons:piston_up_normal_off +mesecons_pistons:piston_down_sticky_off +mesecons_pistons:piston_down_normal_off +mcl_walls:granite_13 +mcl_walls:netherbrick_2 +mcl_ocean:prismarine +mcl_flowerpots:flower_pot_sapling_acacia +mcl_copper:block_oxidized_cut +mcl_core:stonebrickmossy +mcl_ocean:prismarine_brick +mcl_copper:block_exposed +mcl_stairs:stair_deepslate_cobbled_inner +mcl_ocean:prismarine_dark +mcl_maps:filled_map_mcl_skins_character_1_female_crea +mcl_mushrooms:red_mushroom_block_stem +mcl_mushrooms:brown_mushroom_block_cap_100110 +mcl_mushrooms:red_mushroom_block_cap_110010 +mcl_lanterns:lantern_floor +mcl_trees:tree_dark_oak +mcl_walls:andesite_21 +mcl_walls:sandstone_21 +mcl_mushrooms:red_mushroom_block_cap_000011 +mesecons_button:button_stone_off +mcl_colorblocks:hardened_clay_green +mesecons_lightstone:lightstone_off +mcl_core:bedrock +mcl_stairs:slab_mangrove +mcl_stairs:slab_mangrove_top +mcl_stairs:slab_mangrove_double +mcl_fences:red_nether_brick_fence_gate_open +mesecons_lightstone:lightstone_on +mcl_colorblocks:concrete_powder_light_blue +mcl_stairs:slab_nether_brick_double +mcl_stairs:slab_quartz_smooth_top +mcl_nether:glowstone +mesecons:wire_10110011_on +mcl_stairs:stair_quartz_smooth_outer +mcl_mushrooms:red_mushroom_block_cap_010111 +mcl_stairs:stair_quartzblock +mcl_trees:stripped_birch +mcl_nether:quartz_ore +mcl_stairs:slab_mangrove_bark +mcl_stairs:slab_mangrove_bark_top +mcl_stairs:slab_mangrove_bark_double +mcl_stairs:stair_prismarine_inner +mcl_ocean:sea_pickle_4_dead_brain_coral_block +mcl_wool:blue_carpet +mcl_ocean:sea_pickle_2_off_dead_brain_coral_block +mcl_mushrooms:red_mushroom_block_cap_111011 +mcl_trees:bark_stripped_birch +mcl_trees:bark_birch +mcl_stairs:slab_prismarine_top +mcl_stairs:slab_prismarine_double +mcl_ocean:sea_pickle_1_off_dead_brain_coral_block +mcl_mushrooms:red_mushroom_block_cap_110110 +mcl_signs:wall_sign_mangrove +mcl_ocean:kelp_sand +mcl_stairs:stair_purpur_block +mcl_ocean:dead_horn_coral_block +mcl_stairs:stair_purpur_block_outer +mcl_stairs:stair_purpur_block_inner +mcl_flowerpots:flower_pot +mcl_stairs:slab_mud_brick +mcl_stairs:stair_prismarine_brick +mcl_meshhand:mcl_skins_base_18D471DFF_male_surv +mcl_stairs:stair_prismarine_brick_outer +mcl_stairs:stair_prismarine_brick_inner +mcl_stairs:slab_purpur_block_top +mcl_stairs:slab_purpur_block_double +mesecons_pressureplates:pressure_plate_mangrove_off +mcl_mushrooms:brown_mushroom_block_stem_full +mesecons_pressureplates:pressure_plate_mangrove_on +mcl_stairs:slab_prismarine_brick +mcl_stairs:slab_prismarine_brick_top +mcl_stairs:slab_prismarine_brick_double +mesecons_button:button_mangrove_off +mcl_stairs:stair_birch_bark_inner +mcl_walls:endbricks_11 +mcl_mushrooms:brown_mushroom_block_cap_000011 +mcl_chests:violet_shulker_box_small +mcl_wool:pink +mesecons:wire_01100000_off +mcl_fences:birch_fence +mesecons_button:button_stone_on +mcl_fences:birch_fence_gate +mcl_stairs:stair_prismarine_dark +mesecons:wire_10010000_on +mesecons_button:button_mangrove_on +mcl_stairs:stair_prismarine_dark_inner +mcl_trees:leaves_oak_orphan +mcl_trees:leaves_jungle +mcl_chests:magenta_shulker_box_small +mcl_signs:standing_sign_oak +mcl_mushrooms:brown_mushroom_block_cap_111101 +mcl_stairs:slab_prismarine_dark_top +mcl_stairs:slab_prismarine_dark_double +mcl_signs:standing_sign_jungle +mcl_colorblocks:concrete_powder_yellow +mcl_signs:standing_sign_birch +mcl_trees:leaves_jungle_orphan +mesecons_button:button_polished_blackstone_off +mcl_stairs:slab_spruce_double +mcl_doors:door_birch_b_1 +mesecons:wire_11010000_on +mesecons_button:button_polished_blackstone_on +mcl_beehives:beehive +mcl_signs:standing_sign_crimson +mcl_doors:door_birch_t_1 +mcl_signs:standing_sign_warped +mcl_stonecutter:stonecutter +mcl_signs:standing_sign_cherry_blossom +mcl_target:target_off +mcl_mangrove:propagule_dirt +mcl_doors:door_birch_t_2 +mcl_walls:brick_11 +mcl_mangrove:propagule_coarse_dirt +mcl_stairs:stair_jungle_outer +mesecons:wire_11011101_off +mcl_farming:hay_block +mcl_beds:bed_grey_bottom +mcl_stairs:stair_sandstone_inner +mcl_lush_caves:azalea_flowering +mcl_panes:pane_cyan_flat +mcl_trees:leaves_birch +mcl_wool:white_carpet +mcl_mushrooms:brown_mushroom_block_cap_001110 +mcl_panes:pane_red_flat +mcl_doors:trapdoor_birch_open +mcl_mushrooms:brown_mushroom_block_cap_101111 +mcl_beacons:beacon_beam +mcl_blackstone:soul_soil +mcl_core:stone_with_redstone +mcl_flowerpots:flower_pot_propagule +signs_road:blue_street_sign +mcl_stairs:stair_birch_outer +mcl_stairs:stair_birch_inner +mcl_colorblocks:concrete_powder_pink +mesecons:wire_10010001_off +mcl_heads:steve +mesecons:wire_01110011_on +mcl_mangrove:propagule_clay +mcl_stairs:slab_mud_brick_double +mcl_stairs:stair_birch_bark +mcl_heads:steve_ceiling +mcl_stairs:stair_birch_bark_outer +mcl_panes:pane_natural_flat +mcl_walls:sandstone_15 +mcl_beehives:beehive_5 +mcl_beehives:bee_nest_5 +mesecons:wire_11110000_on +mcl_mud:mud +mcl_trees:leaves_acacia_orphan +mcl_stairs:stair_birch +mcl_stairs:slab_birch +mcl_stairs:slab_birch_top +mcl_stairs:slab_birch_double +mcl_colorblocks:concrete_cyan +mcl_colorblocks:glazed_terracotta_cyan +mcl_stairs:slab_spruce_top +mcl_colorblocks:hardened_clay_cyan +mcl_colorblocks:glazed_terracotta_magenta +mcl_signs:wall_sign_spruce +mcl_panes:pane_natural +mesecons_pressureplates:pressure_plate_spruce_off +mcl_fences:acacia_fence_gate_open +mcl_colorblocks:glazed_terracotta_light_blue +mcl_mushrooms:mushroom_red +mcl_mushrooms:red_mushroom_block_cap_101110 +mcl_stairs:slab_birch_bark +mcl_stairs:slab_birch_bark_top +mcl_stairs:slab_birch_bark_double +mcl_panes:bar +mcl_stairs:stair_mud_brick_inner +mcl_panes:pane_yellow_flat +mcl_core:podzol +mcl_core:podzol_snow +mcl_core:mycelium +mcl_core:mycelium_snow +mcl_trees:stripped_oak +mcl_beehives:beehive_1 +mcl_doors:trapdoor_birch +mcl_beehives:beehive_2 +mcl_panes:bar_flat +mcl_beehives:beehive_3 +mesecons:wire_10011000_off +mcl_beehives:beehive_4 +mesecons_pressureplates:pressure_plate_jungle_off +mcl_signs:standing_sign_dark_oak +mesecons_pressureplates:pressure_plate_dark_oak_off +homedecor:rope_light_on_floor_on +mcl_panes:pane_yellow +mcl_panes:pane_red +mcl_stairs:stair_prismarine_dark_outer +mcl_panes:pane_lime_flat +mcl_fences:birch_fence_gate_open +mcl_colorblocks:concrete_powder_purple +homedecor:rope_light_on_ceiling_on +homedecor:rope_light_on_ceiling_off +mcl_flowers:cornflower +mcl_flowers:lily_of_the_valley +mcl_lush_caves:moss +mesecons_delayer:delayer_off_locked +mcl_core:dirt +mcl_flowers:wither_rose +mcl_wool:lime +mcl_stairs:slab_end_bricks_top +mcl_trees:wood_birch +mcl_stairs:stair_prismarine_outer +mcl_stairs:stair_prismarine +mcl_wool:orange +mcl_core:stone +mcl_stairs:slab_jungle_bark_double +mcl_chests:chest_left +mcl_chests:trapped_chest +mcl_colorblocks:hardened_clay_lime +mcl_colorblocks:hardened_clay_orange +mcl_chests:trapped_chest_on +mcl_chests:ender_chest_small +mcl_wool:silver +mcl_chests:dark_grey_shulker_box_small +mcl_chests:violet_shulker_box +mcl_chests:green_shulker_box_small +mcl_doors:door_mangrove_b_1 +mcl_ocean:tube_coral_block +mesecons_button:button_acacia_on +mcl_wool:black +mesecons_button:button_acacia_off +mcl_chests:brown_shulker_box_small +mcl_chests:cyan_shulker_box_small +mcl_chests:grey_shulker_box_small +mcl_mushrooms:brown_mushroom_block_cap_000000 +mcl_chests:blue_shulker_box_small +mcl_stairs:slab_purpur_block +mcl_stairs:slab_prismarine +mcl_panes:pane_light_blue +mcl_panes:pane_silver +mcl_target:target_on +mcl_ocean:dead_tube_coral_block +mcl_ocean:dead_tube_coral +mcl_ocean:tube_coral_fan +mcl_ocean:brain_coral_block +mcl_ocean:dead_brain_coral_block +mcl_ocean:brain_coral +mcl_ocean:brain_coral_fan +mcl_ocean:dead_brain_coral_fan +mcl_ocean:bubble_coral +mcl_ocean:dead_fire_coral_fan +mcl_mushrooms:brown_mushroom_block_cap_010111 +mcl_ocean:kelp_dirt +mcl_mushrooms:brown_mushroom_block_cap_011000 +mcl_ocean:kelp_gravel +mcl_mushrooms:brown_mushroom_block_cap_011001 +mcl_ocean:sea_pickle_2_dead_brain_coral_block +mcl_mushrooms:brown_mushroom_block_cap_011010 +mcl_ocean:sea_pickle_3_off_dead_brain_coral_block +mcl_mushrooms:brown_mushroom_block_cap_011011 +mcl_ocean:sea_pickle_4_off_dead_brain_coral_block +mcl_mushrooms:brown_mushroom_block_cap_011100 +mcl_nether:nether_brick +mcl_mushrooms:brown_mushroom_block_cap_011101 +mcl_stairs:slab_quartzblock_double +mcl_mushrooms:brown_mushroom_block_cap_011110 +mcl_stairs:stair_quartz_smooth_inner +mcl_mushrooms:brown_mushroom_block_cap_011111 +mcl_stairs:slab_quartz_smooth_double +mcl_mushrooms:brown_mushroom_block_cap_100000 +mcl_nether:nether_lava_flowing +mcl_mushrooms:brown_mushroom_block_cap_100001 +mcl_fences:red_nether_brick_fence_gate +mcl_mushrooms:brown_mushroom_block_cap_100010 +mcl_mushrooms:red_mushroom_block_cap_000100 +mcl_mushrooms:brown_mushroom_block_cap_100011 +mcl_mushrooms:red_mushroom_block_cap_000010 +mcl_mushrooms:brown_mushroom_block_cap_100100 +mcl_meshhand:character_male_crea +mcl_mushrooms:brown_mushroom_block_cap_100101 +mcl_flowers:double_grass +mcl_sus_nodes:sand +mcl_doors:iron_trapdoor +mcl_mushrooms:brown_mushroom_block_cap_100111 +mcl_copper:stone_with_copper +mcl_mushrooms:brown_mushroom_block_cap_101000 +mcl_copper:block_oxidized +mcl_mushrooms:brown_mushroom_block_cap_101001 +mcl_stairs:stair_copper_weathered_cut +mcl_mushrooms:brown_mushroom_block_cap_101010 +mcl_stairs:stair_copper_oxidized_cut_inner +mcl_mushrooms:brown_mushroom_block_cap_101011 +mcl_walls:sandstone_10 +mcl_mushrooms:brown_mushroom_block_cap_101100 +mesecons_torch:mesecon_torch_off +mcl_mushrooms:brown_mushroom_block_cap_101101 +mcl_core:stone_with_emerald +mcl_nether:nether_wart_0 +mcl_crafting_table:crafting_table +mesecons_delayer:delayer_on_4 +mcl_stairs:stair_blackstone +mcl_core:stone_with_diamond +homedecor:chandelier_steel +homedecor:chain_brass_top +mcl_core:stonebrick +mcl_stairs:stair_diorite +mcl_mushrooms:brown_mushroom_block_cap_000010 +mcl_core:glass_magenta +mcl_core:stonebrickcarved +homedecor:candle +mcl_furnaces:furnace +mcl_core:stonebrickcracked +homedecor:candlestick_brass +homedecor:oil_lamp +mcl_core:glass_blue +mcl_stairs:slab_diorite_top +mcl_stairs:slab_diorite_double +mcl_core:stone_smooth +mcl_flowerpots:flower_pot_mushroom_red +mcl_core:granite +mcl_walls:sandstone_6 +mcl_core:glass_green +mcl_walls:sandstone_7 +mcl_core:granite_smooth +mesecons_pistons:piston_down_normal_on +homedecor:kitchen_cabinet_colorable_with_sink +homedecor:dishwasher +mcl_core:andesite +mcl_colorblocks:hardened_clay +mcl_stairs:stair_cobble_outer +mcl_stairs:stair_cobble_inner +mcl_core:andesite_smooth +homedecor:dishwasher_marble +homedecor:dishwasher_granite +homedecor:kitchen_faucet +mcl_core:diorite +mcl_stairs:slab_cobble +mcl_stairs:slab_cobble_top +mcl_stairs:slab_cobble_double +mcl_core:diorite_smooth +homedecor:toilet_paper +mcl_stairs:stair_blackstone_brick_polished_inner +mcl_core:glass_red +mcl_sponges:sponge_wet_river_water +mcl_walls:prismarine_0 +mcl_core:dirt_with_grass_snow +homedecor:glowlight_half_14 +homedecor:glowlight_quarter_14 +homedecor:glowlight_small_cube_14 +mcl_core:glass_silver +homedecor:ground_lantern_14 +mcl_stairs:stair_mossycobble_outer +mcl_stairs:stair_mossycobble_inner +mcl_walls:endbricks_1 +homedecor:ceiling_lantern_14 +homedecor:lattice_lantern_large_14 +mcl_walls:endbricks_6 +mcl_core:glass_light_blue +mcl_stairs:slab_mossycobble +mcl_stairs:slab_mossycobble_top +mcl_stairs:slab_mossycobble_double +mcl_walls:netherbrick_3 +mcl_blackstone:wall_2 +homedecor:oven_active +mcl_blackstone:wall_3 +mcl_core:glass_orange +mcl_blackstone:wall_4 +mcl_walls:mudbrick_10 +mcl_blackstone:wall_5 +mcl_walls:mudbrick_13 +mcl_blackstone:wall_6 +mcl_stairs:stair_brick_block +mcl_core:glass_lime +mcl_stairs:stair_brick_block_outer +mcl_stairs:stair_brick_block_inner +mcl_core:sand +mcl_core:gravel +mcl_trees:leaves_mangrove_orphan +mcl_blackstone:wall_10 +mcl_walls:mudbrick_15 +mcl_core:glass_purple +mcl_stairs:slab_brick_block_top +mcl_stairs:slab_brick_block_double +homedecor:oven_active_locked +mcl_core:sandstone +mesecons:wire_11101000_off +mcl_blackstone:wall_14 +homedecor:oven_steel_active +mcl_blackstone:wall_15 +mcl_fences:oak_fence_gate_open +mcl_blackstone:wall_16 +mcl_mushrooms:brown_mushroom_block_cap_111100 +mcl_core:sandstonesmooth +mcl_stairs:stair_sandstone +mcl_core:glass_cyan +mcl_stairs:stair_sandstone_outer +mcl_core:sandstonecarved +mcl_signs:standing_sign_mangrove +mcl_blackstone:soul_torch_wall +mcl_walls:netherbrick_4 +mcl_core:sandstonesmooth2 +homedecor:oven_steel_locked +mcl_stairs:slab_sandstone +mcl_core:redsand +mcl_colorblocks:hardened_clay_yellow +mcl_deepslate:deepslate_cobbled +mcl_mushrooms:brown_mushroom_block_cap_000001 +mcl_ocean:sea_lantern +mcl_deepslate:deepslate_reinforced +mcl_colorblocks:concrete_yellow +mcl_portals:portal_gateway +mcl_deepslate:infested_deepslate +mcl_mushrooms:brown_mushroom_block_stem +mcl_fire:fire +mcl_core:redsandstonesmooth +mcl_stairs:stair_sandstonesmooth2 +mesecons:wire_01100000_on +mcl_stairs:stair_sandstonesmooth2_outer +mcl_core:redsandstonecarved +mcl_cauldrons:cauldron_2r +mcl_cauldrons:cauldron_3 +mcl_cauldrons:cauldron_3r +mcl_core:redsandstonesmooth2 +mesecons:wire_11000000_off +mcl_stairs:slab_sandstonesmooth2 +mcl_stairs:slab_sandstonesmooth2_top +mcl_stairs:slab_sandstonesmooth2_double +mcl_beds:bed_light_blue_bottom +mcl_walls:andesite_16 +mcl_colorblocks:hardened_clay_white +mcl_deepslate:deepslate_with_redstone_lit +mcl_deepslate:deepslate_with_redstone +mcl_colorblocks:concrete_powder_white +mcl_mushrooms:red_mushroom_block_cap_010110 +mcl_colorblocks:concrete_white +mcl_walls:granite_0 +mcl_lanterns:soul_lantern_floor +mcl_walls:granite_1 +mcl_walls:granite_2 +mcl_core:mossycobble +mcl_walls:granite_3 +mcl_wool:yellow +mcl_walls:granite_4 +mcl_smithing_table:table +mcl_walls:granite_5 +mcl_stairs:slab_sandstonesmooth +mcl_walls:granite_6 +mcl_stairs:slab_sandstonesmooth_double +mcl_walls:granite_7 +mcl_walls:granite_8 +mcl_fences:jungle_fence_gate_open +mcl_walls:granite_9 +mcl_colorblocks:hardened_clay_pink +mcl_walls:granite_10 +pipeworks:expansion_tank_1 +mcl_walls:granite_11 +mcl_walls:prismarine_16 +mcl_walls:granite_12 +mcl_beds:bed_magenta_bottom +mcl_mud:packed_mud +pipeworks:storage_tank_1 +mcl_walls:granite_14 +mcl_walls:sandstone_9 +mcl_walls:granite_15 +mcl_stairs:stair_stone_rough +mcl_walls:granite_16 +mcl_stairs:stair_stone_rough_outer +mcl_stairs:stair_stone_rough_inner +mcl_stairs:stair_andesite_smooth +mesecons:wire_01010101_off +mcl_mushrooms:brown_mushroom_block_cap_110100 +mesecons_torch:mesecon_torch_off_wall +mcl_walls:diorite_0 +mcl_stairs:slab_deepslate_cobbled +mcl_walls:diorite_1 +mcl_doors:door_jungle_b_2 +mcl_walls:diorite_2 +mcl_maps:filled_map_mcl_skins_base_1EEB592FF_male_surv +mcl_walls:diorite_3 +homedecor:refrigerator_white_locked +mcl_walls:diorite_4 +mcl_flowers:tallgrass +mcl_walls:diorite_5 +homedecor:refrigerator_steel_locked +mcl_walls:diorite_6 +mcl_flowers:dandelion +mcl_walls:diorite_7 +mcl_core:deadbush +mcl_walls:diorite_8 +mcl_stairs:stair_mud_brick +mcl_deepslate:deepslate_with_coal +mcl_stairs:stair_mud_brick_outer +mcl_walls:diorite_10 +mcl_trees:sapling_acacia +mcl_walls:diorite_11 +mcl_trees:sapling_cherry_blossom +mcl_walls:diorite_12 +mcl_deepslate:deepslate_with_iron +mcl_walls:diorite_13 +mcl_stairs:slab_mud_brick_top +mcl_walls:diorite_14 +mcl_trees:tree_spruce +mcl_walls:diorite_15 +mcl_stairs:slab_goldblock +mcl_deepslate:deepslate_with_gold +mcl_stairs:slab_goldblock_double +mcl_walls:diorite_21 +mcl_stairs:stair_jungle_bark +mcl_monster_eggs:monster_egg_stonebrickmossy +mcl_stairs:stair_jungle_bark_outer +mesecons:wire_11101010_on +mcl_deepslate:deepslate_with_emerald +mcl_core:dirt_with_grass +mcl_walls:brick_1 +mcl_stairs:stair_deepslate_cobbled_outer +mcl_walls:brick_2 +mcl_deepslate:deepslate_with_copper +mcl_walls:brick_3 +mcl_deepslate:deepslate_with_diamond +mcl_walls:brick_4 +mcl_stairs:slab_jungle_double diff --git a/mods/xcompat/test/nodelist/minetest.txt b/mods/xcompat/test/nodelist/minetest.txt new file mode 100644 index 0000000..472668a --- /dev/null +++ b/mods/xcompat/test/nodelist/minetest.txt @@ -0,0 +1,1494 @@ +pipeworks:steel_block_embedded_tube +steel:roofing +homedecor:ceiling_lantern_0 +steel:roofing_wall +homedecor:lattice_lantern_large_0 +pipeworks:steel_pane_embedded_tube +steel:strut +homedecor:lattice_lantern_small_0 +steel:strut_mount +homedecor:desk_lamp_0 +homedecor:dryer +steel:steel_block +homedecor:ceiling_lamp_0 +homedecor:ironing_board +beds:bed_bottom +homedecor:table_lamp_0 +basic_materials:cement_block +homedecor:standing_lamp_0 +beds:fancy_bed_top +basic_materials:concrete_block +steel:shingle_side_roofing +basic_materials:chain_steel +steel:shingle_outer_corner_roofing +steel:shingle_inner_corner_roofing +homedecor:inbox +basic_materials:brass_block +homedecor:glowlight_small_cube_1 +homedecor:plasma_lamp_1 +homedecor:ground_lantern_1 +homedecor:hanging_lantern_1 +homedecor:ceiling_lantern_1 +homedecor:lattice_lantern_large_1 +homedecor:lattice_lantern_small_1 +homedecor:filing_cabinet_locked +homedecor:filing_cabinet +homedecor:ceiling_lamp_1 +doors:homedecor_wood_plain_d +homedecor:desk_locked +homedecor:standing_lamp_1 +homedecor:glowlight_half_2 +homedecor:glowlight_quarter_2 +stairs:stair_stonebrick +homedecor:calendar +doors:homedecor_exterior_fancy_a +stairs:stair_inner_stonebrick +doors:homedecor_exterior_fancy_b +homedecor:hanging_lantern_2 +stairs:stair_outer_stonebrick +homedecor:ceiling_lantern_2 +stairs:slab_stonebrick +homedecor:lattice_lantern_small_2 +stairs:stair_stone_block +homedecor:desk_lamp_2 +default:bush_stem +homedecor:ceiling_lamp_2 +stairs:stair_inner_stone_block +default:bush_leaves +homedecor:table_lamp_2 +stairs:stair_outer_stone_block +homedecor:standing_lamp_2 +tnt:tnt_burning +stairs:slab_stone_block +default:blueberry_bush_leaves +homedecor:glowlight_quarter_3 +homedecor:glowlight_small_cube_3 +default:acacia_bush_stem +homedecor:plasma_lamp_3 +stairs:stair_inner_desert_stone +homedecor:ground_lantern_3 +default:pine_bush_stem +stairs:stair_outer_desert_stone +default:pine_bush_needles +homedecor:ceiling_lantern_3 +stairs:slab_desert_stone +default:sand_with_kelp +stairs:stair_desert_cobble +homedecor:lattice_lantern_small_3 +boards:black_board +boards:green_board +stairs:stair_inner_desert_cobble +homedecor:ceiling_lamp_3 +homedecor:table_lamp_3 +default:coral_skeleton +homedecor:standing_lamp_3 +homedecor:fishtank_lighted +homedecor:glowlight_half_4 +stairs:stair_desert_stonebrick +homedecor:glowlight_quarter_4 +default:coral_cyan +pipeworks:pump_off +stairs:stair_inner_desert_stonebrick +building_blocks:Tar +stairs:slab_ice +default:coral_orange +homedecor:wall_sconce +stairs:stair_snowblock +homedecor:ceiling_lantern_4 +stairs:stair_inner_snowblock +stairs:stair_desert_stone_block +building_blocks:fakegrass +default:water_flowing +building_blocks:hardwood +stairs:stair_outer_snowblock +homedecor:desk_lamp_4 +default:river_water_source +stairs:slab_snowblock +default:river_water_flowing +stairs:stair_outer_desert_stone_block +stairs:stair_glass +homedecor:standing_lamp_4 +homedecor:piano +stairs:slab_glass +homedecor:glowlight_half_5 +stairs:stair_sandstone +homedecor:glowlight_quarter_5 +stairs:stair_inner_glass +pipeworks:filter +pipeworks:mese_filter +stairs:stair_inner_sandstone +stairs:stair_outer_glass +homedecor:ground_lantern_5 +stairs:stair_obsidian_glass +building_blocks:grate +stairs:slab_sandstone +stairs:slab_obsidian_glass +homedecor:lattice_lantern_large_5 +stairs:stair_sandstonebrick +stairs:stair_inner_obsidian_glass +homedecor:lattice_lantern_small_5 +default:bookshelf +stairs:stair_inner_sandstonebrick +fireflies:firefly_bottle +pipeworks:priority_tube_1 +stairs:stair_outer_sandstonebrick +building_blocks:brobble_spread +stairs:slab_sandstonebrick +pipeworks:priority_tube_4 +pipeworks:priority_tube_5 +building_blocks:Tarmac_spread +default:ladder_wood +building_blocks:terrycloth_towel +default:ladder_steel +building_blocks:BWtile +default:fence_wood +pipeworks:priority_tube_9 +stairs:slab_sandstone_block +default:fence_acacia_wood +pipeworks:priority_tube_10 +stairs:stair_desert_sandstone +default:fence_junglewood +default:permafrost_with_moss +default:fence_pine_wood +stairs:stair_inner_desert_sandstone +default:sand +default:fence_aspen_wood +default:desert_sand +default:fence_rail_wood +default:silver_sand +stairs:slab_desert_sandstone +default:gravel +default:fence_rail_acacia_wood +stairs:stair_desert_sandstone_brick +vessels:shelf +default:clay +default:fence_rail_junglewood +pipeworks:mese_tube_010100 +stairs:stair_inner_desert_sandstone_brick +vessels:drinking_glass +default:snowblock +pipeworks:mese_tube_010101 +default:ice +vessels:steel_bottle +flowers:rose +default:cave_ice +stairs:slab_desert_sandstone_brick +pipeworks:tag_tube_100101 +flowers:geranium +stairs:stair_desert_sandstone_block +default:obsidian_glass +flowers:dandelion_white +farming:cotton_5 +default:brick +stairs:stair_inner_desert_sandstone_block +farming:cotton_6 +default:meselamp +carts:powerrail +stairs:stair_outer_desert_sandstone_block +pipeworks:tag_tube_101010 +default:mese_post_light +pipeworks:tube_4 +default:mese_post_light_acacia_wood +default:mese_post_light_junglewood +pipeworks:tag_tube_101100 +default:mese_post_light_pine_wood +pipeworks:mese_tube_011011 +default:mese_post_light_aspen_wood +default:cloud +default:junglewood +stairs:stair_inner_silver_sandstone +pipeworks:tag_tube_101111 +stairs:stair_outer_silver_sandstone +homedecor:table_lamp_8 +stairs:slab_silver_sandstone +pipeworks:tube_8 +homedecor:standing_lamp_8 +default:pine_wood +pipeworks:tag_tube_110011 +homedecor:glowlight_half_9 +homedecor:glowlight_quarter_9 +pipeworks:mese_tube_100000 +default:acacia_tree +pipeworks:tag_tube_110101 +flowers:mushroom_red +default:acacia_wood +homedecor:plasma_lamp_9 +flowers:mushroom_brown +default:acacia_leaves +homedecor:ground_lantern_9 +pipeworks:mese_tube_100010 +pipeworks:tag_tube_111000 +homedecor:hanging_lantern_9 +default:aspen_tree +homedecor:ceiling_lantern_9 +pipeworks:tag_tube_111010 +homedecor:lattice_lantern_large_9 +pipeworks:tag_tube_111011 +homedecor:lattice_lantern_small_9 +pipeworks:pipe_compatibility_empty +pipeworks:tag_tube_111100 +pipeworks:pipe_compatibility_loaded +default:stone_with_coal +flowers:waterlily +default:coalblock +flowers:waterlily_waving +default:stone_with_iron +pipeworks:entry_panel_empty +default:steelblock +pipeworks:straight_pipe_empty +default:stone_with_copper +pipeworks:valve_on_loaded +pipeworks:entry_panel_loaded +default:copperblock +pipeworks:flow_sensor_loaded +default:stone_with_tin +default:tinblock +flowers:chrysanthemum_green +flowers:tulip_black +default:bronzeblock +default:stone_with_mese +default:mese +default:stone_with_gold +default:goldblock +default:stone_with_diamond +default:diamondblock +default:large_cactus_seedling +default:dry_shrub +default:junglegrass +default:grass_1 +default:dry_grass_1 +default:fern_1 +default:marram_grass_1 +homedecor:curtainrod_wood +pipeworks:broken_tube_2 +homedecor:spiral_staircase +pipeworks:broken_tube_3 +pipeworks:broken_tube_4 +pipeworks:broken_tube_5 +pipeworks:broken_tube_6 +homedecor:flower_pot_terracotta +homedecor:flower_pot_green +homedecor:coatrack_wallmount +homedecor:coat_tree +pipeworks:broken_tube_9 +pipeworks:broken_tube_10 +homedecor:welcome_mat_green +pipeworks:broken_tube_compatibility +homedecor:rug_small +homedecor:welcome_mat_brown +homedecor:rug_large +homedecor:rug_persian +homedecor:welcome_mat_grey +homedecor:japanese_wall_top +homedecor:japanese_wall_middle +homedecor:japanese_wall_bottom +homedecor:tatami_mat +homedecor:pool_table +homedecor:dartboard +homedecor:sportbench +homedecor:skateboard +homedecor:fence_picket_corner +homedecor:fence_picket +homedecor:banister_wood_horizontal +default:apple +homedecor:fence_picket_corner_white +homedecor:fence_picket_white +homedecor:fence_privacy_corner +homedecor:ceiling_paint +default:tree +homedecor:ceiling_tile +homedecor:fence_privacy +default:jungletree +default:jungleleaves +homedecor:fence_barbed_wire_corner +homedecor:fence_barbed_wire +default:pine_tree +default:pine_needles +homedecor:fence_chainlink_corner +homedecor:fence_chainlink +homedecor:fence_wrought_iron_2_corner +homedecor:analog_clock_wood +homedecor:grandfather_clock +homedecor:potted_rose +homedecor:analog_clock_plastic +homedecor:potted_tulip +homedecor:alarm_clock +default:sapling +default:junglesapling +default:pine_sapling +default:acacia_sapling +default:aspen_sapling +default:bush_sapling +default:blueberry_bush_sapling +default:acacia_bush_sapling +default:pine_bush_sapling +default:emergent_jungle_sapling +default:stonebrick +homedecor:banister_wood_diagonal_left +default:stone_block +homedecor:banister_wood_horizontal_red +homedecor:banister_wood_diagonal_left_red +default:desert_stone +default:desert_cobble +homedecor:banister_wood_horizontal_vermilion +default:desert_stonebrick +homedecor:banister_wood_horizontal_orange +homedecor:air_conditioner +homedecor:banister_wood_diagonal_left_orange +default:sandstone +homedecor:desk_fan +default:sandstonebrick +homedecor:ceiling_fan +default:sandstone_block +homedecor:space_heater +default:desert_sandstone +homedecor:radiator +default:desert_sandstone_brick +homedecor:oven_steel +stairs:stair_silver_sandstone_brick +default:desert_sandstone_block +homedecor:desk_lamp_5 +homedecor:kitchen_cabinet_colorable +default:silver_sandstone +homedecor:ceiling_lamp_5 +stairs:stair_inner_silver_sandstone_brick +default:silver_sandstone_brick +pipeworks:teleport_tube_7 +homedecor:table_lamp_5 +default:silver_sandstone_block +stairs:stair_outer_silver_sandstone_brick +homedecor:standing_lamp_5 +butterflies:butterfly_red +butterflies:butterfly_violet +default:obsidianbrick +homedecor:shower_head +homedecor:glowlight_half_6 +default:obsidian_block +homedecor:glowlight_quarter_6 +homedecor:glowlight_small_cube_6 +homedecor:plasma_lamp_6 +stairs:stair_inner_silver_sandstone_block +homedecor:ground_lantern_6 +default:dirt_with_grass_footsteps +homedecor:hanging_lantern_6 +butterflies:hidden_butterfly_white +homedecor:ceiling_lantern_6 +stairs:slab_silver_sandstone_block +homedecor:lattice_lantern_large_6 +butterflies:hidden_butterfly_red +stairs:stair_obsidian +homedecor:rope_light_on_ceiling_on +homedecor:rope_light_on_ceiling_off +default:dirt_with_coniferous_litter +homedecor:desk_lamp_6 +butterflies:hidden_butterfly_violet +stairs:stair_inner_obsidian +homedecor:ceiling_lamp_6 +homedecor:wall_lamp_on +lavalamp:lavalamp_off +homedecor:table_lamp_6 +homedecor:standing_lamp_6 +stairs:slab_obsidian +homedecor:glowlight_half_7 +stairs:stair_obsidianbrick +homedecor:glowlight_quarter_7 +homedecor:toaster_loaf +homedecor:glowlight_small_cube_7 +homedecor:toaster +stairs:stair_inner_obsidianbrick +homedecor:bottle_brown +homedecor:plasma_lamp_7 +homedecor:4_bottles_green +homedecor:4_bottles_multi +homedecor:ground_lantern_7 +homedecor:coffee_maker +homedecor:hanging_lantern_7 +homedecor:ceiling_lantern_7 +pipeworks:tube_2 +fire:basic_flame +homedecor:lattice_lantern_large_7 +fire:permanent_flame +homedecor:lattice_lantern_small_7 +homedecor:desk_lamp_7 +homedecor:ceiling_lamp_7 +homedecor:table_lamp_7 +homedecor:standing_lamp_7 +fireflies:hidden_firefly +homedecor:glowlight_half_8 +homedecor:glowlight_quarter_8 +doors:homedecor_french_mahogany_c +homedecor:glowlight_small_cube_8 +doors:homedecor_french_mahogany_d +homedecor:shingles_terracotta +homedecor:plasma_lamp_8 +xpanes:obsidian_pane +homedecor:ground_lantern_8 +pipeworks:mese_sand_tube_2 +homedecor:hanging_lantern_8 +pipeworks:mese_sand_tube_3 +homedecor:ceiling_lantern_8 +pipeworks:mese_sand_tube_4 +itemframes:pedestal +homedecor:lattice_lantern_large_8 +pipeworks:mese_sand_tube_5 +doors:homedecor_french_white_c +homedecor:lattice_lantern_small_8 +doors:homedecor_french_white_d +pipeworks:sand_tube_1 +homedecor:desk_lamp_8 +pipeworks:mese_sand_tube_7 +homedecor:gate_barbed_wire_open +homedecor:ceiling_lamp_8 +homedecor:gate_barbed_wire_closed +vessels:glass_bottle +homedecor:gate_chainlink_open +flowers:dandelion_yellow +homedecor:gate_chainlink_closed +homedecor:gate_picket_open +pipeworks:sand_tube_5 +homedecor:gate_picket_closed +homedecor:gate_picket_white_open +doors:homedecor_basic_panel_c +homedecor:gate_picket_white_closed +homedecor:chain_steel_top +homedecor:chandelier_steel +homedecor:chain_brass_top +homedecor:chandelier_brass +pipeworks:mese_tube_000100 +xpanes:trapdoor_steel_bar_open +pipeworks:sand_tube_9 +homedecor:candle +homedecor:candlestick_wrought_iron +homedecor:candle_thin +homedecor:candlestick_brass +homedecor:oil_lamp +homedecor:oil_lamp_tabletop +homedecor:door_japanese_closed +pipeworks:mese_tube_000110 +doors:homedecor_wood_plain_a +doors:homedecor_wrought_iron_a +doors:homedecor_wrought_iron_b +pipeworks:mese_tube_000111 +doors:homedecor_wrought_iron_c +doors:homedecor_wrought_iron_d +pipeworks:mese_tube_001000 +pipeworks:mese_tube_001001 +wool:cyan +bones:bones +homedecor:glowlight_half_14 +homedecor:glowlight_quarter_14 +homedecor:glowlight_small_cube_14 +homedecor:plasma_lamp_14 +homedecor:ground_lantern_14 +doors:homedecor_carolina_d +homedecor:hanging_lantern_14 +doors:homedecor_french_white_b +homedecor:ceiling_lantern_14 +homedecor:lattice_lantern_large_14 +homedecor:lattice_lantern_small_14 +homedecor:desk_lamp_14 +homedecor:ceiling_lamp_14 +homedecor:table_lamp_14 +homedecor:standing_lamp_14 +xpanes:trapdoor_steel_bar +homedecor:torch_wall +pipeworks:mese_tube_000001 +doors:homedecor_woodglass_a +pipeworks:mese_tube_001111 +doors:homedecor_woodglass_b +pipeworks:mese_tube_000010 +doors:homedecor_woodglass_c +doors:homedecor_basic_panel_a +doors:homedecor_woodglass_d +doors:homedecor_basic_panel_b +pipeworks:mese_tube_010001 +wool:pink +pipeworks:mese_tube_010010 +stairs:stair_sandstone_block +lavalamp:lavalamp +pipeworks:mese_tube_010011 +doors:homedecor_closet_mahogany_a +xpanes:pane +doors:homedecor_closet_mahogany_b +homedecor:glowlight_half_0 +doors:homedecor_closet_mahogany_d +homedecor:glowlight_quarter_0 +homedecor:glowlight_small_cube_0 +xpanes:obsidian_pane_flat +homedecor:plasma_lamp_0 +homedecor:ground_lantern_0 +doors:homedecor_closet_oak_a +doors:homedecor_closet_oak_b +doors:homedecor_closet_oak_c +doors:homedecor_closet_oak_d +doors:homedecor_wood_plain_b +doors:homedecor_wood_plain_c +doors:hidden +default:grass_4 +default:grass_5 +default:dry_grass_2 +default:dry_grass_3 +default:dry_grass_4 +default:dry_grass_5 +default:fern_2 +default:fern_3 +default:marram_grass_2 +default:marram_grass_3 +homedecor:bed_kingsize +homedecor:nightstand_oak_one_drawer +homedecor:nightstand_oak_two_drawers +homedecor:nightstand_mahogany_one_drawer +homedecor:nightstand_mahogany_two_drawers +ontime_clocks:green_digital +ontime_clocks:red_digital +ontime_clocks:white +ontime_clocks:frameless_black +ontime_clocks:frameless_gold +homedecor:nightstand_mahogany_two_drawers_locked +ontime_clocks:frameless_white +doors:trapdoor +homedecor:pole_brass +doors:trapdoor_steel +homedecor:window_quartered +homedecor:window_plain +homedecor:blinds_thin +homedecor:blinds_thick +homedecor:window_flowerbox +homedecor:nightstand_oak_one_drawer_locked +air +pipeworks:straight_pipe_loaded +homedecor:wall_shelf +pipeworks:pipe_1_loaded +walls:desertcobble +doors:gate_acacia_wood_closed +doors:gate_junglewood_closed +doors:gate_pine_wood_closed +doors:gate_aspen_wood_closed +pipeworks:pipe_3_empty +pipeworks:pipe_3_loaded +ignore +homedecor:wood_table_large_square_with_wrought_iron_legs +stairs:slab_steelblock +stairs:stair_pine_wood +stairs:stair_tinblock +doors:door_wood_b +doors:door_wood_c +farming:cotton_wild +stairs:stair_inner_tinblock +homedecor:wood_table_small_square_with_brass_legs +pipeworks:pipe_6_loaded +homedecor:stained_glass +farming:wheat_3 +homedecor:wood_table_small_square_with_wrought_iron_legs +pipeworks:pipe_7_empty +farming:wheat_4 +pipeworks:pipe_7_loaded +stairs:slab_tinblock +farming:wheat_5 +pipeworks:pipe_8_empty +stairs:stair_copperblock +pipeworks:pipe_8_loaded +farming:wheat_7 +homedecor:wood_table_small_round_with_brass_legs +stairs:stair_inner_copperblock +default:sign_wall_wood +homedecor:wood_table_small_round_with_wrought_iron_legs +stairs:stair_outer_copperblock +default:sign_wall_steel +homedecor:wood_table_small_round_with_wood_legs +default:dirt_with_snow +stairs:stair_bronzeblock +farming:cotton_1 +default:cobble +default:mossycobble +stairs:slab_cobble +stairs:slab_mossycobble +stairs:stair_cobble +stairs:stair_mossycobble +lrfurn:endtable +stairs:stair_inner_mossycobble +stairs:stair_outer_cobble +stairs:stair_outer_mossycobble +stairs:stair_outer_bronzeblock +walls:mossycobble +farming:dry_soil +farming:dry_soil_wet +stairs:slab_bronzeblock +technic:granite +stairs:stair_goldblock +lrfurn:coffeetable +stairs:stair_inner_goldblock +farming:desert_sand_soil_wet +stairs:stair_outer_goldblock +doors:door_steel_a +stairs:slab_goldblock +doors:door_steel_b +doors:door_steel_c +homedecor:book_grey +doors:door_steel_d +homedecor:book_open_grey +stairs:stair_inner_ice +steles:stone_stele +steles:sandstone_stele +farming:seed_wheat +steles:desert_stone_stele +homedecor:trash_can_green_open +doors:door_glass_b +homedecor:trash_can_green +homedecor:book_red +doors:door_glass_d +homedecor:book_open_red +homedecor:shingle_side_glass +homedecor:skylight +homedecor:shingle_outer_corner_terracotta +homedecor:shingle_inner_corner_terracotta +homedecor:book_open_green +homedecor:shingle_inner_corner_wood +homedecor:shingle_outer_corner_wood +homedecor:shingle_side_wood +doors:door_obsidian_glass_c +homedecor:book_blue +doors:trapdoor_open +homedecor:book_open_blue +homedecor:trash_can +homedecor:shingles_asphalt +stairs:slab_straw +homedecor:book_violet +homedecor:book_open_violet +homedecor:skylight_frosted +pipeworks:expansion_tank_1 +doors:gate_wood_open +homedecor:nightstand_oak_two_drawers_locked +homedecor:nightstand_mahogany_one_drawer_locked +homedecor:book_brown +doors:gate_acacia_wood_open +homedecor:bed_extended +homedecor:book_open_brown +homedecor:bed_regular +doors:gate_junglewood_open +beds:bed_top +beds:fancy_bed_bottom +homedecor:table_legs_wood +doors:gate_pine_wood_open +homedecor:wood_table_small_square +farming:cotton_8 +farming:cotton_7 +homedecor:armchair +pipeworks:storage_tank_2 +farming:cotton_4 +farming:cotton_3 +farming:cotton_2 +farming:seed_cotton +farming:wheat_8 +farming:wheat_6 +farming:wheat_2 +pipeworks:expansion_tank_3 +stairs:stair_outer_straw +farming:wheat_1 +stairs:stair_inner_straw +stairs:stair_straw +farming:straw +pipeworks:storage_tank_3 +farming:desert_sand_soil +farming:soil_wet +farming:soil +fake_fire:ice_fire +homedecor:openframe_bookshelf +pipeworks:crossing_tube_9 +pipeworks:expansion_tank_4 +homedecor:office_chair_basic +stairs:slab_desert_stonebrick +homedecor:kitchen_chair_wood +homedecor:bench_large_2 +fake_fire:fancy_fire +pipeworks:storage_tank_4 +homedecor:glass_table_small_square +homedecor:bench_large_1 +signs_road:black_left_sign +homedecor:wood_table_small_round +pipeworks:one_way_tube +fake_fire:embers +signs_road:black_right_sign +homedecor:deckchair_striped_blue +pipeworks:mese_sand_tube_1 +doors:door_wood_a +lrfurn:sofa +signs_road:white_left_sign +pipeworks:storage_tank_5 +homedecor:shingle_inner_corner_asphalt +homedecor:table +homedecor:table_mahogany +homedecor:table_white +wool:magenta +default:lava_source +default:obsidian +signs_road:blue_left_sign +pipeworks:tag_tube_000110 +signs_road:blue_right_sign +fake_fire:chimney_top_stone +pipeworks:tag_tube_000111 +fake_fire:chimney_top_sandstone +wool:red +signs_road:green_left_sign +wool:orange +signs_road:green_right_sign +pipeworks:tag_tube_001001 +homedecor:kitchen_cabinet_colorable_marble_locked +homedecor:kitchen_cabinet_colorable_marble +pipeworks:tag_tube_001010 +signs_road:yellow_left_sign +default:coral_pink +signs_road:yellow_right_sign +homedecor:table_legs_brass +homedecor:kitchen_cabinet_colored_marble_locked +pipeworks:tag_tube_001100 +wool:yellow +signs_road:red_left_sign +homedecor:kitchen_cabinet_colored_with_drawers_marble +signs_road:red_right_sign +homedecor:table_legs_wrought_iron +pipeworks:tag_tube_001110 +wool:green +wool:dark_green +homedecor:kitchen_cabinet_colorable_with_drawers_marble_locked +homedecor:kitchen_cabinet_colorable_with_drawers_marble +wool:blue +pipeworks:storage_tank_8 +wool:violet +wool:black +wool:dark_grey +homedecor:kitchen_cabinet_colored_with_drawers_marble_locked +wool:grey +wool:white +homedecor:glass_table_large_square +pipeworks:autocrafter +signs_road:yellow_sign +signs_road:red_sign +homedecor:gate_half_door_closed +signs_road:red_street_sign +signs_road:green_sign +signs_road:blue_street_sign +homedecor:glass_table_large_square_with_wrought_iron_legs +signs_road:white_sign +doors:homedecor_exterior_fancy_d +default:coral_brown +homedecor:glass_table_large_square_with_wood_legs +homedecor:kitchen_cabinet_colorable_steel_locked +homedecor:gate_half_door_white_closed +pipeworks:expansion_tank_9 +pipeworks:expansion_tank_10 +pipeworks:storage_tank_9 +homedecor:gate_half_door_white_open +pipeworks:storage_tank_10 +homedecor:kitchen_cabinet_colored_steel_locked +pipeworks:expansion_tank_8 +homedecor:glass_table_small_square_with_brass_legs +pipeworks:storage_tank_7 +homedecor:kitchen_cabinet_colored_with_drawers_steel +pipeworks:expansion_tank_7 +homedecor:glass_table_small_square_with_wrought_iron_legs +pipeworks:storage_tank_6 +pipeworks:expansion_tank_6 +pipeworks:expansion_tank_5 +homedecor:glass_table_small_square_with_wood_legs +homedecor:kitchen_cabinet_colorable_with_drawers_steel +pipeworks:expansion_tank_2 +pipeworks:storage_tank_1 +pipeworks:storage_tank_0 +pipeworks:expansion_tank_0 +pipeworks:flow_sensor_empty +homedecor:kitchen_cabinet_colored_with_drawers_steel_locked +pipeworks:spigot_pouring +homedecor:banister_wood_horizontal_blue +homedecor:glass_table_small_round_with_brass_legs +pipeworks:grating +pipeworks:valve_off_empty +pipeworks:valve_on_empty +homedecor:glass_table_small_round_with_wrought_iron_legs +butterflies:butterfly_white +pipeworks:pipe_10_loaded +homedecor:kitchen_cabinet_colorable_half_locked +homedecor:glass_table_small_round_with_wood_legs +pipeworks:pipe_10_empty +pipeworks:pipe_9_loaded +pipeworks:pipe_9_empty +homedecor:kitchen_cabinet_colored_half_locked +pipeworks:pipe_6_empty +pipeworks:pipe_5_loaded +pipeworks:pipe_5_empty +homedecor:fence_wrought_iron_2 +pipeworks:pipe_4_loaded +pipeworks:pipe_4_empty +pipeworks:pipe_2_loaded +pipeworks:pipe_2_empty +homedecor:fence_brass +homedecor:kitchen_cabinet_colorable_with_sink_locked +pipeworks:pipe_1_empty +pipeworks:mese_sand_tube_compatibility +homedecor:fence_wrought_iron +pipeworks:mese_sand_tube_10 +homedecor:kitchen_cabinet_colored_with_sink_locked +pipeworks:mese_sand_tube_9 +pipeworks:mese_sand_tube_8 +pipeworks:mese_sand_tube_6 +homedecor:cutlery_set +homedecor:deckchair +pipeworks:sand_tube_compatibility +pipeworks:sand_tube_10 +pipeworks:sand_tube_8 +pipeworks:sand_tube_7 +pipeworks:sand_tube_6 +pipeworks:sand_tube_4 +pipeworks:sand_tube_3 +pipeworks:sand_tube_2 +pipeworks:teleport_tube_compatibility +pipeworks:teleport_tube_10 +pipeworks:teleport_tube_9 +pipeworks:teleport_tube_8 +pipeworks:teleport_tube_6 +pipeworks:teleport_tube_5 +pipeworks:teleport_tube_4 +pipeworks:teleport_tube_3 +pipeworks:teleport_tube_2 +pipeworks:teleport_tube_1 +pipeworks:tag_tube_111111 +pipeworks:tag_tube_111110 +pipeworks:tag_tube_111101 +pipeworks:tag_tube_111001 +pipeworks:tag_tube_110111 +pipeworks:tag_tube_110110 +pipeworks:tag_tube_110100 +pipeworks:tag_tube_110010 +pipeworks:tag_tube_110001 +pipeworks:tag_tube_110000 +pipeworks:tag_tube_101110 +pipeworks:tag_tube_101101 +pipeworks:tag_tube_101011 +pipeworks:tag_tube_101001 +homedecor:pole_wrought_iron +pipeworks:tag_tube_101000 +pipeworks:tag_tube_100111 +pipeworks:tag_tube_100110 +homedecor:bars +pipeworks:tag_tube_100100 +homedecor:hanging_lantern_5 +stairs:slab_desert_cobble +steel:plate_hard +homedecor:speaker_open +homedecor:wood_table_large_square_with_brass_legs +pipeworks:tag_tube_011111 +pipeworks:tag_tube_011110 +homedecor:L_binding_bars +pipeworks:tag_tube_011101 +homedecor:chains +pipeworks:tag_tube_011100 +homedecor:speaker +pipeworks:tag_tube_011011 +pipeworks:tag_tube_011010 +pipeworks:tag_tube_011001 +pipeworks:tag_tube_011000 +pipeworks:tag_tube_010111 +homedecor:kitchen_cabinet_colored_with_drawers_granite_locked +pipeworks:tag_tube_010101 +pipeworks:tag_tube_010100 +pipeworks:tag_tube_010011 +pipeworks:tag_tube_000000 +pipeworks:tag_tube_010010 +homedecor:kitchen_cabinet_colorable_steel +pipeworks:tag_tube_000001 +stairs:stair_wood +pipeworks:tag_tube_010000 +pipeworks:tag_tube_000010 +homedecor:kitchen_cabinet_colorable_with_drawers_steel_locked +pipeworks:tag_tube_001101 +pipeworks:tag_tube_000011 +stairs:stair_inner_wood +pipeworks:tag_tube_001011 +pipeworks:nodebreaker_off +pipeworks:tag_tube_001000 +pipeworks:tag_tube_000101 +stairs:stair_outer_wood +pipeworks:tag_tube_000100 +pipeworks:mese_tube_111111 +homedecor:banister_wood_diagonal_left_azure +stairs:stair_silver_sandstone_block +stairs:stair_outer_silver_sandstone_block +pipeworks:mese_tube_111011 +stairs:stair_junglewood +pipeworks:mese_tube_111010 +pipeworks:mese_tube_111001 +homedecor:potted_bonsai +pipeworks:mese_tube_110111 +homedecor:dvd_vcr +stairs:stair_inner_junglewood +pipeworks:mese_tube_110110 +pipeworks:deployer_on +pipeworks:mese_tube_110101 +xpanes:door_steel_bar_c +stairs:stair_outer_junglewood +homedecor:wardrobe +pipeworks:mese_tube_110011 +default:apple_mark +stairs:slab_junglewood +pipeworks:mese_tube_110001 +doors:homedecor_french_mahogany_a +pipeworks:mese_tube_101111 +doors:homedecor_french_oak_b +pipeworks:mese_tube_101101 +homedecor:painting_1 +homedecor:door_japanese_open +homedecor:plasma_ball_on +stairs:stair_inner_pine_wood +pipeworks:mese_tube_101010 +pipeworks:mese_tube_101001 +pipeworks:mese_tube_101000 +homedecor:painting_6 +homedecor:rope_light_on_floor_on +homedecor:rope_light_on_floor_off +pipeworks:mese_tube_100110 +doors:door_obsidian_glass_a +default:grass_2 +pipeworks:mese_tube_100011 +pipeworks:mese_tube_100001 +stairs:stair_acacia_wood +homedecor:speaker_small +pipeworks:mese_tube_011111 +pipeworks:mese_tube_011110 +homedecor:stereo +pipeworks:mese_tube_011101 +stairs:stair_inner_acacia_wood +pipeworks:mese_tube_011100 +pipeworks:mese_tube_011010 +pipeworks:mese_tube_011001 +pipeworks:mese_tube_011000 +stairs:stair_outer_acacia_wood +pipeworks:mese_tube_010111 +homedecor:telephone +pipeworks:mese_tube_010110 +stairs:slab_acacia_wood +pipeworks:mese_tube_010000 +homedecor:potted_dandelion_yellow +pipeworks:mese_tube_001110 +stairs:stair_aspen_wood +pipeworks:mese_tube_001101 +pipeworks:mese_tube_001100 +pipeworks:dispenser_on +pipeworks:mese_tube_001011 +pipeworks:mese_tube_001010 +stairs:stair_inner_aspen_wood +pipeworks:mese_tube_000101 +pipeworks:mese_tube_000011 +pipeworks:mese_tube_000000 +homedecor:simple_bench +stairs:stair_outer_aspen_wood +pipeworks:crossing_tube_compatibility +homedecor:kitchen_chair_padded +homedecor:potted_geranium +stairs:slab_aspen_wood +homedecor:office_chair_upscale +homedecor:tv_stand +homedecor:swing_rope +homedecor:swing +stairs:stair_stone +pipeworks:crossing_tube_7 +homedecor:potted_viola +doors:homedecor_basic_panel_d +pipeworks:crossing_tube_5 +homedecor:desk +stairs:stair_inner_stone +pipeworks:crossing_tube_3 +homedecor:potted_cactus +default:fence_rail_aspen_wood +homedecor:glass_table_large_square_with_brass_legs +stairs:stair_outer_stone +pipeworks:accelerator_tube_10 +homedecor:light_switch_on +pipeworks:accelerator_tube_9 +doors:door_wood_d +pipeworks:accelerator_tube_7 +pipeworks:accelerator_tube_6 +default:snow +pipeworks:accelerator_tube_4 +signs:wooden_left_sign +homedecor:power_outlet +signs:wooden_right_sign +homedecor:dishwasher_granite +homedecor:kitchen_faucet +homedecor:taps +pipeworks:accelerator_tube_3 +homedecor:copper_pans +homedecor:paper_towel +homedecor:toilet_paper +pipeworks:accelerator_tube_2 +homedecor:doorbell +pipeworks:accelerator_tube_1 +homedecor:desk_lamp_9 +homedecor:cardboard_box_big +pipeworks:priority_tube_compatibility +homedecor:ceiling_lamp_9 +pipeworks:priority_tube_8 +homedecor:cobweb_corner +homedecor:dvd_cd_cabinet +homedecor:table_lamp_9 +pipeworks:priority_tube_7 +homedecor:cobweb_centered +homedecor:standing_lamp_9 +homedecor:cobweb_flat +pipeworks:priority_tube_6 +homedecor:trophy +homedecor:glowlight_half_10 +pipeworks:priority_tube_3 +homedecor:glowlight_quarter_10 +pipeworks:priority_tube_2 +homedecor:glowlight_small_cube_10 +pipeworks:broken_tube_8 +pipeworks:broken_tube_7 +pipeworks:broken_tube_1 +pipeworks:tube_compatibility +homedecor:plasma_lamp_10 +pipeworks:tube_10 +pipeworks:tube_9 +homedecor:ground_lantern_10 +pipeworks:tube_7 +pipeworks:tube_6 +homedecor:hanging_lantern_10 +homedecor:banister_wood_diagonal_left_grey +pipeworks:tube_5 +homedecor:ceiling_lantern_10 +pipeworks:tube_3 +pipeworks:tube_1 +homedecor:lattice_lantern_large_10 +pipeworks:dispenser_off +pipeworks:deployer_off +homedecor:lattice_lantern_small_10 +pipeworks:nodebreaker_on +pipeworks:trashcan +homedecor:desk_lamp_10 +pipeworks:digiline_filter +homedecor:bathroom_set +homedecor:ceiling_lamp_10 +homedecor:oven_locked +homedecor:bathtub_clawfoot_chrome_taps +lrfurn:longsofa +homedecor:table_lamp_10 +homedecor:shower_tray +default:desert_stone_block +homedecor:standing_lamp_10 +homedecor:oven_active_locked +homedecor:fishtank +stairs:stair_inner_sandstone_block +homedecor:glowlight_half_11 +homedecor:oven_steel_active +homedecor:glowlight_quarter_11 +homedecor:lattice_lantern_large_3 +homedecor:glowlight_small_cube_11 +homedecor:plasma_lamp_5 +homedecor:medicine_cabinet +homedecor:towel_rod +homedecor:banister_wood_horizontal_amber +homedecor:plasma_lamp_11 +homedecor:banister_wood_diagonal_left_amber +homedecor:bathroom_tiles_light +homedecor:ground_lantern_11 +homedecor:bathroom_tiles_medium +homedecor:banister_wood_horizontal_yellow +homedecor:hanging_lantern_11 +homedecor:banister_wood_diagonal_left_yellow +xpanes:pane_flat +homedecor:ceiling_lantern_11 +homedecor:digital_clock +doors:homedecor_carolina_a +homedecor:lattice_lantern_large_11 +homedecor:painting_2 +homedecor:banister_wood_diagonal_left_lime +homedecor:lattice_lantern_small_11 +default:chest +homedecor:microwave_oven_active +homedecor:desk_lamp_11 +homedecor:banister_wood_horizontal_chartreuse +homedecor:ceiling_lamp_4 +homedecor:ceiling_lamp_11 +homedecor:shrubbery_large_green +homedecor:picture_frame2 +homedecor:shingles_wood +homedecor:table_lamp_11 +homedecor:banister_wood_horizontal_harlequin +homedecor:well +homedecor:standing_lamp_11 +tnt:boom +stairs:stair_outer_desert_sandstone +homedecor:banister_wood_horizontal_green +homedecor:glowlight_half_12 +homedecor:banister_wood_diagonal_left_green +homedecor:glowlight_quarter_12 +stairs:slab_obsidianbrick +homedecor:glowlight_small_cube_12 +homedecor:lattice_wood +homedecor:banister_wood_horizontal_malachite +homedecor:book_green +homedecor:banister_wood_diagonal_left_malachite +homedecor:plasma_lamp_12 +homedecor:doghouse +homedecor:barbecue +homedecor:ground_lantern_12 +homedecor:banister_wood_horizontal_spring +homedecor:kitchen_cabinet_colored_with_sink +homedecor:hanging_lantern_12 +homedecor:kitchen_cabinet_colorable_with_sink +basic_materials:chain_brass +homedecor:ceiling_lantern_12 +homedecor:kitchen_cabinet_colorable_half +homedecor:banister_wood_horizontal_turquoise +homedecor:lattice_lantern_large_12 +homedecor:banister_wood_diagonal_left_turquoise +pipeworks:tag_tube_001111 +homedecor:lattice_lantern_small_12 +homedecor:kitchen_cabinet_colored_steel +homedecor:banister_wood_horizontal_cyan +homedecor:desk_lamp_12 +homedecor:banister_wood_diagonal_left_cyan +pipeworks:tag_tube_010001 +homedecor:ceiling_lamp_12 +homedecor:kitchen_cabinet_colored_marble +stairs:stair_obsidian_block +homedecor:banister_wood_horizontal_cerulean +homedecor:table_lamp_12 +homedecor:banister_wood_diagonal_left_cerulean +homedecor:microwave_oven_locked +homedecor:standing_lamp_12 +stairs:stair_inner_obsidian_block +homedecor:refrigerator_white +homedecor:banister_wood_horizontal_azure +homedecor:glowlight_half_13 +homedecor:refrigerator_steel +homedecor:glowlight_quarter_13 +pipeworks:tag_tube_010110 +homedecor:refrigerator_white_locked +default:chest_locked_open +homedecor:banister_wood_horizontal_sapphire +default:glass +homedecor:refrigerator_steel_locked +homedecor:plasma_lamp_13 +stairs:stair_brick +homedecor:oven +homedecor:ground_lantern_13 +homedecor:kitchen_cabinet_colored_granite +homedecor:banister_wood_diagonal_left_blue +homedecor:hanging_lantern_13 +stairs:stair_inner_brick +homedecor:kitchen_cabinet_colored_granite_locked +homedecor:ceiling_lantern_13 +homedecor:banister_wood_horizontal_indigo +homedecor:kitchen_cabinet_colorable_locked +homedecor:lattice_lantern_large_13 +homedecor:kitchen_cabinet_colorable_granite_locked +homedecor:kitchen_cabinet_colored_with_drawers_locked +homedecor:lattice_lantern_small_13 +homedecor:banister_wood_horizontal_violet +doors:gate_wood_closed +homedecor:desk_lamp_13 +homedecor:kitchen_cabinet_colorable_with_drawers +stairs:stair_steelblock +homedecor:ceiling_lamp_13 +homedecor:kitchen_cabinet_colorable_with_drawers_locked +homedecor:banister_wood_horizontal_mulberry +homedecor:wood_table_large_square_with_wood_legs +homedecor:table_lamp_13 +stairs:stair_inner_steelblock +homedecor:kitchen_cabinet_colored_locked +homedecor:standing_lamp_13 +homedecor:banister_wood_horizontal_magenta +homedecor:kitchen_cabinet_colorable_granite +homedecor:banister_wood_diagonal_left_magenta +homedecor:dishwasher_steel +homedecor:dishwasher_wood +homedecor:dishwasher_marble +homedecor:dishwasher +homedecor:banister_wood_horizontal_fuchsia +homedecor:microwave_oven_active_locked +homedecor:banister_wood_diagonal_left_fuchsia +homedecor:microwave_oven +homedecor:kitchen_cabinet_colored_with_drawers_granite +homedecor:oven_steel_active_locked +homedecor:banister_wood_horizontal_rose +homedecor:oven_steel_locked +homedecor:banister_wood_diagonal_left_rose +homedecor:oven_active +homedecor:kitchen_cabinet_colorable_with_drawers_granite_locked +homedecor:kitchen_cabinet_colorable_with_drawers_granite +homedecor:shingle_side_terracotta +homedecor:banister_wood_horizontal_crimson +stairs:stair_inner_cobble +homedecor:banister_wood_diagonal_left_crimson +pipeworks:accelerator_tube_5 +signs:wooden_long_sign +building_blocks:Fireplace +homedecor:kitchen_cabinet_colored +default:furnace_active +pipeworks:tag_tube_100000 +default:furnace +homedecor:plasma_ball_off +pipeworks:tag_tube_100001 +pipeworks:accelerator_tube_8 +stairs:stair_outer_desert_cobble +pipeworks:tag_tube_100010 +homedecor:kitchen_cabinet_colored_with_drawers +wool:brown +pipeworks:tag_tube_100011 +homedecor:medicine_cabinet_open +stairs:stair_outer_sandstone +pipeworks:accelerator_tube_compatibility +stairs:slab_stone +homedecor:shrubbery_green +stairs:slab_wood +homedecor:lattice_lantern_small_4 +homedecor:kitchen_cabinet_colored_half +signs_road:white_right_sign +homedecor:wall_lamp_off +homedecor:toilet_open +xpanes:door_steel_bar_d +xpanes:door_steel_bar_b +homedecor:toilet +signs_road:large_street_sign +signs_road:blue_sign +default:wood +default:torch_ceiling +default:torch_wall +doors:gate_aspen_wood_open +stairs:stair_outer_pine_wood +doors:trapdoor_steel_open +default:lava_flowing +doors:door_obsidian_glass_b +doors:door_glass_c +doors:door_glass_a +lrfurn:armchair +homedecor:stonepath +homedecor:gate_half_door_open +tnt:gunpowder_burning +default:cactus +tnt:gunpowder +default:dirt +default:dirt_with_grass +default:dirt_with_dry_grass +default:dirt_with_rainforest_litter +default:dry_dirt +default:dry_dirt_with_dry_grass +default:papyrus +doors:homedecor_closet_mahogany_c +flowers:viola +stairs:stair_outer_obsidian_glass +stairs:stair_outer_ice +homedecor:cobweb_plantlike +homedecor:bathtub_clawfoot_brass_taps +homedecor:lattice_white_wood +stairs:stair_outer_obsidian +homedecor:shingle_outer_corner_asphalt +stairs:slab_silver_sandstone_brick +stairs:slab_desert_sandstone_block +stairs:stair_outer_desert_sandstone_brick +default:coral_green +homedecor:lattice_wood_vegetal +homedecor:taps_brass +default:grass_3 +stairs:stair_inner_desert_stone_block +pipeworks:mese_tube_100100 +stairs:stair_silver_sandstone +default:blueberry_bush_leaves_with_berries +homedecor:lattice_white_wood_vegetal +homedecor:lattice_lantern_small_6 +pipeworks:mese_tube_100101 +homedecor:wood_table_large_square +homedecor:banister_wood_diagonal_left_sapphire +stairs:stair_inner_bronzeblock +homedecor:wine_rack +homedecor:tv_off +homedecor:television +homedecor:banister_wood_diagonal_left_chartreuse +homedecor:sink +pipeworks:crossing_tube_1 +pipeworks:mese_tube_100111 +homedecor:tv +pipeworks:crossing_tube_2 +homedecor:shrubbery_red +default:fence_rail_pine_wood +homedecor:shrubbery_large_red +homedecor:desk_globe +homedecor:banister_white_dark_horizontal +pipeworks:crossing_tube_4 +homedecor:banister_white_dark_diagonal_left +xpanes:bar +homedecor:curtain_closed +homedecor:picture_frame1 +homedecor:painting_4 +pipeworks:crossing_tube_6 +homedecor:banister_brass_horizontal +pipeworks:mese_tube_101011 +homedecor:banister_brass_diagonal_left +stairs:slab_desert_stone_block +homedecor:bathroom_tiles_dark +pipeworks:crossing_tube_8 +pipeworks:mese_tube_101100 +homedecor:bottle_green +homedecor:banister_wrought_iron_horizontal +doors:homedecor_carolina_b +homedecor:banister_wrought_iron_diagonal_left +pipeworks:crossing_tube_10 +homedecor:shrubbery_yellow +homedecor:banister_wood_diagonal_right_grey +homedecor:shrubbery_large_yellow +homedecor:banister_wood_diagonal_right +pipeworks:mese_tube_101110 +homedecor:banister_wood_diagonal_right_red +xpanes:bar_flat +homedecor:banister_wood_diagonal_right_vermilion +homedecor:shutter +homedecor:banister_wood_diagonal_right_orange +doors:homedecor_french_mahogany_b +homedecor:banister_wood_diagonal_right_amber +pipeworks:mese_tube_110000 +homedecor:banister_wood_diagonal_right_yellow +stairs:stair_ice +homedecor:banister_wood_diagonal_right_lime +homedecor:shutter_colored +homedecor:banister_wood_diagonal_right_chartreuse +doors:homedecor_french_white_a +homedecor:banister_wood_diagonal_right_harlequin +doors:homedecor_french_oak_a +homedecor:banister_wood_diagonal_right_green +pipeworks:mese_tube_110010 +homedecor:banister_wood_diagonal_right_malachite +walls:cobble +homedecor:banister_wood_diagonal_right_spring +homedecor:light_switch_off +homedecor:banister_wood_diagonal_right_turquoise +homedecor:painting_3 +homedecor:banister_wood_diagonal_right_cyan +homedecor:curtain_open +homedecor:banister_wood_diagonal_right_cerulean +pipeworks:mese_tube_110100 +homedecor:banister_wood_diagonal_right_azure +xpanes:door_steel_bar_a +homedecor:banister_wood_diagonal_right_sapphire +building_blocks:woodglass +homedecor:banister_wood_diagonal_right_blue +building_blocks:Roofing +homedecor:banister_wood_diagonal_right_indigo +itemframes:frame +homedecor:banister_wood_diagonal_right_violet +homedecor:painting_5 +homedecor:banister_wood_diagonal_right_mulberry +homedecor:flower_pot_black +homedecor:banister_wood_diagonal_right_magenta +homedecor:potted_dandelion_white +homedecor:banister_wood_diagonal_right_fuchsia +fireflies:firefly +homedecor:banister_wood_diagonal_right_rose +pipeworks:mese_tube_111000 +homedecor:banister_wood_diagonal_right_crimson +default:torch +homedecor:cardboard_box +homedecor:banister_wood_diagonal_left_vermilion +homedecor:banister_white_dark_diagonal_right +homedecor:painting_7 +homedecor:4_bottles_brown +homedecor:banister_brass_diagonal_right +default:permafrost_with_stones +default:permafrost +homedecor:banister_wrought_iron_diagonal_right +stairs:stair_outer_steelblock +homedecor:painting_8 +homedecor:banister_wood_diagonal_left_mulberry +homedecor:wood_table_small_square_with_wood_legs +pipeworks:mese_tube_111100 +homedecor:banister_wood_diagonal_left_violet +stairs:slab_brick +stairs:stair_outer_brick +homedecor:painting_9 +pipeworks:mese_tube_111101 +pipeworks:pump_on +stairs:slab_obsidian_block +pipeworks:mese_tube_111110 +default:chest_open +stairs:stair_outer_obsidianbrick +homedecor:painting_10 +homedecor:banister_wood_diagonal_left_spring +default:water_source +default:chest_locked +stairs:stair_outer_tinblock +homedecor:banister_wood_horizontal_lime +pipeworks:spigot +homedecor:painting_11 +carts:rail +homedecor:banister_wood_horizontal_grey +homedecor:washing_machine +pipeworks:fountainhead +pipeworks:fountainhead_pouring +stairs:slab_copperblock +homedecor:painting_12 +doors:homedecor_french_oak_d +signs:label_small +homedecor:curtainrod_wrought_iron +stairs:stair_desert_stone +homedecor:curtainrod_brass +building_blocks:smoothglass +homedecor:painting_13 +homedecor:projection_screen +default:acacia_bush_leaves +doors:homedecor_carolina_c +signs:label_medium +signs:wooden_sign +default:leaves +homedecor:painting_14 +stairs:stair_outer_obsidian_block +default:stone +building_blocks:Adobe +building_blocks:Marble +building_blocks:gravel_spread +homedecor:shingle_side_asphalt +homedecor:painting_15 +stairs:stair_outer_sandstone_block +flowers:tulip +homedecor:glowlight_half_1 +homedecor:glowlight_quarter_1 +homedecor:desk_lamp_1 +homedecor:table_lamp_1 +homedecor:painting_16 +homedecor:glowlight_small_cube_2 +homedecor:plasma_lamp_2 +homedecor:ground_lantern_2 +homedecor:lattice_lantern_large_2 +homedecor:glowlight_half_3 +homedecor:hanging_lantern_3 +homedecor:painting_17 +homedecor:desk_lamp_3 +homedecor:glowlight_small_cube_4 +homedecor:plasma_lamp_4 +homedecor:ground_lantern_4 +homedecor:hanging_lantern_4 +homedecor:lattice_lantern_large_4 +homedecor:painting_18 +homedecor:chimney +homedecor:table_lamp_4 +homedecor:glowlight_small_cube_5 +steel:plate_soft +steel:plate_rusted +homedecor:ceiling_lantern_5 +homedecor:painting_19 +homedecor:banister_wood_diagonal_left_harlequin +default:aspen_leaves +default:aspen_wood +homedecor:glowlight_small_cube_9 +carts:brakerail +signs:paper_poster +homedecor:painting_20 +doors:homedecor_french_oak_c +doors:homedecor_exterior_fancy_c +homedecor:banister_wood_diagonal_left_indigo +homedecor:glass_table_small_round +steel:grate_soft +stairs:stair_outer_desert_stonebrick +homedecor:glowlight_small_cube_13 +doors:door_obsidian_glass_d +steel:grate_hard +stairs:slab_pine_wood +homedecor:hanging_lantern_0 diff --git a/mods/xcompat/test/nodelist/voxelibre.txt b/mods/xcompat/test/nodelist/voxelibre.txt new file mode 100644 index 0000000..777d1a1 --- /dev/null +++ b/mods/xcompat/test/nodelist/voxelibre.txt @@ -0,0 +1,2499 @@ +mcl_maps:filled_map_character_male_crea +mcl_doors:spruce_trapdoor_ladder +mcl_colorblocks:hardened_clay_white +mcl_ocean:dead_tube_coral_block +mcl_chests:green_shulker_box +mcl_beehives:bee_nest +mcl_cauldrons:cauldron_3 +mcl_stairs:stair_copper_cut +mcl_doors:birch_trapdoor_ladder +mcl_core:barrier +vl_hollow_logs:stripped_warped_hyphae_hollow +mcl_core:sprucetree +mcl_walls:prismarine_6 +xpanes:pane_green +mcl_stairs:stair_wood +mcl_flowerpots:flower_pot_blue_orchid +mcl_core:glass_yellow +mcl_portals:portal_gateway +mcl_core:light_2 +mcl_stairs:stair_crimson_hyphae_wood_inner +mcl_ocean:bubble_coral_block +mesecons_lightstone:lightstone_off +mcl_colorblocks:glazed_terracotta_orange +mcl_farming:potato_1 +mcl_flowerpots:flower_pot_tulip_pink +mcl_flowers:double_grass_top +mcl_amethyst:medium_amethyst_bud +mcl_stairs:stair_warped_hyphae_wood_outer +mcl_stairs:slab_stonebrickcracked_double +mcl_walls:andesite_5 +mcl_mobspawners:spawner +mcl_mud:mud +mesecons_pistons:piston_up_sticky_on +mcl_core:frosted_ice_1 +mcl_compass:lodestone +mcl_stairs:slab_brick_block +mcl_crimson:weeping_vines +mcl_colorblocks:concrete_orange +mcl_walls:stonebrickmossy +mcl_colorblocks:glazed_terracotta_pillar_silver +mcl_core:ironblock +mcl_end:dragon_egg +mcl_stairs:stair_redsandstonesmooth2_outer +mcl_brewing:stand_011 +mcl_walls:mudbrick_7 +mcl_stairs:stair_waxed_copper_oxidized_cut_inner +mcl_beds:respawn_anchor_charged_4 +mcl_lanterns:chain +mcl_stairs:slab_birchtree_bark_double +mcl_mushrooms:red_mushroom_block_cap_110010 +mcl_stairs:slab_concrete_orange +mcl_core:snow_6 +mcl_chests:cyan_shulker_box_small +mcl_crimson:warped_door_b_3 +mcl_beds:bed_blue_top +mcl_walls:redsandstone_6 +mcl_deepslate:deepslatecobbledwall_2 +mcl_stairs:stair_concrete_magenta_outer +mcl_wool:pink_carpet +mcl_walls:brick_3 +mcl_walls:prismarine +mcl_mushrooms:brown_mushroom_block_cap_110100 +mcl_fences:birch_fence_gate_open +mcl_brewing:stand_010 +mcl_walls:rednetherbrick_4 +mcl_mushrooms:brown_mushroom_block_cap_110000 +mcl_core:jungletree +mcl_wool:blue_carpet +mcl_flowerpots:flower_pot_lily_of_the_valley +mcl_stairs:slab_crimson_hyphae_wood_double +mcl_cherry_blossom:cherry_door_t_2 +mcl_flowers:poppy +xpanes:pane_white +mcl_stairs:slab_acaciawood_top +mcl_ocean:kelp_sand +mcl_walls:diorite_3 +mcl_stairs:stair_mangrove_wood_inner +mcl_cake:cake_4 +mcl_deepslate:deepslatepolishedwall_8 +mcl_ocean:kelp_dirt +mcl_deepslate:deepslatebrickswall_8 +mcl_cake:cake +mcl_minecarts:detector_rail +mcl_walls:brick_21 +mcl_core:acaciatree_bark +mcl_stairs:slab_copper_cut +mcl_wool:green_carpet +mcl_stairs:slab_blackstone_brick_polished_double +mcl_flowers:double_grass +mcl_torches:torch_wall +mesecons_pressureplates:pressure_plate_birchwood_on +mcl_doors:acacia_door_t_3 +mcl_beehives:beehive_3 +mcl_core:packed_ice +mcl_stairs:slab_bamboo_mosaic_double +mcl_walls:stonebrickmossy_1 +mesecons_button:button_warped_hyphae_wood_on +mcl_walls:rednetherbrick_15 +mcl_farming:melontige_4 +mcl_stairs:stair_acaciawood_inner +mcl_stairs:stair_concrete_red_inner +xpanes:pane_light_blue_flat +mcl_walls:rednetherbrick_21 +mcl_core:mycelium_snow +mcl_signs:standing_sign22_5_warped_hyphae_wood +xpanes:pane_yellow +mcl_walls:redsandstone_12 +mcl_wool:yellow +mcl_stonecutter:stonecutter +mcl_walls:diorite_5 +mcl_comparators:comparator_on_comp +mcl_stairs:stair_stone_rough_inner +mesecons_torch:mesecon_torch_overheated +mcl_stairs:slab_birchtree_bark +mcl_stairs:stair_sandstone_outer +mcl_stairs:stair_copper_exposed_cut_outer +mcl_core:glass_magenta +mcl_deepslate:deepslatetileswall_10 +mesecons_torch:mesecon_torch_overheated_wall +xpanes:bar +mesecons_button:button_polished_blackstone_off +mcl_observers:observer_on +mcl_ocean:sea_lantern +mcl_doors:trapdoor_ladder +mcl_anvils:anvil_damage_2 +xpanes:bar_flat +mcl_bamboo:bamboo_1 +mcl_stairs:slab_sandstonesmooth2 +mcl_end:end_rod_lightblue +mcl_walls:stonebrickmossy_3 +mcl_wool:orange_carpet +mcl_core:stone_with_redstone_lit +mcl_stairs:slab_bamboo_block_top +mcl_mushrooms:red_mushroom_block_cap_010111 +mcl_deepslate:deepslatecobbledwall_15 +mcl_walls:stonebrick_4 +mcl_farming:pumpkintige_linked_l +mcl_stairs:stair_diorite_smooth_outer +mcl_fences:jungle_fence_gate_open +mcl_core:frosted_ice_0 +mcl_end:end_rod_purple +mcl_stairs:slab_deepslate_cobbled_top +mcl_wool:silver +mcl_colorblocks:concrete_magenta +mcl_stairs:stair_sandstonesmooth2_inner +mcl_walls:andesite_2 +mcl_core:stone_with_iron +mcl_mushrooms:brown_mushroom_block_cap_011110 +mcl_farming:melontige_7 +mcl_colorblocks:glazed_terracotta_pink +mesecons_torch:redstoneblock +mcl_walls:stonebrick_5 +mcl_flowers:lilac +mcl_deepslate:deepslatecobbledwall_3 +mcl_core:snow_5 +mcl_walls:brick_14 +mcl_core:lava_source +mcl_walls:granite_15 +mcl_crimson:warped_door_b_2 +mcl_stairs:slab_sandstone_top +mcl_signs:standing_sign_bamboo +mcl_mushrooms:red_mushroom_block_cap_101101 +mcl_walls:redsandstone_5 +mcl_walls:rednetherbrick_7 +mcl_stairs:slab_nether_brick +mcl_walls:brick_0 +mcl_meshhand:mcl_skins_base_1B47A57FF_female_surv +mcl_stairs:stair_sandstone +xpanes:pane_green_flat +mcl_signs:standing_sign_mangrove_wood +mesecons_button:button_wood_off +mcl_deepslate:deepslatepolishedwall_9 +mcl_stairs:stair_blackstone_inner +mcl_core:glass +mcl_stairs:slab_andesite_double +mcl_flowers:rose_bush_top +mcl_flowers:allium +mcl_ocean:brain_coral +xpanes:pane_yellow_flat +mcl_cherry_blossom:cherrytree +mcl_stairs:stair_concrete_magenta_inner +mcl_blackstone:soul_torch_wall +mcl_blackstone:wall_6 +mcl_flowerpots:flower_pot_darksapling +mcl_end:end_rod_green +mcl_doors:jungle_trapdoor_ladder +mcl_mangrove:mangrove_door_t_2 +mcl_heads:wither_skeleton45 +mcl_walls:granite_6 +mcl_stairs:slab_stone_rough_top +mcl_compressed_blocks:sextuple_compressed_cobblestone +mcl_signs:standing_sign45_mangrove_wood +mcl_walls:stonebrickmossy_0 +mcl_stairs:stair_bamboo_stripped_outer +mcl_crimson:warped_roots +mcl_signs:wall_sign_warped_hyphae_wood +mcl_stairs:stair_tree_bark +mcl_enchanting:table +mcl_core:mycelium +mesecons_lightstone:lightstone_on_cyan +mclx_fences:red_nether_brick_fence +mcl_stairs:slab_deepslate_polished +mcl_stairs:slab_concrete_silver_top +mcl_walls:prismarine_10 +air +mcl_walls:granite +mcl_mangrove:propagule_mud +mcl_core:darkleaves +mcl_chests:red_shulker_box_small +mcl_farming:sweet_berry_bush_1 +mcl_composters:composter_2 +mcl_beehives:bee_nest_2 +mcl_walls:redsandstone_11 +mcl_walls:mossycobble_7 +mesecons_lightstone:lightstone_on_blue +mcl_deepslate:deepslatebrickswall_6 +mcl_cherry_blossom:stripped_cherrytree_bark +mcl_crimson:warped_hyphae_wood +vl_hollow_logs:stripped_crimson_hyphae_hollow +mcl_cauldrons:cauldron +mcl_stairs:stair_mangrove_wood_outer +mcl_copper:block_weathered_cut +mcl_walls:stonebrickmossy_12 +mcl_beehives:bee_nest_3 +mcl_farming:potato_3 +mcl_stairs:stair_andesite_smooth +mcl_deepslate:deepslatepolishedwall_14 +mcl_stairs:stair_waxed_copper_weathered_cut_inner +mesecons_button:button_polished_blackstone_on +mcl_deepslate:deepslatecobbledwall_16 +mcl_stairs:stair_prismarine_dark_inner +mcl_crimson:nether_sprouts +mcl_core:light_0 +mcl_ocean:seagrass_redsand +mcl_blackstone:wall_5 +mcl_fences:dark_oak_fence +mcl_walls:stonebrick_6 +mcl_farming:pumpkin +mcl_doors:jungle_door_t_1 +mcl_colorblocks:concrete_powder_silver +mcl_stairs:slab_sprucetree_bark +mcl_walls:endbricks_0 +mcl_beds:respawn_anchor_charged_2 +mcl_torches:torch +mcl_core:clay +mcl_fences:birch_fence_gate +mcl_core:snow_4 +mcl_banners:standing_banner +mcl_wool:purple +mcl_chests:green_shulker_box_small +mcl_walls:rednetherbrick_14 +mcl_lanterns:lantern_ceiling +mcl_fences:jungle_fence +mcl_maps:filled_map_mcl_skins_base_1EEB592FF_male_crea +mcl_stairs:stair_sprucetree_bark +mcl_stairs:stair_deepslate_polished_inner +mcl_stairs:slab_goldblock +mcl_walls:rednetherbrick_6 +mcl_mangrove:mangrove_wood_fence_gate +mcl_smithing_table:table +mcl_stairs:slab_quartzblock_double +mcl_crimson:stripped_warped_hyphae_bark +mcl_stairs:slab_deepslate_polished_top +mcl_stairs:slab_copper_exposed_cut +mcl_amethyst:amethyst_cluster +mcl_sculk:catalyst +mcl_beds:bed_magenta_bottom +mesecons_pressureplates:pressure_plate_crimson_hyphae_wood_on +mcl_colorblocks:concrete_yellow +mcl_stairs:slab_concrete_grey_top +mcl_walls:redsandstone_0 +mesecons_delayer:delayer_on_1 +mcl_crimson:crimson_door_b_1 +mcl_deepslate:deepslate_with_redstone_lit +mcl_nether:red_nether_brick +mcl_walls:granite_7 +mcl_walls:diorite_15 +mcl_stairs:stair_quartzblock_outer +mcl_walls:mudbrick_14 +mcl_core:diorite_smooth +mcl_wool:brown +mcl_colorblocks:hardened_clay_brown +mcl_doors:acacia_trapdoor_open +mcl_farming:soil_wet +mcl_mushrooms:mushroom_red +mcl_flowerpots:flower_pot_cactus +mesecons_commandblock:commandblock_on +mcl_stairs:slab_jungletree_bark +mesecons_lightstone:lightstone_on_white +mcl_doors:birch_trapdoor_open +mcl_walls:stonebrick_21 +mcl_ocean:tube_coral +mcl_stairs:slab_copper_weathered_cut_top +mcl_stairs:slab_acaciawood_double +mcl_walls:prismarine_7 +mcl_stairs:slab_blackstone +mcl_chests:trapped_chest_left +mesecons_pistons:piston_normal_on +mcl_stairs:stair_blackstone_polished_inner +mcl_ocean:sea_pickle_3_dead_brain_coral_block +mesecons_lightstone:lightstone_on_red +mcl_flowers:clover +mcl_stairs:stair_quartzblock_inner +mcl_stairs:stair_tree_bark_inner +mcl_hoppers:hopper_side_disabled +mesecons_lightstone:lightstone_on_yellow +mcl_doors:jungle_door_t_4 +mcl_farming:sweet_berry_bush_2 +mcl_cherry_blossom:cherrywood +mcl_walls:sandstone_11 +mcl_core:glass_purple +mcl_copper:waxed_block +mesecons_lightstone:lightstone_off_brown +mcl_cauldrons:cauldron_2 +mcl_walls:diorite_7 +mcl_composters:composter_1 +mcl_stairs:slab_red_nether_brick +mcl_core:light_11 +mcl_lanterns:soul_lantern_floor +mcl_walls:mossycobble_0 +mcl_deepslate:deepslatetileswall_16 +mcl_crimson:warped_fence_gate_open +mcl_stairs:stair_stonebrickcracked_inner +mcl_farming:potato_2 +mesecons_pistons:piston_up_pusher_normal +mcl_blackstone:wall_21 +mcl_stairs:slab_deepslate_tiles_top +xpanes:pane_natural_flat +mcl_mangrove:mangrove_trapdoor_open +mcl_walls:stonebrickmossy_13 +mcl_stairs:slab_mossycobble_double +mcl_doors:jungle_trapdoor_open +mcl_flowerpots:flower_pot_dandelion +mcl_flowers:sunflower +mcl_cherry_blossom:cherryleaves_orphan +mcl_farming:pumpkin_face_light +mcl_colorblocks:hardened_clay_lime +mcl_mushrooms:brown_mushroom_block_cap_001100 +mcl_walls:prismarine_0 +mcl_walls:prismarine_21 +mcl_deepslate:infested_deepslate +mcl_mushrooms:red_mushroom_block_cap_000011 +mcl_crafting_table:crafting_table +mcl_stairs:slab_darkwood +mcl_walls:brick_15 +mcl_core:stripped_dark_oak +mcl_colorblocks:concrete_powder_red +mcl_beds:bed_magenta_top +mcl_stairs:slab_granite_smooth +mcl_chests:trapped_chest_on_left +mcl_bamboo:bamboo +mcl_chests:ender_chest_small +vl_hollow_logs:stripped_acacia_hollow +mcl_chests:violet_shulker_box_small +mcl_core:stone +mcl_dispensers:dispenser +mcl_wool:yellow_carpet +mcl_furnaces:furnace_active +mcl_walls:rednetherbrick_1 +mcl_nether:quartz_block +mcl_walls:brick_16 +mcl_stairs:slab_copper_weathered_cut +mcl_copper:waxed_block_oxidized +mcl_mushrooms:brown_mushroom_block_cap_001101 +mcl_mushrooms:brown_mushroom_block_cap_011001 +mcl_cherry_blossom:cherry_door_b_3 +mcl_walls:endbricks_2 +mcl_core:brick_block +mcl_walls:mudbrick_11 +mcl_heads:skeleton_wall +mcl_comparators:comparator_off_comp +mcl_core:stripped_jungle_bark +mcl_colorblocks:concrete_light_blue +mcl_core:snow_8 +mcl_walls:granite_8 +mcl_farming:melon +mcl_beehives:beehive_2 +mcl_stairs:slab_copper_cut_top +mcl_core:acaciatree +mcl_stairs:stair_quartzblock +mcl_walls:redsandstone_7 +mcl_wool:light_blue +mcl_doors:wooden_door_b_3 +mcl_stairs:slab_mossycobble_top +mcl_bamboo:bamboo_3 +mcl_deepslate:deepslatepolishedwall_16 +mcl_compressed_blocks:quadruple_compressed_cobblestone +mcl_core:darktree +mcl_stairs:slab_sandstonesmooth2_double +mcl_deepslate:deepslatetileswall_3 +mcl_end:purpur_block +mcl_doors:dark_oak_trapdoor_ladder +mcl_deepslate:deepslatebrickswall_5 +mcl_copper:waxed_block_cut +mcl_walls:endbricks_14 +mcl_stairs:stair_concrete_red +mcl_colorblocks:concrete_black +mcl_deepslate:deepslatecobbledwall_10 +mcl_doors:jungle_door_t_3 +mcl_mushrooms:brown_mushroom_block_cap_000111 +mcl_walls:netherbrick_8 +mcl_farming:melontige_5 +mcl_mushrooms:brown_mushroom_block_cap_000011 +mcl_doors:birch_door_t_4 +mcl_stairs:stair_concrete_blue +mcl_walls:rednetherbrick_10 +xpanes:pane_pink +mcl_walls:diorite_0 +mcl_meshhand:mcl_skins_character_1_female_crea +mcl_stairs:stair_andesite_smooth_outer +mcl_walls:granite_9 +mcl_flowerpots:flower_pot_cornflower +mcl_walls:andesite_21 +mesecons_lightstone:lightstone_off_magenta +mcl_chests:orange_shulker_box +mcl_end:end_rod_yellow +mesecons_pressureplates:pressure_plate_warped_hyphae_wood_off +mcl_flowers:oxeye_daisy +mcl_crimson:warped_door_t_4 +mcl_end:end_rod_magenta +mcl_walls:sandstone_2 +mcl_core:birchwood +xpanes:pane_blue +mesecons_lightstone:lightstone_on_brown +mesecons_pistons:piston_down_normal_on +mcl_chests:grey_shulker_box +mcl_cauldrons:cauldron_1_lava +mcl_stairs:stair_redsandstone_outer +mcl_stairs:stair_end_bricks_outer +mcl_stairs:stair_bamboo_mosaic_outer +mcl_colorblocks:glazed_terracotta_grey +mcl_farming:pumpkin_face +mcl_doors:trapdoor_open +mcl_walls:mossycobble_1 +mcl_walls:prismarine_1 +mcl_nether:ancient_debris +mcl_walls:mudbrick_1 +mcl_colorblocks:concrete_red +mcl_stairs:stair_blackstone_chiseled_polished_inner +mesecons_delayer:delayer_on_locked +mcl_brewing:stand_101 +mcl_walls:granite_1 +mcl_walls:redsandstone_2 +mcl_walls:redsandstone_13 +mcl_stairs:slab_copper_cut_double +mcl_deepslate:deepslate_with_coal +mcl_colorblocks:glazed_terracotta_pillar_black +mcl_mushrooms:red_mushroom_block_cap_011110 +mcl_stairs:slab_redsandstone_top +mcl_campfires:soul_campfire +mcl_core:cactus +mcl_deepslate:deepslate_bricks +mcl_walls:rednetherbrick_16 +mcl_stairs:slab_redsandstonesmooth2 +mcl_core:sandstonesmooth +mcl_core:light_12 +mcl_deepslate:deepslatetileswall_15 +mcl_wool:magenta +mcl_furnaces:furnace +mcl_crimson:crimson_fence +mcl_deepslate:deepslatepolishedwall_4 +mcl_walls:mudbrick_16 +mcl_stairs:stair_blackstone_polished +mcl_walls:stonebrick_0 +mcl_cherry_blossom:cherry_door_b_2 +mcl_walls:cobble_21 +mcl_walls:granite_11 +mcl_colorblocks:glazed_terracotta_pillar_lime +mcl_stairs:stair_redsandstone_inner +mcl_flowerpots:flower_pot_mushroom_brown +mcl_flowers:fern +mcl_stairs:slab_end_bricks_double +mcl_stairs:slab_brick_block_top +mcl_core:redsandstonesmooth2 +mcl_target:target_on +mcl_blackstone:wall_16 +mcl_stairs:stair_darktree_bark +mcl_stairs:stair_red_nether_brick +mcl_blackstone:wall_7 +mcl_stairs:stair_waxed_copper_exposed_cut_outer +xpanes:pane_silver +mcl_doors:wooden_door_b_2 +mcl_doors:spruce_door_t_1 +mcl_bamboo:bamboo_2 +mcl_fire:eternal_fire +mcl_mangrove:mangrove_door_t_3 +mcl_stairs:stair_red_nether_brick_outer +mcl_ocean:fire_coral_block +mcl_core:crying_obsidian +mcl_walls:sandstone_21 +mcl_heads:stalker_wall +mcl_deepslate:tuff +mcl_stairs:stair_blackstone_chiseled_polished_outer +mcl_stairs:slab_blackstone_polished_top +mcl_stairs:stair_deepslate_polished_outer +mcl_colorblocks:hardened_clay_purple +mcl_stairs:slab_andesite_smooth_double +mesecons_pistons:piston_down_pusher_sticky +mcl_core:glass_silver +mcl_farming:pumpkin_5 +mcl_deepslate:deepslatebrickswall_4 +mcl_walls:rednetherbrick_0 +mcl_stairs:stair_waxed_copper_cut_inner +mcl_copper:block_oxidized_cut +mcl_stairs:stair_jungletree_bark_inner +mcl_crimson:warped_trapdoor_ladder +mcl_ocean:kelp_redsand +mcl_beds:bed_grey_bottom +mcl_mangrove:hanging_propagule_1 +mcl_stairs:stair_prismarine_dark_outer +mcl_walls:endbricks_15 +mcl_fences:acacia_fence_gate_open +mcl_stairs:slab_copper_oxidized_cut_top +mcl_stairs:slab_redsandstone_double +mcl_flowerpots:flower_pot_warped_fungus +mcl_walls:sandstone +mcl_stairs:stair_warped_hyphae_wood_inner +mcl_walls:rednetherbrick_13 +mcl_maps:filled_map_character_male_surv +mcl_stairs:slab_waxed_copper_weathered_cut_double +mcl_heads:wither_skeleton67_5 +mcl_deepslate:deepslatecobbledwall_11 +mcl_stairs:stair_sandstone_inner +mcl_walls:mossycobble_2 +mcl_stairs:slab_prismarine_dark_double +mcl_stairs:slab_concrete_white_double +mcl_core:tree_bark +mcl_stairs:stair_blackstone_chiseled_polished +mcl_crimson:crimson_roots +mcl_walls:diorite_1 +mcl_walls:sandstone_13 +mcl_stairs:stair_bamboo_plank +mcl_deepslate:deepslate +mcl_stairs:slab_stonebrickcracked +mcl_doors:jungle_trapdoor +mcl_core:water_source +mesecons_lightstone:lightstone_off_lightblue +mcl_walls:mudbrick_2 +mcl_wool:black_carpet +mcl_stairs:slab_wood_top +mcl_walls:cobble_14 +mcl_farming:melontige_3 +mcl_stairs:stair_cobble +mcl_deepslate:deepslatetileswall +mcl_crimson:warped_fungus +mcl_copper:stone_with_copper +mcl_stairs:stair_prismarine_outer +mcl_mushrooms:brown_mushroom_block_cap_101000 +mcl_walls:netherbrick_9 +mcl_core:jungletree_bark +mcl_wool:red_carpet +mcl_amethyst:small_amethyst_bud +mcl_core:sprucesapling +mcl_walls:prismarine_2 +mesecons_lightstone:lightstone_off_orange +mcl_stairs:stair_stonebrickmossy_outer +mcl_stairs:slab_birchwood +mcl_beds:respawn_anchor_charged_1 +mcl_walls:mossycobble_21 +mcl_core:redsand +mcl_meshhand:mcl_skins_character_1_female_surv +mcl_stairs:slab_concrete_brown +mcl_signs:standing_sign45_bamboo +mcl_core:jungleleaves_orphan +mcl_farming:melontige_unconnect +mcl_walls:redsandstone_1 +mcl_signs:standing_sign67_5_crimson_hyphae_wood +mcl_minecarts:rail +mesecons:wire_00010000_off +mcl_stairs:slab_granite_double +mcl_stairs:stair_diorite +mcl_stairs:slab_jungletree_bark_double +mcl_beds:bed_lime_bottom +mcl_chests:blue_shulker_box_small +mcl_stairs:stair_granite_smooth_outer +mcl_stairs:slab_mangrove_wood_top +mcl_brewing:stand_100 +mcl_stairs:stair_concrete_light_blue_outer +mcl_walls:granite_16 +mcl_end:end_rod_grey +mcl_chests:magenta_shulker_box +mcl_cherry_blossom:cherry_door_b_1 +mcl_core:mossycobble +mcl_stairs:stair_copper_cut_outer +mcl_crimson:warped_fence_gate +mcl_stairs:slab_redsandstone +mcl_walls:cobble_15 +mcl_stairs:stair_stonebrickmossy_inner +mcl_core:glass_orange +mcl_core:light_7 +mcl_doors:jungle_door_b_3 +mcl_stairs:slab_mangrove_wood_double +mcl_stairs:slab_waxed_copper_cut +mcl_doors:wooden_door_b_1 +mcl_chests:black_shulker_box +mcl_walls:diorite_14 +mcl_signs:standing_sign22_5 +mcl_walls:stonebrick_1 +mcl_core:glass_blue +mcl_ocean:dead_bubble_coral +mcl_stairs:slab_copper_weathered_cut_double +mcl_stairs:stair_bamboo_mosaic +mcl_deepslate:deepslatetileswall_9 +mcl_minecarts:golden_rail +mcl_stairs:slab_stonebrickmossy +mcl_signs:standing_sign22_5_bamboo +mcl_stairs:stair_goldblock_inner +mcl_core:obsidian +mesecons_delayer:delayer_on_4 +mcl_walls:rednetherbrick_3 +mcl_crimson:crimson_door_b_4 +mcl_droppers:dropper_down +mcl_stairs:stair_mud_brick_inner +mcl_farming:carrot +mcl_cake:cake_2 +mcl_farming:pumpkin_4 +mcl_core:slimeblock +mcl_stairs:stair_waxed_copper_cut_outer +mcl_stairs:slab_bamboo_mosaic +mcl_stairs:slab_birchwood_double +mcl_stairs:slab_diorite_smooth_double +mcl_flowers:cornflower +mcl_stairs:stair_concrete_white_outer +mcl_stairs:slab_blackstone_double +mcl_blackstone:wall_14 +mcl_stairs:stair_redsandstone +mcl_blackstone:soul_fire +mcl_core:glass_black +mcl_core:birchleaves_orphan +mcl_stairs:stair_prismarine_dark +mcl_walls:rednetherbrick_12 +mcl_mangrove:mangrove_trapdoor_ladder +mcl_stairs:stair_goldblock +mcl_chests:chest +mcl_chests:black_shulker_box_small +mcl_walls:diorite_2 +mcl_core:birchleaves +mcl_deepslate:deepslatecobbledwall_12 +mcl_itemframes:item_frame +mcl_walls:prismarine_3 +mcl_deepslate:deepslate_with_gold +mcl_composters:composter_6 +mcl_heads:stalker +mcl_monster_eggs:monster_egg_cobble +mcl_stairs:slab_deepslate_tiles_double +mcl_stairs:stair_stone_rough_outer +mcl_stairs:stair_diorite_smooth_inner +mcl_farming:carrot_5 +mcl_chests:cyan_shulker_box +mcl_farming:beetroot_1 +xpanes:pane_red +mcl_core:light_10 +mcl_stairs:slab_granite_smooth_double +mcl_crimson:stripped_crimson_hyphae +mcl_stairs:slab_wood +mcl_copper:block_weathered +mcl_walls:mossycobble_3 +mcl_walls:mudbrick_3 +mcl_deepslate:deepslatebrickswall_14 +mcl_deepslate:deepslatebrickswall_2 +mesecons_lightstone:lightstone_on_lightblue +mcl_colorblocks:glazed_terracotta_silver +mcl_stairs:slab_concrete_light_blue_top +mcl_stairs:slab_cherrywood_double +mcl_doors:acacia_door_b_3 +mcl_core:granite +mcl_deepslate:deepslatetileswall_21 +mcl_farming:melontige_6 +mcl_crimson:crimson_door_t_4 +mcl_stairs:stair_copper_exposed_cut +mcl_bamboo:pressure_plate_bamboo_wood_off +mesecons_pressureplates:pressure_plate_mangrove_wood_on +mcl_mushrooms:red_mushroom_block_cap_111010 +mcl_stairs:stair_copper_oxidized_cut_outer +mcl_farming:melontige_linked_b +mcl_ocean:horn_coral_fan +mcl_crimson:crimson_hyphae_wood +mcl_core:dirt_with_grass +mcl_doors:iron_trapdoor +mcl_deepslate:deepslatepolishedwall_6 +mcl_compressed_blocks:triple_compressed_cobblestone +mcl_bells:bell +mcl_walls:brick_11 +mcl_copper:block +mesecons_lightstone:lightstone_on_black +mcl_stairs:slab_crimson_hyphae_wood_top +mcl_wool:black +mcl_wool:light_blue_carpet +mcl_ocean:brain_coral_block +mcl_colorblocks:hardened_clay_orange +mcl_flowerpots:flower_pot_tulip_red +mcl_signs:wall_sign +mcl_stairs:stair_waxed_copper_oxidized_cut_outer +mcl_crimson:warped_trapdoor_open +mcl_fences:fence_gate_open +mcl_doors:spruce_trapdoor +mcl_walls:mudbrick_10 +mcl_wool:lime +mesecons_lightstone:lightstone_on_pink +mcl_deepslate:deepslatecobbledwall_8 +mcl_mangrove:mangrove_stripped +mcl_walls:stonebrick_2 +mcl_copper:block_oxidized +mcl_stairs:slab_blackstone_top +mcl_crimson:crimson_door_t_1 +mcl_colorblocks:concrete_powder_cyan +mcl_farming:wheat_7 +mcl_walls:granite_13 +mcl_stairs:stair_stonebrickcracked +mcl_composters:composter_5 +mcl_mushrooms:brown_mushroom_block_cap_000010 +mesecons_delayer:delayer_off_locked +mcl_signs:standing_sign67_5 +mcl_crimson:warped_hyphae +mcl_stairs:slab_quartzblock_top +mcl_cherry_blossom:cherry_trapdoor_ladder +mcl_maps:filled_map_mcl_skins_character_1_female_surv +mcl_deepslate:deepslatetileswall_8 +mcl_beehives:beehive_1 +mcl_walls:netherbrick +mesecons_lightstone:lightstone_off_white +mcl_core:snow +mcl_core:snowblock +mcl_signs:wall_sign_crimson_hyphae_wood +mcl_observers:observer_down_on +mcl_walls:endbricks_21 +mcl_deepslate:deepslatetileswall_13 +mcl_colorblocks:hardened_clay_silver +mcl_flowers:fourleaf_clover +mcl_signs:standing_sign22_5_crimson_hyphae_wood +mcl_walls:diorite_11 +xpanes:pane_purple +mesecons_lightstone:lightstone_off_silver +mcl_deepslate:deepslatebrickswall +mcl_blackstone:nether_gold +mcl_bamboo:bamboo_fence_gate_open +mcl_portals:portal +mcl_fletching_table:fletching_table +mcl_deepslate:deepslatecobbledwall_13 +mcl_flowers:sunflower_top +mcl_beds:bed_silver_top +mcl_deepslate:deepslatebrickswall_1 +mcl_heads:skeleton +mcl_bamboo:bamboo_block +mcl_doors:jungle_door_b_2 +mcl_blackstone:blackstone +mcl_deepslate:deepslatecobbledwall_21 +mcl_compressed_blocks:octuple_compressed_cobblestone +mcl_stairs:slab_prismarine_dark_top +mcl_mushrooms:red_mushroom_block_stem +mcl_beds:bed_cyan_bottom +mcl_walls:redsandstone_3 +mcl_stairs:slab_deepslate_cobbled_double +mcl_deepslate:deepslatebrickswall_15 +mcl_stairs:slab_stonebrick_double +mcl_mushrooms:mushroom_brown +mcl_chests:orange_shulker_box_small +mcl_stairs:slab_stone_top +mcl_deepslate:deepslatepolishedwall_15 +mcl_stairs:slab_concrete_purple +mesecons_torch:mesecon_torch_off +mcl_stairs:slab_deepslate_cobbled +mcl_campfires:campfire_lit +mcl_stairs:slab_prismarine_top +mcl_maps:filled_map_mcl_skins_base_18D471DFF_female_crea +mcl_walls:brick_9 +mcl_core:deadbush +mcl_walls:sandstone_1 +mcl_core:stone_with_gold +mcl_crimson:warped_door_t_1 +mcl_farming:melontige_1 +mcl_farming:beetroot_0 +mcl_stairs:stair_quartz_smooth_outer +mcl_beds:respawn_anchor +mcl_stairs:stair_blackstone_brick_polished_inner +mclx_fences:red_nether_brick_fence_gate +mcl_walls:mudbrick +mcl_observers:observer_up_off +mesecons_lightstone:lightstone_on_orange +mcl_mangrove:mangroveleaves_orphan +mcl_nether:quartz_smooth +mcl_farming:pumpkin_6 +mcl_end:end_bricks +mcl_mushrooms:red_mushroom_block_cap_101111 +mcl_walls:netherbrick_4 +mcl_minecarts:activator_rail +vl_hollow_logs:acaciatree_hollow +mcl_stairs:slab_concrete_silver_double +mcl_beds:bed_light_blue_top +mcl_walls:andesite_8 +mcl_signs:wall_sign_darkwood +mcl_crimson:warped_door_b_4 +mcl_bamboo:bamboo_door_t_3 +mcl_flowers:peony +mcl_stairs:stair_prismarine +mcl_nether:nether_wart_1 +mcl_portals:portal_end +mcl_signs:standing_sign45_crimson_hyphae_wood +mcl_stairs:stair_red_nether_brick_inner +mcl_end:chorus_plant +mcl_stairs:slab_blackstone_chiseled_polished_top +mcl_flowers:wither_rose +mcl_mangrove:river_water_logged_roots +mcl_deepslate:deepslatepolishedwall_7 +mcl_stairs:slab_deepslate_bricks +mcl_walls:granite_10 +mesecons_button:button_crimson_hyphae_wood_off +mcl_walls:sandstone_15 +mcl_deepslate:deepslatecobbledwall_9 +mcl_colorblocks:hardened_clay_magenta +mcl_signs:standing_sign67_5_warped_hyphae_wood +mcl_core:redsandstonecarved +mcl_flowers:tulip_white +mcl_nether:nether_wart +mcl_stairs:stair_cobble_outer +mcl_walls:cobble_4 +mcl_deepslate:deepslate_with_emerald +mesecons_button:button_birchwood_on +mcl_farming:melontige_linked_t +mcl_compressed_blocks:quintuple_compressed_cobblestone +mcl_core:water_flowing +mcl_deepslate:deepslatetileswall_12 +mcl_blackstone:wall_12 +mcl_minecarts:detector_rail_on +mcl_doors:wooden_door_t_3 +mcl_stairs:stair_andesite_smooth_inner +mcl_flowerpots:flower_pot_azure_bluet +mcl_core:coalblock +mcl_ocean:horn_coral +mcl_ocean:dead_brain_coral +mcl_core:darksapling +mcl_walls:redsandstone +mcl_droppers:dropper_up +mcl_monster_eggs:monster_egg_stonebrick +mcl_ocean:bubble_coral +mcl_end:end_rod_orange +mcl_stairs:stair_blackstone_brick_polished +mcl_stairs:stair_deepslate_cobbled +mcl_stairs:slab_purpur_block_double +mcl_stairs:stair_bamboo_stripped +vl_hollow_logs:birchtree_hollow +mcl_compressed_blocks:compressed_cobblestone +mcl_walls:endbricks_10 +mcl_lanterns:lantern_floor +mcl_walls:redsandstone_21 +mcl_stairs:slab_lapisblock_double +mcl_monster_eggs:monster_egg_stonebrickcarved +mcl_anvils:anvil_damage_1 +mesecons_commandblock:commandblock_off +mcl_stairs:slab_waxed_copper_exposed_cut +mcl_stairs:slab_waxed_copper_exposed_cut_double +mcl_crimson:warped_nylium +mesecons_lightstone:lightstone_off_blue +mcl_stairs:stair_concrete_grey_outer +mcl_core:sprucetree_bark +mcl_stairs:slab_crimson_hyphae_wood +mcl_stairs:slab_cobble_double +mcl_beehives:bee_nest_1 +mcl_core:gravel +xpanes:pane_red_flat +mcl_signs:wall_sign_sprucewood +mesecons_lightstone:lightstone_off_grey +mcl_mangrove:mangrove_door_b_1 +mcl_doors:acacia_door_t_4 +mcl_deepslate:deepslatetileswall_6 +mcl_deepslate:deepslatepolishedwall_12 +mcl_walls:brick_12 +mcl_deepslate:deepslatetileswall_11 +mcl_ocean:sea_pickle_4_dead_brain_coral_block +mcl_stairs:stair_prismarine_brick_inner +mcl_mushrooms:brown_mushroom_block_stem_full +mcl_walls:netherbrick_5 +mcl_walls:mossycobble +mcl_walls:netherbrick_13 +mcl_core:birchsapling +mcl_stairs:stair_copper_weathered_cut_outer +mcl_farming:pumpkin_1 +mcl_flowers:tulip_pink +mcl_blackstone:wall_13 +mcl_core:emeraldblock +mcl_doors:dark_oak_door_t_4 +mcl_mushrooms:red_mushroom_block_cap_000100 +mcl_bamboo:bamboo_door_b_4 +mcl_core:stripped_jungle +mcl_deepslate:deepslate_chiseled +mesecons_pressureplates:pressure_plate_darkwood_off +mcl_flowers:tulip_orange +xpanes:pane_natural +mcl_deepslate:deepslatepolishedwall_0 +mcl_stairs:slab_andesite_smooth +mcl_walls:mossycobble_14 +mcl_flowerpots:flower_pot_poppy +mcl_beehives:beehive_4 +mcl_copper:waxed_block_oxidized_cut +mcl_colorblocks:glazed_terracotta_pillar_yellow +mcl_nether:nether_brick +mcl_stairs:slab_waxed_copper_oxidized_cut_top +mcl_chests:grey_shulker_box_small +mcl_cherry_blossom:cherry_fence_gate +mesecons_button:button_mangrove_wood_on +mcl_stairs:stair_redsandstonesmooth2 +mcl_stairs:stair_deepslate_cobbled_inner +mcl_wool:silver_carpet +mcl_core:stone_smooth +mcl_heads:steve22_5 +mcl_walls:endbricks_11 +mcl_core:stripped_birch +mcl_crimson:crimson_fence_gate_open +mcl_chests:trapped_chest_small +mcl_nether:nether_wart_0 +mcl_end:end_rod +mcl_deepslate:deepslatecobbledwall +mcl_stairs:stair_junglewood_inner +mcl_heads:steve67_5 +mcl_farming:carrot_7 +mcl_stairs:stair_redsandstonesmooth2_inner +mcl_core:stripped_oak +mcl_bamboo:bamboo_fence +mesecons_delayer:delayer_off_2 +mcl_ocean:dead_bubble_coral_block +mcl_stairs:stair_deepslate_bricks_inner +mesecons_pressureplates:pressure_plate_polished_blackstone_on +mcl_signs:standing_sign_crimson_hyphae_wood +mcl_doors:wooden_door_t_2 +mcl_walls:sandstone_12 +mcl_stairs:slab_birchtree_bark_top +mcl_walls:granite_5 +mcl_mangrove:mangrove_mud_roots +mcl_stairs:slab_blackstone_polished_double +mcl_crimson:crimson_fence_gate +mcl_stairs:slab_granite_top +mcl_walls:diorite_13 +mcl_stairs:stair_darktree_bark_inner +mcl_walls:prismarine_16 +xpanes:pane_white_flat +mcl_walls:netherbrick_11 +mcl_core:junglesapling +mcl_walls:redsandstone_8 +mcl_walls:mudbrick_12 +mcl_mud:mud_bricks +mcl_colorblocks:concrete_brown +mclx_core:river_water_flowing +mcl_stairs:stair_sprucewood_inner +mesecons_lightstone:lightstone_off_purple +mcl_stairs:stair_warped_hyphae_wood +mcl_chests:lightblue_shulker_box_small +mcl_signs:standing_sign_darkwood +mcl_smoker:smoker +mcl_stairs:stair_blackstone_brick_polished_outer +mesecons_button:button_darkwood_on +mcl_mangrove:mangrove_trapdoor +mcl_ocean:dead_fire_coral_fan +mcl_walls:brick_13 +mcl_deepslate:deepslatebrickswall_7 +mcl_farming:wheat_5 +mcl_colorblocks:glazed_terracotta_pillar_white +mcl_mangrove:mangrove_stripped_bark +mcl_smoker:smoker_active +mesecons_solarpanel:solar_panel_inverted_off +mcl_core:acaciawood +mcl_bamboo:bamboo_mosaic +mcl_crimson:crimson_trapdoor +mcl_compressed_blocks:septuple_compressed_cobblestone +mcl_core:stripped_oak_bark +mcl_core:birchtree +mesecons_pressureplates:pressure_plate_sprucewood_on +mcl_walls:diorite_21 +xpanes:pane_gray +mcl_farming:soil +mcl_mangrove:mangrove_wood +mcl_stairs:stair_tree_bark_outer +mcl_farming:beetroot_2 +mcl_farming:melontige_linked_r +mcl_deepslate:deepslatepolishedwall_1 +mcl_stairs:slab_stone_rough +mcl_colorblocks:hardened_clay_red +mcl_stairs:stair_sprucetree_bark_inner +mcl_walls:netherbrick_6 +mcl_stairs:stair_end_bricks +mcl_blackstone:basalt +mcl_blackstone:soul_torch +mcl_beacons:beacon_beam +mcl_stairs:slab_quartz_smooth +mcl_core:stone_with_lapis +mcl_walls:cobble_10 +mcl_walls:andesite_14 +mcl_farming:potato +mcl_walls:netherbrick_12 +mcl_core:glass_brown +mcl_stairs:slab_warped_hyphae_wood_top +mcl_core:snow_3 +mcl_core:darkwood +mcl_heads:wither_skeleton_wall +mcl_flowers:lily_of_the_valley +mcl_campfires:campfire +mcl_ocean:tube_coral_block +mcl_mushrooms:red_mushroom_block_cap_001011 +mcl_stairs:stair_mud_brick_outer +mcl_ocean:sea_pickle_1_dead_brain_coral_block +mcl_core:stripped_birch_bark +mcl_mushrooms:red_mushroom_block_cap_010001 +mcl_stairs:stair_purpur_block +mcl_doors:trapdoor +mcl_end:end_rod_blue +mcl_farming:carrot_6 +mcl_stairs:stair_waxed_copper_exposed_cut +mcl_signs:wall_sign_birchwood +mcl_doors:iron_door_t_3 +mcl_minecarts:activator_rail_on +mesecons_solarpanel:solar_panel_off +mcl_signs:standing_sign45_warped_hyphae_wood +mcl_core:goldblock +mcl_mushrooms:brown_mushroom_block_cap_101011 +mcl_doors:iron_door_b_4 +mcl_walls:endbricks_8 +mcl_farming:wheat_6 +mcl_nether:glowstone +mcl_stairs:stair_goldblock_outer +mcl_colorblocks:concrete_powder_black +mcl_portals:end_portal_frame_eye +mcl_doors:wooden_door_t_1 +mcl_chests:yellow_shulker_box_small +mcl_jukebox:jukebox +mcl_core:stone_with_coal +vl_hollow_logs:darktree_hollow +mcl_core:stripped_acacia +mcl_monster_eggs:monster_egg_stone +mcl_doors:birch_door_t_2 +mcl_flowerpots:flower_pot_acaciasapling +mcl_flowers:azure_bluet +mcl_walls:diorite_10 +mclx_fences:red_nether_brick_fence_gate_open +mcl_stairs:stair_jungletree_bark +mcl_deepslate:deepslatetileswall_5 +mcl_stairs:slab_end_bricks +mcl_walls:stonebrickmossy_15 +mcl_stairs:slab_concrete_silver +mcl_stairs:stair_blackstone_polished_outer +mcl_core:glass_gray +mcl_ocean:bubble_coral_fan +mesecons:wire_10111011_off +mcl_walls:endbricks_12 +mesecons_button:button_mangrove_wood_off +mcl_stairs:slab_waxed_copper_oxidized_cut +mcl_end:end_rod_cyan +mcl_core:glass_red +mcl_walls:stonebrickmossy_9 +mcl_core:stonebrick +mcl_deepslate:deepslatebrickswall_10 +mcl_walls:diorite +mcl_farming:pumpkintige_linked_r +mcl_walls:endbricks_13 +mesecons_button:button_wood_on +mcl_ocean:dead_horn_coral_fan +mcl_flowerpots:flower_pot_tulip_white +mcl_core:jungleleaves +mcl_stairs:slab_copper_exposed_cut_double +mcl_farming:melontige_2 +mcl_stairs:stair_purpur_block_outer +mcl_heads:stalker22_5 +mcl_bamboo:scaffolding +mcl_stairs:slab_concrete_green +mcl_mangrove:mangrove_door_b_3 +mcl_flowerpots:flower_pot_tulip_orange +mcl_stairs:stair_junglewood_outer +mcl_chests:trapped_chest_on_right +mcl_walls:cobble_11 +mcl_colorblocks:glazed_terracotta_pillar_grey +mcl_stairs:slab_mud_brick +mcl_deepslate:deepslatepolishedwall_2 +mcl_brewing:stand_001 +mcl_colorblocks:concrete_powder_green +mcl_crimson:warped_wart_block +mcl_ocean:dead_fire_coral_block +mcl_barrels:barrel_open +mcl_villages:structblock +mcl_cherry_blossom:pressure_plate_cherrywood_off +mesecons_pistons:piston_up_pusher_sticky +mcl_core:snow_2 +mcl_wool:pink +mcl_core:acaciasapling +mcl_wool:red +mcl_cake:cake_1 +mcl_fences:jungle_fence_gate +mcl_crimson:warped_door_b_1 +mcl_stairs:slab_prismarine_dark +mcl_beehives:beehive +mcl_stairs:stair_deepslate_bricks +mcl_cake:cake_6 +mcl_beds:respawn_anchor_charged_3 +mcl_beds:bed_white_top +mesecons_torch:mesecon_torch_off_wall +mcl_beds:bed_light_blue_bottom +mcl_beds:bed_lime_top +mcl_beds:bed_pink_top +mcl_beds:bed_pink_bottom +mcl_cocoas:cocoa_3 +mcl_beds:bed_brown_top +mcl_beds:bed_brown_bottom +mcl_beds:bed_purple_top +mcl_maps:filled_map_mcl_skins_base_18D471DFF_male_crea +mcl_loom:loom +mcl_beds:bed_orange_top +mcl_cherry_blossom:cherry_door_b_4 +mcl_beds:bed_orange_bottom +mcl_deepslate:deepslatecobbledwall_4 +mcl_beds:bed_green_top +mcl_crimson:warped_hyphae_bark +mcl_brewing:stand_000 +mcl_beds:bed_green_bottom +mcl_beds:bed_yellow_top +mcl_beds:bed_yellow_bottom +mcl_beds:bed_black_top +mcl_core:light_6 +mcl_beds:bed_silver_bottom +mcl_signs:standing_sign_warped_hyphae_wood +mcl_beds:bed_grey_top +mcl_monster_eggs:monster_egg_stonebrickmossy +mcl_beds:bed_cyan_top +mcl_beds:bed_blue_bottom +mcl_nether:nether_wart_2 +mcl_doors:acacia_door_t_2 +mcl_beds:bed_red_bottom +mcl_books:bookshelf +mcl_stairs:slab_bamboo_mosaic_top +mesecons_torch:mesecon_torch_on_wall +mcl_doors:iron_door_t_4 +mcl_walls:endbricks_9 +mesecons_solarpanel:solar_panel_on +mesecons_button:button_bamboo_on +mcl_beacons:beacon +mesecons_button:button_bamboo_off +mcl_stairs:stair_ironblock_inner +mcl_stairs:slab_bamboo_plank_double +mcl_meshhand:mcl_skins_base_1EEB592FF_female_crea +mcl_signs:standing_sign67_5_bamboo +mcl_signs:wall_sign_bamboo +mcl_bamboo:pressure_plate_bamboo_wood_on +mcl_copper:block_exposed_cut +mcl_bamboo:bamboo_fence_gate +mcl_stairs:slab_quartz_smooth_top +mcl_core:redsandstone +mcl_doors:wooden_door_b_4 +mcl_stairs:slab_bamboo_plank_top +mcl_farming:pumpkintige_linked_b +mcl_stairs:slab_bamboo_plank +mcl_mangrove:mangrove_door_t_4 +mcl_stairs:stair_bamboo_plank_inner +mcl_stairs:stair_bamboo_plank_outer +mcl_colorblocks:hardened_clay_pink +mcl_doors:dark_oak_door_t_1 +mesecons_pressureplates:pressure_plate_darkwood_on +mcl_stairs:slab_bamboo_stripped_top +mcl_stairs:stair_cobble_inner +mcl_stairs:slab_bamboo_stripped +mesecons:wire_10110011_off +mcl_stairs:slab_bamboo_block_double +mcl_stairs:slab_bamboo_block +mcl_amethyst:budding_amethyst_block +mcl_stairs:stair_bamboo_block_inner +mcl_stairs:stair_bamboo_block_outer +mcl_core:stonebrickcarved +mcl_stairs:stair_bamboo_block +mcl_bamboo:bamboo_trapdoor_ladder +mcl_bamboo:bamboo_trapdoor_open +mcl_stairs:slab_prismarine_brick +xpanes:pane_silver_flat +mcl_bamboo:bamboo_trapdoor +mcl_colorblocks:concrete_powder_white +mcl_bamboo:bamboo_door_b_3 +mcl_bamboo:bamboo_door_t_2 +mcl_crimson:crimson_hyphae_bark +mcl_stairs:stair_cherrywood_outer +mcl_walls:cobble_7 +mcl_mangrove:mangrove_roots +mcl_bamboo:bamboo_door_t_1 +mcl_bamboo:bamboo_door_b_1 +mcl_ocean:tube_coral_fan +mcl_stairs:slab_concrete_grey +mcl_stairs:slab_concrete_yellow +mcl_bamboo:bamboo_plank +mcl_bamboo:bamboo_block_stripped +mcl_bamboo:bamboo_endcap +mcl_blackstone:wall +mcl_blackstone:wall_15 +mcl_blackstone:wall_11 +mcl_grindstone:grindstone +mcl_mushrooms:red_mushroom_block_cap_111100 +mcl_blackstone:wall_8 +mcl_blackstone:wall_4 +mcl_nether:soul_sand +mcl_blackstone:wall_3 +mcl_blackstone:wall_2 +mcl_blackstone:wall_1 +mcl_blackstone:blackstone_chiseled_polished +mcl_stairs:slab_blackstone_brick_polished_top +mcl_stairs:slab_blackstone_brick_polished +mcl_stairs:slab_blackstone_chiseled_polished_double +mcl_stairs:slab_blackstone_chiseled_polished +mcl_stairs:slab_blackstone_polished +mcl_walls:netherbrick_14 +mcl_stairs:slab_darktree_bark +mcl_blackstone:soul_soil +mcl_core:light_14 +mcl_doors:birch_door_t_1 +mcl_deepslate:deepslate_bricks_cracked +mcl_blackstone:quartz_brick +mcl_blackstone:blackstone_brick_polished +xpanes:pane_magenta_flat +mcl_fences:fence +mcl_blackstone:wall_0 +mcl_blackstone:blackstone_polished +mcl_stairs:stair_ironblock +mcl_heads:steve +mcl_blackstone:basalt_polished +mcl_blackstone:blackstone_gilded +mcl_stairs:slab_concrete_light_blue_double +mcl_stairs:slab_concrete_light_blue +mcl_stairs:stair_concrete_light_blue_inner +mcl_stairs:stair_concrete_light_blue +mcl_amethyst:tinted_glass +mcl_stairs:slab_concrete_lime_double +mcl_stairs:slab_concrete_lime_top +mcl_walls:cobble_12 +mcl_stairs:slab_concrete_lime +mcl_stairs:stair_concrete_lime_inner +mcl_deepslate:deepslatetileswall_4 +mcl_stairs:stair_concrete_lime_outer +mcl_stairs:stair_concrete_lime +mcl_stairs:slab_concrete_pink_double +mesecons_button:button_warped_hyphae_wood_off +mcl_portals:end_portal_frame +mesecons_walllever:wall_lever_off +mcl_stairs:slab_concrete_pink_top +mcl_stairs:slab_concrete_pink +mcl_stairs:stair_concrete_pink_inner +mcl_deepslate:deepslatebrickswall_11 +mcl_stairs:stair_concrete_pink_outer +mcl_core:glass_pink +xpanes:pane_purple_flat +mcl_stairs:slab_concrete_brown_double +mcl_farming:wheat_3 +mcl_stairs:slab_concrete_brown_top +mcl_stairs:stair_concrete_brown_inner +vl_hollow_logs:mangrove_stripped_hollow +mcl_stairs:stair_concrete_brown_outer +mcl_stairs:stair_concrete_brown +mcl_stairs:slab_concrete_purple_double +mesecons_pistons:piston_down_pusher_normal +mcl_stairs:slab_concrete_purple_top +mcl_stairs:stair_concrete_purple_inner +mcl_stairs:stair_concrete_purple_outer +mcl_stairs:slab_acaciawood +mcl_stairs:slab_concrete_orange_double +mcl_stairs:slab_concrete_orange_top +mcl_stairs:stair_concrete_orange_inner +mcl_walls:prismarine_8 +mcl_stairs:stair_concrete_orange_outer +mcl_ocean:horn_coral_block +mcl_nether:nether_wart_block +mcl_mushrooms:brown_mushroom_block_cap_011000 +mcl_stairs:stair_copper_weathered_cut +mcl_deepslate:deepslatepolishedwall_11 +mcl_stairs:slab_concrete_magenta_top +mcl_core:light_8 +mcl_stairs:slab_concrete_magenta +mcl_mangrove:mangrove_door_b_2 +mcl_deepslate:deepslate_cobbled +mcl_walls:stonebrick_15 +mcl_stairs:stair_concrete_grey +mcl_stairs:slab_concrete_blue_double +mcl_stairs:slab_concrete_blue_top +mcl_stairs:slab_concrete_blue +mcl_doors:acacia_trapdoor +mcl_stairs:stair_concrete_blue_inner +mcl_stairs:stair_concrete_blue_outer +mcl_stairs:slab_concrete_cyan_double +mcl_stairs:slab_concrete_cyan_top +mcl_farming:pumpkin_3 +mcl_doors:dark_oak_door_b_4 +mcl_farming:melontige_linked_l +mcl_stairs:stair_concrete_cyan_inner +mcl_stairs:stair_concrete_cyan_outer +mcl_stairs:stair_concrete_cyan +mcl_stairs:slab_concrete_green_double +mcl_stairs:slab_concrete_green_top +mcl_stairs:stair_concrete_green_inner +mcl_stairs:stair_concrete_green_outer +mcl_core:light_4 +mcl_comparators:comparator_on_sub +mcl_stairs:stair_concrete_green +mcl_stairs:slab_concrete_yellow_double +mcl_stairs:slab_concrete_yellow_top +mcl_stairs:stair_concrete_yellow_inner +mcl_stairs:stair_concrete_yellow_outer +mcl_walls:mudbrick_9 +mcl_heads:stalker67_5 +mcl_stairs:slab_concrete_red_double +mcl_compressed_blocks:double_compressed_cobblestone +mcl_doors:birch_door_b_1 +mcl_stairs:slab_concrete_red_top +mcl_walls:netherbrick_0 +mcl_stairs:slab_concrete_red +mcl_heads:steve_wall +mcl_cherry_blossom:stripped_cherrytree +mcl_colorblocks:concrete_white +mcl_stairs:slab_concrete_black_double +mcl_core:andesite +mcl_stairs:slab_concrete_black_top +mcl_ocean:sea_pickle_4_off_dead_brain_coral_block +mcl_mushrooms:brown_mushroom_block_stem +mcl_walls:brick_5 +mcl_mangrove:mangrove_wood_fence +mcl_stairs:stair_concrete_black_inner +mcl_walls:andesite_4 +mcl_stairs:stair_concrete_black_outer +mcl_walls:sandstone_14 +mcl_core:spruceleaves_orphan +mcl_mushrooms:red_mushroom_block_cap_110101 +mcl_wool:green +mcl_flowerpots:flower_pot_mushroom_red +mcl_stairs:stair_concrete_silver_inner +mcl_stairs:stair_concrete_silver_outer +mcl_stairs:slab_stonebrick +mcl_stairs:stair_concrete_silver +mcl_stairs:slab_concrete_grey_double +mcl_flowerpots:flower_pot_bamboo_plant +mcl_walls:cobble_0 +mcl_stairs:stair_concrete_grey_inner +mcl_stairs:stair_concrete_magenta +mcl_core:leaves_orphan +mesecons_pistons:piston_pusher_sticky +mcl_stairs:slab_concrete_white_top +mcl_mushrooms:brown_mushroom_block_cap_111010 +mcl_stairs:slab_concrete_white +mcl_stairs:stair_concrete_white_inner +mesecons:wire_11001000_off +mcl_stairs:stair_birchwood_inner +mcl_copper:waxed_block_exposed +mcl_stairs:stair_stonebrickcracked_outer +mcl_stairs:stair_ironblock_outer +mcl_core:glass_lime +mcl_blackstone:basalt_smooth +mcl_stairs:slab_ironblock_double +mcl_end:end_rod_brown +mcl_cocoas:cocoa_2 +mcl_stairs:slab_ironblock_top +mcl_stairs:slab_ironblock +mcl_stairs:slab_goldblock_top +mcl_doors:dark_oak_door_t_3 +mcl_mushrooms:brown_mushroom_block_cap_010101 +mcl_stairs:stair_lapisblock +mcl_walls:andesite_16 +mcl_stairs:slab_lapisblock_top +mcl_stairs:slab_lapisblock +mcl_barrels:barrel_closed +mcl_deepslate:deepslatepolishedwall_3 +mcl_heads:wither_skeleton +mcl_stairs:slab_darktree_bark_double +mcl_stairs:stair_bamboo_stripped_inner +mcl_stairs:stair_blackstone +mcl_core:redsandstonesmooth +mcl_amethyst:large_amethyst_bud +mcl_stairs:stair_birchtree_bark_inner +mcl_walls:redsandstone_14 +mcl_deepslate:deepslatecobbledwall_5 +mesecons_pressureplates:pressure_plate_mangrove_wood_off +mcl_stairs:stair_birchtree_bark +mcl_stairs:slab_sprucetree_bark_double +mcl_walls:endbricks_16 +mcl_stairs:stair_sprucetree_bark_outer +mcl_nether:quartz_chiseled +mcl_stairs:slab_acaciatree_bark_double +mcl_stairs:slab_acaciatree_bark_top +mcl_walls:stonebrickmossy_5 +mcl_stairs:slab_acaciatree_bark +mcl_chests:dark_grey_shulker_box +mcl_target:target_off +mcl_stairs:stair_acaciatree_bark_inner +mcl_heads:zombie45 +mcl_core:sprucewood +mcl_stairs:stair_acaciatree_bark_outer +mcl_ocean:fire_coral +mcl_stairs:stair_acaciatree_bark +mcl_stairs:stair_jungletree_bark_outer +mcl_stairs:slab_tree_bark_double +mcl_stairs:slab_tree_bark_top +mcl_stairs:slab_tree_bark +mcl_walls:mudbrick_5 +mcl_colorblocks:glazed_terracotta_light_blue +mcl_colorblocks:concrete_powder_light_blue +mcl_stairs:slab_nether_brick_double +mcl_colorblocks:hardened_clay_light_blue +mcl_core:diamondblock +mcl_colorblocks:concrete_lime +mcl_colorblocks:concrete_powder_lime +mcl_colorblocks:glazed_terracotta_pillar_pink +mcl_colorblocks:concrete_pink +mcl_stairs:slab_purpur_block_top +mcl_mushrooms:red_mushroom_block_cap_011000 +mcl_stairs:slab_bamboo_stripped_double +mcl_core:acacialeaves +mcl_core:glass_white +mcl_core:ladder +mcl_colorblocks:glazed_terracotta_brown +mcl_end:purpur_pillar +mcl_colorblocks:concrete_powder_brown +mcl_colorblocks:glazed_terracotta_pillar_purple +mcl_fences:birch_fence +mcl_mushrooms:brown_mushroom_block_cap_111110 +mcl_colorblocks:concrete_powder_purple +mcl_colorblocks:glazed_terracotta_pillar_orange +mcl_colorblocks:concrete_powder_orange +mcl_stairs:slab_junglewood +mcl_stairs:slab_copper_oxidized_cut_double +mcl_walls:prismarine_14 +xpanes:pane_brown +mcl_colorblocks:glazed_terracotta_pillar_blue +mcl_stairs:stair_waxed_copper_weathered_cut_outer +mcl_colorblocks:glazed_terracotta_blue +mcl_walls:diorite_8 +mcl_colorblocks:concrete_blue +mcl_stairs:stair_prismarine_inner +mcl_colorblocks:glazed_terracotta_pillar_cyan +mcl_colorblocks:glazed_terracotta_cyan +mcl_colorblocks:concrete_cyan +mcl_colorblocks:hardened_clay_cyan +mcl_colorblocks:glazed_terracotta_pillar_green +mcl_stairs:stair_prismarine_brick +mcl_colorblocks:glazed_terracotta_green +mcl_colorblocks:concrete_green +mcl_stairs:slab_junglewood_double +mcl_colorblocks:glazed_terracotta_yellow +mcl_core:junglewood +mcl_colorblocks:concrete_powder_yellow +mcl_stairs:stair_birchwood +mcl_colorblocks:glazed_terracotta_pillar_red +mcl_colorblocks:glazed_terracotta_red +mcl_walls:stonebrick +mcl_colorblocks:glazed_terracotta_black +mcl_colorblocks:hardened_clay_black +mcl_colorblocks:concrete_silver +mcl_colorblocks:concrete_grey +mcl_colorblocks:concrete_powder_grey +mcl_walls:mossycobble_10 +mcl_doors:iron_door_b_2 +mcl_colorblocks:hardened_clay_grey +mcl_colorblocks:glazed_terracotta_white +mcl_stairs:stair_concrete_red_outer +mcl_bamboo:bamboo_door_t_4 +mcl_colorblocks:hardened_clay +mcl_minecarts:golden_rail_on +xpanes:pane_cyan +mcl_walls:cobble_13 +mcl_fences:dark_oak_fence_gate +mcl_composters:composter_ready +mcl_walls:mossycobble_16 +mcl_composters:composter_7 +mcl_composters:composter_4 +mcl_composters:composter_3 +mcl_walls:mossycobble_9 +mcl_hoppers:hopper_side +mcl_crimson:stripped_warped_hyphae +mcl_hoppers:hopper_disabled +mcl_chests:white_shulker_box +mcl_hoppers:hopper +mcl_signs:standing_sign67_5_sprucewood +mcl_cauldrons:cauldron_3_lava +mcl_dispensers:dispenser_down +mcl_farming:pumpkintige_linked_t +mcl_signs:standing_sign22_5_junglewood +mcl_droppers:dropper +vl_hollow_logs:warped_hyphae_hollow +vl_hollow_logs:crimson_hyphae_hollow +mesecons_lightstone:lightstone_off_cyan +vl_hollow_logs:mangrove_tree_hollow +mcl_stairs:slab_nether_brick_top +vl_hollow_logs:stripped_cherrytree_hollow +vl_hollow_logs:cherrytree_hollow +mcl_walls:sandstone_8 +vl_hollow_logs:tree_hollow +mcl_walls:granite_0 +mcl_fences:nether_brick_fence +vl_hollow_logs:stripped_spruce_hollow +vl_hollow_logs:sprucetree_hollow +vl_hollow_logs:stripped_jungle_hollow +vl_hollow_logs:jungletree_hollow +mcl_wool:purple_carpet +mcl_walls:prismarine_12 +mcl_sculk:sculk +mcl_core:glass_cyan +vl_hollow_logs:stripped_birch_hollow +mcl_wool:white_carpet +mesecons_button:button_cherrywood_on +mcl_deepslate:deepslatebrickswall_12 +mcl_stairs:slab_waxed_copper_weathered_cut_top +mesecons_button:button_cherrywood_off +mcl_cherry_blossom:cherry_fence_gate_open +mcl_observers:observer_off +mcl_cherry_blossom:cherry_fence +mcl_signs:standing_sign67_5_cherrywood +mcl_signs:standing_sign45_cherrywood +mcl_crimson:crimson_hyphae +mcl_signs:standing_sign22_5_cherrywood +mcl_signs:standing_sign_cherrywood +mcl_crimson:crimson_door_b_3 +mcl_signs:wall_sign_cherrywood +mcl_doors:jungle_door_b_1 +mcl_stairs:slab_cherrywood_top +mcl_stairs:slab_cherrywood +mcl_stairs:slab_deepslate_bricks_double +mcl_stairs:stair_cherrywood_inner +mcl_bamboo:bamboo_door_b_2 +mcl_walls:stonebrickmossy_10 +mcl_stairs:stair_cherrywood +mesecons_lightstone:lightstone_on_green +mesecons:wire_11110101_on +mcl_walls:prismarine_9 +mcl_farming:wheat_4 +mcl_cherry_blossom:cherry_trapdoor +mcl_ocean:dead_brain_coral_fan +mcl_core:light_9 +mcl_cherry_blossom:cherry_door_t_4 +mcl_cherry_blossom:cherry_door_t_3 +mcl_cherry_blossom:cherry_door_t_1 +mcl_cherry_blossom:cherrysapling +mcl_stairs:slab_copper_oxidized_cut +mcl_stairs:stair_waxed_copper_cut +mcl_cherry_blossom:cherrytree_bark +mcl_stairs:stair_waxed_copper_oxidized_cut +mcl_stairs:stair_mossycobble_outer +mcl_chests:chest_left +mcl_end:end_rod_pink +mcl_ocean:dead_bubble_coral_fan +mcl_deepslate:deepslatebrickswall_16 +mesecons_walllever:wall_lever_on +mcl_copper:waxed_block_weathered +mcl_stairs:stair_deepslate_tiles +vl_hollow_logs:stripped_dark_oak_hollow +mesecons:wire_01110000_off +mesecons_button:button_sprucewood_off +mesecons_button:button_birchwood_off +mcl_deepslate:deepslatecobbledwall_14 +mesecons:wire_10011001_on +mcl_walls:stonebrick_16 +mesecons:wire_10000000_off +mesecons_button:button_darkwood_off +mesecons_button:button_stone_on +mesecons:wire_11110100_on +mcl_stairs:stair_waxed_copper_exposed_cut_inner +mesecons:wire_01000000_on +mesecons:wire_11111010_off +mcl_flowers:double_fern +mcl_walls:andesite_13 +mcl_stairs:slab_waxed_copper_cut_top +mesecons_lightstone:lightstone_off_pink +mcl_stairs:stair_stonebrickmossy +mesecons:wire_11111000_on +mesecons_pressureplates:pressure_plate_warped_hyphae_wood_on +mcl_raw_ores:raw_iron_block +mcl_stairs:slab_darktree_bark_top +mcl_farming:pumpkin_2 +mesecons_pressureplates:pressure_plate_sprucewood_off +mcl_core:dirt_with_grass_snow +mcl_cauldrons:cauldron_2r +mesecons:wire_01010000_on +mcl_walls:diorite_9 +mcl_signs:standing_sign45_sprucewood +mcl_mushrooms:brown_mushroom_block_cap_010111 +mcl_doors:birch_door_b_4 +mcl_farming:potato_5 +mcl_honey:honeycomb_block +mcl_mushrooms:red_mushroom_block_cap_000111 +mcl_farming:pumpkintige_unconnect +mcl_maps:filled_map_mcl_skins_character_1_female_crea +mcl_mushrooms:brown_mushroom_block_cap_100111 +mcl_nether:quartz_ore +mcl_chests:chest_small +xpanes:pane_lime_flat +mcl_mushrooms:brown_mushroom_block_cap_011101 +mesecons_pressureplates:pressure_plate_junglewood_off +mcl_core:vine +mcl_heads:skeleton67_5 +mcl_signs:wall_sign_junglewood +mesecons_pistons:piston_normal_off +mesecons_pressureplates:pressure_plate_acaciawood_off +mesecons:wire_01100000_off +xpanes:pane_light_blue +mcl_walls:prismarine_15 +mesecons_lightstone:lightstone_on_magenta +mesecons:wire_11111111_off +mcl_doors:spruce_door_t_4 +mesecons:wire_11110111_off +mesecons:wire_11110111_on +mcl_walls:andesite_9 +mesecons:wire_01110111_on +mesecons:wire_11111011_off +mcl_core:lava_flowing +mcl_wool:lime_carpet +mesecons:wire_11110011_on +mesecons:wire_01110011_on +mcl_stairs:stair_andesite_inner +mesecons:wire_10110011_on +mesecons:wire_00110011_off +mcl_mangrove:mangrove_door_t_1 +mesecons:wire_11111101_off +mcl_observers:observer_down_off +mesecons:wire_11111101_on +mesecons:wire_11011101_off +mesecons:wire_11011101_on +mcl_core:light_5 +mcl_core:sandstonecarved +mesecons:wire_01110101_on +mcl_cocoas:cocoa_1 +mesecons:wire_11010101_off +mcl_walls:stonebrickmossy_4 +mesecons:wire_11010101_on +mcl_mushrooms:red_mushroom_block_cap_011001 +mesecons:wire_01010101_off +mcl_stairs:stair_granite_smooth +mcl_stairs:stair_diorite_outer +mcl_lectern:lectern +mcl_stairs:slab_mud_brick_top +mesecons:wire_11110001_off +mesecons:wire_11110001_on +mesecons:wire_00000000_off +mcl_core:reeds +mesecons_delayer:delayer_off_1 +mcl_farming:carrot_3 +mcl_mushrooms:red_mushroom_block_cap_011011 +mcl_doors:acacia_door_b_2 +mcl_wool:cyan_carpet +mesecons:wire_00110001_off +mcl_stairs:stair_wood_outer +mesecons:wire_11010001_off +mcl_stairs:slab_end_bricks_top +mesecons:wire_01010001_off +mcl_walls:netherbrick_1 +mcl_farming:carrot_4 +mesecons:wire_10010001_off +mesecons:wire_10010001_on +mcl_wool:grey_carpet +mesecons:wire_11111110_on +mesecons:wire_11101110_off +mcl_mushrooms:red_mushroom_block_cap_111000 +mesecons:wire_11101110_on +mesecons:wire_11110110_off +mesecons:wire_11110110_on +mcl_heads:skeleton22_5 +mcl_sponges:sponge +mcl_walls:rednetherbrick_9 +mesecons:wire_11100110_off +mcl_walls:andesite_7 +mesecons:wire_11100110_on +mcl_deepslate:deepslatecobbledwall_6 +mesecons:wire_01100110_on +mesecons:wire_11111010_on +mcl_mushrooms:brown_mushroom_block_cap_011011 +mesecons:wire_10111010_off +mcl_stairs:stair_concrete_orange +mcl_ocean:prismarine +mesecons:wire_10111010_on +mcl_cherry_blossom:cherryleaves +mesecons:wire_11101010_on +mesecons:wire_10101010_on +mesecons:wire_11110010_off +mcl_beehives:bee_nest_5 +mcl_doors:jungle_door_t_2 +mesecons:wire_11110010_on +mesecons:wire_01110010_off +mesecons_pressureplates:pressure_plate_polished_blackstone_off +mesecons_pistons:piston_up_sticky_off +mcl_end:end_rod_white +mcl_stairs:slab_goldblock_double +mesecons:wire_11100010_off +mcl_stairs:stair_copper_weathered_cut_inner +mcl_core:leaves +mcl_chests:brown_shulker_box +mesecons:wire_01100010_on +mcl_walls:mudbrick_21 +mesecons:wire_10100010_on +mesecons:wire_00100010_off +mesecons:wire_00100010_on +mesecons:wire_11111100_off +mcl_stairs:stair_crimson_hyphae_wood +mesecons:wire_11111100_on +mesecons:wire_11011100_off +mesecons:wire_11011100_on +mcl_chests:pink_shulker_box +mesecons:wire_11101100_off +mesecons:wire_11101100_on +mcl_anvils:anvil +mcl_stairs:stair_darkwood_outer +mcl_doors:iron_door_b_3 +mcl_stairs:stair_darkwood +mcl_mushrooms:red_mushroom_block_cap_111111 +mcl_deepslate:deepslatetileswall_2 +mesecons:wire_01110100_on +mcl_stairs:slab_sprucewood +mcl_doors:dark_oak_door_b_3 +mcl_core:stripped_dark_oak_bark +mesecons:wire_01010100_on +mesecons:wire_11100100_off +mesecons:wire_01100100_off +mcl_colorblocks:hardened_clay_green +mesecons:wire_11000100_on +mesecons_pistons:piston_pusher_normal +mcl_doors:spruce_door_t_2 +mcl_chests:ender_chest +mesecons_pressureplates:pressure_plate_stone_off +mcl_flowers:tulip_red +mcl_signs:standing_sign45 +mcl_mushrooms:red_mushroom_block_cap_001010 +mesecons:wire_01000100_on +mcl_walls:stonebrick_8 +mcl_walls:andesite +mcl_walls:mossycobble_15 +mesecons:wire_11111000_off +mesecons:wire_01100100_on +mcl_walls:mudbrick_8 +mcl_doors:acacia_door_b_1 +mcl_core:andesite_smooth +mcl_colorblocks:glazed_terracotta_pillar_light_blue +mcl_stairs:stair_blackstone_outer +mcl_walls:cobble_2 +mcl_core:podzol +mcl_walls:andesite_12 +mcl_farming:wheat_1 +mcl_mangrove:mangrove_door_b_4 +mcl_chests:dark_green_shulker_box_small +mcl_walls:cobble_16 +mcl_stairs:stair_copper_oxidized_cut +mcl_doors:acacia_door_b_4 +mcl_walls:stonebrick_11 +mcl_stairs:stair_quartz_smooth_inner +mcl_walls:rednetherbrick_11 +mcl_stairs:slab_red_nether_brick_top +mcl_chests:trapped_chest_on +mesecons:wire_11001000_on +mesecons:wire_10001000_off +mcl_itemframes:glow_item_frame +mesecons:wire_11110000_on +mesecons:wire_01110000_on +mcl_deepslate:deepslatebrickswall_21 +mcl_doors:jungle_door_b_4 +mcl_ocean:dead_horn_coral_block +mcl_walls:diorite_12 +mcl_sponges:sponge_wet +mesecons:wire_00110000_off +mcl_doors:spruce_door_b_4 +mcl_maps:filled_map_mcl_skins_base_1EEB592FF_female_crea +mcl_walls:brick_1 +mcl_walls:endbricks_1 +mcl_deepslate:deepslatepolishedwall_21 +mesecons:wire_11100000_on +mcl_walls:stonebrick_14 +mcl_walls:prismarine_11 +mesecons:wire_01100000_on +mesecons:wire_10100000_off +xpanes:pane_cyan_flat +mcl_deepslate:deepslate_with_lapis +mcl_colorblocks:glazed_terracotta_lime +mesecons:wire_00100000_off +mesecons:wire_11000000_off +mesecons:wire_10000000_on +mcl_crimson:crimson_fungus +mcl_deepslate:deepslatetileswall_1 +mcl_fences:acacia_fence +mcl_tnt:tnt +mesecons:wire_01010100_off +mcl_core:birchtree_bark +mcl_farming:sweet_berry_bush_0 +mcl_dispensers:dispenser_up +mesecons:wire_10111011_on +mcl_crimson:warped_door_t_3 +mcl_colorblocks:concrete_powder_magenta +mcl_ocean:seagrass_sand +mcl_cake:cake_3 +mcl_chests:dark_green_shulker_box +mcl_doors:spruce_door_b_2 +xpanes:pane_magenta +mcl_doors:birch_trapdoor +mcl_chests:violet_shulker_box +mcl_walls:sandstone_10 +mcl_wool:blue +mcl_meshhand:mcl_skins_base_18D471DFF_male_crea +mcl_deepslate:deepslatebrickswall_13 +mcl_walls:netherbrick_2 +vl_hollow_logs:stripped_oak_hollow +mcl_mushrooms:red_mushroom_block_cap_011101 +mcl_blast_furnace:blast_furnace +mcl_chests:trapped_chest_right +mcl_chests:brown_shulker_box_small +mcl_doors:birch_door_b_3 +mcl_signs:wall_sign_mangrove_wood +mcl_chests:dark_grey_shulker_box_small +mesecons_pistons:piston_down_sticky_on +mcl_core:light_3 +mcl_signs:standing_sign_sprucewood +mcl_walls:andesite_10 +mcl_stairs:slab_mangrove_wood +mcl_doors:spruce_trapdoor_open +mcl_walls:netherbrick_16 +mcl_doors:iron_door_t_1 +mcl_deepslate:deepslatebrickswall_3 +mcl_farming:beetroot +mesecons_lightstone:lightstone_off_black +mcl_stairs:stair_lapisblock_inner +mcl_walls:diorite_6 +mcl_stairs:stair_granite_outer +mcl_meshhand:mcl_skins_base_18D471DFF_female_crea +mcl_cauldrons:cauldron_1 +mcl_crimson:warped_trapdoor +mcl_core:ice +mcl_chests:lightblue_shulker_box +mesecons:wire_11010000_off +mcl_doors:spruce_door_b_3 +mesecons:wire_10110001_off +mcl_core:coarse_dirt +mcl_fire:fire +mcl_farming:potato_4 +mcl_mushrooms:brown_mushroom_block_cap_110110 +mcl_mushrooms:red_mushroom_block_cap_000000 +mesecons:wire_10100010_off +mcl_chests:chest_right +mcl_flowers:double_fern_top +mcl_mushrooms:brown_mushroom_block_cap_100100 +mcl_colorblocks:hardened_clay_blue +mcl_composters:composter +mcl_stairs:stair_sandstonesmooth2_outer +mcl_walls:mossycobble_8 +mcl_core:stripped_acacia_bark +mcl_beds:bed_black_bottom +mcl_signs:standing_sign67_5_acaciawood +mclx_fences:nether_brick_fence_gate +mcl_maps:filled_map_mcl_skins_base_18D471DFF_female_surv +mcl_banners:hanging_banner +mcl_lightning_rods:rod +mcl_walls:stonebrickmossy_11 +mcl_doors:iron_trapdoor_open +mcl_core:dirt +mesecons_lightstone:lightstone_on_purple +mcl_walls:cobble_5 +mcl_walls:brick_4 +mcl_deepslate:deepslatepolishedwall_13 +mcl_stairs:stair_deepslate_tiles_outer +mcl_beehives:beehive_5 +mcl_flowerpots:flower_pot_allium +mcl_core:granite_smooth +mcl_stairs:slab_granite_smooth_top +mcl_mushrooms:red_mushroom_block_cap_001110 +mcl_deepslate:deepslatetileswall_14 +mcl_walls:granite_2 +mcl_stairs:stair_acaciawood_outer +mcl_ocean:dead_brain_coral_block +mcl_walls:mudbrick_4 +mcl_maps:filled_map_mcl_skins_base_1EEB592FF_male_surv +mcl_stairs:slab_concrete_black +mcl_mushrooms:red_mushroom_block_cap_111101 +mcl_deepslate:deepslate_with_diamond +mcl_nether:nether_lava_source +mcl_mushrooms:brown_mushroom_block_cap_110011 +mcl_farming:carrot_2 +mcl_mushrooms:red_mushroom_block_cap_010010 +mcl_blast_furnace:blast_furnace_active +mcl_core:sandstonesmooth2 +mcl_mushrooms:red_mushroom_block_cap_001001 +mcl_end:end_stone +mcl_stairs:stair_deepslate_polished +mcl_mushrooms:brown_mushroom_block_cap_110111 +mcl_core:frosted_ice_2 +mcl_stairs:stair_birchtree_bark_outer +mcl_walls:andesite_6 +xpanes:pane_brown_flat +mcl_walls:endbricks_4 +mcl_stairs:stair_mossycobble +mcl_colorblocks:glazed_terracotta_magenta +mcl_stairs:slab_quartz_smooth_double +mcl_mushrooms:brown_mushroom_block_cap_111001 +mcl_mushrooms:brown_mushroom_block_cap_111000 +mcl_doors:dark_oak_trapdoor +mcl_stairs:stair_concrete_pink +mcl_stairs:slab_warped_hyphae_wood_double +mcl_nether:netherrack +mcl_doors:iron_trapdoor_ladder +mcl_stairs:slab_darkwood_double +mcl_stairs:stair_granite +mcl_signs:standing_sign_junglewood +mcl_mushrooms:red_mushroom_block_cap_100010 +mcl_mushrooms:brown_mushroom_block_cap_111111 +mcl_signs:standing_sign67_5_darkwood +mcl_walls:redsandstone_16 +mcl_nether:netheriteblock +mcl_mushrooms:brown_mushroom_block_cap_110001 +mesecons:wire_01100010_off +mcl_core:stone_with_emerald +mcl_heads:zombie +mcl_walls:redsandstone_9 +ignore +mcl_mushrooms:brown_mushroom_block_cap_010001 +mcl_mushrooms:red_mushroom_block_cap_100111 +mcl_mushrooms:brown_mushroom_block_cap_101010 +mcl_meshhand:mcl_skins_base_1B47A57FF_male_surv +mcl_chests:trapped_chest +mcl_mushrooms:brown_mushroom_block_cap_011100 +mesecons_pressureplates:pressure_plate_crimson_hyphae_wood_off +mcl_maps:filled_map_mcl_skins_base_1B47A57FF_female_surv +mcl_mushrooms:brown_mushroom_block_cap_110010 +mcl_crimson:warped_fence +mcl_mushrooms:brown_mushroom_block_cap_100010 +mcl_mushrooms:brown_mushroom_block_cap_100001 +mcl_mushrooms:brown_mushroom_block_cap_000000 +mcl_mushrooms:red_mushroom_block_cap_110000 +mcl_fences:spruce_fence_gate_open +mesecons:wire_11010000_on +mcl_mushrooms:red_mushroom_block_cap_010101 +mcl_deepslate:deepslatecobbledwall_7 +mcl_nether:quartz_pillar +mcl_mushrooms:brown_mushroom_block_cap_100110 +mesecons:wire_11100010_on +mesecons:wire_01110100_off +mcl_stairs:slab_diorite_smooth_top +mcl_stairs:slab_concrete_magenta_double +mesecons:wire_00000000_on +mcl_flowerpots:flower_pot_crimson_fungus +mesecons:wire_11000000_on +mcl_fences:spruce_fence_gate +mcl_mushrooms:brown_mushroom_block_cap_001111 +mesecons:wire_10100000_on +mcl_mushrooms:brown_mushroom_block_cap_010100 +mcl_flowers:lilac_top +mcl_mushrooms:brown_mushroom_block_cap_001011 +mcl_flowers:peony_top +mesecons_button:button_stone_off +mcl_doors:dark_oak_trapdoor_open +mcl_doors:spruce_door_t_3 +mcl_flowerpots:flower_pot_cherrysapling +mcl_stairs:slab_deepslate_tiles +mcl_stairs:slab_redsandstonesmooth2_double +mcl_chests:white_shulker_box_small +mcl_stairs:stair_bamboo_mosaic_inner +mesecons:wire_10010000_off +mcl_mushrooms:red_mushroom_block_cap_001100 +mcl_mushrooms:red_mushroom_block_cap_100000 +mcl_end:end_rod_black +mcl_ocean:dead_tube_coral_fan +mcl_doors:spruce_door_b_1 +mesecons:wire_10110000_on +mcl_end:end_rod_silver +mcl_mushrooms:red_mushroom_block_cap_110011 +mcl_mushrooms:brown_mushroom_block_cap_100101 +mesecons:wire_10001000_on +mcl_mangrove:propagule_coarse_dirt +mcl_mushrooms:red_mushroom_block_cap_110111 +mesecons:wire_01010001_on +mcl_fences:acacia_fence_gate +mesecons:wire_10011000_on +mcl_deepslate:deepslate_polished +mcl_doors:iron_door_b_1 +mesecons:wire_00110000_on +mcl_mushrooms:brown_mushroom_block_cap_000001 +mcl_deepslate:deepslate_with_iron +mcl_core:darktree_bark +mcl_stairs:stair_lapisblock_outer +mcl_mushrooms:red_mushroom_block_stem_full +mcl_walls:sandstone_16 +mcl_stairs:stair_stonebrick_outer +mcl_meshhand:mcl_skins_base_1EEB592FF_female_surv +mesecons:wire_10010000_on +mcl_meshhand:mcl_skins_base_1B47A57FF_female_crea +mesecons:wire_10111000_on +mcl_mangrove:mangrove_tree +mcl_walls:cobble_3 +mcl_copper:block_cut +mcl_mushrooms:brown_mushroom_block_cap_010010 +mcl_fences:dark_oak_fence_gate_open +mesecons:wire_11000100_off +mcl_mushrooms:brown_mushroom_block_cap_101111 +mcl_mushrooms:red_mushroom_block_cap_100100 +mcl_cauldrons:cauldron_3r +mcl_stairs:slab_diorite_smooth +mcl_stairs:stair_sprucewood_outer +mcl_stairs:slab_stonebrickmossy_double +mcl_mushrooms:red_mushroom_block_cap_101010 +mesecons:wire_11010100_off +mcl_core:stone_with_redstone +mcl_stairs:slab_stone_double +mcl_stairs:stair_crimson_hyphae_wood_outer +mesecons:wire_11111011_on +mcl_villages:stonebrickcarved +mcl_signs:standing_sign45_birchwood +mcl_mushrooms:brown_mushroom_block_cap_000101 +mcl_doors:dark_oak_door_b_1 +mesecons_pistons:piston_sticky_on +mcl_farming:pumpkin_7 +mcl_walls:andesite_15 +mcl_walls:rednetherbrick_2 +mcl_ocean:dead_horn_coral +mcl_mushrooms:red_mushroom_block_cap_011100 +mcl_cherry_blossom:cherry_trapdoor_open +mesecons:wire_01110101_off +mcl_mushrooms:brown_mushroom_block_cap_101110 +mcl_mushrooms:red_mushroom_block_cap_101001 +mcl_crimson:shroomlight +mesecons:wire_10110010_on +mcl_farming:wheat_2 +mcl_walls:cobble_8 +mcl_ocean:prismarine_brick +mesecons:wire_01110010_on +mcl_walls:stonebrick_9 +mcl_mushrooms:red_mushroom_block_cap_011111 +mcl_mushrooms:brown_mushroom_block_cap_111101 +mcl_core:lapisblock +mcl_farming:potato_7 +mcl_stairs:stair_waxed_copper_weathered_cut +mesecons_pistons:piston_down_normal_off +mcl_mushrooms:red_mushroom_block_cap_000110 +mcl_heads:stalker45 +mcl_blackstone:wall_10 +mcl_core:stonebrickmossy +mcl_stairs:slab_prismarine_brick_top +mcl_walls:rednetherbrick_8 +mesecons_pressureplates:pressure_plate_stone_on +mesecons:wire_10101010_off +mcl_mushrooms:red_mushroom_block_cap_100110 +mcl_deepslate:deepslatetileswall_0 +mcl_mushrooms:red_mushroom_block_cap_100101 +mesecons_button:button_junglewood_on +mcl_campfires:soul_campfire_lit +mcl_core:grass_path +mcl_colorblocks:concrete_powder_pink +mcl_stairs:stair_darktree_bark_outer +mcl_doors:birch_door_b_2 +mcl_observers:observer_up_on +mcl_mushrooms:brown_mushroom_block_cap_001110 +mcl_mushrooms:red_mushroom_block_cap_101011 +xpanes:pane_orange_flat +mesecons:wire_00010001_off +mcl_walls:redsandstone_15 +mesecons:wire_01100110_off +xpanes:pane_blue_flat +xpanes:pane_gray_flat +mesecons:wire_01110110_off +mcl_mushrooms:red_mushroom_block_cap_111011 +mcl_blackstone:wall_9 +mesecons_pressureplates:pressure_plate_birchwood_off +mcl_mushrooms:brown_mushroom_block_cap_000100 +mcl_core:stripped_spruce_bark +mcl_mushrooms:brown_mushroom_block_cap_001010 +mcl_walls:netherbrick_15 +mcl_wool:brown_carpet +mcl_colorblocks:glazed_terracotta_pillar_magenta +mcl_stairs:stair_diorite_smooth +mesecons_delayer:delayer_on_3 +mcl_core:darkleaves_orphan +mcl_core:stripped_spruce +mcl_walls:brick_10 +mcl_walls:cobble +mesecons_button:button_sprucewood_on +mesecons_pistons:piston_down_sticky_off +mclx_fences:nether_brick_fence_gate_open +mcl_crimson:crimson_trapdoor_ladder +mesecons_pressureplates:pressure_plate_wood_on +mcl_stairs:slab_sandstone +mcl_copper:block_raw +mcl_stairs:slab_wood_double +mcl_mushrooms:brown_mushroom_block_cap_101100 +mcl_walls:mossycobble_12 +mcl_walls:redsandstone_4 +mcl_walls:sandstone_4 +mcl_mushrooms:brown_mushroom_block_cap_001000 +mcl_colorblocks:glazed_terracotta_purple +mcl_mud:packed_mud +mcl_stairs:stair_purpur_block_inner +mcl_mushrooms:red_mushroom_block_cap_011010 +mcl_walls:andesite_3 +mcl_mangrove:propagule_dirt +mcl_ocean:dead_tube_coral +mcl_stairs:slab_prismarine +mcl_copper:block_exposed +mcl_mushrooms:brown_mushroom_block_cap_100000 +mcl_mushrooms:brown_mushroom_block_cap_101101 +mcl_deepslate:deepslatecobbledwall_0 +mcl_walls:granite_3 +mcl_end:end_rod_red +mcl_crimson:warped_door_t_2 +mesecons_button:button_acaciawood_off +mcl_sponges:sponge_wet_river_water +mcl_lightning_rods:rod_powered +mcl_core:spruceleaves +mcl_mushrooms:brown_mushroom_block_cap_010110 +mcl_deepslate:deepslatepolishedwall_10 +mcl_ocean:seagrass_gravel +mesecons:wire_01110110_on +mcl_core:glass_light_blue +mcl_doors:dark_oak_door_t_2 +mesecons_lightstone:lightstone_on_lime +xpanes:pane_pink_flat +mesecons:wire_11100000_off +mesecons_lightstone:lightstone_on_silver +xpanes:pane_lime +mesecons:wire_01110011_off +mesecons:wire_01000100_off +mcl_mushrooms:brown_mushroom_block_cap_110101 +mcl_raw_ores:raw_gold_block +mesecons:wire_11110101_off +mcl_stairs:slab_waxed_copper_exposed_cut_top +mcl_cauldrons:cauldron_1r +mcl_cauldrons:cauldron_2_lava +mesecons_lightstone:lightstone_on_grey +mesecons:wire_11010100_on +mcl_brewing:stand_111 +mcl_mushrooms:red_mushroom_block_cap_010000 +mcl_beds:bed_red_top +mesecons_lightstone:lightstone_on +mcl_walls:mossycobble_4 +mcl_heads:wither_skeleton22_5 +mcl_signs:standing_sign22_5_mangrove_wood +mcl_stairs:stair_mud_brick +mcl_heads:zombie22_5 +mcl_mushrooms:brown_mushroom_block_cap_011010 +mcl_farming:carrot_1 +mcl_stairs:slab_red_nether_brick_double +mcl_core:sapling +mcl_stairs:stair_concrete_black +mcl_wool:white +mcl_stairs:slab_sandstone_double +mesecons:wire_10110000_off +mcl_mushrooms:red_mushroom_block_cap_100001 +mesecons:wire_10011000_off +mcl_mushrooms:brown_mushroom_block_cap_001001 +mesecons_delayer:delayer_off_3 +mcl_stairs:slab_andesite +mcl_meshhand:mcl_skins_base_18D471DFF_male_surv +mcl_flowerpots:flower_pot +mcl_mushrooms:red_mushroom_block_cap_101100 +mcl_copper:waxed_block_exposed_cut +mcl_flowerpots:flower_pot_junglesapling +mcl_core:diorite +mcl_flowerpots:flower_pot_birchsapling +mcl_maps:filled_map_mcl_skins_base_1B47A57FF_male_crea +mcl_chests:yellow_shulker_box +mcl_monster_eggs:monster_egg_stonebrickcracked +mesecons:wire_00110010_on +mcl_stairs:slab_junglewood_top +mcl_fences:spruce_fence +mcl_stairs:slab_jungletree_bark_top +mcl_stairs:stair_birchwood_outer +mesecons:wire_11110011_off +mesecons:wire_11111001_off +mcl_walls:prismarine_4 +mcl_flowerpots:flower_pot_oxeye_daisy +mesecons_pressureplates:pressure_plate_acaciawood_on +mcl_stairs:stair_andesite +mesecons:wire_01000000_off +mesecons:wire_11100100_on +mcl_flowerpots:flower_pot_propagule +mcl_stairs:stair_nether_brick +mcl_core:podzol_snow +mesecons:wire_10111001_off +mesecons:wire_11010001_on +mcl_walls:granite_21 +mcl_flowerpots:flower_pot_warped_roots +mcl_doors:acacia_door_t_1 +mcl_core:realm_barrier +mcl_maps:filled_map_mcl_skins_base_1B47A57FF_female_crea +mcl_flowerpots:flower_pot_deadbush +mcl_maps:filled_map_mcl_skins_base_1EEB592FF_female_surv +mcl_end:chorus_flower_dead +mesecons_lightstone:lightstone_off_red +mesecons_delayer:delayer_on_2 +mcl_ocean:sea_pickle_2_dead_brain_coral_block +mcl_stairs:slab_stone +mcl_beds:bed_white_bottom +mcl_maps:filled_map_mcl_skins_base_18D471DFF_male_surv +mcl_mushrooms:red_mushroom_block_cap_001101 +mcl_mushrooms:brown_mushroom_block_cap_100011 +mcl_meshhand:character_male_crea +mcl_signs:standing_sign +mcl_mushrooms:red_mushroom_block_cap_010110 +mesecons_pistons:piston_up_normal_off +mcl_signs:standing_sign_birchwood +mcl_signs:standing_sign22_5_birchwood +mcl_stairs:stair_end_bricks_inner +mcl_signs:standing_sign67_5_birchwood +mesecons_pressureplates:pressure_plate_wood_off +mcl_core:frosted_ice_3 +mcl_signs:standing_sign22_5_darkwood +mcl_signs:standing_sign45_darkwood +mcl_stairs:stair_copper_oxidized_cut_inner +mcl_crimson:crimson_door_b_2 +mesecons_lightstone:lightstone_off_yellow +mesecons_delayer:delayer_off_4 +mcl_armor_stand:armor_stand +mcl_mushrooms:red_mushroom_block_cap_100011 +mcl_signs:standing_sign22_5_acaciawood +mcl_core:bedrock +mcl_walls:netherbrick_21 +mcl_deepslate:deepslate_tiles_cracked +mcl_stairs:stair_wood_inner +mcl_signs:standing_sign45_acaciawood +mclx_core:river_water_source +mcl_deepslate:deepslatepolishedwall +mcl_walls:sandstone_7 +mesecons_pistons:piston_sticky_off +mcl_doors:wooden_door_t_4 +mcl_colorblocks:glazed_terracotta_pillar_brown +mesecons_lightstone:lightstone_off_lime +mcl_ocean:fire_coral_fan +mesecons:wire_11011001_on +mcl_walls:stonebrickmossy_7 +mcl_ocean:seagrass_dirt +mcl_crimson:crimson_trapdoor_open +mcl_meshhand:character_male_surv +mcl_flowerpots:flower_pot_crimson_roots +mcl_ocean:sea_pickle_2_off_dead_brain_coral_block +mcl_chests:trapped_chest_on_small +mcl_maps:filled_map_mcl_skins_base_1B47A57FF_male_surv +mcl_walls:cobble_1 +mcl_stairs:slab_waxed_copper_cut_double +mcl_mushrooms:red_mushroom_block_cap_001111 +mcl_chests:red_shulker_box +mcl_amethyst:amethyst_block +mcl_walls:cobble_6 +mcl_core:stone_with_diamond +mcl_walls:redsandstone_10 +mcl_walls:cobble_9 +mcl_ocean:kelp_gravel +mcl_stairs:stair_deepslate_cobbled_outer +mesecons:wire_11101000_on +mcl_mushrooms:red_mushroom_block_cap_101000 +mcl_mushrooms:red_mushroom_block_cap_000001 +mesecons:wire_10101000_off +mesecons:wire_10110001_on +mcl_walls:mossycobble_6 +mesecons_torch:mesecon_torch_on +mcl_chests:blue_shulker_box +mcl_walls:mossycobble_11 +mcl_walls:mossycobble_13 +mcl_stairs:stair_prismarine_brick_outer +mcl_walls:andesite_1 +mcl_honey:honey_block +mcl_stairs:stair_granite_smooth_inner +mcl_stairs:slab_waxed_copper_oxidized_cut_double +mcl_core:acacialeaves_orphan +mcl_mushrooms:red_mushroom_block_cap_001000 +mcl_walls:andesite_11 +mesecons:wire_11101000_off +mcl_mushrooms:brown_mushroom_block_cap_000110 +mcl_walls:netherbrick_3 +mcl_mushrooms:red_mushroom_block_cap_000101 +mcl_stairs:slab_granite +mcl_nether:nether_lava_flowing +mcl_walls:granite_14 +mcl_stairs:slab_prismarine_brick_double +mesecons_solarpanel:solar_panel_inverted_on +mcl_flowerpots:flower_pot_sprucesapling +mcl_walls:endbricks_3 +mcl_walls:brick_2 +mcl_flowers:tallgrass +mcl_stairs:stair_darkwood_inner +mcl_walls:brick_7 +mcl_mushrooms:red_mushroom_block_cap_111110 +mcl_stairs:slab_sprucewood_double +mcl_signs:standing_sign_acaciawood +mcl_walls:brick +mesecons_lightstone:lightstone_off_green +mcl_stairs:slab_copper_exposed_cut_top +mesecons:wire_10011001_off +mcl_walls:sandstone_5 +mcl_heads:steve45 +mcl_walls:sandstone_6 +mcl_signs:standing_sign67_5_mangrove_wood +mcl_walls:prismarine_13 +mcl_meshhand:mcl_skins_base_1B47A57FF_male_crea +mcl_walls:sandstone_9 +mcl_deepslate:deepslate_with_redstone +mcl_doors:birch_door_t_3 +xpanes:pane_black_flat +mcl_lanterns:soul_lantern_ceiling +mcl_walls:sandstone_3 +mcl_meshhand:mcl_skins_base_1EEB592FF_male_surv +mcl_walls:diorite_16 +mcl_deepslate:deepslatetileswall_7 +mcl_end:end_rod_lime +mcl_walls:andesite_0 +mcl_stairs:slab_brick_block_double +mesecons:wire_11011000_off +mcl_walls:stonebrick_7 +mcl_walls:stonebrick_10 +mcl_cherry_blossom:pressure_plate_cherrywood_on +mcl_stairs:stair_stonebrick +mcl_walls:stonebrick_13 +mcl_chests:magenta_shulker_box_small +mcl_walls:stonebrickmossy_8 +mcl_walls:stonebrickmossy_16 +mcl_walls:stonebrickmossy_21 +mcl_mushrooms:brown_mushroom_block_cap_010011 +mcl_stairs:slab_diorite +mcl_crimson:stripped_crimson_hyphae_bark +mcl_signs:standing_sign22_5_sprucewood +mcl_colorblocks:concrete_purple +mcl_core:cobweb +mcl_amethyst:calcite +mcl_core:glass_green +mesecons:wire_11001100_on +mesecons:wire_10110010_off +mcl_walls:endbricks_7 +mcl_stairs:slab_sprucetree_bark_top +mcl_beehives:bee_nest_4 +mesecons:wire_11111110_off +mcl_core:void +mcl_farming:potato_6 +mesecons:wire_11110100_off +mesecons_button:button_junglewood_off +mcl_walls:netherbrick_7 +mcl_walls:netherbrick_10 +mcl_ocean:dead_fire_coral +mcl_stairs:stair_brick_block +mcl_stairs:slab_purpur_block +mcl_core:tree +mcl_core:light_1 +mcl_walls:rednetherbrick +mcl_mangrove:mangroveleaves +mcl_stairs:slab_deepslate_bricks_top +mcl_walls:mudbrick_0 +mesecons:wire_00110010_off +mcl_wool:magenta_carpet +mcl_walls:stonebrick_3 +mcl_wool:grey +mcl_core:sandstone +mcl_walls:mudbrick_13 +mcl_mushrooms:brown_mushroom_block_cap_101001 +mesecons:wire_00110011_on +mcl_stairs:stair_concrete_yellow +mesecons:wire_00110001_on +mcl_stairs:stair_junglewood +mcl_flowers:rose_bush +mcl_deepslate:deepslate_with_copper +mcl_walls:mudbrick_6 +mcl_stairs:stair_acaciawood +mcl_ocean:brain_coral_fan +mcl_stairs:stair_concrete_purple +mcl_stairs:stair_sprucewood +mcl_walls:granite_4 +mcl_ocean:sea_pickle_1_off_dead_brain_coral_block +mcl_deepslate:deepslate_tiles +mcl_stairs:slab_sprucewood_top +mcl_stairs:slab_stonebrickcracked_top +mcl_heads:skeleton45 +mcl_core:sand +mcl_stairs:slab_birchwood_top +mcl_walls:endbricks_5 +mcl_stairs:slab_waxed_copper_weathered_cut +mcl_mushrooms:red_mushroom_block_cap_010011 +mcl_flowers:waterlily +mcl_mushrooms:brown_mushroom_block_cap_111100 +mcl_stairs:slab_concrete_cyan +mcl_stairs:slab_darkwood_top +mcl_stairs:slab_stone_rough_double +mesecons_pistons:piston_up_normal_on +mcl_mushrooms:red_mushroom_block_cap_110110 +mcl_flowers:blue_orchid +mcl_stairs:stair_deepslate_bricks_outer +mcl_stairs:stair_andesite_outer +mcl_farming:sweet_berry_bush_3 +mcl_stairs:slab_andesite_top +mcl_walls:brick_6 +mcl_stairs:stair_granite_inner +mcl_walls:granite_12 +mcl_cartography_table:cartography_table +mcl_deepslate:deepslatecobbledwall_1 +mcl_mangrove:propagule +mcl_core:snow_7 +mcl_stairs:stair_diorite_inner +mcl_doors:iron_door_t_2 +mcl_stairs:slab_diorite_top +mesecons:wire_01010101_on +mcl_stairs:slab_cobble +mcl_stairs:slab_cobble_top +mcl_farming:hay_block +mcl_stairs:slab_diorite_double +mesecons:wire_11011000_on +mcl_stairs:stair_brick_block_outer +mcl_stairs:stair_brick_block_inner +mcl_chests:pink_shulker_box_small +mcl_signs:standing_sign67_5_junglewood +mcl_stairs:stair_sandstonesmooth2 +mcl_stairs:slab_sandstonesmooth2_top +mcl_meshhand:mcl_skins_base_1EEB592FF_male_crea +mcl_comparators:comparator_off_sub +mcl_stairs:stair_copper_exposed_cut_inner +mcl_walls:stonebrick_12 +mcl_stairs:stair_stonebrick_inner +mcl_stairs:slab_stonebrick_top +mesecons_button:button_acaciawood_on +mcl_stairs:slab_quartzblock +mcl_stairs:stair_quartz_smooth +mcl_walls:endbricks +mcl_stairs:stair_nether_brick_outer +mcl_stairs:stair_nether_brick_inner +mcl_doors:acacia_trapdoor_ladder +mcl_walls:rednetherbrick_5 +mcl_mushrooms:brown_mushroom_block_cap_010000 +mcl_brewing:stand_110 +mcl_stairs:stair_concrete_white +mesecons_button:button_crimson_hyphae_wood_on +mcl_beds:bed_purple_bottom +mcl_walls:mossycobble_5 +mcl_colorblocks:concrete_powder_blue +mesecons:wire_01010000_off +mcl_stairs:slab_prismarine_double +mcl_walls:prismarine_5 +mesecons:wire_10111001_on +mcl_cake:cake_5 +mcl_ocean:prismarine_dark +mcl_wool:cyan +xpanes:pane_black +mcl_stairs:slab_mud_brick_double +mcl_flowerpots:flower_pot_sapling +mcl_walls:stonebrickmossy_2 +mcl_colorblocks:hardened_clay_yellow +mcl_stairs:slab_andesite_smooth_top +mcl_doors:dark_oak_door_b_2 +mcl_walls:brick_8 +mcl_core:bone_block +mcl_mushrooms:red_mushroom_block_cap_111001 +mcl_stairs:slab_stonebrickmossy_top +mesecons_pressureplates:pressure_plate_junglewood_on +mesecons:wire_11111111_on +mcl_walls:endbricks_6 +mcl_wool:orange +mcl_deepslate:deepslatebrickswall_9 +mcl_walls:sandstone_0 +mcl_end:chorus_flower +mcl_mangrove:propagule_clay +mcl_mangrove:water_logged_roots +mcl_walls:mudbrick_15 +mcl_ocean:sea_pickle_3_off_dead_brain_coral_block +mcl_mushrooms:red_mushroom_block_cap_000010 +mesecons:wire_00100000_on +mcl_mangrove:mangrove_wood_fence_gate_open +mcl_sculk:vein +mesecons_noteblock:noteblock +mcl_stairs:stair_mangrove_wood +mesecons:wire_01110001_on +mesecons:wire_11110000_off +mcl_crimson:twisting_vines +mcl_mushrooms:brown_mushroom_block_cap_011111 +mesecons:wire_11111001_on +mcl_mangrove:mangrove_tree_bark +mcl_stairs:slab_warped_hyphae_wood +mcl_flowerpots:flower_pot_fern +mcl_nether:magma +mcl_walls:stonebrickmossy_6 +mesecons:wire_10111000_off +mesecons:wire_00010001_on +mcl_core:stonebrickcracked +mcl_copper:waxed_block_weathered_cut +mcl_crimson:crimson_door_t_2 +mcl_crimson:crimson_door_t_3 +mesecons:wire_01110001_off +mcl_mushrooms:brown_mushroom_block_cap_111011 +mcl_mushrooms:red_mushroom_block_cap_110001 +mesecons:wire_11101010_off +mcl_mushrooms:red_mushroom_block_cap_101110 +mcl_flowers:dandelion +mcl_ocean:dried_kelp_block +mcl_meshhand:mcl_skins_base_18D471DFF_female_surv +mcl_signs:standing_sign45_junglewood +xpanes:pane_orange +mcl_stairs:slab_mossycobble +mcl_heads:zombie67_5 +mcl_mushrooms:red_mushroom_block_cap_110100 +mcl_core:light_13 +mcl_heads:zombie_wall +mcl_farming:wheat +mcl_core:cobble +mesecons:wire_11001100_off +mcl_stairs:stair_mossycobble_inner +mesecons:wire_01110111_off +mcl_stairs:slab_redsandstonesmooth2_top +mcl_core:wood +mesecons:wire_11011001_off +mcl_flowerpots:flower_pot_wither_rose +mcl_signs:wall_sign_acaciawood +mesecons:wire_00010000_on +mcl_walls:stonebrickmossy_14 +mcl_walls:diorite_4 +mesecons:wire_10101000_on +mcl_deepslate:deepslatepolishedwall_5 +mcl_deepslate:deepslatebrickswall_0 +mcl_stairs:slab_deepslate_polished_double +mcl_stairs:stair_stone_rough +mcl_fences:fence_gate +mcl_mushrooms:red_mushroom_block_cap_010100 +mcl_crimson:crimson_nylium +mcl_stairs:stair_deepslate_tiles_inner +mcl_stairs:stair_copper_cut_inner